跳转到内容

MediaWiki:Gadget-ScrollUpButton.js

轻之舟百科,让知识轻装启航
闲敲棋子落灯花-flood​(留言 | 贡献)2026年8月3日 (一) 15:21的版本 (Git commit 634265f: chore(build): bump version to 4.10.0)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
/**
 * SPDX-License-Identifier: GPL-3.0-or-later
 * _addText: '{{Gadget Header|license=GPL-3.0-or-later}}'
 *
 * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/ScrollUpButton}
 * @author 安忆 <[email protected]>
 * @license GPL-3.0-or-later {@link https://www.qiuwenbaike.cn/wiki/H:GPL-3.0}
 */

/**
 * Copyright (C)  安忆
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
/**
 * +------------------------------------------------------------+
 * |            === 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/[email protected]/node_modules/core-js/internals/global-this.js
var require_global_this = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/fails.js
var require_fails = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/descriptors.js
var require_descriptors = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/function-bind-native.js
var require_function_bind_native = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/function-call.js
var require_function_call = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/object-property-is-enumerable.js
var require_object_property_is_enumerable = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/create-property-descriptor.js
var require_create_property_descriptor = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/function-uncurry-this.js
var require_function_uncurry_this = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/classof-raw.js
var require_classof_raw = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/indexed-object.js
var require_indexed_object = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/is-null-or-undefined.js
var require_is_null_or_undefined = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/require-object-coercible.js
var require_require_object_coercible = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/to-indexed-object.js
var require_to_indexed_object = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/is-callable.js
var require_is_callable = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/is-object.js
var require_is_object = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/get-built-in.js
var require_get_built_in = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/object-is-prototype-of.js
var require_object_is_prototype_of = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/environment-user-agent.js
var require_environment_user_agent = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var navigator = globalThis2.navigator;
    var userAgent = navigator && navigator.userAgent;
    module2.exports = userAgent ? String(userAgent) : "";
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-v8-version.js
var require_environment_v8_version = __commonJS({
  "node_modules/.pnpm/[email protected]/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 Deno = globalThis2.Deno;
    var versions = process && process.versions || Deno && Deno.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/[email protected]/node_modules/core-js/internals/symbol-constructor-detection.js
var require_symbol_constructor_detection = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/use-symbol-as-uid.js
var require_use_symbol_as_uid = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/is-symbol.js
var require_is_symbol = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/try-to-string.js
var require_try_to_string = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/a-callable.js
var require_a_callable = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/get-method.js
var require_get_method = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/ordinary-to-primitive.js
var require_ordinary_to_primitive = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/is-pure.js
var require_is_pure = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-pure.js"(exports, module2) {
    "use strict";
    module2.exports = false;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-global-property.js
var require_define_global_property = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/shared-store.js
var require_shared_store = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/shared.js
var require_shared = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/to-object.js
var require_to_object = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/has-own-property.js
var require_has_own_property = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/uid.js
var require_uid = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/well-known-symbol.js
var require_well_known_symbol = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/to-primitive.js
var require_to_primitive = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/to-property-key.js
var require_to_property_key = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/document-create-element.js
var require_document_create_element = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/ie8-dom-define.js
var require_ie8_dom_define = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/object-get-own-property-descriptor.js
var require_object_get_own_property_descriptor = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/v8-prototype-define-bug.js
var require_v8_prototype_define_bug = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/an-object.js
var require_an_object = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/object-define-property.js
var require_object_define_property = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/create-non-enumerable-property.js
var require_create_non_enumerable_property = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/function-name.js
var require_function_name = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/inspect-source.js
var require_inspect_source = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/weak-map-basic-detection.js
var require_weak_map_basic_detection = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/shared-key.js
var require_shared_key = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/hidden-keys.js
var require_hidden_keys = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/hidden-keys.js"(exports, module2) {
    "use strict";
    module2.exports = {};
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/internal-state.js
var require_internal_state = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/make-built-in.js
var require_make_built_in = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/define-built-in.js
var require_define_built_in = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/math-trunc.js
var require_math_trunc = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/to-integer-or-infinity.js
var require_to_integer_or_infinity = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/to-absolute-index.js
var require_to_absolute_index = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/to-length.js
var require_to_length = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/length-of-array-like.js
var require_length_of_array_like = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/array-includes.js
var require_array_includes = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/object-keys-internal.js
var require_object_keys_internal = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/enum-bug-keys.js
var require_enum_bug_keys = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/object-get-own-property-names.js
var require_object_get_own_property_names = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/object-get-own-property-symbols.js
var require_object_get_own_property_symbols = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) {
    "use strict";
    exports.f = Object.getOwnPropertySymbols;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/own-keys.js
var require_own_keys = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/copy-constructor-properties.js
var require_copy_constructor_properties = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/is-forced.js
var require_is_forced = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/export.js
var require_export = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/to-string-tag-support.js
var require_to_string_tag_support = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/classof.js
var require_classof = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/to-string.js
var require_to_string = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/object-keys.js
var require_object_keys = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/object-define-properties.js
var require_object_define_properties = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/html.js
var require_html = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/object-create.js
var require_object_create = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/array-slice.js
var require_array_slice = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/object-get-own-property-names-external.js
var require_object_get_own_property_names_external = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/define-built-in-accessor.js
var require_define_built_in_accessor = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/well-known-symbol-wrapped.js
var require_well_known_symbol_wrapped = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/path.js
var require_path = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/path.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    module2.exports = globalThis2;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol-define.js
var require_well_known_symbol_define = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/symbol-define-to-primitive.js
var require_symbol_define_to_primitive = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/set-to-string-tag.js
var require_set_to_string_tag = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/function-uncurry-this-clause.js
var require_function_uncurry_this_clause = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/function-bind-context.js
var require_function_bind_context = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/is-array.js
var require_is_array = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/is-constructor.js
var require_is_constructor = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/array-species-constructor.js
var require_array_species_constructor = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/array-species-create.js
var require_array_species_create = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/array-iteration.js
var require_array_iteration = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.symbol.constructor.js
var require_es_symbol_constructor = __commonJS({
  "node_modules/.pnpm/[email protected]/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 RangeError = 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 RangeError)) 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/[email protected]/node_modules/core-js/internals/symbol-registry-detection.js
var require_symbol_registry_detection = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.symbol.for.js
var require_es_symbol_for = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.symbol.key-for.js
var require_es_symbol_key_for = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/function-apply.js
var require_function_apply = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/get-json-replacer-function.js
var require_get_json_replacer_function = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.json.stringify.js
var require_es_json_stringify = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.object.get-own-property-symbols.js
var require_es_object_get_own_property_symbols = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.symbol.js
var require_es_symbol = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.symbol.description.js
var require_es_symbol_description = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.symbol.iterator.js
var require_es_symbol_iterator = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.iterator.js"() {
    "use strict";
    var defineWellKnownSymbol = require_well_known_symbol_define();
    defineWellKnownSymbol("iterator");
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.to-primitive.js
var require_es_symbol_to_primitive = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/function-uncurry-this-accessor.js
var require_function_uncurry_this_accessor = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/is-possible-prototype.js
var require_is_possible_prototype = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/a-possible-prototype.js
var require_a_possible_prototype = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/object-set-prototype-of.js
var require_object_set_prototype_of = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/proxy-accessor.js
var require_proxy_accessor = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/inherit-if-required.js
var require_inherit_if_required = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/normalize-string-argument.js
var require_normalize_string_argument = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/install-error-cause.js
var require_install_error_cause = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/error-stack-clear.js
var require_error_stack_clear = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/error-stack-installable.js
var require_error_stack_installable = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/error-stack-install.js
var require_error_stack_install = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/wrap-error-constructor-with-cause.js
var require_wrap_error_constructor_with_cause = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.error.cause.js
var require_es_error_cause = __commonJS({
  "node_modules/.pnpm/[email protected]/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 RangeError(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 SyntaxError(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/[email protected]/node_modules/core-js/internals/array-method-has-species-support.js
var require_array_method_has_species_support = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.array.filter.js
var require_es_array_filter = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/array-method-is-strict.js
var require_array_method_is_strict = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/array-for-each.js
var require_array_for_each = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.array.for-each.js
var require_es_array_for_each = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/iterator-close.js
var require_iterator_close = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/call-with-safe-iteration-closing.js
var require_call_with_safe_iteration_closing = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/iterators.js
var require_iterators = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterators.js"(exports, module2) {
    "use strict";
    module2.exports = {};
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-array-iterator-method.js
var require_is_array_iterator_method = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/create-property.js
var require_create_property = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/get-iterator-method.js
var require_get_iterator_method = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/get-iterator.js
var require_get_iterator = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/array-from.js
var require_array_from = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/check-correctness-of-iteration.js
var require_check_correctness_of_iteration = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.array.from.js
var require_es_array_from = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/add-to-unscopables.js
var require_add_to_unscopables = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/correct-prototype-getter.js
var require_correct_prototype_getter = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/object-get-prototype-of.js
var require_object_get_prototype_of = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/iterators-core.js
var require_iterators_core = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/iterator-create-constructor.js
var require_iterator_create_constructor = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/iterator-define.js
var require_iterator_define = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/create-iter-result-object.js
var require_create_iter_result_object = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.array.iterator.js
var require_es_array_iterator = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/array-set-length.js
var require_array_set_length = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/does-not-exceed-safe-integer.js
var require_does_not_exceed_safe_integer = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.array.push.js
var require_es_array_push = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.array.slice.js
var require_es_array_slice = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/date-to-primitive.js
var require_date_to_primitive = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.date.to-primitive.js
var require_es_date_to_primitive = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/get-iterator-direct.js
var require_get_iterator_direct = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/define-built-ins.js
var require_define_built_ins = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/iterator-create-proxy.js
var require_iterator_create_proxy = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.iterator.filter.js
var require_es_iterator_filter = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/iterate.js
var require_iterate = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.iterator.for-each.js
var require_es_iterator_for_each = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/this-number-value.js
var require_this_number_value = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/whitespaces.js
var require_whitespaces = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/whitespaces.js"(exports, module2) {
    "use strict";
    module2.exports = "	\n\v\f\r                 \u2028\u2029\uFEFF";
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/string-trim.js
var require_string_trim = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.number.constructor.js
var require_es_number_constructor = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.object.define-properties.js
var require_es_object_define_properties = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.object.get-own-property-descriptors.js
var require_es_object_get_own_property_descriptors = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.object.keys.js
var require_es_object_keys = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/regexp-flags.js
var require_regexp_flags = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/regexp-sticky-helpers.js
var require_regexp_sticky_helpers = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/regexp-unsupported-dot-all.js
var require_regexp_unsupported_dot_all = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/regexp-unsupported-ncg.js
var require_regexp_unsupported_ncg = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/regexp-exec.js
var require_regexp_exec = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.regexp.exec.js
var require_es_regexp_exec = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.regexp.test.js
var require_es_regexp_test = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/string-multibyte.js
var require_string_multibyte = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.string.iterator.js
var require_es_string_iterator = __commonJS({
  "node_modules/.pnpm/[email protected]/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/@[email protected]/node_modules/@mrhenry/core-web/modules/requestAnimationFrame.js
var require_requestAnimationFrame = __commonJS({
  "node_modules/.pnpm/@[email protected]/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/@[email protected]/node_modules/@mrhenry/core-web/modules/WebAnimations.js
var require_WebAnimations = __commonJS({
  "node_modules/.pnpm/@[email protected]/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/@[email protected]/node_modules/@mrhenry/core-web/modules/DocumentFragment.js
var require_DocumentFragment = __commonJS({
  "node_modules/.pnpm/@[email protected]/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/@[email protected]/node_modules/@mrhenry/core-web/helpers/_mutation.js
var _mutation, mutation_default;
var init_mutation = __esm({
  "node_modules/.pnpm/@[email protected]/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/@[email protected]/node_modules/@mrhenry/core-web/modules/DocumentFragment.prototype.append.js
var DocumentFragment_prototype_append_exports = {};
var init_DocumentFragment_prototype_append = __esm({
  "node_modules/.pnpm/@[email protected]/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/@[email protected]/node_modules/@mrhenry/core-web/modules/Element.prototype.append.js
var Element_prototype_append_exports = {};
var init_Element_prototype_append = __esm({
  "node_modules/.pnpm/@[email protected]/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/[email protected]/node_modules/core-js/internals/error-to-string.js
var require_error_to_string = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.error.to-string.js
var require_es_error_to_string = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.array.find.js
var require_es_array_find = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/an-instance.js
var require_an_instance = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.iterator.constructor.js
var require_es_iterator_constructor = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.iterator.find.js
var require_es_iterator_find = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.object.define-property.js
var require_es_object_define_property = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.object.get-own-property-descriptor.js
var require_es_object_get_own_property_descriptor = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.object.get-own-property-names.js
var require_es_object_get_own_property_names = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.object.get-prototype-of.js
var require_es_object_get_prototype_of = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/object-to-string.js
var require_object_to_string = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.object.to-string.js
var require_es_object_to_string = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/internals/regexp-get-flags.js
var require_regexp_get_flags = __commonJS({
  "node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/core-js/modules/es.regexp.to-string.js
var require_es_regexp_to_string = __commonJS({
  "node_modules/.pnpm/[email protected]/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 });
    }
  }
});

// dist/ScrollUpButton/ScrollUpButton.js
require_es_symbol();
require_es_symbol_description();
require_es_symbol_iterator();
require_es_symbol_to_primitive();
require_es_error_cause();
require_es_array_filter();
require_es_array_for_each();
require_es_array_from();
require_es_array_iterator();
require_es_array_push();
require_es_array_slice();
require_es_date_to_primitive();
require_es_iterator_filter();
require_es_iterator_for_each();
require_es_number_constructor();
require_es_object_define_properties();
require_es_object_get_own_property_descriptors();
require_es_object_keys();
require_es_regexp_exec();
require_es_regexp_test();
require_es_string_iterator();
require_requestAnimationFrame();
require_WebAnimations();
require_DocumentFragment();
init_DocumentFragment_prototype_append();
init_Element_prototype_append();
require_es_error_to_string();
require_es_array_find();
require_es_iterator_constructor();
require_es_iterator_find();
require_es_object_define_property();
require_es_object_get_own_property_descriptor();
require_es_object_get_own_property_names();
require_es_object_get_prototype_of();
require_es_object_to_string();
require_es_regexp_to_string();
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 _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);
}
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 _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 _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);
}
var __create = Object.create;
var __defProp2 = Object.defineProperty;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
var __copyProps2 = function __copyProps3(to, from, except, desc) {
  if (from && _typeof(from) === "object" || typeof from === "function") {
    var _iterator = _createForOfIteratorHelper(__getOwnPropNames2(from)), _step;
    try {
      var _loop = function _loop2() {
        var key = _step.value;
        if (!__hasOwnProp2.call(to, key) && key !== except) __defProp2(to, key, {
          get: function get() {
            return from[key];
          },
          enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable
        });
      };
      for (_iterator.s(); !(_step = _iterator.n()).done; ) {
        _loop();
      }
    } catch (err) {
      _iterator.e(err);
    } finally {
      _iterator.f();
    }
  }
  return to;
};
var __toESM = function __toESM2(mod, isNodeMode, target) {
  return target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps2(
    // If the importer is in node compatibility mode or this is not an ESM
    // file that has been converted to a CommonJS file using a Babel-
    // compatible transform (i.e. "__esModule" has not been set), then set
    // "default" to the CommonJS "module.exports" for node compatibility.
    isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", {
      value: mod,
      enumerable: true
    }) : target,
    mod
  );
};
//! src/ScrollUpButton/modules/constant.ts
var CLASS_NAME = "gadget-scroll_up_button";
var CLASS_NAME_DOWN = "".concat(CLASS_NAME, "-down");
var CLASS_NAME_UP = "".concat(CLASS_NAME, "-up");
//! src/ScrollUpButton/components/scrollButton.tsx
var import_ext_gadget2 = __toESM(require("ext.gadget.JSX"), 1);
//! src/ScrollUpButton/modules/i18n.ts
var import_ext_gadget = require("ext.gadget.i18n");
var getI18nMessages = function getI18nMessages2() {
  return {
    ToBottom: (0, import_ext_gadget.localize)({
      en: "Scroll to the bottom",
      "zh-hans": "滚动至页底",
      "zh-hant": "滾動至頁底"
    }),
    ToTop: (0, import_ext_gadget.localize)({
      en: "Go back to the top",
      "zh-hans": "滚动至页顶",
      "zh-hant": "滾動至頁頂"
    })
  };
};
var i18nMessages = getI18nMessages();
var getMessage = function getMessage2(key) {
  return i18nMessages[key] || key;
};
//! src/ScrollUpButton/components/scrollButton.tsx
var scrollTop = function scrollTop2(targetHeight, effectsOptionsOrDuration) {
  var options = typeof effectsOptionsOrDuration === "number" || typeof effectsOptionsOrDuration === "string" ? {
    duration: effectsOptionsOrDuration,
    easing: "linear"
  } : _objectSpread({
    duration: "slow",
    easing: "linear"
  }, effectsOptionsOrDuration);
  $(document).find("html, body").animate({
    scrollTop: targetHeight
  }, options);
};
function ScrollButton(props) {
  var additionalClassName = props.additionalClassName, alt = props.alt, ariaLabel = props.ariaLabel, onClick = props.onClick, onMouseEnter = props.onMouseEnter, onMouseLeave = props.onMouseLeave;
  return /* @__PURE__ */ import_ext_gadget2.default.createElement("img", {
    className: [CLASS_NAME, additionalClassName, "noprint"],
    src: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1' height='1'%3E%3C/svg%3E",
    width: "32",
    height: "32",
    draggable: false,
    alt,
    "aria-label": ariaLabel,
    onClick,
    onMouseEnter,
    onMouseLeave
  });
}
var TO_BOTTOM = getMessage("ToBottom");
var TO_TOP = getMessage("ToTop");
var ScrollDownButton = function ScrollDownButton2(onMouseEnterMouseLeave) {
  return /* @__PURE__ */ import_ext_gadget2.default.createElement(ScrollButton, {
    additionalClassName: CLASS_NAME_DOWN,
    alt: TO_BOTTOM,
    ariaLabel: TO_BOTTOM,
    onClick: function onClick() {
      var _$$height, _$$height2;
      scrollTop(((_$$height = $(document).height()) !== null && _$$height !== void 0 ? _$$height : 0) - ((_$$height2 = $(window).height()) !== null && _$$height2 !== void 0 ? _$$height2 : 0));
    },
    onMouseEnter: onMouseEnterMouseLeave,
    onMouseLeave: onMouseEnterMouseLeave
  });
};
var ScrollUpButton = function ScrollUpButton2(onMouseEnterMouseLeave) {
  return /* @__PURE__ */ import_ext_gadget2.default.createElement(ScrollButton, {
    additionalClassName: CLASS_NAME_UP,
    alt: TO_TOP,
    ariaLabel: TO_TOP,
    onClick: function onClick() {
      scrollTop(0);
    },
    onMouseEnter: onMouseEnterMouseLeave,
    onMouseLeave: onMouseEnterMouseLeave
  });
};
//! src/ScrollUpButton/modules/insertElementAndListener.ts
var import_ext_gadget3 = require("ext.gadget.Tippy");
var changeOpacityWhenMouseEnterOrLeave = function changeOpacityWhenMouseEnterOrLeave2(event) {
  var opacity = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0.7;
  event.currentTarget.style.opacity = event.type === "mouseenter" ? "1" : opacity.toString();
};
var insertElementandListener = function insertElementandListener2($body) {
  var onMouseEnterMouseLeave = function onMouseEnterMouseLeave2(event) {
    changeOpacityWhenMouseEnterOrLeave(event);
  };
  var scrollDownButton = ScrollDownButton(onMouseEnterMouseLeave);
  var scrollUpButton2 = ScrollUpButton(onMouseEnterMouseLeave);
  for (var _i = 0, _arr = [scrollDownButton, scrollUpButton2]; _i < _arr.length; _i++) {
    var element = _arr[_i];
    $body.append(element);
    (0, import_ext_gadget3.tippy)(element, {
      arrow: true,
      content: element.getAttribute("alt"),
      placement: "left"
    });
  }
  var scrollListener = function scrollListener2() {
    var downButtonButtom;
    var upButtonButtom;
    if (document.querySelector("#proveit") || document.querySelector(".gadget-cat_a_lot-container") || document.querySelector("#gadget-word_count-tip")) {
      downButtonButtom = "85px";
      upButtonButtom = "127px";
    } else {
      downButtonButtom = "45px";
      upButtonButtom = "85px";
    }
    scrollDownButton.style.bottom = downButtonButtom;
    scrollUpButton2.style.bottom = upButtonButtom;
  };
  var scrollListenerWithThrottle = mw.util.throttle(scrollListener, 200);
  $(window).on("scroll selectionchange", scrollListenerWithThrottle);
};
//! src/ScrollUpButton/ScrollUpButton.ts
void $.ready.then(function scrollUpButton() {
  insertElementandListener($("body"));
});

})();

/* </nowiki> */

//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dyYXAtZXJyb3ItY29uc3RydWN0b3Itd2l0aC1jYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1mb3ItZWFjaC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5mcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGF0ZS10by1wcmltaXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZGF0ZS50by1wcmltaXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1wcm94eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5maWx0ZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZvci1lYWNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdGhpcy1udW1iZXItdmFsdWUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93aGl0ZXNwYWNlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy10cmltLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZmxhZ3MuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1uY2cuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZXhlYy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudGVzdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL1dlYkFuaW1hdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0RvY3VtZW50RnJhZ21lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19tdXRhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUuYXBwZW5kLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9FbGVtZW50LnByb3RvdHlwZS5hcHBlbmQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IudG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbmQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1pbnN0YW5jZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5maW5kLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyIsICJzcmMvU2Nyb2xsVXBCdXR0b24vbW9kdWxlcy9jb25zdGFudC50cyIsICJzcmMvU2Nyb2xsVXBCdXR0b24vY29tcG9uZW50cy9zY3JvbGxCdXR0b24udHN4IiwgInNyYy9TY3JvbGxVcEJ1dHRvbi9tb2R1bGVzL2kxOG4udHMiLCAic3JjL1Njcm9sbFVwQnV0dG9uL21vZHVsZXMvaW5zZXJ0RWxlbWVudEFuZExpc3RlbmVyLnRzIiwgInNyYy9TY3JvbGxVcEJ1dHRvbi9TY3JvbGxVcEJ1dHRvbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbFRoaXMuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTCAmJlxuICAhU3ltYm9sLnNoYW0gJiZcbiAgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXNbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxuKHN0b3JlLnZlcnNpb25zIHx8IChzdG9yZS52ZXJzaW9ucyA9IFtdKSkucHVzaCh7XG4gIHZlcnNpb246ICczLjQxLjAnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyNSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjQxLjAvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLiokLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucy5lbnVtZXJhYmxlO1xuICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIG1ha2VCdWlsdEluKHZhbHVlLCBuYW1lLCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMuZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVHbG9iYWxQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRpb25zLnVuc2FmZSkgZGVsZXRlIE9ba2V5XTtcbiAgICAgIGVsc2UgaWYgKE9ba2V5XSkgc2ltcGxlID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6ICFvcHRpb25zLm5vbkNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiAhb3B0aW9ucy5ub25Xcml0YWJsZVxuICAgIH0pO1xuICB9IHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGV4Y2VwdGlvbnMpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpICYmICEoZXhjZXB0aW9ucyAmJiBoYXNPd24oZXhjZXB0aW9ucywga2V5KSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gJiYgZ2xvYmFsVGhpc1tUQVJHRVRdLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWFzc2lnbm1lbnQgLS0gYXZvaWQgbWVtb3J5IGxlYWtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKFtdLnNsaWNlKTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBhcnJheVNsaWNlKHdpbmRvd05hbWVzKTtcbiAgfVxufTtcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIGNsYXNzb2YoaXQpID09PSAnV2luZG93J1xuICAgID8gZ2V0V2luZG93TmFtZXMoaXQpXG4gICAgOiAkZ2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcikge1xuICBpZiAoZGVzY3JpcHRvci5nZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3IuZ2V0LCBuYW1lLCB7IGdldHRlcjogdHJ1ZSB9KTtcbiAgaWYgKGRlc2NyaXB0b3Iuc2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLnNldCwgbmFtZSwgeyBzZXR0ZXI6IHRydWUgfSk7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eS5mKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuZXhwb3J0cy5mID0gd2VsbEtub3duU3ltYm9sO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpcztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICB2YXIgU3ltYm9sID0gcGF0aC5TeW1ib2wgfHwgKHBhdGguU3ltYm9sID0ge30pO1xuICBpZiAoIWhhc093bihTeW1ib2wsIE5BTUUpKSBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsIE5BTUUsIHtcbiAgICB2YWx1ZTogd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKE5BTUUpXG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICB2YXIgU3ltYm9sUHJvdG90eXBlID0gU3ltYm9sICYmIFN5bWJvbC5wcm90b3R5cGU7XG4gIHZhciB2YWx1ZU9mID0gU3ltYm9sUHJvdG90eXBlICYmIFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mO1xuICB2YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4gIGlmIChTeW1ib2xQcm90b3R5cGUgJiYgIVN5bWJvbFByb3RvdHlwZVtUT19QUklNSVRJVkVdKSB7XG4gICAgLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gICAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKGhpbnQpIHtcbiAgICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICAgIH0sIHsgYXJpdHk6IDEgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIFRBRywgU1RBVElDKSB7XG4gIGlmICh0YXJnZXQgJiYgIVNUQVRJQykgdGFyZ2V0ID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgaWYgKHRhcmdldCAmJiAhaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG4gIC8vIE5hc2hvcm4gYnVnOlxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTI4XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMzBcbiAgaWYgKGNsYXNzb2ZSYXcoZm4pID09PSAnRnVuY3Rpb24nKSByZXR1cm4gdW5jdXJyeVRoaXMoZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMpO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAudGVzdChub29wKTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3Qobm9vcCwgW10sIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgICAvLyBgRnVuY3Rpb24jdG9TdHJpbmdgIHRocm93cyBvbiBzb21lIGJ1aWx0LWl0IGZ1bmN0aW9uIGluIHNvbWUgbGVnYWN5IGVuZ2luZXNcbiAgICAvLyAoZm9yIGV4YW1wbGUsIGBET01RdWFkYCBhbmQgc2ltaWxhciBpbiBGRjQxLSlcbiAgICByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuaXNDb25zdHJ1Y3RvckxlZ2FjeS5zaGFtID0gdHJ1ZTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBhIHBhcnQgb2YgYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmIChpc0NvbnN0cnVjdG9yKEMpICYmIChDID09PSAkQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxuLy8gYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKGFycmF5U3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsQXJyYXkpKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09PSA2O1xuICB2YXIgSVNfRklMVEVSX1JFSkVDVCA9IFRZUEUgPT09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNZTUJPTCk7XG5cbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciAkU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbCAmJiAkU3ltYm9sW1BST1RPVFlQRV07XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbFRoaXMuUmFuZ2VFcnJvcjtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsVGhpcy5RT2JqZWN0O1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmY7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90b3R5cGVTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgVVNFX1NFVFRFUiA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoTywgUCwgQXR0cmlidXRlcykge1xuICB2YXIgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIFApO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcikgZGVsZXRlIE9iamVjdFByb3RvdHlwZVtQXTtcbiAgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yICYmIE8gIT09IE9iamVjdFByb3RvdHlwZSkge1xuICAgIG5hdGl2ZURlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZSwgUCwgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcik7XG4gIH1cbn07XG5cbnZhciBzZXRTeW1ib2xEZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0Q3JlYXRlKG5hdGl2ZURlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9PSA3O1xufSkgPyBmYWxsYmFja0RlZmluZVByb3BlcnR5IDogbmF0aXZlRGVmaW5lUHJvcGVydHk7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZywgZGVzY3JpcHRpb24pIHtcbiAgdmFyIHN5bWJvbCA9IEFsbFN5bWJvbHNbdGFnXSA9IG5hdGl2ZU9iamVjdENyZWF0ZShTeW1ib2xQcm90b3R5cGUpO1xuICBzZXRJbnRlcm5hbFN0YXRlKHN5bWJvbCwge1xuICAgIHR5cGU6IFNZTUJPTCxcbiAgICB0YWc6IHRhZyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHN5bWJvbC5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICByZXR1cm4gc3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgaWYgKE8gPT09IE9iamVjdFByb3RvdHlwZSkgJGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFAsIEF0dHJpYnV0ZXMpO1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUF0dHJpYnV0ZXMuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXNPd24oTywgSElEREVOKSkgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgSElEREVOLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgbmF0aXZlT2JqZWN0Q3JlYXRlKG51bGwpKSk7XG4gICAgICBPW0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNPd24oTywgSElEREVOKSAmJiBPW0hJRERFTl1ba2V5XSkgT1tISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSBuYXRpdmVPYmplY3RDcmVhdGUoQXR0cmlidXRlcywgeyBlbnVtZXJhYmxlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2NyaXB0b3IoTywga2V5LCBBdHRyaWJ1dGVzKTtcbiAgfSByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywga2V5LCBBdHRyaWJ1dGVzKTtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BlcnRpZXMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhwcm9wZXJ0aWVzKS5jb25jYXQoJGdldE93blByb3BlcnR5U3ltYm9scyhwcm9wZXJ0aWVzKSk7XG4gICRmb3JFYWNoKGtleXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwoJHByb3BlcnR5SXNFbnVtZXJhYmxlLCBwcm9wZXJ0aWVzLCBrZXkpKSAkZGVmaW5lUHJvcGVydHkoTywga2V5LCBwcm9wZXJ0aWVzW2tleV0pO1xuICB9KTtcbiAgcmV0dXJuIE87XG59O1xuXG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyBuYXRpdmVPYmplY3RDcmVhdGUoTykgOiAkZGVmaW5lUHJvcGVydGllcyhuYXRpdmVPYmplY3RDcmVhdGUoTyksIFByb3BlcnRpZXMpO1xufTtcblxudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIFAgPSB0b1Byb3BlcnR5S2V5KFYpO1xuICB2YXIgZW51bWVyYWJsZSA9IGNhbGwobmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUsIHRoaXMsIFApO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBQKSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBlbnVtZXJhYmxlIHx8ICFoYXNPd24odGhpcywgUCkgfHwgIWhhc093bihBbGxTeW1ib2xzLCBQKSB8fCBoYXNPd24odGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1bUF1cbiAgICA/IGVudW1lcmFibGUgOiB0cnVlO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICB2YXIgaXQgPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG4gIGlmIChkZXNjcmlwdG9yICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzT3duKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIHtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpKSBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBJU19PQkpFQ1RfUFJPVE9UWVBFID0gTyA9PT0gT2JqZWN0UHJvdG90eXBlO1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKElTX09CSkVDVF9QUk9UT1RZUEUgPyBPYmplY3RQcm90b3R5cGVTeW1ib2xzIDogdG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAoIUlTX09CSkVDVF9QUk9UT1RZUEUgfHwgaGFzT3duKE9iamVjdFByb3RvdHlwZSwga2V5KSkpIHtcbiAgICAgIHB1c2gocmVzdWx0LCBBbGxTeW1ib2xzW2tleV0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBgU3ltYm9sYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wtY29uc3RydWN0b3JcbmlmICghTkFUSVZFX1NZTUJPTCkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmIChpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuICAgIHZhciBkZXNjcmlwdGlvbiA9ICFhcmd1bWVudHMubGVuZ3RoIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogJHRvU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHRhZyA9IHVpZChkZXNjcmlwdGlvbik7XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyICR0aGlzID0gdGhpcyA9PT0gdW5kZWZpbmVkID8gZ2xvYmFsVGhpcyA6IHRoaXM7XG4gICAgICBpZiAoJHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSkgY2FsbChzZXR0ZXIsIE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXNPd24oJHRoaXMsIEhJRERFTikgJiYgaGFzT3duKCR0aGlzW0hJRERFTl0sIHRhZykpICR0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0U3ltYm9sRGVzY3JpcHRvcigkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikpIHRocm93IGVycm9yO1xuICAgICAgICBmYWxsYmFja0RlZmluZVByb3BlcnR5KCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIFVTRV9TRVRURVIpIHNldFN5bWJvbERlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6IHNldHRlciB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcsIGRlc2NyaXB0aW9uKTtcbiAgfTtcblxuICBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sW1BST1RPVFlQRV07XG5cbiAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnRhZztcbiAgfSk7XG5cbiAgZGVmaW5lQnVpbHRJbigkU3ltYm9sLCAnd2l0aG91dFNldHRlcicsIGZ1bmN0aW9uIChkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiB3cmFwKHVpZChkZXNjcmlwdGlvbiksIGRlc2NyaXB0aW9uKTtcbiAgfSk7XG5cbiAgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgZGVmaW5lUHJvcGVydGllc01vZHVsZS5mID0gJGRlZmluZVByb3BlcnRpZXM7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2VsbEtub3duU3ltYm9sKG5hbWUpLCBuYW1lKTtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1TeW1ib2wtZGVzY3JpcHRpb25cbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoU3ltYm9sUHJvdG90eXBlLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIUlTX1BVUkUpIHtcbiAgICAgIGRlZmluZUJ1aWx0SW4oT2JqZWN0UHJvdG90eXBlLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIU5BVElWRV9TWU1CT0wgfSwge1xuICBTeW1ib2w6ICRTeW1ib2xcbn0pO1xuXG4kZm9yRWFjaChvYmplY3RLZXlzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlZmluZVdlbGxLbm93blN5bWJvbChuYW1lKTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiBTWU1CT0wsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gZmFsc2U7IH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvclxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCBTWU1CT0wpO1xuXG5oaWRkZW5LZXlzW0hJRERFTl0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHNhZmUgKi9cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTCAmJiAhIVN5bWJvbFsnZm9yJ10gJiYgISFTeW1ib2wua2V5Rm9yO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5mb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcoa2V5KTtcbiAgICBpZiAoaGFzT3duKFN0cmluZ1RvU3ltYm9sUmVnaXN0cnksIHN0cmluZykpIHJldHVybiBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ107XG4gICAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKHN0cmluZyk7XG4gICAgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddID0gc3ltYm9sO1xuICAgIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltYm9sXSA9IHN0cmluZztcbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wua2V5Rm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmtleWZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IG5ldyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoc3ltKSArICcgaXMgbm90IGEgc3ltYm9sJyk7XG4gICAgaWYgKGhhc093bihTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5LCBzeW0pKSByZXR1cm4gU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1dO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGFwcGx5ID0gRnVuY3Rpb25Qcm90b3R5cGUuYXBwbHk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCwgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcGxhY2VyKSB7XG4gIGlmIChpc0NhbGxhYmxlKHJlcGxhY2VyKSkgcmV0dXJuIHJlcGxhY2VyO1xuICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXR1cm47XG4gIHZhciByYXdMZW5ndGggPSByZXBsYWNlci5sZW5ndGg7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3TGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlbWVudCA9IHJlcGxhY2VyW2ldO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnc3RyaW5nJykgcHVzaChrZXlzLCBlbGVtZW50KTtcbiAgICBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnbnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnTnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnU3RyaW5nJykgcHVzaChrZXlzLCB0b1N0cmluZyhlbGVtZW50KSk7XG4gIH1cbiAgdmFyIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIHJvb3QgPSB0cnVlO1xuICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAocm9vdCkge1xuICAgICAgcm9vdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgcmV0dXJuIHZhbHVlO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5c0xlbmd0aDsgaisrKSBpZiAoa2V5c1tqXSA9PT0ga2V5KSByZXR1cm4gdmFsdWU7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgZ2V0UmVwbGFjZXJGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbicpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkc3RyaW5naWZ5ID0gZ2V0QnVpbHRJbignSlNPTicsICdzdHJpbmdpZnknKTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBudW1iZXJUb1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbnZhciB0ZXN0ZXIgPSAvW1xcdUQ4MDAtXFx1REZGRl0vZztcbnZhciBsb3cgPSAvXltcXHVEODAwLVxcdURCRkZdJC87XG52YXIgaGkgPSAvXltcXHVEQzAwLVxcdURGRkZdJC87XG5cbnZhciBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKSgnc3RyaW5naWZ5IGRldGVjdGlvbicpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICByZXR1cm4gJHN0cmluZ2lmeShbc3ltYm9sXSkgIT09ICdbbnVsbF0nXG4gICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgfHwgJHN0cmluZ2lmeSh7IGE6IHN5bWJvbCB9KSAhPT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT09ICd7fSc7XG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtd2VsbC1mb3JtZWQtc3RyaW5naWZ5XG52YXIgSUxMX0ZPUk1FRF9VTklDT0RFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHN0cmluZ2lmeSgnXFx1REYwNlxcdUQ4MzQnKSAhPT0gJ1wiXFxcXHVkZjA2XFxcXHVkODM0XCInXG4gICAgfHwgJHN0cmluZ2lmeSgnXFx1REVBRCcpICE9PSAnXCJcXFxcdWRlYWRcIic7XG59KTtcblxudmFyIHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4ID0gZnVuY3Rpb24gKGl0LCByZXBsYWNlcikge1xuICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgdmFyICRyZXBsYWNlciA9IGdldFJlcGxhY2VyRnVuY3Rpb24ocmVwbGFjZXIpO1xuICBpZiAoIWlzQ2FsbGFibGUoJHJlcGxhY2VyKSAmJiAoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgYXJnc1sxXSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgLy8gc29tZSBvbGQgaW1wbGVtZW50YXRpb25zIChsaWtlIFdlYktpdCkgY291bGQgcGFzcyBudW1iZXJzIGFzIGtleXNcbiAgICBpZiAoaXNDYWxsYWJsZSgkcmVwbGFjZXIpKSB2YWx1ZSA9IGNhbGwoJHJlcGxhY2VyLCB0aGlzLCAkU3RyaW5nKGtleSksIHZhbHVlKTtcbiAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9O1xuICByZXR1cm4gYXBwbHkoJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG59O1xuXG52YXIgZml4SWxsRm9ybWVkID0gZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cmluZykge1xuICB2YXIgcHJldiA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCAtIDEpO1xuICB2YXIgbmV4dCA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCArIDEpO1xuICBpZiAoKGV4ZWMobG93LCBtYXRjaCkgJiYgIWV4ZWMoaGksIG5leHQpKSB8fCAoZXhlYyhoaSwgbWF0Y2gpICYmICFleGVjKGxvdywgcHJldikpKSB7XG4gICAgcmV0dXJuICdcXFxcdScgKyBudW1iZXJUb1N0cmluZyhjaGFyQ29kZUF0KG1hdGNoLCAwKSwgMTYpO1xuICB9IHJldHVybiBtYXRjaDtcbn07XG5cbmlmICgkc3RyaW5naWZ5KSB7XG4gIC8vIGBKU09OLnN0cmluZ2lmeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBhcml0eTogMywgZm9yY2VkOiBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gfHwgSUxMX0ZPUk1FRF9VTklDT0RFIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFwcGx5KFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA/IHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IDogJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG4gICAgICByZXR1cm4gSUxMX0ZPUk1FRF9VTklDT0RFICYmIHR5cGVvZiByZXN1bHQgPT0gJ3N0cmluZycgPyByZXBsYWNlKHJlc3VsdCwgdGVzdGVyLCBmaXhJbGxGb3JtZWQpIDogcmVzdWx0O1xuICAgIH1cbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG4vLyBWOCB+IENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGT1JDRUQgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlzeW1ib2xzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyAkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRvT2JqZWN0KGl0KSkgOiBbXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBzcGxpdCB0byBtb2R1bGVzIGxpc3RlZCBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3ltYm9sLmZvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wua2V5LWZvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG4iLCAiLy8gYFN5bWJvbC5wcm90b3R5cGUuZGVzY3JpcHRpb25gIGdldHRlclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLmRlc2NyaXB0aW9uXG4ndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcblxudmFyIE5hdGl2ZVN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFN5bWJvbFByb3RvdHlwZSA9IE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wucHJvdG90eXBlO1xuXG5pZiAoREVTQ1JJUFRPUlMgJiYgaXNDYWxsYWJsZShOYXRpdmVTeW1ib2wpICYmICghKCdkZXNjcmlwdGlvbicgaW4gU3ltYm9sUHJvdG90eXBlKSB8fFxuICAvLyBTYWZhcmkgMTIgYnVnXG4gIE5hdGl2ZVN5bWJvbCgpLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWRcbikpIHtcbiAgdmFyIEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZSA9IHt9O1xuICAvLyB3cmFwIFN5bWJvbCBjb25zdHJ1Y3RvciBmb3IgY29ycmVjdCB3b3JrIHdpdGggdW5kZWZpbmVkIGRlc2NyaXB0aW9uXG4gIHZhciBTeW1ib2xXcmFwcGVyID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIHZhciBkZXNjcmlwdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPCAxIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgcmVzdWx0ID0gaXNQcm90b3R5cGVPZihTeW1ib2xQcm90b3R5cGUsIHRoaXMpXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9pbmNvbnNpc3RlbnQtZnVuY3Rpb24tY2FsbCAtLSBva1xuICAgICAgPyBuZXcgTmF0aXZlU3ltYm9sKGRlc2NyaXB0aW9uKVxuICAgICAgLy8gaW4gRWRnZSAxMywgU3RyaW5nKFN5bWJvbCh1bmRlZmluZWQpKSA9PT0gJ1N5bWJvbCh1bmRlZmluZWQpJ1xuICAgICAgOiBkZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkID8gTmF0aXZlU3ltYm9sKCkgOiBOYXRpdmVTeW1ib2woZGVzY3JpcHRpb24pO1xuICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gJycpIEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZVtyZXN1bHRdID0gdHJ1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoU3ltYm9sV3JhcHBlciwgTmF0aXZlU3ltYm9sKTtcbiAgU3ltYm9sV3JhcHBlci5wcm90b3R5cGUgPSBTeW1ib2xQcm90b3R5cGU7XG4gIFN5bWJvbFByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN5bWJvbFdyYXBwZXI7XG5cbiAgdmFyIE5BVElWRV9TWU1CT0wgPSBTdHJpbmcoTmF0aXZlU3ltYm9sKCdkZXNjcmlwdGlvbiBkZXRlY3Rpb24nKSkgPT09ICdTeW1ib2woZGVzY3JpcHRpb24gZGV0ZWN0aW9uKSc7XG4gIHZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2xQcm90b3R5cGUudmFsdWVPZik7XG4gIHZhciBzeW1ib2xEZXNjcmlwdGl2ZVN0cmluZyA9IHVuY3VycnlUaGlzKFN5bWJvbFByb3RvdHlwZS50b1N0cmluZyk7XG4gIHZhciByZWdleHAgPSAvXlN5bWJvbFxcKCguKilcXClbXildKyQvO1xuICB2YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xuICB2YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFN5bWJvbFByb3RvdHlwZSwgJ2Rlc2NyaXB0aW9uJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgdmFyIHN5bWJvbCA9IHRoaXNTeW1ib2xWYWx1ZSh0aGlzKTtcbiAgICAgIGlmIChoYXNPd24oRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlLCBzeW1ib2wpKSByZXR1cm4gJyc7XG4gICAgICB2YXIgc3RyaW5nID0gc3ltYm9sRGVzY3JpcHRpdmVTdHJpbmcoc3ltYm9sKTtcbiAgICAgIHZhciBkZXNjID0gTkFUSVZFX1NZTUJPTCA/IHN0cmluZ1NsaWNlKHN0cmluZywgNywgLTEpIDogcmVwbGFjZShzdHJpbmcsIHJlZ2V4cCwgJyQxJyk7XG4gICAgICByZXR1cm4gZGVzYyA9PT0gJycgPyB1bmRlZmluZWQgOiBkZXNjO1xuICAgIH1cbiAgfSk7XG5cbiAgJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgU3ltYm9sOiBTeW1ib2xXcmFwcGVyXG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC50b1ByaW1pdGl2ZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvcHJpbWl0aXZlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGFyZ3VtZW50KSB8fCBhcmd1bWVudCA9PT0gbnVsbDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc1Bvc3NpYmxlUHJvdG90eXBlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAtLSBzYWZlICovXG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nLCAnc2V0Jyk7XG4gICAgc2V0dGVyKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIE87XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUYXJnZXQsIFNvdXJjZSwga2V5KSB7XG4gIGtleSBpbiBUYXJnZXQgfHwgZGVmaW5lUHJvcGVydHkoVGFyZ2V0LCBrZXksIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTb3VyY2Vba2V5XTsgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBTb3VyY2Vba2V5XSA9IGl0OyB9XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIG1ha2VzIHN1YmNsYXNzaW5nIHdvcmsgY29ycmVjdCBmb3Igd3JhcHBlZCBidWlsdC1pbnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBkdW1teSwgV3JhcHBlcikge1xuICB2YXIgTmV3VGFyZ2V0LCBOZXdUYXJnZXRQcm90b3R5cGU7XG4gIGlmIChcbiAgICAvLyBpdCBjYW4gd29yayBvbmx5IHdpdGggbmF0aXZlIGBzZXRQcm90b3R5cGVPZmBcbiAgICBzZXRQcm90b3R5cGVPZiAmJlxuICAgIC8vIHdlIGhhdmVuJ3QgY29tcGxldGVseSBjb3JyZWN0IHByZS1FUzYgd2F5IGZvciBnZXR0aW5nIGBuZXcudGFyZ2V0YCwgc28gdXNlIHRoaXNcbiAgICBpc0NhbGxhYmxlKE5ld1RhcmdldCA9IGR1bW15LmNvbnN0cnVjdG9yKSAmJlxuICAgIE5ld1RhcmdldCAhPT0gV3JhcHBlciAmJlxuICAgIGlzT2JqZWN0KE5ld1RhcmdldFByb3RvdHlwZSA9IE5ld1RhcmdldC5wcm90b3R5cGUpICYmXG4gICAgTmV3VGFyZ2V0UHJvdG90eXBlICE9PSBXcmFwcGVyLnByb3RvdHlwZVxuICApIHNldFByb3RvdHlwZU9mKCR0aGlzLCBOZXdUYXJnZXRQcm90b3R5cGUpO1xuICByZXR1cm4gJHRoaXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSwgc29uYXJqcy9zbG93LXJlZ2V4IC0tIHNhZmVcbnZhciBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkgPSAvXFxuXFxzKmF0IFteOl0qOlteXFxuXSovO1xudmFyIElTX1Y4X09SX0NIQUtSQV9TVEFDSyA9IFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWS50ZXN0KFRFU1QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKElTX1Y4X09SX0NIQUtSQV9TVEFDSyAmJiB0eXBlb2Ygc3RhY2sgPT0gJ3N0cmluZycgJiYgISRFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuICAgIHdoaWxlIChkcm9wRW50cmllcy0tKSBzdGFjayA9IHJlcGxhY2Uoc3RhY2ssIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSwgJycpO1xuICB9IHJldHVybiBzdGFjaztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdhJyk7XG4gIGlmICghKCdzdGFjaycgaW4gZXJyb3IpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIDcpKTtcbiAgcmV0dXJuIGVycm9yLnN0YWNrICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjbGVhckVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXInKTtcbnZhciBFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZScpO1xuXG4vLyBub24tc3RhbmRhcmQgVjhcbnZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlcnJvciwgQywgc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSkge1xuICAgIGlmIChjYXB0dXJlU3RhY2tUcmFjZSkgY2FwdHVyZVN0YWNrVHJhY2UoZXJyb3IsIEMpO1xuICAgIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjbGVhckVycm9yU3RhY2soc3RhY2ssIGRyb3BFbnRyaWVzKSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIHByb3h5QWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3InKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xudmFyIGluc3RhbGxFcnJvckNhdXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UnKTtcbnZhciBpbnN0YWxsRXJyb3JTdGFjayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoRlVMTF9OQU1FLCB3cmFwcGVyLCBGT1JDRUQsIElTX0FHR1JFR0FURV9FUlJPUikge1xuICB2YXIgU1RBQ0tfVFJBQ0VfTElNSVQgPSAnc3RhY2tUcmFjZUxpbWl0JztcbiAgdmFyIE9QVElPTlNfUE9TSVRJT04gPSBJU19BR0dSRUdBVEVfRVJST1IgPyAyIDogMTtcbiAgdmFyIHBhdGggPSBGVUxMX05BTUUuc3BsaXQoJy4nKTtcbiAgdmFyIEVSUk9SX05BTUUgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gIHZhciBPcmlnaW5hbEVycm9yID0gZ2V0QnVpbHRJbi5hcHBseShudWxsLCBwYXRoKTtcblxuICBpZiAoIU9yaWdpbmFsRXJyb3IpIHJldHVybjtcblxuICB2YXIgT3JpZ2luYWxFcnJvclByb3RvdHlwZSA9IE9yaWdpbmFsRXJyb3IucHJvdG90eXBlO1xuXG4gIC8vIFY4IDkuMy0gYnVnIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyMDA2XG4gIGlmICghSVNfUFVSRSAmJiBoYXNPd24oT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgJ2NhdXNlJykpIGRlbGV0ZSBPcmlnaW5hbEVycm9yUHJvdG90eXBlLmNhdXNlO1xuXG4gIGlmICghRk9SQ0VEKSByZXR1cm4gT3JpZ2luYWxFcnJvcjtcblxuICB2YXIgQmFzZUVycm9yID0gZ2V0QnVpbHRJbignRXJyb3InKTtcblxuICB2YXIgV3JhcHBlZEVycm9yID0gd3JhcHBlcihmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBtZXNzYWdlID0gbm9ybWFsaXplU3RyaW5nQXJndW1lbnQoSVNfQUdHUkVHQVRFX0VSUk9SID8gYiA6IGEsIHVuZGVmaW5lZCk7XG4gICAgdmFyIHJlc3VsdCA9IElTX0FHR1JFR0FURV9FUlJPUiA/IG5ldyBPcmlnaW5hbEVycm9yKGEpIDogbmV3IE9yaWdpbmFsRXJyb3IoKTtcbiAgICBpZiAobWVzc2FnZSAhPT0gdW5kZWZpbmVkKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0LCAnbWVzc2FnZScsIG1lc3NhZ2UpO1xuICAgIGluc3RhbGxFcnJvclN0YWNrKHJlc3VsdCwgV3JhcHBlZEVycm9yLCByZXN1bHQuc3RhY2ssIDIpO1xuICAgIGlmICh0aGlzICYmIGlzUHJvdG90eXBlT2YoT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgdGhpcykpIGluaGVyaXRJZlJlcXVpcmVkKHJlc3VsdCwgdGhpcywgV3JhcHBlZEVycm9yKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IE9QVElPTlNfUE9TSVRJT04pIGluc3RhbGxFcnJvckNhdXNlKHJlc3VsdCwgYXJndW1lbnRzW09QVElPTlNfUE9TSVRJT05dKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICBXcmFwcGVkRXJyb3IucHJvdG90eXBlID0gT3JpZ2luYWxFcnJvclByb3RvdHlwZTtcblxuICBpZiAoRVJST1JfTkFNRSAhPT0gJ0Vycm9yJykge1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoV3JhcHBlZEVycm9yLCBCYXNlRXJyb3IpO1xuICAgIGVsc2UgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhXcmFwcGVkRXJyb3IsIEJhc2VFcnJvciwgeyBuYW1lOiB0cnVlIH0pO1xuICB9IGVsc2UgaWYgKERFU0NSSVBUT1JTICYmIFNUQUNLX1RSQUNFX0xJTUlUIGluIE9yaWdpbmFsRXJyb3IpIHtcbiAgICBwcm94eUFjY2Vzc29yKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvciwgU1RBQ0tfVFJBQ0VfTElNSVQpO1xuICAgIHByb3h5QWNjZXNzb3IoV3JhcHBlZEVycm9yLCBPcmlnaW5hbEVycm9yLCAncHJlcGFyZVN0YWNrVHJhY2UnKTtcbiAgfVxuXG4gIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoV3JhcHBlZEVycm9yLCBPcmlnaW5hbEVycm9yKTtcblxuICBpZiAoIUlTX1BVUkUpIHRyeSB7XG4gICAgLy8gU2FmYXJpIDEzLSBidWc6IFdlYkFzc2VtYmx5IGVycm9ycyBkb2VzIG5vdCBoYXZlIGEgcHJvcGVyIGAubmFtZWBcbiAgICBpZiAoT3JpZ2luYWxFcnJvclByb3RvdHlwZS5uYW1lICE9PSBFUlJPUl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgJ25hbWUnLCBFUlJPUl9OQU1FKTtcbiAgICB9XG4gICAgT3JpZ2luYWxFcnJvclByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdyYXBwZWRFcnJvcjtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gIHJldHVybiBXcmFwcGVkRXJyb3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBmdW5jdGlvbnMgYC5sZW5ndGhgICovXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93cmFwLWVycm9yLWNvbnN0cnVjdG9yLXdpdGgtY2F1c2UnKTtcblxudmFyIFdFQl9BU1NFTUJMWSA9ICdXZWJBc3NlbWJseSc7XG52YXIgV2ViQXNzZW1ibHkgPSBnbG9iYWxUaGlzW1dFQl9BU1NFTUJMWV07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1lcnJvci1jYXVzZSAtLSBmZWF0dXJlIGRldGVjdGlvblxudmFyIEZPUkNFRCA9IG5ldyBFcnJvcignZScsIHsgY2F1c2U6IDcgfSkuY2F1c2UgIT09IDc7XG5cbnZhciBleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlciA9IGZ1bmN0aW9uIChFUlJPUl9OQU1FLCB3cmFwcGVyKSB7XG4gIHZhciBPID0ge307XG4gIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIE8pO1xufTtcblxudmFyIGV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIgPSBmdW5jdGlvbiAoRVJST1JfTkFNRSwgd3JhcHBlcikge1xuICBpZiAoV2ViQXNzZW1ibHkgJiYgV2ViQXNzZW1ibHlbRVJST1JfTkFNRV0pIHtcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShXRUJfQVNTRU1CTFkgKyAnLicgKyBFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAgICQoeyB0YXJnZXQ6IFdFQl9BU1NFTUJMWSwgc3RhdDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCBPKTtcbiAgfVxufTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uYXRpdmVlcnJvclxuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ0Vycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdFdmFsRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRXZhbEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdSYW5nZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJhbmdlRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ1JlZmVyZW5jZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJlZmVyZW5jZUVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdTeW50YXhFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTeW50YXhFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVHlwZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFR5cGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVVJJRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVVJJRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlcignQ29tcGlsZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIENvbXBpbGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRXZWJBc3NlbWJseUVycm9yQ2F1c2VXcmFwcGVyKCdMaW5rRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTGlua0Vycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoJ1J1bnRpbWVFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBSdW50aW1lRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZm9yRWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxubW9kdWxlLmV4cG9ydHMgPSAhU1RSSUNUX01FVEhPRCA/IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG59IDogW10uZm9yRWFjaDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogW10uZm9yRWFjaCAhPT0gZm9yRWFjaCB9LCB7XG4gIGZvckVhY2g6IGZvckVhY2hcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBFTlRSSUVTKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVOVFJJRVMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG90eXBlW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtrZXldID0gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXQpKSByZXR1cm4gZ2V0TWV0aG9kKGl0LCBJVEVSQVRPUilcbiAgICB8fCBnZXRNZXRob2QoaXQsICdAQGl0ZXJhdG9yJylcbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsIHVzaW5nSXRlcmF0b3IpIHtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBnZXRJdGVyYXRvck1ldGhvZChhcmd1bWVudCkgOiB1c2luZ0l0ZXJhdG9yO1xuICBpZiAoYUNhbGxhYmxlKGl0ZXJhdG9yTWV0aG9kKSkgcmV0dXJuIGFuT2JqZWN0KGNhbGwoaXRlcmF0b3JNZXRob2QsIGFyZ3VtZW50KSk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgdmFyIElTX0NPTlNUUlVDVE9SID0gaXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgaWYgKG1hcHBpbmcpIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yLCBuZXh0LCB2YWx1ZTtcbiAgLy8gaWYgdGhlIHRhcmdldCBpcyBub3QgaXRlcmFibGUgb3IgaXQncyBhbiBhcnJheSB3aXRoIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIGEgc2ltcGxlIGNhc2VcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICYmICEodGhpcyA9PT0gJEFycmF5ICYmIGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyYXRvck1ldGhvZCkpKSB7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcygpIDogW107XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihPLCBpdGVyYXRvck1ldGhvZCk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgZm9yICg7IShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMobGVuZ3RoKSA6ICRBcnJheShsZW5ndGgpO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIG5vLXRocm93LWxpdGVyYWwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICB0cnkge1xuICAgIGlmICghU0tJUF9DTE9TSU5HICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIHdvcmthcm91bmQgb2Ygb2xkIFdlYktpdCArIGBldmFsYCBidWdcbiAgdmFyIElURVJBVElPTl9TVVBQT1JUID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIG9iamVjdFtJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogSVRFUkFUSU9OX1NVUFBPUlQgPSB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleGVjKG9iamVjdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIElURVJBVElPTl9TVVBQT1JUO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20nKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG5cbnZhciBJTkNPUlJFQ1RfSVRFUkFUSU9OID0gIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYWJsZSk7XG59KTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBmcm9tOiBmcm9tXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIFVOU0NPUEFCTEVTID0gd2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmlmIChBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU10gPT09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eShBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIE9iamVjdFByb3RvdHlwZSA9ICRPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gJE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBvYmplY3QgPSB0b09iamVjdChPKTtcbiAgaWYgKGhhc093bihvYmplY3QsIElFX1BST1RPKSkgcmV0dXJuIG9iamVjdFtJRV9QUk9UT107XG4gIHZhciBjb25zdHJ1Y3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgaWYgKGlzQ2FsbGFibGUoY29uc3RydWN0b3IpICYmIG9iamVjdCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgJE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1rZXlzIC0tIHNhZmUgKi9cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxudmFyIE5FV19JVEVSQVRPUl9QUk9UT1RZUEUgPSAhaXNPYmplY3QoSXRlcmF0b3JQcm90b3R5cGUpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgLy8gRkY0NC0gbGVnYWN5IGl0ZXJhdG9ycyBjYXNlXG4gIHJldHVybiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0uY2FsbCh0ZXN0KSAhPT0gdGVzdDtcbn0pO1xuXG5pZiAoTkVXX0lURVJBVE9SX1BST1RPVFlQRSkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbmVsc2UgaWYgKElTX1BVUkUpIEl0ZXJhdG9yUHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtQEBpdGVyYXRvclxuaWYgKCFpc0NhbGxhYmxlKEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgZGVmaW5lQnVpbHRJbihJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0LCBFTlVNRVJBQkxFX05FWFQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigrIUVOVU1FUkFCTEVfTkVYVCwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG5cbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICBkZWZpbmVCdWlsdEluKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5LnByb3RvdHlwZS57IHZhbHVlcywgQEBpdGVyYXRvciB9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgREVGQVVMVCA9PT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBgQ3JlYXRlSXRlclJlc3VsdE9iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWl0ZXJyZXN1bHRvYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBkb25lKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogZG9uZSB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5lbnRyaWVzXG4vLyBgQXJyYXkucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAaXRlcmF0b3Jcbi8vIGBDcmVhdGVBcnJheUl0ZXJhdG9yYCBpbnRlcm5hbCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IG51bGw7XG4gICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICBzd2l0Y2ggKHN0YXRlLmtpbmQpIHtcbiAgICBjYXNlICdrZXlzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoaW5kZXgsIGZhbHNlKTtcbiAgICBjYXNlICd2YWx1ZXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh0YXJnZXRbaW5kZXhdLCBmYWxzZSk7XG4gIH0gcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZmFsc2UpO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyVcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG52YXIgdmFsdWVzID0gSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDQ1LSBidWdcbmlmICghSVNfUFVSRSAmJiBERVNDUklQVE9SUyAmJiB2YWx1ZXMubmFtZSAhPT0gJ3ZhbHVlcycpIHRyeSB7XG4gIGRlZmluZVByb3BlcnR5KHZhbHVlcywgJ25hbWUnLCB7IHZhbHVlOiAndmFsdWVzJyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IDw9IDEyMSBhbmQgU2FmYXJpIDw9IDE1LjQ7IEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIG5hdGl2ZVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zbGljZVxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKGlzQ29uc3RydWN0b3IoQ29uc3RydWN0b3IpICYmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQ29uc3RydWN0b3IucHJvdG90eXBlKSkpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KENvbnN0cnVjdG9yKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yW1NQRUNJRVNdO1xuICAgICAgICBpZiAoQ29uc3RydWN0b3IgPT09IG51bGwpIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKENvbnN0cnVjdG9yID09PSAkQXJyYXkgfHwgQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU2xpY2UoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQ29uc3RydWN0b3IpKG1heChmaW4gLSBrLCAwKSk7XG4gICAgZm9yIChuID0gMDsgayA8IGZpbjsgaysrLCBuKyspIGlmIChrIGluIE8pIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoaW50KSB7XG4gIGFuT2JqZWN0KHRoaXMpO1xuICBpZiAoaGludCA9PT0gJ3N0cmluZycgfHwgaGludCA9PT0gJ2RlZmF1bHQnKSBoaW50ID0gJ3N0cmluZyc7XG4gIGVsc2UgaWYgKGhpbnQgIT09ICdudW1iZXInKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUodGhpcywgaGludCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGF0ZVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RhdGUtdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG52YXIgRGF0ZVByb3RvdHlwZSA9IERhdGUucHJvdG90eXBlO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5pZiAoIWhhc093bihEYXRlUHJvdG90eXBlLCBUT19QUklNSVRJVkUpKSB7XG4gIGRlZmluZUJ1aWx0SW4oRGF0ZVByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBkYXRlVG9QcmltaXRpdmUpO1xufVxuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGBHZXRJdGVyYXRvckRpcmVjdChvYmopYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzLyNzZWMtZ2V0aXRlcmF0b3JkaXJlY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4ge1xuICAgIGl0ZXJhdG9yOiBvYmosXG4gICAgbmV4dDogb2JqLm5leHQsXG4gICAgZG9uZTogZmFsc2VcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBvcHRpb25zKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgSVRFUkFUT1JfSEVMUEVSID0gJ0l0ZXJhdG9ySGVscGVyJztcbnZhciBXUkFQX0ZPUl9WQUxJRF9JVEVSQVRPUiA9ICdXcmFwRm9yVmFsaWRJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xuXG52YXIgY3JlYXRlSXRlcmF0b3JQcm94eVByb3RvdHlwZSA9IGZ1bmN0aW9uIChJU19JVEVSQVRPUikge1xuICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKElTX0lURVJBVE9SID8gV1JBUF9GT1JfVkFMSURfSVRFUkFUT1IgOiBJVEVSQVRPUl9IRUxQRVIpO1xuXG4gIHJldHVybiBkZWZpbmVCdWlsdElucyhjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpLCB7XG4gICAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAvLyBmb3Igc2ltcGxpZmljYXRpb246XG4gICAgICAvLyAgIGZvciBgJVdyYXBGb3JWYWxpZEl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBvciB3aXRoIGBzdGF0ZS5yZXR1cm5IYW5kbGVyUmVzdWx0YCBvdXIgYG5leHRIYW5kbGVyYCByZXR1cm5zIGBJdGVyUmVzdWx0T2JqZWN0YFxuICAgICAgLy8gICBmb3IgYCVJdGVyYXRvckhlbHBlclByb3RvdHlwZSUubmV4dGAgLSBqdXN0IGEgdmFsdWVcbiAgICAgIGlmIChJU19JVEVSQVRPUikgcmV0dXJuIHN0YXRlLm5leHRIYW5kbGVyKCk7XG4gICAgICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBzdGF0ZS5uZXh0SGFuZGxlcigpO1xuICAgICAgICByZXR1cm4gc3RhdGUucmV0dXJuSGFuZGxlclJlc3VsdCA/IHJlc3VsdCA6IGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QocmVzdWx0LCBzdGF0ZS5kb25lKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHN0YXRlLmRvbmUgPSB0cnVlO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGl0ZXJhdG9yID0gc3RhdGUuaXRlcmF0b3I7XG4gICAgICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgICAgIGlmIChJU19JVEVSQVRPUikge1xuICAgICAgICB2YXIgcmV0dXJuTWV0aG9kID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgICAgIHJldHVybiByZXR1cm5NZXRob2QgPyBjYWxsKHJldHVybk1ldGhvZCwgaXRlcmF0b3IpIDogY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmlubmVyKSB0cnkge1xuICAgICAgICBpdGVyYXRvckNsb3NlKHN0YXRlLmlubmVyLml0ZXJhdG9yLCAnbm9ybWFsJyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJyk7XG4gICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgV3JhcEZvclZhbGlkSXRlcmF0b3JQcm90b3R5cGUgPSBjcmVhdGVJdGVyYXRvclByb3h5UHJvdG90eXBlKHRydWUpO1xudmFyIEl0ZXJhdG9ySGVscGVyUHJvdG90eXBlID0gY3JlYXRlSXRlcmF0b3JQcm94eVByb3RvdHlwZShmYWxzZSk7XG5cbmNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYXRvckhlbHBlclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgJ0l0ZXJhdG9yIEhlbHBlcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuZXh0SGFuZGxlciwgSVNfSVRFUkFUT1IsIFJFVFVSTl9IQU5ETEVSX1JFU1VMVCkge1xuICB2YXIgSXRlcmF0b3JQcm94eSA9IGZ1bmN0aW9uIEl0ZXJhdG9yKHJlY29yZCwgc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUpIHtcbiAgICAgIHN0YXRlLml0ZXJhdG9yID0gcmVjb3JkLml0ZXJhdG9yO1xuICAgICAgc3RhdGUubmV4dCA9IHJlY29yZC5uZXh0O1xuICAgIH0gZWxzZSBzdGF0ZSA9IHJlY29yZDtcbiAgICBzdGF0ZS50eXBlID0gSVNfSVRFUkFUT1IgPyBXUkFQX0ZPUl9WQUxJRF9JVEVSQVRPUiA6IElURVJBVE9SX0hFTFBFUjtcbiAgICBzdGF0ZS5yZXR1cm5IYW5kbGVyUmVzdWx0ID0gISFSRVRVUk5fSEFORExFUl9SRVNVTFQ7XG4gICAgc3RhdGUubmV4dEhhbmRsZXIgPSBuZXh0SGFuZGxlcjtcbiAgICBzdGF0ZS5jb3VudGVyID0gMDtcbiAgICBzdGF0ZS5kb25lID0gZmFsc2U7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCBzdGF0ZSk7XG4gIH07XG5cbiAgSXRlcmF0b3JQcm94eS5wcm90b3R5cGUgPSBJU19JVEVSQVRPUiA/IFdyYXBGb3JWYWxpZEl0ZXJhdG9yUHJvdG90eXBlIDogSXRlcmF0b3JIZWxwZXJQcm90b3R5cGU7XG5cbiAgcmV0dXJuIEl0ZXJhdG9yUHJveHk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0SXRlcmF0b3JEaXJlY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdCcpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yUHJveHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLXByb3h5Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSXRlcmF0b3JQcm94eSA9IGNyZWF0ZUl0ZXJhdG9yUHJveHkoZnVuY3Rpb24gKCkge1xuICB2YXIgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yO1xuICB2YXIgcHJlZGljYXRlID0gdGhpcy5wcmVkaWNhdGU7XG4gIHZhciBuZXh0ID0gdGhpcy5uZXh0O1xuICB2YXIgcmVzdWx0LCBkb25lLCB2YWx1ZTtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICByZXN1bHQgPSBhbk9iamVjdChjYWxsKG5leHQsIGl0ZXJhdG9yKSk7XG4gICAgZG9uZSA9IHRoaXMuZG9uZSA9ICEhcmVzdWx0LmRvbmU7XG4gICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICBpZiAoY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgcHJlZGljYXRlLCBbdmFsdWUsIHRoaXMuY291bnRlcisrXSwgdHJ1ZSkpIHJldHVybiB2YWx1ZTtcbiAgfVxufSk7XG5cbi8vIGBJdGVyYXRvci5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXRlcmF0b3IucHJvdG90eXBlLmZpbHRlclxuJCh7IHRhcmdldDogJ0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKHByZWRpY2F0ZSkge1xuICAgIGFuT2JqZWN0KHRoaXMpO1xuICAgIGFDYWxsYWJsZShwcmVkaWNhdGUpO1xuICAgIHJldHVybiBuZXcgSXRlcmF0b3JQcm94eShnZXRJdGVyYXRvckRpcmVjdCh0aGlzKSwge1xuICAgICAgcHJlZGljYXRlOiBwcmVkaWNhdGVcbiAgICB9KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbnZhciBSZXN1bHRQcm90b3R5cGUgPSBSZXN1bHQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgdW5ib3VuZEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gIHZhciB0aGF0ID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoYXQ7XG4gIHZhciBBU19FTlRSSUVTID0gISEob3B0aW9ucyAmJiBvcHRpb25zLkFTX0VOVFJJRVMpO1xuICB2YXIgSVNfUkVDT1JEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX1JFQ09SRCk7XG4gIHZhciBJU19JVEVSQVRPUiA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19JVEVSQVRPUik7XG4gIHZhciBJTlRFUlJVUFRFRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JTlRFUlJVUFRFRCk7XG4gIHZhciBmbiA9IGJpbmQodW5ib3VuZEZ1bmN0aW9uLCB0aGF0KTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICB2YXIgc3RvcCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBjb25kaXRpb24pO1xuICAgIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIGNvbmRpdGlvbik7XG4gIH07XG5cbiAgdmFyIGNhbGxGbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChBU19FTlRSSUVTKSB7XG4gICAgICBhbk9iamVjdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZVswXSwgdmFsdWVbMV0sIHN0b3ApIDogZm4odmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICB9IHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlLCBzdG9wKSA6IGZuKHZhbHVlKTtcbiAgfTtcblxuICBpZiAoSVNfUkVDT1JEKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZS5pdGVyYXRvcjtcbiAgfSBlbHNlIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICghaXRlckZuKSB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhpdGVyYWJsZSkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlcmFibGUpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBjYWxsRm4oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGl0ZXJhYmxlLCBpdGVyRm4pO1xuICB9XG5cbiAgbmV4dCA9IElTX1JFQ09SRCA/IGl0ZXJhYmxlLm5leHQgOiBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0SXRlcmF0b3JEaXJlY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdCcpO1xuXG4vLyBgSXRlcmF0b3IucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pdGVyYXRvci5wcm90b3R5cGUuZm9yZWFjaFxuJCh7IHRhcmdldDogJ0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gICAgYW5PYmplY3QodGhpcyk7XG4gICAgYUNhbGxhYmxlKGZuKTtcbiAgICB2YXIgcmVjb3JkID0gZ2V0SXRlcmF0b3JEaXJlY3QodGhpcyk7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIGl0ZXJhdGUocmVjb3JkLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGZuKHZhbHVlLCBjb3VudGVyKyspO1xuICAgIH0sIHsgSVNfUkVDT1JEOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbi8vIGB0aGlzTnVtYmVyVmFsdWVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10aGlzbnVtYmVydmFsdWVcbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoMS4wLnZhbHVlT2YpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMicgK1xuICAnXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ15bJyArIHdoaXRlc3BhY2VzICsgJ10rJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoJyhefFteJyArIHdoaXRlc3BhY2VzICsgJ10pWycgKyB3aGl0ZXNwYWNlcyArICddKyQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIGlmIChUWVBFICYgMSkgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgcnRyaW0sICckMScpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIHRoaXNOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZScpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xuXG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgTmF0aXZlTnVtYmVyID0gZ2xvYmFsVGhpc1tOVU1CRVJdO1xudmFyIFB1cmVOdW1iZXJOYW1lc3BhY2UgPSBwYXRoW05VTUJFUl07XG52YXIgTnVtYmVyUHJvdG90eXBlID0gTmF0aXZlTnVtYmVyLnByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG5cbi8vIGBUb051bWVyaWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b251bWVyaWNcbnZhciB0b051bWVyaWMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByaW1WYWx1ZSA9IHRvUHJpbWl0aXZlKHZhbHVlLCAnbnVtYmVyJyk7XG4gIHJldHVybiB0eXBlb2YgcHJpbVZhbHVlID09ICdiaWdpbnQnID8gcHJpbVZhbHVlIDogdG9OdW1iZXIocHJpbVZhbHVlKTtcbn07XG5cbi8vIGBUb051bWJlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbnVtYmVyXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdudW1iZXInKTtcbiAgdmFyIGZpcnN0LCB0aGlyZCwgcmFkaXgsIG1heENvZGUsIGRpZ2l0cywgbGVuZ3RoLCBpbmRleCwgY29kZTtcbiAgaWYgKGlzU3ltYm9sKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBudW1iZXInKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSB0cmltKGl0KTtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoaXQsIDApO1xuICAgIGlmIChmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KSB7XG4gICAgICB0aGlyZCA9IGNoYXJDb2RlQXQoaXQsIDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoY2hhckNvZGVBdChpdCwgMSkpIHtcbiAgICAgICAgLy8gZmFzdCBlcXVhbCBvZiAvXjBiWzAxXSskL2lcbiAgICAgICAgY2FzZSA2NjpcbiAgICAgICAgY2FzZSA5ODpcbiAgICAgICAgICByYWRpeCA9IDI7XG4gICAgICAgICAgbWF4Q29kZSA9IDQ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBmYXN0IGVxdWFsIG9mIC9eMG9bMC03XSskL2lcbiAgICAgICAgY2FzZSA3OTpcbiAgICAgICAgY2FzZSAxMTE6XG4gICAgICAgICAgcmFkaXggPSA4O1xuICAgICAgICAgIG1heENvZGUgPSA1NTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZGlnaXRzID0gc3RyaW5nU2xpY2UoaXQsIDIpO1xuICAgICAgbGVuZ3RoID0gZGlnaXRzLmxlbmd0aDtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb2RlID0gY2hhckNvZGVBdChkaWdpdHMsIGluZGV4KTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IG1heENvZGUpIHJldHVybiBOYU47XG4gICAgICB9IHJldHVybiBwYXJzZUludChkaWdpdHMsIHJhZGl4KTtcbiAgICB9XG4gIH0gcmV0dXJuICtpdDtcbn07XG5cbnZhciBGT1JDRUQgPSBpc0ZvcmNlZChOVU1CRVIsICFOYXRpdmVOdW1iZXIoJyAwbzEnKSB8fCAhTmF0aXZlTnVtYmVyKCcwYjEnKSB8fCBOYXRpdmVOdW1iZXIoJysweDEnKSk7XG5cbnZhciBjYWxsZWRXaXRoTmV3ID0gZnVuY3Rpb24gKGR1bW15KSB7XG4gIC8vIGluY2x1ZGVzIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICByZXR1cm4gaXNQcm90b3R5cGVPZihOdW1iZXJQcm90b3R5cGUsIGR1bW15KSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IHRoaXNOdW1iZXJWYWx1ZShkdW1teSk7IH0pO1xufTtcblxuLy8gYE51bWJlcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLWNvbnN0cnVjdG9yXG52YXIgTnVtYmVyV3JhcHBlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IE5hdGl2ZU51bWJlcih0b051bWVyaWModmFsdWUpKTtcbiAgcmV0dXJuIGNhbGxlZFdpdGhOZXcodGhpcykgPyBpbmhlcml0SWZSZXF1aXJlZChPYmplY3QobiksIHRoaXMsIE51bWJlcldyYXBwZXIpIDogbjtcbn07XG5cbk51bWJlcldyYXBwZXIucHJvdG90eXBlID0gTnVtYmVyUHJvdG90eXBlO1xuaWYgKEZPUkNFRCAmJiAhSVNfUFVSRSkgTnVtYmVyUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTnVtYmVyV3JhcHBlcjtcblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgTnVtYmVyOiBOdW1iZXJXcmFwcGVyXG59KTtcblxuLy8gVXNlIGBpbnRlcm5hbC9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXNgIGhlbHBlciBpbiBgY29yZS1qc0A0YFxudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgZm9yICh2YXIga2V5cyA9IERFU0NSSVBUT1JTID8gZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVMyMDE1IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVMyMDE1IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04sTUFYX1NBRkVfSU5URUdFUixNSU5fU0FGRV9JTlRFR0VSLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLHBhcnNlRmxvYXQscGFyc2VJbnQsJyArXG4gICAgLy8gRVNOZXh0XG4gICAgJ2Zyb21TdHJpbmcscmFuZ2UnXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzT3duKHNvdXJjZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhc093bih0YXJnZXQsIGtleSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG5cbmlmIChJU19QVVJFICYmIFB1cmVOdW1iZXJOYW1lc3BhY2UpIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMocGF0aFtOVU1CRVJdLCBQdXJlTnVtYmVyTmFtZXNwYWNlKTtcbmlmIChGT1JDRUQgfHwgSVNfUFVSRSkgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhwYXRoW05VTUJFUl0sIE5hdGl2ZU51bWJlcik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgIT09IGRlZmluZVByb3BlcnRpZXMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnRpZXM6IGRlZmluZVByb3BlcnRpZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGtleSwgZGVzY3JpcHRvcjtcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkgPSBrZXlzW2luZGV4KytdKTtcbiAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbmF0aXZlS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVLZXlzKDEpOyB9KTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMgfSwge1xuICBrZXlzOiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXModG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5oYXNJbmRpY2VzKSByZXN1bHQgKz0gJ2QnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQuZG90QWxsKSByZXN1bHQgKz0gJ3MnO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC51bmljb2RlU2V0cykgcmVzdWx0ICs9ICd2JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xuXG52YXIgVU5TVVBQT1JURURfWSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnYScsICd5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdhYmNkJykgIT09IG51bGw7XG59KTtcblxuLy8gVUMgQnJvd3NlciBidWdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMDA4XG52YXIgTUlTU0VEX1NUSUNLWSA9IFVOU1VQUE9SVEVEX1kgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gISRSZWdFeHAoJ2EnLCAneScpLnN0aWNreTtcbn0pO1xuXG52YXIgQlJPS0VOX0NBUkVUID0gVU5TVVBQT1JURURfWSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzY4N1xuICB2YXIgcmUgPSAkUmVnRXhwKCdecicsICdneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnc3RyJykgIT09IG51bGw7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEJST0tFTl9DQVJFVDogQlJPS0VOX0NBUkVULFxuICBNSVNTRURfU1RJQ0tZOiBNSVNTRURfU1RJQ0tZLFxuICBVTlNVUFBPUlRFRF9ZOiBVTlNVUFBPUlRFRF9ZXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcuJywgJ3MnKSAtPiAvLi9zIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsVGhpcy5SZWdFeHA7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCcuJywgJ3MnKTtcbiAgcmV0dXJuICEocmUuZG90QWxsICYmIHJlLnRlc3QoJ1xcbicpICYmIHJlLmZsYWdzID09PSAncycpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJyg/PGE+YiknLCAnZycpIC0+IC8oPzxhPmIpL2cgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWxUaGlzLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJyg/PGE+YiknLCAnZycpO1xuICByZXR1cm4gcmUuZXhlYygnYicpLmdyb3Vwcy5hICE9PSAnYicgfHxcbiAgICAnYicucmVwbGFjZShyZSwgJyQ8YT5jJykgIT09ICdiYyc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tZW1wdHktY2FwdHVyaW5nLWdyb3VwLCByZWdleHAvbm8tZW1wdHktZ3JvdXAsIHJlZ2V4cC9uby1sYXp5LWVuZHMgLS0gdGVzdGluZyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVnZXhwL25vLXVzZWxlc3MtcXVhbnRpZmllciAtLSB0ZXN0aW5nICovXG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG52YXIgc3RpY2t5SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJykuZ2V0O1xudmFyIFVOU1VQUE9SVEVEX0RPVF9BTEwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwnKTtcbnZhciBVTlNVUFBPUlRFRF9OQ0cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZycpO1xuXG52YXIgbmF0aXZlUmVwbGFjZSA9IHNoYXJlZCgnbmF0aXZlLXN0cmluZy1yZXBsYWNlJywgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGluZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvO1xuICB2YXIgcmUyID0gL2IqL2c7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUxLCAnYScpO1xuICBjYWxsKG5hdGl2ZUV4ZWMsIHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMS5sYXN0SW5kZXggIT09IDAgfHwgcmUyLmxhc3RJbmRleCAhPT0gMDtcbn0pKCk7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5CUk9LRU5fQ0FSRVQ7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEIHx8IFVOU1VQUE9SVEVEX1kgfHwgVU5TVVBQT1JURURfRE9UX0FMTCB8fCBVTlNVUFBPUlRFRF9OQ0c7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyaW5nKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHJlKTtcbiAgICB2YXIgc3RyID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICB2YXIgcmF3ID0gc3RhdGUucmF3O1xuICAgIHZhciByZXN1bHQsIHJlQ29weSwgbGFzdEluZGV4LCBtYXRjaCwgaSwgb2JqZWN0LCBncm91cDtcblxuICAgIGlmIChyYXcpIHtcbiAgICAgIHJhdy5sYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICByZXN1bHQgPSBjYWxsKHBhdGNoZWRFeGVjLCByYXcsIHN0cik7XG4gICAgICByZS5sYXN0SW5kZXggPSByYXcubGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB2YXIgZ3JvdXBzID0gc3RhdGUuZ3JvdXBzO1xuICAgIHZhciBzdGlja3kgPSBVTlNVUFBPUlRFRF9ZICYmIHJlLnN0aWNreTtcbiAgICB2YXIgZmxhZ3MgPSBjYWxsKHJlZ2V4cEZsYWdzLCByZSk7XG4gICAgdmFyIHNvdXJjZSA9IHJlLnNvdXJjZTtcbiAgICB2YXIgY2hhcnNBZGRlZCA9IDA7XG4gICAgdmFyIHN0ckNvcHkgPSBzdHI7XG5cbiAgICBpZiAoc3RpY2t5KSB7XG4gICAgICBmbGFncyA9IHJlcGxhY2UoZmxhZ3MsICd5JywgJycpO1xuICAgICAgaWYgKGluZGV4T2YoZmxhZ3MsICdnJykgPT09IC0xKSB7XG4gICAgICAgIGZsYWdzICs9ICdnJztcbiAgICAgIH1cblxuICAgICAgc3RyQ29weSA9IHN0cmluZ1NsaWNlKHN0ciwgcmUubGFzdEluZGV4KTtcbiAgICAgIC8vIFN1cHBvcnQgYW5jaG9yZWQgc3RpY2t5IGJlaGF2aW9yLlxuICAgICAgaWYgKHJlLmxhc3RJbmRleCA+IDAgJiYgKCFyZS5tdWx0aWxpbmUgfHwgcmUubXVsdGlsaW5lICYmIGNoYXJBdChzdHIsIHJlLmxhc3RJbmRleCAtIDEpICE9PSAnXFxuJykpIHtcbiAgICAgICAgc291cmNlID0gJyg/OiAnICsgc291cmNlICsgJyknO1xuICAgICAgICBzdHJDb3B5ID0gJyAnICsgc3RyQ29weTtcbiAgICAgICAgY2hhcnNBZGRlZCsrO1xuICAgICAgfVxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIHN0ciBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXig/OicgKyBzb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICB9XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyBzb3VyY2UgKyAnJCg/IVxcXFxzKScsIGZsYWdzKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmUubGFzdEluZGV4O1xuXG4gICAgbWF0Y2ggPSBjYWxsKG5hdGl2ZUV4ZWMsIHN0aWNreSA/IHJlQ29weSA6IHJlLCBzdHJDb3B5KTtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5pbnB1dCA9IHN0cmluZ1NsaWNlKG1hdGNoLmlucHV0LCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2hbMF0gPSBzdHJpbmdTbGljZShtYXRjaFswXSwgY2hhcnNBZGRlZCk7XG4gICAgICAgIG1hdGNoLmluZGV4ID0gcmUubGFzdEluZGV4O1xuICAgICAgICByZS5sYXN0SW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgfSBlbHNlIHJlLmxhc3RJbmRleCA9IDA7XG4gICAgfSBlbHNlIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJ3Qgd29yayBmb3IgLyguPyk/L1xuICAgICAgY2FsbChuYXRpdmVSZXBsYWNlLCBtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoICYmIGdyb3Vwcykge1xuICAgICAgbWF0Y2guZ3JvdXBzID0gb2JqZWN0ID0gY3JlYXRlKG51bGwpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBncm91cCA9IGdyb3Vwc1tpXTtcbiAgICAgICAgb2JqZWN0W2dyb3VwWzBdXSA9IG1hdGNoW2dyb3VwWzFdXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5leGVjYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS5leGVjXG4kKHsgdGFyZ2V0OiAnUmVnRXhwJywgcHJvdG86IHRydWUsIGZvcmNlZDogLy4vLmV4ZWMgIT09IGV4ZWMgfSwge1xuICBleGVjOiBleGVjXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYycpO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gIHZhciByZSA9IC9bYWNdLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gLy4vLmV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHJlLnRlc3QoJ2FiYycpID09PSB0cnVlICYmIGV4ZWNDYWxsZWQ7XG59KCk7XG5cbnZhciBuYXRpdmVUZXN0ID0gLy4vLnRlc3Q7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnRlc3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRlc3RcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhREVMRUdBVEVTX1RPX0VYRUMgfSwge1xuICB0ZXN0OiBmdW5jdGlvbiAoUykge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKFMpO1xuICAgIHZhciBleGVjID0gUi5leGVjO1xuICAgIGlmICghaXNDYWxsYWJsZShleGVjKSkgcmV0dXJuIGNhbGwobmF0aXZlVGVzdCwgUiwgc3RyaW5nKTtcbiAgICB2YXIgcmVzdWx0ID0gY2FsbChleGVjLCBSLCBzdHJpbmcpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICBhbk9iamVjdChyZXN1bHQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcblxudmFyIFNUUklOR19JVEVSQVRPUiA9ICdTdHJpbmcgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1RSSU5HX0lURVJBVE9SKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLUBAaXRlcmF0b3JcbmRlZmluZUl0ZXJhdG9yKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBTVFJJTkdfSVRFUkFUT1IsXG4gICAgc3RyaW5nOiB0b1N0cmluZyhpdGVyYXRlZCksXG4gICAgaW5kZXg6IDBcbiAgfSk7XG4vLyBgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXN0cmluZ2l0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgc3RyaW5nID0gc3RhdGUuc3RyaW5nO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleDtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QocG9pbnQsIGZhbHNlKTtcbn0pO1xuIiwgIihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJpbiBzZWxmXG4pKSB7XG4vLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbihmdW5jdGlvbiAoZ2xvYmFsKSB7XG5cdHZhciByYWZQcmVmaXg7XG5cblx0Ly8gZG8gbm90IGluamVjdCBSQUYgaW4gb3JkZXIgdG8gYXZvaWQgYnJva2VuIHBlcmZvcm1hbmNlXG5cdHZhciBub3dPZmZzZXQgPSBEYXRlLm5vdygpO1xuXG5cdC8vIHVzZSBwZXJmb3JtYW5jZSBhcGkgaWYgZXhpc3QsIG90aGVyd2lzZSB1c2UgRGF0ZS5ub3cuXG5cdC8vIERhdGUubm93IHBvbHlmaWxsIHJlcXVpcmVkLlxuXHR2YXIgcG5vdyA9IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAoZ2xvYmFsLnBlcmZvcm1hbmNlICYmIHR5cGVvZiBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm4gZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdygpO1xuXHRcdH1cblx0XHQvLyBmYWxsYmFja1xuXHRcdHJldHVybiBEYXRlLm5vdygpIC0gbm93T2Zmc2V0O1xuXHR9O1xuXG5cdGlmICgnbW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lJyBpbiBnbG9iYWwpIHtcblx0XHRyYWZQcmVmaXggPSAnbW96JztcblxuXHR9IGVsc2UgaWYgKCd3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnIGluIGdsb2JhbCkge1xuXHRcdHJhZlByZWZpeCA9ICd3ZWJraXQnO1xuXG5cdH1cblxuXHRpZiAocmFmUHJlZml4KSB7XG5cdFx0Z2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRcdFx0cmV0dXJuIGdsb2JhbFtyYWZQcmVmaXggKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRjYWxsYmFjayhwbm93KCkpO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbcmFmUHJlZml4ICsgJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ107XG5cdH0gZWxzZSB7XG5cblx0XHR2YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuXG5cdFx0Z2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRcdFx0aWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXJcblx0XHRcdGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKSxcblx0XHRcdGRlbGF5ID0gMTYgKyBsYXN0VGltZSAtIGN1cnJlbnRUaW1lO1xuXG5cdFx0XHRpZiAoZGVsYXkgPCAwKSB7XG5cdFx0XHRcdGRlbGF5ID0gMDtcblx0XHRcdH1cblxuXHRcdFx0bGFzdFRpbWUgPSBjdXJyZW50VGltZTtcblxuXHRcdFx0cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRsYXN0VGltZSA9IERhdGUubm93KCk7XG5cblx0XHRcdFx0Y2FsbGJhY2socG5vdygpKTtcblx0XHRcdH0sIGRlbGF5KTtcblx0XHR9O1xuXG5cdFx0Z2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGlkKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQoaWQpO1xuXHRcdH07XG5cdH1cbn0oc2VsZikpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJmdW5jdGlvblwiPT10eXBlb2YgZG9jdW1lbnQuaGVhZC5hbmltYXRlJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4hIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIikuYW5pbWF0ZSh7b3BhY2l0eTpbMCwxXX0se2RpcmVjdGlvbjpcImFsdGVybmF0ZVwiLGR1cmF0aW9uOjEsaXRlcmF0aW9uczoxfSl9Y2F0Y2godCl7cmV0dXJuITF9fSgpXG4pKSB7XG4vLyBXZWJBbmltYXRpb25zXG4vLyBDb3B5cmlnaHQgMjAxNCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbiFmdW5jdGlvbigpe3ZhciBhPXt9LGI9e307IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZihcIm51bWJlclwiPT10eXBlb2YgYSlyZXR1cm4gYTt2YXIgYj17fTtmb3IodmFyIGMgaW4gYSliW2NdPWFbY107cmV0dXJuIGJ9ZnVuY3Rpb24gZCgpe3RoaXMuX2RlbGF5PTAsdGhpcy5fZW5kRGVsYXk9MCx0aGlzLl9maWxsPVwibm9uZVwiLHRoaXMuX2l0ZXJhdGlvblN0YXJ0PTAsdGhpcy5faXRlcmF0aW9ucz0xLHRoaXMuX2R1cmF0aW9uPTAsdGhpcy5fcGxheWJhY2tSYXRlPTEsdGhpcy5fZGlyZWN0aW9uPVwibm9ybWFsXCIsdGhpcy5fZWFzaW5nPVwibGluZWFyXCIsdGhpcy5fZWFzaW5nRnVuY3Rpb249eH1mdW5jdGlvbiBlKCl7cmV0dXJuIGEuaXNEZXByZWNhdGVkKFwiSW52YWxpZCB0aW1pbmcgaW5wdXRzXCIsXCIyMDE2LTAzLTAyXCIsXCJUeXBlRXJyb3IgZXhjZXB0aW9ucyB3aWxsIGJlIHRocm93biBpbnN0ZWFkLlwiLCEwKX1mdW5jdGlvbiBmKGIsYyxlKXt2YXIgZj1uZXcgZDtyZXR1cm4gYyYmKGYuZmlsbD1cImJvdGhcIixmLmR1cmF0aW9uPVwiYXV0b1wiKSxcIm51bWJlclwiIT10eXBlb2YgYnx8aXNOYU4oYik/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/YS5tZXJnZUxpc3QoYi5zbGljZSgxKSxjLnNsaWNlKDEpLFtcImVsbGlwc2UoXCIsYS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXIsXCIgYXQgXCIsYS5tZXJnZU9mZnNldExpc3QsXCIpXCJdKTpcInBvbHlnb25cIj09YlswXSYmYlsxXT09Y1sxXT9hLm1lcmdlTGlzdChiLnNsaWNlKDIpLGMuc2xpY2UoMiksW1wicG9seWdvbihcIixiWzFdLGcsXCIpXCJdKTp2b2lkIDB9dmFyIGQ9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsYS5wYXJzZUxlbmd0aE9yUGVyY2VudCksZT1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxkLC9eLyksZj1hLm1lcmdlTmVzdGVkUmVwZWF0ZWQuYmluZCh2b2lkIDAsYS5tZXJnZURpbWVuc2lvbnMsXCIgXCIpLGc9YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGYsXCIsXCIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYixjLFtcInNoYXBlLW91dHNpZGVcIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtiLmNvbmNhdChbYV0pLmZvckVhY2goZnVuY3Rpb24oYil7YiBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUmJihkW2FdPWIpLGVbYl09YX0pfXZhciBkPXt9LGU9e307YyhcInRyYW5zZm9ybVwiLFtcIndlYmtpdFRyYW5zZm9ybVwiLFwibXNUcmFuc2Zvcm1cIl0pLGMoXCJ0cmFuc2Zvcm1PcmlnaW5cIixbXCJ3ZWJraXRUcmFuc2Zvcm1PcmlnaW5cIl0pLGMoXCJwZXJzcGVjdGl2ZVwiLFtcIndlYmtpdFBlcnNwZWN0aXZlXCJdKSxjKFwicGVyc3BlY3RpdmVPcmlnaW5cIixbXCJ3ZWJraXRQZXJzcGVjdGl2ZU9yaWdpblwiXSksYS5wcm9wZXJ0eU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGRbYV18fGF9LGEudW5wcmVmaXhlZFByb3BlcnR5TmFtZT1mdW5jdGlvbihhKXtyZXR1cm4gZVthXXx8YX19KGIpfSgpLGZ1bmN0aW9uKCl7aWYodm9pZCAwPT09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5hbmltYXRlKFtdKS5vbmNhbmNlbCl7dmFyIGE7aWYod2luZG93LnBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3cpdmFyIGE9ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9O2Vsc2UgdmFyIGE9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX07dmFyIGI9ZnVuY3Rpb24oYSxiLGMpe3RoaXMudGFyZ2V0PWEsdGhpcy5jdXJyZW50VGltZT1iLHRoaXMudGltZWxpbmVUaW1lPWMsdGhpcy50eXBlPVwiY2FuY2VsXCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfSxjPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5jYWxsKHRoaXMsZCxlKTtmLl9jYW5jZWxIYW5kbGVycz1bXSxmLm9uY2FuY2VsPW51bGw7dmFyIGc9Zi5jYW5jZWw7Zi5jYW5jZWw9ZnVuY3Rpb24oKXtnLmNhbGwodGhpcyk7dmFyIGM9bmV3IGIodGhpcyxudWxsLGEoKSksZD10aGlzLl9jYW5jZWxIYW5kbGVycy5jb25jYXQodGhpcy5vbmNhbmNlbD9bdGhpcy5vbmNhbmNlbF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGMudGFyZ2V0LGMpfSl9LDApfTt2YXIgaD1mLmFkZEV2ZW50TGlzdGVuZXI7Zi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7XCJmdW5jdGlvblwiPT10eXBlb2YgYiYmXCJjYW5jZWxcIj09YT90aGlzLl9jYW5jZWxIYW5kbGVycy5wdXNoKGIpOmguY2FsbCh0aGlzLGEsYil9O3ZhciBpPWYucmVtb3ZlRXZlbnRMaXN0ZW5lcjtyZXR1cm4gZi5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7aWYoXCJjYW5jZWxcIj09YSl7dmFyIGM9dGhpcy5fY2FuY2VsSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9jYW5jZWxIYW5kbGVycy5zcGxpY2UoYywxKX1lbHNlIGkuY2FsbCh0aGlzLGEsYil9LGZ9fX0oKSxmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz1udWxsLGQ9ITE7dHJ5e3ZhciBlPWdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZShcIm9wYWNpdHlcIiksZj1cIjBcIj09ZT9cIjFcIjpcIjBcIjtjPWIuYW5pbWF0ZSh7b3BhY2l0eTpbZixmXX0se2R1cmF0aW9uOjF9KSxjLmN1cnJlbnRUaW1lPTAsZD1nZXRDb21wdXRlZFN0eWxlKGIpLmdldFByb3BlcnR5VmFsdWUoXCJvcGFjaXR5XCIpPT1mfWNhdGNoKGEpe31maW5hbGx5e2MmJmMuY2FuY2VsKCl9aWYoIWQpe3ZhciBnPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIHdpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmJbU3ltYm9sLml0ZXJhdG9yXSYmKGI9QXJyYXkuZnJvbShiKSksQXJyYXkuaXNBcnJheShiKXx8bnVsbD09PWJ8fChiPWEuY29udmVydFRvQXJyYXlGb3JtKGIpKSxnLmNhbGwodGhpcyxiLGMpfX19KGEpfSgpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJEb2N1bWVudEZyYWdtZW50XCJpbiBzZWxmJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IERvY3VtZW50RnJhZ21lbnQsITB9Y2F0Y2gobil7cmV0dXJuITF9fSgpXG4pKSB7XG4vLyBEb2N1bWVudEZyYWdtZW50XG4oZnVuY3Rpb24gKGdsb2JhbCkge1xuXHRnbG9iYWwuRG9jdW1lbnRGcmFnbWVudCA9IGZ1bmN0aW9uIERvY3VtZW50RnJhZ21lbnQoKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0fTtcblxuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdGdsb2JhbC5Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZnJhZ21lbnQuY29uc3RydWN0b3IucHJvdG90eXBlKVxufShzZWxmKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICJcbi8vIF9tdXRhdGlvblxudmFyIF9tdXRhdGlvbiA9IChmdW5jdGlvbiAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuXHRmdW5jdGlvbiBpc05vZGUob2JqZWN0KSB7XG5cdFx0Ly8gRE9NLCBMZXZlbDJcblx0XHRpZiAodHlwZW9mIE5vZGUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBOb2RlO1xuXHRcdH1cblx0XHQvLyBPbGRlciBicm93c2VycywgY2hlY2sgaWYgaXQgbG9va3MgbGlrZSBhIE5vZGUgaW5zdGFuY2UpXG5cdFx0cmV0dXJuIG9iamVjdCAmJlxuXHRcdFx0dHlwZW9mIG9iamVjdCA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0b2JqZWN0Lm5vZGVOYW1lICYmXG5cdFx0XHRvYmplY3Qubm9kZVR5cGUgPj0gMSAmJlxuXHRcdFx0b2JqZWN0Lm5vZGVUeXBlIDw9IDEyO1xuXHR9XG5cblx0Ly8gaHR0cDovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI211dGF0aW9uLW1ldGhvZC1tYWNyb1xuXHRyZXR1cm4gZnVuY3Rpb24gbXV0YXRpb24obm9kZXMpIHtcblx0XHRpZiAobm9kZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRyZXR1cm4gaXNOb2RlKG5vZGVzWzBdKSA/IG5vZGVzWzBdIDogZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobm9kZXNbMF0gKyAnJyk7XG5cdFx0fVxuXG5cdFx0dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGZyYWdtZW50LmFwcGVuZENoaWxkKGlzTm9kZShub2Rlc1tpXSkgPyBub2Rlc1tpXSA6IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5vZGVzW2ldICsgJycpKTtcblxuXHRcdH1cblx0XHRyZXR1cm4gZnJhZ21lbnQ7XG5cdH07XG59KCkpO1xuZXhwb3J0IGRlZmF1bHQgX211dGF0aW9uO1xuIiwgImltcG9ydCBfbXV0YXRpb24gZnJvbSBcIkBtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX211dGF0aW9uXCI7XG4oZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcIkRvY3VtZW50RnJhZ21lbnRcImluIHNlbGYmJlwiYXBwZW5kXCJpbiBEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZVxuKSkge1xuLy8gRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUuYXBwZW5kXG4vKiBnbG9iYWwgX211dGF0aW9uICovXG4oZnVuY3Rpb24gKGdsb2JhbCkge1xuXHR2YXIgZnJhZ21lbnRQcm90byA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cdGZyYWdtZW50UHJvdG8uYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKCkge1xuXHRcdHRoaXMuYXBwZW5kQ2hpbGQoX211dGF0aW9uKGFyZ3VtZW50cykpO1xuXHR9O1xuXG5cdGdsb2JhbC5Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQoKSB7XG5cdFx0dGhpcy5hcHBlbmRDaGlsZChfbXV0YXRpb24oYXJndW1lbnRzKSk7XG5cdH07XG59KHNlbGYpKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgImltcG9ydCBfbXV0YXRpb24gZnJvbSBcIkBtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX211dGF0aW9uXCI7XG4oZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcIkVsZW1lbnRcImluIHNlbGYmJlwiYXBwZW5kXCJpbiBFbGVtZW50LnByb3RvdHlwZVxuKSkge1xuLy8gRWxlbWVudC5wcm90b3R5cGUuYXBwZW5kXG4vKiBnbG9iYWwgX211dGF0aW9uICovXG5Eb2N1bWVudC5wcm90b3R5cGUuYXBwZW5kID0gRWxlbWVudC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKCkge1xuXHR0aGlzLmFwcGVuZENoaWxkKF9tdXRhdGlvbihhcmd1bWVudHMpKTtcbn07XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQnKTtcblxudmFyIG5hdGl2ZUVycm9yVG9TdHJpbmcgPSBFcnJvci5wcm90b3R5cGUudG9TdHJpbmc7XG5cbnZhciBJTkNPUlJFQ1RfVE9fU1RSSU5HID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICAvLyBDaHJvbWUgMzItIGluY29ycmVjdGx5IGNhbGwgYWNjZXNzb3JcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSwgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICB2YXIgb2JqZWN0ID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICduYW1lJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzID09PSBvYmplY3Q7XG4gICAgfSB9KSk7XG4gICAgaWYgKG5hdGl2ZUVycm9yVG9TdHJpbmcuY2FsbChvYmplY3QpICE9PSAndHJ1ZScpIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIEZGMTAtIGRvZXMgbm90IHByb3Blcmx5IGhhbmRsZSBub24tc3RyaW5nc1xuICByZXR1cm4gbmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKHsgbWVzc2FnZTogMSwgbmFtZTogMiB9KSAhPT0gJzI6IDEnXG4gICAgLy8gSUU4IGRvZXMgbm90IHByb3Blcmx5IGhhbmRsZSBkZWZhdWx0c1xuICAgIHx8IG5hdGl2ZUVycm9yVG9TdHJpbmcuY2FsbCh7fSkgIT09ICdFcnJvcic7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBJTkNPUlJFQ1RfVE9fU1RSSU5HID8gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHZhciBPID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciBuYW1lID0gbm9ybWFsaXplU3RyaW5nQXJndW1lbnQoTy5uYW1lLCAnRXJyb3InKTtcbiAgdmFyIG1lc3NhZ2UgPSBub3JtYWxpemVTdHJpbmdBcmd1bWVudChPLm1lc3NhZ2UpO1xuICByZXR1cm4gIW5hbWUgPyBtZXNzYWdlIDogIW1lc3NhZ2UgPyBuYW1lIDogbmFtZSArICc6ICcgKyBtZXNzYWdlO1xufSA6IG5hdGl2ZUVycm9yVG9TdHJpbmc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZXJyb3JUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci10by1zdHJpbmcnKTtcblxudmFyIEVycm9yUHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuXG4vLyBgRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgZml4XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWVycm9yLnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKEVycm9yUHJvdG90eXBlLnRvU3RyaW5nICE9PSBlcnJvclRvU3RyaW5nKSB7XG4gIGRlZmluZUJ1aWx0SW4oRXJyb3JQcm90b3R5cGUsICd0b1N0cmluZycsIGVycm9yVG9TdHJpbmcpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbmQ7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxudmFyIEZJTkQgPSAnZmluZCc7XG52YXIgU0tJUFNfSE9MRVMgPSB0cnVlO1xuXG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1maW5kIC0tIHRlc3RpbmdcbmlmIChGSU5EIGluIFtdKSBBcnJheSgxKVtGSU5EXShmdW5jdGlvbiAoKSB7IFNLSVBTX0hPTEVTID0gZmFsc2U7IH0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU0tJUFNfSE9MRVMgfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoRklORCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFByb3RvdHlwZSkge1xuICBpZiAoaXNQcm90b3R5cGVPZihQcm90b3R5cGUsIGl0KSkgcmV0dXJuIGl0O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcignSW5jb3JyZWN0IGludm9jYXRpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIENPTlNUUlVDVE9SID0gJ2NvbnN0cnVjdG9yJztcbnZhciBJVEVSQVRPUiA9ICdJdGVyYXRvcic7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTmF0aXZlSXRlcmF0b3IgPSBnbG9iYWxUaGlzW0lURVJBVE9SXTtcblxuLy8gRkY1Ni0gaGF2ZSBub24tc3RhbmRhcmQgZ2xvYmFsIGhlbHBlciBgSXRlcmF0b3JgXG52YXIgRk9SQ0VEID0gSVNfUFVSRVxuICB8fCAhaXNDYWxsYWJsZShOYXRpdmVJdGVyYXRvcilcbiAgfHwgTmF0aXZlSXRlcmF0b3IucHJvdG90eXBlICE9PSBJdGVyYXRvclByb3RvdHlwZVxuICAvLyBGRjQ0LSBub24tc3RhbmRhcmQgYEl0ZXJhdG9yYCBwYXNzZXMgcHJldmlvdXMgdGVzdHNcbiAgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHsgTmF0aXZlSXRlcmF0b3Ioe30pOyB9KTtcblxudmFyIEl0ZXJhdG9yQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBJdGVyYXRvcigpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gIGlmIChnZXRQcm90b3R5cGVPZih0aGlzKSA9PT0gSXRlcmF0b3JQcm90b3R5cGUpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBYnN0cmFjdCBjbGFzcyBJdGVyYXRvciBub3QgZGlyZWN0bHkgY29uc3RydWN0YWJsZScpO1xufTtcblxudmFyIGRlZmluZUl0ZXJhdG9yUHJvdG90eXBlQWNjZXNzb3IgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoSXRlcmF0b3JQcm90b3R5cGUsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChyZXBsYWNlbWVudCkge1xuICAgICAgICBhbk9iamVjdCh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMgPT09IEl0ZXJhdG9yUHJvdG90eXBlKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIllvdSBjYW4ndCByZWRlZmluZSB0aGlzIHByb3BlcnR5XCIpO1xuICAgICAgICBpZiAoaGFzT3duKHRoaXMsIGtleSkpIHRoaXNba2V5XSA9IHJlcGxhY2VtZW50O1xuICAgICAgICBlbHNlIGNyZWF0ZVByb3BlcnR5KHRoaXMsIGtleSwgcmVwbGFjZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2UgSXRlcmF0b3JQcm90b3R5cGVba2V5XSA9IHZhbHVlO1xufTtcblxuaWYgKCFoYXNPd24oSXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcpKSBkZWZpbmVJdGVyYXRvclByb3RvdHlwZUFjY2Vzc29yKFRPX1NUUklOR19UQUcsIElURVJBVE9SKTtcblxuaWYgKEZPUkNFRCB8fCAhaGFzT3duKEl0ZXJhdG9yUHJvdG90eXBlLCBDT05TVFJVQ1RPUikgfHwgSXRlcmF0b3JQcm90b3R5cGVbQ09OU1RSVUNUT1JdID09PSBPYmplY3QpIHtcbiAgZGVmaW5lSXRlcmF0b3JQcm90b3R5cGVBY2Nlc3NvcihDT05TVFJVQ1RPUiwgSXRlcmF0b3JDb25zdHJ1Y3Rvcik7XG59XG5cbkl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gSXRlcmF0b3JQcm90b3R5cGU7XG5cbi8vIGBJdGVyYXRvcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXRlcmF0b3JcbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIEl0ZXJhdG9yOiBJdGVyYXRvckNvbnN0cnVjdG9yXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldEl0ZXJhdG9yRGlyZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QnKTtcblxuLy8gYEl0ZXJhdG9yLnByb3RvdHlwZS5maW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXRlcmF0b3IucHJvdG90eXBlLmZpbmRcbiQoeyB0YXJnZXQ6ICdJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChwcmVkaWNhdGUpIHtcbiAgICBhbk9iamVjdCh0aGlzKTtcbiAgICBhQ2FsbGFibGUocHJlZGljYXRlKTtcbiAgICB2YXIgcmVjb3JkID0gZ2V0SXRlcmF0b3JEaXJlY3QodGhpcyk7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHJldHVybiBpdGVyYXRlKHJlY29yZCwgZnVuY3Rpb24gKHZhbHVlLCBzdG9wKSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBjb3VudGVyKyspKSByZXR1cm4gc3RvcCh2YWx1ZSk7XG4gICAgfSwgeyBJU19SRUNPUkQ6IHRydWUsIElOVEVSUlVQVEVEOiB0cnVlIH0pLnJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09IGRlZmluZVByb3BlcnR5LCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJykuZjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuICFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcygxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldFByb3RvdHlwZU9mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUywgc2hhbTogIUNPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiB9LCB7XG4gIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiBuYXRpdmVHZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKCFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgZGVmaW5lQnVpbHRJbihPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCB0b1N0cmluZywgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgcmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG5cbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSKSB7XG4gIHZhciBmbGFncyA9IFIuZmxhZ3M7XG4gIHJldHVybiBmbGFncyA9PT0gdW5kZWZpbmVkICYmICEoJ2ZsYWdzJyBpbiBSZWdFeHBQcm90b3R5cGUpICYmICFoYXNPd24oUiwgJ2ZsYWdzJykgJiYgaXNQcm90b3R5cGVPZihSZWdFeHBQcm90b3R5cGUsIFIpXG4gICAgPyBjYWxsKHJlZ0V4cEZsYWdzLCBSKSA6IGZsYWdzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldFJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MnKTtcblxudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcbnZhciBuYXRpdmVUb1N0cmluZyA9IFJlZ0V4cFByb3RvdHlwZVtUT19TVFJJTkddO1xuXG52YXIgTk9UX0dFTkVSSUMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT09ICcvYS9iJzsgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxudmFyIElOQ09SUkVDVF9OQU1FID0gUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgbmF0aXZlVG9TdHJpbmcubmFtZSAhPT0gVE9fU1RSSU5HO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbmlmIChOT1RfR0VORVJJQyB8fCBJTkNPUlJFQ1RfTkFNRSkge1xuICBkZWZpbmVCdWlsdEluKFJlZ0V4cFByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwYXR0ZXJuID0gJHRvU3RyaW5nKFIuc291cmNlKTtcbiAgICB2YXIgZmxhZ3MgPSAkdG9TdHJpbmcoZ2V0UmVnRXhwRmxhZ3MoUikpO1xuICAgIHJldHVybiAnLycgKyBwYXR0ZXJuICsgJy8nICsgZmxhZ3M7XG4gIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwgImNvbnN0IENMQVNTX05BTUU6IHN0cmluZyA9ICdnYWRnZXQtc2Nyb2xsX3VwX2J1dHRvbic7XG5jb25zdCBDTEFTU19OQU1FX0RPV046IHN0cmluZyA9IGAke0NMQVNTX05BTUV9LWRvd25gO1xuY29uc3QgQ0xBU1NfTkFNRV9VUDogc3RyaW5nID0gYCR7Q0xBU1NfTkFNRX0tdXBgO1xuXG5leHBvcnQge0NMQVNTX05BTUUsIENMQVNTX05BTUVfRE9XTiwgQ0xBU1NfTkFNRV9VUH07XG4iLCAiaW1wb3J0IHtDTEFTU19OQU1FLCBDTEFTU19OQU1FX0RPV04sIENMQVNTX05BTUVfVVB9IGZyb20gJy4uL21vZHVsZXMvY29uc3RhbnQnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ2V4dC5nYWRnZXQuSlNYJztcbmltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi4vbW9kdWxlcy9pMThuJztcblxuY29uc3Qgc2Nyb2xsVG9wID0gKFxuXHR0YXJnZXRIZWlnaHQ6IG51bWJlciB8IHN0cmluZyxcblx0ZWZmZWN0c09wdGlvbnNPckR1cmF0aW9uPzogSlF1ZXJ5LkVmZmVjdHNPcHRpb25zPEhUTUxFbGVtZW50PiB8IG51bWJlciB8ICdmYXN0JyB8ICdzbG93J1xuKTogdm9pZCA9PiB7XG5cdGNvbnN0IG9wdGlvbnM6IEpRdWVyeS5FZmZlY3RzT3B0aW9uczxIVE1MRWxlbWVudD4gPVxuXHRcdHR5cGVvZiBlZmZlY3RzT3B0aW9uc09yRHVyYXRpb24gPT09ICdudW1iZXInIHx8IHR5cGVvZiBlZmZlY3RzT3B0aW9uc09yRHVyYXRpb24gPT09ICdzdHJpbmcnXG5cdFx0XHQ/IHtcblx0XHRcdFx0XHRkdXJhdGlvbjogZWZmZWN0c09wdGlvbnNPckR1cmF0aW9uLFxuXHRcdFx0XHRcdGVhc2luZzogJ2xpbmVhcicsXG5cdFx0XHRcdH1cblx0XHRcdDoge1xuXHRcdFx0XHRcdGR1cmF0aW9uOiAnc2xvdycsXG5cdFx0XHRcdFx0ZWFzaW5nOiAnbGluZWFyJyxcblx0XHRcdFx0XHQuLi5lZmZlY3RzT3B0aW9uc09yRHVyYXRpb24sXG5cdFx0XHRcdH07XG5cdCQoZG9jdW1lbnQpLmZpbmQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKFxuXHRcdHtcblx0XHRcdHNjcm9sbFRvcDogdGFyZ2V0SGVpZ2h0LFxuXHRcdH0sXG5cdFx0b3B0aW9uc1xuXHQpO1xufTtcblxuaW50ZXJmYWNlIFByb3BzIHtcblx0YWRkaXRpb25hbENsYXNzTmFtZTogc3RyaW5nO1xuXHRhbHQ6IHN0cmluZztcblx0YXJpYUxhYmVsOiBzdHJpbmc7XG5cdG9uQ2xpY2s6IChldmVudD86IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG5cdG9uTW91c2VFbnRlcjogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuXHRvbk1vdXNlTGVhdmU6IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gU2Nyb2xsQnV0dG9uKHByb3BzOiBQcm9wcykge1xuXHRjb25zdCB7YWRkaXRpb25hbENsYXNzTmFtZSwgYWx0LCBhcmlhTGFiZWwsIG9uQ2xpY2ssIG9uTW91c2VFbnRlciwgb25Nb3VzZUxlYXZlfSA9IHByb3BzO1xuXG5cdHJldHVybiAoXG5cdFx0PGltZ1xuXHRcdFx0Y2xhc3NOYW1lPXtbQ0xBU1NfTkFNRSwgYWRkaXRpb25hbENsYXNzTmFtZSwgJ25vcHJpbnQnXX1cblx0XHRcdHNyYz17XCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzEnIGhlaWdodD0nMSclM0UlM0Mvc3ZnJTNFXCJ9XG5cdFx0XHR3aWR0aD1cIjMyXCJcblx0XHRcdGhlaWdodD1cIjMyXCJcblx0XHRcdGRyYWdnYWJsZT17ZmFsc2V9XG5cdFx0XHRhbHQ9e2FsdH1cblx0XHRcdGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cblx0XHRcdG9uQ2xpY2s9e29uQ2xpY2t9XG5cdFx0XHRvbk1vdXNlRW50ZXI9e29uTW91c2VFbnRlcn1cblx0XHRcdG9uTW91c2VMZWF2ZT17b25Nb3VzZUxlYXZlfVxuXHRcdC8+XG5cdCk7XG59XG5cbmNvbnN0IFRPX0JPVFRPTTogc3RyaW5nID0gZ2V0TWVzc2FnZSgnVG9Cb3R0b20nKTtcbmNvbnN0IFRPX1RPUDogc3RyaW5nID0gZ2V0TWVzc2FnZSgnVG9Ub3AnKTtcblxuY29uc3QgU2Nyb2xsRG93bkJ1dHRvbiA9IChvbk1vdXNlRW50ZXJNb3VzZUxlYXZlOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQpID0+IChcblx0PFNjcm9sbEJ1dHRvblxuXHRcdGFkZGl0aW9uYWxDbGFzc05hbWU9e0NMQVNTX05BTUVfRE9XTn1cblx0XHRhbHQ9e1RPX0JPVFRPTX1cblx0XHRhcmlhTGFiZWw9e1RPX0JPVFRPTX1cblx0XHRvbkNsaWNrPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRzY3JvbGxUb3AoKCQoZG9jdW1lbnQpLmhlaWdodCgpID8/IDApIC0gKCQod2luZG93KS5oZWlnaHQoKSA/PyAwKSk7XG5cdFx0fX1cblx0XHRvbk1vdXNlRW50ZXI9e29uTW91c2VFbnRlck1vdXNlTGVhdmV9XG5cdFx0b25Nb3VzZUxlYXZlPXtvbk1vdXNlRW50ZXJNb3VzZUxlYXZlfVxuXHQvPlxuKTtcblxuY29uc3QgU2Nyb2xsVXBCdXR0b24gPSAob25Nb3VzZUVudGVyTW91c2VMZWF2ZTogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkKSA9PiAoXG5cdDxTY3JvbGxCdXR0b25cblx0XHRhZGRpdGlvbmFsQ2xhc3NOYW1lPXtDTEFTU19OQU1FX1VQfVxuXHRcdGFsdD17VE9fVE9QfVxuXHRcdGFyaWFMYWJlbD17VE9fVE9QfVxuXHRcdG9uQ2xpY2s9eygpOiB2b2lkID0+IHtcblx0XHRcdHNjcm9sbFRvcCgwKTtcblx0XHR9fVxuXHRcdG9uTW91c2VFbnRlcj17b25Nb3VzZUVudGVyTW91c2VMZWF2ZX1cblx0XHRvbk1vdXNlTGVhdmU9e29uTW91c2VFbnRlck1vdXNlTGVhdmV9XG5cdC8+XG4pO1xuXG5leHBvcnQge1Njcm9sbERvd25CdXR0b24sIFNjcm9sbFVwQnV0dG9ufTtcbiIsICJpbXBvcnQge2xvY2FsaXplfSBmcm9tICdleHQuZ2FkZ2V0LmkxOG4nO1xuXG5jb25zdCBnZXRJMThuTWVzc2FnZXMgPSAoKSA9PiB7XG5cdHJldHVybiB7XG5cdFx0VG9Cb3R0b206IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnU2Nyb2xsIHRvIHRoZSBib3R0b20nLFxuXHRcdFx0J3poLWhhbnMnOiAn5rua5Yqo6Iez6aG15bqVJyxcblx0XHRcdCd6aC1oYW50JzogJ+a7vuWLleiHs+mggeW6lScsXG5cdFx0fSksXG5cdFx0VG9Ub3A6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnR28gYmFjayB0byB0aGUgdG9wJyxcblx0XHRcdCd6aC1oYW5zJzogJ+a7muWKqOiHs+mhtemhticsXG5cdFx0XHQnemgtaGFudCc6ICfmu77li5Xoh7PpoIHpoIInLFxuXHRcdH0pLFxuXHR9O1xufTtcblxuY29uc3QgaTE4bk1lc3NhZ2VzID0gZ2V0STE4bk1lc3NhZ2VzKCk7XG5cbmNvbnN0IGdldE1lc3NhZ2U6IEdldE1lc3NhZ2VzPHR5cGVvZiBpMThuTWVzc2FnZXM+ID0gKGtleSkgPT4ge1xuXHRyZXR1cm4gaTE4bk1lc3NhZ2VzW2tleV0gfHwga2V5O1xufTtcblxuZXhwb3J0IHtnZXRNZXNzYWdlfTtcbiIsICJpbXBvcnQge1Njcm9sbERvd25CdXR0b24sIFNjcm9sbFVwQnV0dG9ufSBmcm9tICcuLi9jb21wb25lbnRzL3Njcm9sbEJ1dHRvbic7XG5pbXBvcnQge3RpcHB5fSBmcm9tICdleHQuZ2FkZ2V0LlRpcHB5JztcblxuY29uc3QgY2hhbmdlT3BhY2l0eVdoZW5Nb3VzZUVudGVyT3JMZWF2ZSA9IChldmVudDogTW91c2VFdmVudCwgb3BhY2l0eSA9IDAuNyk6IHZvaWQgPT4ge1xuXHQoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkuc3R5bGUub3BhY2l0eSA9IGV2ZW50LnR5cGUgPT09ICdtb3VzZWVudGVyJyA/ICcxJyA6IG9wYWNpdHkudG9TdHJpbmcoKTtcbn07XG5cbmNvbnN0IGluc2VydEVsZW1lbnRhbmRMaXN0ZW5lciA9ICgkYm9keTogSlF1ZXJ5PEhUTUxCb2R5RWxlbWVudD4pOiB2b2lkID0+IHtcblx0Y29uc3Qgb25Nb3VzZUVudGVyTW91c2VMZWF2ZSA9IChldmVudDogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuXHRcdGNoYW5nZU9wYWNpdHlXaGVuTW91c2VFbnRlck9yTGVhdmUoZXZlbnQpO1xuXHR9O1xuXG5cdGNvbnN0IHNjcm9sbERvd25CdXR0b24gPSBTY3JvbGxEb3duQnV0dG9uKG9uTW91c2VFbnRlck1vdXNlTGVhdmUpO1xuXHRjb25zdCBzY3JvbGxVcEJ1dHRvbiA9IFNjcm9sbFVwQnV0dG9uKG9uTW91c2VFbnRlck1vdXNlTGVhdmUpO1xuXG5cdGZvciAoY29uc3QgZWxlbWVudCBvZiBbc2Nyb2xsRG93bkJ1dHRvbiwgc2Nyb2xsVXBCdXR0b25dKSB7XG5cdFx0JGJvZHkuYXBwZW5kKGVsZW1lbnQpO1xuXG5cdFx0dGlwcHkoZWxlbWVudCwge1xuXHRcdFx0YXJyb3c6IHRydWUsXG5cdFx0XHRjb250ZW50OiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnYWx0JykgYXMgc3RyaW5nLFxuXHRcdFx0cGxhY2VtZW50OiAnbGVmdCcsXG5cdFx0fSk7XG5cdH1cblxuXHRjb25zdCBzY3JvbGxMaXN0ZW5lciA9ICgpOiB2b2lkID0+IHtcblx0XHRsZXQgZG93bkJ1dHRvbkJ1dHRvbTogc3RyaW5nO1xuXHRcdGxldCB1cEJ1dHRvbkJ1dHRvbTogc3RyaW5nO1xuXG5cdFx0aWYgKFxuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Byb3ZlaXQnKSB8fFxuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmdhZGdldC1jYXRfYV9sb3QtY29udGFpbmVyJykgfHxcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNnYWRnZXQtd29yZF9jb3VudC10aXAnKVxuXHRcdCkge1xuXHRcdFx0ZG93bkJ1dHRvbkJ1dHRvbSA9ICc4NXB4Jztcblx0XHRcdHVwQnV0dG9uQnV0dG9tID0gJzEyN3B4Jztcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZG93bkJ1dHRvbkJ1dHRvbSA9ICc0NXB4Jztcblx0XHRcdHVwQnV0dG9uQnV0dG9tID0gJzg1cHgnO1xuXHRcdH1cblxuXHRcdHNjcm9sbERvd25CdXR0b24uc3R5bGUuYm90dG9tID0gZG93bkJ1dHRvbkJ1dHRvbTtcblx0XHRzY3JvbGxVcEJ1dHRvbi5zdHlsZS5ib3R0b20gPSB1cEJ1dHRvbkJ1dHRvbTtcblx0fTtcblx0Y29uc3Qgc2Nyb2xsTGlzdGVuZXJXaXRoVGhyb3R0bGU6IHR5cGVvZiBzY3JvbGxMaXN0ZW5lciA9IG13LnV0aWwudGhyb3R0bGUoc2Nyb2xsTGlzdGVuZXIsIDIwMCk7XG5cblx0JCh3aW5kb3cpLm9uKCdzY3JvbGwgc2VsZWN0aW9uY2hhbmdlJywgc2Nyb2xsTGlzdGVuZXJXaXRoVGhyb3R0bGUpO1xufTtcblxuZXhwb3J0IHtpbnNlcnRFbGVtZW50YW5kTGlzdGVuZXJ9O1xuIiwgImltcG9ydCB7aW5zZXJ0RWxlbWVudGFuZExpc3RlbmVyfSBmcm9tICcuL21vZHVsZXMvaW5zZXJ0RWxlbWVudEFuZExpc3RlbmVyJztcblxudm9pZCAkLnJlYWR5LnRoZW4oZnVuY3Rpb24gc2Nyb2xsVXBCdXR0b24oKTogdm9pZCB7XG5cdGluc2VydEVsZW1lbnRhbmRMaXN0ZW5lcigkKCdib2R5JykpO1xufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNkZBQUFBLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBQUEsSUFDbkM7QUFHQSxJQUFBQSxRQUFPO0FBQUEsSUFFTCxNQUFNLE9BQU8sY0FBYyxZQUFZLFVBQVUsS0FDakQsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNO0FBQUEsSUFFekMsTUFBTSxPQUFPLFFBQVEsWUFBWSxJQUFJLEtBQ3JDLE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTSxLQUN6QyxNQUFNLE9BQU8sV0FBUSxZQUFZLE9BQUk7QUFBQSxJQUVwQywyQkFBWTtBQUFFLGFBQU87QUFBQSxJQUFNLEVBQUcsS0FBSyxTQUFTLGFBQWEsRUFBRTtBQUFBO0FBQUE7OztBQ2Y5RDtBQUFBLHVGQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUk7QUFDRixlQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsTUFDaEIsU0FBUyxPQUFPO0FB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RSxJQUFHLENBQUM7QUFBRSxvQkFBSSxJQUFFLENBQUM7QUFBRSxvQkFBRyxNQUFJLEVBQUUsS0FBRUQ7QUFBQSxvQkFBTyxVQUFRLElBQUUsS0FBSyxLQUFLLENBQUMsR0FBRSxJQUFFLElBQUUsS0FBSyxJQUFJRSxLQUFFLENBQUMsSUFBRSxLQUFLLEtBQUssSUFBRSxJQUFFLENBQUMsR0FBRSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUksR0FBRSxLQUFLRixHQUFFLENBQUMsS0FBRyxLQUFLLElBQUlFLEtBQUUsQ0FBQyxJQUFFLElBQUUsS0FBR0UsR0FBRSxDQUFDLElBQUUsQ0FBQztBQUFFLHVCQUFPO0FBQUEsY0FBQztBQUFDLGtCQUFJLElBQUUsMkJBQVU7QUFBQyx5QkFBU0wsR0FBRUEsSUFBRUMsSUFBRTtBQUFDLDJCQUFRQyxLQUFFLENBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLENBQUMsR0FBRUcsS0FBRSxHQUFFQSxLQUFFLEdBQUVBLEtBQUksVUFBUUYsS0FBRSxHQUFFQSxLQUFFLEdBQUVBLEtBQUksVUFBUSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUksQ0FBQUQsR0FBRUcsRUFBQyxFQUFFRixFQUFDLEtBQUdGLEdBQUVJLEVBQUMsRUFBRSxDQUFDLElBQUVMLEdBQUUsQ0FBQyxFQUFFRyxFQUFDO0FBQUUseUJBQU9EO0FBQUEsZ0JBQUM7QUFBQyx5QkFBU0QsR0FBRUQsSUFBRTtBQUFDLHlCQUFPLEtBQUdBLEdBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxLQUFHQSxHQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsS0FBR0EsR0FBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLEtBQUdBLEdBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxLQUFHQSxHQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsS0FBR0EsR0FBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLEtBQUdBLEdBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxLQUFHQSxHQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsS0FBR0EsR0FBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLEtBQUdBLEdBQUUsQ0FBQyxFQUFFLENBQUM7QUFBQSxnQkFBQztBQUFDLHlCQUFTRSxHQUFFQSxJQUFFRyxJQUFFRixJQUFFLEdBQUUsR0FBRTtBQUFDLDJCQUFRLElBQUUsQ0FBQyxDQUFDLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLENBQUMsQ0FBQyxHQUFFLElBQUUsR0FBRSxJQUFFLEdBQUUsSUFBSSxHQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDO0FBQUUsMkJBQVEsSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFJLFVBQVEsSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFJLEdBQUUsQ0FBQyxFQUFFLENBQUMsS0FBR0QsR0FBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUFFLHNCQUFJLElBQUUsRUFBRSxDQUFDLEdBQUUsSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxDQUFDLEdBQUUsSUFBRSxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxDQUFDO0FBQUUsb0JBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxJQUFFLEtBQUcsSUFBRSxJQUFFLElBQUUsSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsS0FBRyxJQUFFLElBQUUsSUFBRSxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxLQUFHLElBQUUsSUFBRSxJQUFFLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEtBQUcsSUFBRSxJQUFFLElBQUUsSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsSUFBRSxLQUFHLElBQUUsSUFBRSxJQUFFLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEtBQUcsSUFBRSxJQUFFLElBQUUsSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsS0FBRyxJQUFFLElBQUUsSUFBRSxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxLQUFHLElBQUUsSUFBRSxJQUFFLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLElBQUUsS0FBRyxJQUFFLElBQUUsSUFBRSxJQUFHLElBQUVGLEdBQUUsR0FBRSxDQUFDO0FBQUUsc0JBQUksSUFBRSxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxDQUFDO0FBQUUsa0JBQUFHLEdBQUUsQ0FBQyxNQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRUEsR0FBRSxDQUFDLEdBQUUsSUFBRUgsR0FBRSxHQUFFLENBQUMsSUFBR0csR0FBRSxDQUFDLE1BQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEdBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFQSxHQUFFLENBQUMsR0FBRSxJQUFFSCxHQUFFLEdBQUUsQ0FBQyxJQUFHRyxHQUFFLENBQUMsTUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsR0FBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUVBLEdBQUUsQ0FBQyxHQUFFLElBQUVILEdBQUUsR0FBRSxDQUFDO0FBQUcsMkJBQVEsSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFJLFVBQVEsSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFJLEdBQUUsQ0FBQyxFQUFFLENBQUMsS0FBR0ssR0FBRSxDQUFDO0FBQUUseUJBQU9K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Q0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsQ0FBQyxHQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxDQUFDLEdBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLENBQUMsR0FBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsQ0FBQyxHQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxDQUFDLEdBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLENBQUMsR0FBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsQ0FBQyxHQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxDQUFDLEdBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxFQUFFLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLEVBQUUsR0FBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLEVBQUUsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsRUFBRSxHQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsRUFBRSxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxFQUFFLEdBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxFQUFFLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLEVBQUUsR0FBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsRUFBRSxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxFQUFFLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLEVBQUUsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsRUFBRSxHQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxFQUFFLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLEVBQUUsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsRUFBRSxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxFQUFFLEdBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLEVBQUUsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsRUFBRSxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxFQUFFLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLEVBQUUsR0FBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsRUFBRSxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxFQUFFLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLEVBQUUsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsRUFBRSxDQUFDO0FBQUEsY0FBQztBQUFDLHVCQUFTLEVBQUVELElBQUU7QUFBQyxvQkFBSUMsS0FBRUQsR0FBRSxPQUFLO0FBQUUseUJBQVFBLEdBQUUsT0FBSyxLQUFHLE9BQUtBLEdBQUUsUUFBTSxLQUFHLE9BQUtBLEdBQUUsUUFBTSxPQUFLLElBQUUsS0FBSyxNQUFJQztBQUFBLGNBQUM7QUFBQyx1QkFBUyxFQUFFRCxJQUFFO0FBQUMsd0JBQU9BLEdBQUUsR0FBRTtBQUFBLGtCQUFDLEtBQUk7QUFBVSx3QkFBSUMsS0FBRSxFQUFFRCxHQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUUsMkJBQU0sQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsS0FBSyxJQUFJQyxFQUFDLEdBQUUsS0FBSyxJQUFJQSxFQUFDLEdBQUUsR0FBRSxHQUFFLENBQUMsS0FBSyxJQUFJQSxFQUFDLEdBQUUsS0FBSyxJQUFJQSxFQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFVLHdCQUFJQSxLQUFFLEVBQUVELEdBQUUsRUFBRSxDQUFDLENBQUM7QUFBRSwyQkFBTSxDQUFDLEtBQUssSUFBSUMsRUFBQyxHQUFFLEdBQUUsQ0FBQyxLQUFLLElBQUlBLEVBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsS0FBSyxJQUFJQSxFQUFDLEdBQUUsR0FBRSxLQUFLLElBQUlBLEVBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQUEsa0JBQVMsS0FBSTtBQUFVLHdCQUFJQSxLQUFFLEVBQUVELEdBQUUsRUFBRSxDQUFDLENBQUM7QUFBRSwyQkFBTSxDQUFDLEtBQUssSUFBSUMsRUFBQyxHQUFFLEtBQUssSUFBSUEsRUFBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLEtBQUssSUFBSUEsRUFBQyxHQUFFLEtBQUssSUFBSUEsRUFBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQVcsd0JBQUlDLEtBQUVGLEdBQUUsRUFBRSxDQUFDLEdBQUVLLEtBQUVMLEdBQUUsRUFBRSxDQUFDLEdBQUVJLEtBQUVKLEdBQUUsRUFBRSxDQUFDLEdBQUVDLEtBQUUsRUFBRUQsR0FBRSxFQUFFLENBQUMsQ0FBQyxHQUFFTSxLQUFFSixLQUFFQSxLQUFFRyxLQUFFQSxLQUFFRCxLQUFFQTtBQUFFLHdCQUFHLE1BQUlFLEdBQUUsQ0FBQUosS0FBRSxHQUFFRyxLQUFFLEdBQUVELEtBQUU7QUFBQSw2QkFBVSxNQUFJRSxJQUFFO0FBQUMsMEJBQUlDLEtBQUUsS0FBSyxLQUFLRCxFQUFDO0FBQUUsc0JBQUFKLE1BQUdLLElBQUVGLE1BQUdFLElBQUVILE1BQUdHO0FBQUEsb0JBQUM7QUFBQyx3QkFBSUMsS0FBRSxLQUFLLElBQUlQLEtBQUUsQ0FBQyxHQUFFLElBQUVPLEtBQUUsS0FBSyxJQUFJUCxLQUFFLENBQUMsR0FBRSxJQUFFTyxLQUFFQTtBQUFFLDJCQUFNLENBQUMsSUFBRSxLQUFHSCxLQUFFQSxLQUFFRCxLQUFFQSxNQUFHLEdBQUUsS0FBR0YsS0FBRUcsS0FBRSxJQUFFRCxLQUFFLElBQUcsS0FBR0YsS0FBRUUsS0FBRSxJQUFFQyxLQUFFLElBQUcsR0FBRSxLQUFHSCxLQUFFRyxLQUFFLElBQUVELEtBQUUsSUFBRyxJQUFFLEtBQUdGLEtBQUVBLEtBQUVFLEtBQUVBLE1BQUcsR0FBRSxLQUFHQyxLQUFFRCxLQUFFLElBQUVGLEtBQUUsSUFBRyxHQUFFLEtBQUdBLEtBQUVFLEtBQUUsSUFBRUMsS0FBRSxJQUFHLEtBQUdBLEtBQUVELEtBQUUsSUFBRUYsS0FBRSxJQUFHLElBQUUsS0FBR0EsS0FBRUEsS0FBRUcsS0FBRUEsTUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLGtCQUFFLEtBQUk7QUFBUSwyQkFBTSxDQUFDTCxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUVBLEdBQUUsRUFBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLGtCQUFFLEtBQUk7QUFBUywyQkFBTSxDQUFDQSxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFTLDJCQUFNLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFQSxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQVMsMkJBQU0sQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFQSxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLGtCQUFFLEtBQUk7QUFBVSwyQkFBTSxDQUFDQSxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUVBLEdBQUUsRUFBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRUEsR0FBRSxFQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQU8sd0JBQUksSUFBRSxFQUFFQSxHQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUUsSUFBRSxFQUFFQSxHQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUUsMkJBQU0sQ0FBQyxHQUFFLEtBQUssSUFBSSxDQUFDLEdBQUUsR0FBRSxHQUFFLEtBQUssSUFBSSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFRLHdCQUFJQyxLQUFFLEVBQUVELEdBQUUsRUFBRSxDQUFDLENBQUM7QUFBRSwyQkFBTSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsS0FBSyxJQUFJQyxFQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFRLHdCQUFJQSxLQUFFLEVBQUVELEdBQUUsRUFBRSxDQUFDLENBQUM7QUFBRSwyQkFBTSxDQUFDLEdBQUUsS0FBSyxJQUFJQyxFQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFZLHdCQUFJQyxLQUFFRixHQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQUksR0FBRUssS0FBRUwsR0FBRSxFQUFFLENBQUMsRUFBRSxNQUFJO0FBQUUsMkJBQU0sQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRUUsSUFBRUcsSUFBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQWEsd0JBQUlILEtBQUVGLEdBQUUsRUFBRSxDQUFDLEVBQUUsTUFBSTtBQUFFLDJCQUFNLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUVFLElBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQWEsd0JBQUlHLEtBQUVMLEdBQUUsRUFBRSxDQUFDLEVBQUUsTUFBSTtBQUFFLDJCQUFNLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRUssSUFBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQWEsd0JBQUlELEtBQUVKLEdBQUUsRUFBRSxDQUFDLEVBQUUsTUFBSTtBQUFFLDJCQUFNLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFSSxJQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQWMsd0JBQUlGLEtBQUVGLEdBQUUsRUFBRSxDQUFDLEVBQUUsTUFBSSxHQUFFSyxLQUFFTCxHQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQUksR0FBRUksS0FBRUosR0FBRSxFQUFFLENBQUMsRUFBRSxNQUFJO0FBQUUsMkJBQU0sQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRUUsSUFBRUcsSUFBRUQsSUFBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFjLDJCQUFNLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFSixHQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUcsS0FBR0EsR0FBRSxFQUFFLENBQUMsRUFBRSxLQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLGtCQUFFLEtBQUk7QUFBUywyQkFBTSxDQUFDQSxHQUFFLEVBQUUsQ0FBQyxHQUFFQSxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRUEsR0FBRSxFQUFFLENBQUMsR0FBRUEsR0FBRSxFQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRUEsR0FBRSxFQUFFLENBQUMsR0FBRUEsR0FBRSxFQUFFLENBQUMsR0FBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQVcsMkJBQU9BLEdBQUU7QUFBQSxnQkFBQztBQUFBLGNBQUM7QUFBQyx1QkFBUyxFQUFFQSxJQUFFO0FBQUMsdUJBQU8sTUFBSUEsR0FBRSxTQUFPLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxJQUFFQSxHQUFFLElBQUksQ0FBQyxFQUFFLE9BQU9LLEVBQUM7QUFBQSxjQUFDO0FBQUMsdUJBQVMsRUFBRUwsSUFBRTtBQUFDLHVCQUFNLENBQUMsRUFBRSxFQUFFQSxFQUFDLENBQUMsQ0FBQztBQUFBLGNBQUM7QUFBQyxrQkFBSSxJQUFFLDJCQUFVO0FBQUMseUJBQVNBLEdBQUVBLElBQUU7QUFBQyx5QkFBT0EsR0FBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFQSxHQUFFLENBQUMsRUFBRSxDQUFDLElBQUVBLEdBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRUEsR0FBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFQSxHQUFFLENBQUMsRUFBRSxDQUFDLElBQUVBLEdBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRUEsR0FBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFQSxHQUFFLENBQUMsRUFBRSxDQUFDLElBQUVBLEdBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRUEsR0FBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFQSxHQUFFLENBQUMsRUFBRSxDQUFDLElBQUVBLEdBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRUEsR0FBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFQSxHQUFFLENBQUMsRUFBRSxDQUFDLElBQUVBLEdBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRUEsR0FBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFQSxHQUFFLENBQUMsRUFBRSxDQUFDLElBQUVBLEdBQUUsQ0FBQyxFQUFFLENBQUM7QUFBQSxnQkFBQztBQUFDLHlCQUFTQyxHQUFFQSxJQUFFO0FBQUMsMkJBQVFDLEtBQUUsSUFBRUYsR0FBRUMsRUFBQyxHQUFFSSxLQUFFSixHQUFFLENBQUMsRUFBRSxDQUFDLEdBQUVFLEtBQUVGLEdBQUUsQ0FBQyxFQUFFLENBQUMsR0FB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QUMsS0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRSxJQUFFRyxHQUFFLEdBQUVFLEdBQUVKLEdBQUUsQ0FBQyxDQUFDLENBQUMsS0FBRyxJQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFFLHNCQUFJLElBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFFLENBQUMsR0FBRSxJQUFFLENBQUM7QUFBRSxvQkFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRSxDQUFDLENBQUM7QUFBRSxzQkFBSSxJQUFFLENBQUM7QUFBRSxvQkFBRSxLQUFLSyxHQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRSxFQUFFLENBQUMsSUFBRUYsR0FBRSxFQUFFLENBQUMsQ0FBQztBQUFFLHNCQUFJLElBQUUsQ0FBQztBQUFFLG9CQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFFLENBQUMsQ0FBQyxHQUFFLEVBQUUsS0FBS0YsR0FBRSxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUUsRUFBRSxDQUFDLElBQUVLLEdBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRSxDQUFDLEdBQUUsR0FBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBRSxLQUFLRCxHQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRSxFQUFFLENBQUMsSUFBRUYsR0FBRSxFQUFFLENBQUMsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxLQUFHLEVBQUUsQ0FBQyxHQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEdBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBRSxLQUFLRixHQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRSxFQUFFLENBQUMsSUFBRUssR0FBRSxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsR0FBRSxHQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRSxFQUFFLEtBQUtMLEdBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxJQUFFSyxHQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLEVBQUUsS0FBS0QsR0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUUsRUFBRSxDQUFDLElBQUVGLEdBQUUsRUFBRSxDQUFDLENBQUMsR0FBRSxFQUFFLENBQUMsS0FBRyxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsS0FBRyxFQUFFLENBQUM7QUFBRSxzQkFBSSxJQUFFSSxHQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUUsc0JBQUdOLEdBQUUsRUFBRSxDQUFDLEdBQUUsQ0FBQyxJQUFFLEVBQUUsVUFBUSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUksR0FBRSxDQUFDLEtBQUcsSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUc7QUFBRyxzQkFBSSxHQUFFLEdBQUUsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRTtBQUFFLHlCQUFPLElBQUUsUUFBTSxJQUFFLE1BQUcsS0FBSyxLQUFLLENBQUMsR0FBRSxJQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLEdBQUUsT0FBSSxDQUFDLEtBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLElBQUUsSUFBRSxLQUFLLEtBQUssSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLElBQUUsQ0FBQyxPQUFJLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLENBQUMsS0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLElBQUUsSUFBRSxLQUFLLEtBQUssSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLElBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLEdBQUUsT0FBSSxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLENBQUMsTUFBSSxJQUFFLElBQUUsS0FBSyxLQUFLLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMs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QyxPQUFLO0FBQUMsd0JBQUcsS0FBRyxFQUFFLENBQUFLLEtBQUU7QUFBQSw2QkFBVSxFQUFFLENBQUMsS0FBRyxFQUFFLENBQUMsS0FBRyxFQUFFLENBQUMsS0FBRyxFQUFFLENBQUMsRUFBRSxDQUFBQSxLQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUFBLHlCQUFNO0FBQUMsMEJBQUcsQ0FBQyxFQUFFLENBQUMsS0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFHLEVBQUUsQ0FBQyxLQUFHLEVBQUUsQ0FBQyxHQUFFO0FBQUMsNEJBQUcsQ0FBQ0osR0FBRTtBQUFPLDRCQUFJLElBQUUsRUFBRUosSUFBRUMsRUFBQztBQUFFLDRCQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRSxJQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRSxJQUFFLENBQUMsQ0FBQyxVQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQUU7QUFBQSxzQkFBSztBQUFDLHNCQUFBTyxLQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUFBLG9CQUFDO0FBQUMsNkJBQVEsSUFBRSxDQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUUsSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPLEtBQUk7QUFBQywwQkFBSSxJQUFFLFlBQVUsT0FBTyxFQUFFLENBQUMsSUFBRVQsR0FBRSxlQUFhQSxHQUFFLGlCQUFnQixJQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRSxDQUFDLENBQUM7QUFBRSx3QkFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQUEsb0JBQUM7QUFBQyxzQkFBRSxLQUFLLENBQUMsR0FBRSxFQUFFLEtBQUssQ0FBQyxHQUFFLEVBQUUsS0FBSyxDQUFDUyxJQUFFLENBQUMsQ0FBQztBQUFBLGtCQUFDO0FBQUEsZ0JBQUM7QUFBQyxvQkFBR04sSUFBRTtBQUFDLHNCQUFJLElBQUU7QUFBRSxzQkFBRSxHQUFFLElBQUU7QUFBQSxnQkFBQztBQUFDLHVCQUFNLENBQUMsR0FBRSxHQUFFLFNBQVNILElBQUU7QUFBQyx5QkFBT0EsR0FBRSxJQUFJLFNBQVNBLElBQUVDLElBQUU7QUFBQyx3QkFBSUMsS0FBRUYsR0FBRSxJQUFJLFNBQVNBLElBQUVFLElBQUU7QUFBQyw2QkFBTyxFQUFFRCxFQUFDLEVBQUUsQ0FBQyxFQUFFQyxFQUFDLEVBQUVGLEVBQUM7QUFBQSxvQkFBQyxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQUUsMkJBQU0sWUFBVSxFQUFFQyxFQUFDLEVBQUUsQ0FBQyxLQUFHLE1BQUlDLEdBQUUsTUFBTSxHQUFHLEVBQUUsV0FBUyxFQUFFRCxFQUFDLEVBQUUsQ0FBQyxJQUFFLGFBQVksRUFBRUEsRUFBQyxFQUFFLENBQUMsSUFBRSxNQUFJQyxLQUFFO0FBQUEsa0JBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUFBLGdCQUFDLENBQUM7QUFBQSxjQUFDO0FBQUMsa0JBQUksSUFBRSxNQUFLLElBQUUsRUFBQyxJQUFHLEVBQUMsR0FBRSxJQUFFLEVBQUMsS0FBSSxFQUFDLEdBQUUsSUFBRSxFQUFDLFFBQU8sQ0FBQyxVQUFTLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFRyxFQUFDLEdBQUUsVUFBUyxDQUFDLG9CQUFtQkEsRUFBQyxHQUFFLFFBQU8sQ0FBQyxHQUFHLEdBQUUsU0FBUSxDQUFDLEdBQUcsR0FBRSxTQUFRLENBQUMsR0FBRyxHQUFFLFNBQVEsQ0FBQyxHQUFHLEdBQUUsVUFBUyxDQUFDLE1BQU0sR0FBRSxhQUFZLENBQUMsR0FBRyxHQUFFLE9BQU0sQ0FBQyxNQUFLSCxHQUFFLENBQUMsR0FBRSxHQUFFLENBQUMsQ0FBQyxHQUFFRyxFQUFDLEdBQUUsUUFBTyxDQUFDLEtBQUlILEdBQUUsQ0FBQyxHQUFFLEdBQUUsQ0FBQyxDQUFDLEdBQUVBLEdBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUUsUUFBTyxDQUFDLEtBQUlBLEdBQUUsQ0FBQyxHQUFFLEdBQUUsQ0FBQyxDQUFDLEdBQUVBLEdBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUUsUUFBTyxDQUFDLEtBQUlBLEdBQUUsQ0FBQyxHQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRSxTQUFRLENBQUMsT0FBTUcsRUFBQyxHQUFFLE1BQUssQ0FBQyxNQUFLLE1BQUtBLEVBQUMsR0FBRSxPQUFNLENBQUMsS0FBSSxNQUFLSCxHQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxHQUFFLE9BQU0sQ0FBQyxLQUFJLE1BQUtBLEdBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUUsV0FBVSxDQUFDLE1BQUtBLEdBQUUsQ0FBQyxHQUFFLEdBQUUsQ0FBQyxDQUFDLEdBQUVHLEVBQUMsR0FBRSxZQUFXLENBQUMsS0FBSUgsR0FBRSxDQUFDLEdBQUUsR0FBRSxDQUFDLENBQUMsR0FBRUEsR0FBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRSxZQUFXLENBQUMsS0FBSUEsR0FBRSxDQUFDLEdBQUUsR0FBRSxDQUFDLENBQUMsR0FBRUEsR0FBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRSxZQUFXLENBQUMsS0FBSUEsR0FBRSxDQUFDLEdBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQyxHQUFFLGFBQVksQ0FBQyxPQUFNRyxFQUFDLEVBQUM7QUFBRSxjQUFBTCxHQUFFLHFCQUFxQixHQUFFLEdBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRUEsR0FBRSx1QkFBcUIsU0FBU0MsSUFBRTtBQUFDLG9CQUFJQyxLQUFFRixHQUFFLHNCQUFzQixFQUFFQyxFQUFDLENBQUM7QUFBRSx1QkFBTSxZQUFVLEVBQUVDLEdB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RywwQkFBMEJKLDBCQUEwQjtBQUNsRTs7QUM3Q0EsS0FBS3hELEVBQUU2RCxNQUFNQyxLQUFLLFNBQVNDLGlCQUF1QjtBQUNqRHpCLDJCQUF5QnRDLEVBQUUsTUFBTSxDQUFDO0FBQ25DLENBQUM7IiwKICAibmFtZXMiOiBbIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZG9jdW1lbnQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJvd25LZXlzIiwgIm1vZHVsZSIsICJvd25LZXlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJhY3RpdmVYRG9jdW1lbnQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIlN5bWJvbCIsICJtb2R1bGUiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAic2VsZiIsICIkIiwgImdsb2JhbFRoaXMiLCAiVHlwZUVycm9yIiwgIlN5bWJvbCIsICJtb2R1bGUiLCAiJCIsICIkIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICIkIiwgIiQiLCAiZ2xvYmFsVGhpcyIsICJTeW1ib2wiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJnbG9iYWxUaGlzIiwgIkVycm9yIiwgIlJlZmVyZW5jZUVycm9yIiwgIlR5cGVFcnJvciIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJOdW1iZXIiLCAiJCIsICIkIiwgIm93bktleXMiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIiQiLCAiJCIsICJtb2R1bGUiLCAidW5kZWZpbmVkIiwgImdsb2JhbCIsICJ1bmRlZmluZWQiLCAiYSIsICJiIiwgImMiLCAiZSIsICJmIiwgImQiLCAiZyIsICJoIiwgImkiLCAiaiIsICJrIiwgImwiLCAibSIsICJ1bmRlZmluZWQiLCAiZ2xvYmFsIiwgIkRvY3VtZW50RnJhZ21lbnQiLCAidW5kZWZpbmVkIiwgImdsb2JhbCIsICJ1bmRlZmluZWQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAiZ2xvYmFsVGhpcyIsICIkIiwgIiQiLCAiJCIsICIkIiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJDTEFTU19OQU1FIiwgIkNMQVNTX05BTUVfRE9XTiIsICJjb25jYXQiLCAiQ0xBU1NfTkFNRV9VUCIsICJpbXBvcnRfZXh0X2dhZGdldDIiLCAiX190b0VTTSIsICJyZXF1aXJlIiwgImltcG9ydF9leHRfZ2FkZ2V0IiwgImdldEkxOG5NZXNzYWdlcyIsICJUb0JvdHRvbSIsICJsb2NhbGl6ZSIsICJlbiIsICJUb1RvcCIsICJpMThuTWVzc2FnZXMiLCAiZ2V0TWVzc2FnZSIsICJrZXkiLCAic2Nyb2xsVG9wIiwgInRhcmdldEhlaWdodCIsICJlZmZlY3RzT3B0aW9uc09yRHVyYXRpb24iLCAib3B0aW9ucyIsICJkdXJhdGlvbiIsICJlYXNpbmciLCAiX29iamVjdFNwcmVhZCIsICIkIiwgImRvY3VtZW50IiwgImZpbmQiLCAiYW5pbWF0ZSIsICJTY3JvbGxCdXR0b24iLCAicHJvcHMiLCAiYWRkaXRpb25hbENsYXNzTmFtZSIsICJhbHQiLCAiYXJpYUxhYmVsIiwgIm9uQ2xpY2siLCAib25Nb3VzZUVudGVyIiwgIm9uTW91c2VMZWF2ZSIsICJkZWZhdWx0IiwgImNyZWF0ZUVsZW1lbnQiLCAiY2xhc3NOYW1lIiwgInNyYyIsICJ3aWR0aCIsICJoZWlnaHQiLCAiZHJhZ2dhYmxlIiwgIlRPX0JPVFRPTSIsICJUT19UT1AiLCAiU2Nyb2xsRG93bkJ1dHRvbiIsICJvbk1vdXNlRW50ZXJNb3VzZUxlYXZlIiwgIl8kJGhlaWdodCIsICJfJCRoZWlnaHQyIiwgIndpbmRvdyIsICJTY3JvbGxVcEJ1dHRvbiIsICJpbXBvcnRfZXh0X2dhZGdldDMiLCAiY2hhbmdlT3BhY2l0eVdoZW5Nb3VzZUVudGVyT3JMZWF2ZSIsICJldmVudCIsICJvcGFjaXR5IiwgImFyZ3VtZW50cyIsICJsZW5ndGgiLCAidW5kZWZpbmVkIiwgImN1cnJlbnRUYXJnZXQiLCAic3R5bGUiLCAidHlwZSIsICJ0b1N0cmluZyIsICJpbnNlcnRFbGVtZW50YW5kTGlzdGVuZXIiLCAiJGJvZHkiLCAic2Nyb2xsRG93bkJ1dHRvbiIsICJzY3JvbGxVcEJ1dHRvbjIiLCAiX2kiLCAiX2FyciIsICJlbGVtZW50IiwgImFwcGVuZCIsICJ0aXBweSIsICJhcnJvdyIsICJjb250ZW50IiwgImdldEF0dHJpYnV0ZSIsICJwbGFjZW1lbnQiLCAic2Nyb2xsTGlzdGVuZXIiLCAiZG93bkJ1dHRvbkJ1dHRvbSIsICJ1cEJ1dHRvbkJ1dHRvbSIsICJxdWVyeVNlbGVjdG9yIiwgImJvdHRvbSIsICJzY3JvbGxMaXN0ZW5lcldpdGhUaHJvdHRsZSIsICJtdyIsICJ1dGlsIiwgInRocm90dGxlIiwgIm9uIiwgInJlYWR5IiwgInRoZW4iLCAic2Nyb2xsVXBCdXR0b24iXQp9Cg==