From 7dbbe244345140c25ecf4c13bdd33b6c2ad312bb Mon Sep 17 00:00:00 2001 From: yvesgurcan Date: Sun, 23 Feb 2020 11:33:01 -0800 Subject: [PATCH 1/3] restore play next song automatically --- example/react/index.html | 2 +- example/react/main.3b4e534021ecd2f7b4b0.js | 1277 ++++++++++++++++++++ example/react/main.dd6d3b44adb0ac3ff77b.js | 53 - example/react/src/components/Player.js | 2 +- 4 files changed, 1279 insertions(+), 55 deletions(-) create mode 100644 example/react/main.3b4e534021ecd2f7b4b0.js delete mode 100644 example/react/main.dd6d3b44adb0ac3ff77b.js diff --git a/example/react/index.html b/example/react/index.html index e3584c9..2170566 100644 --- a/example/react/index.html +++ b/example/react/index.html @@ -5,5 +5,5 @@
- + diff --git a/example/react/main.3b4e534021ecd2f7b4b0.js b/example/react/main.3b4e534021ecd2f7b4b0.js new file mode 100644 index 0000000..8e5e6dd --- /dev/null +++ b/example/react/main.3b4e534021ecd2f7b4b0.js @@ -0,0 +1,1277 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 0); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "../../index.js": +/*!******************************************************!*\ + !*** /Users/owner/Projects/web-midi-player/index.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("!function(g,I){ true?module.exports=I():undefined;}(window,function(){return function(g){var I={};function A(C){if(I[C])return I[C].exports;var i=I[C]={i:C,l:!1,exports:{}};return g[C].call(i.exports,i,i.exports,A),i.l=!0,i.exports;}return A.m=g,A.c=I,A.d=function(g,I,C){A.o(g,I)||Object.defineProperty(g,I,{enumerable:!0,get:C});},A.r=function(g){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(g,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(g,\"__esModule\",{value:!0});},A.t=function(g,I){if(1&I&&(g=A(g)),8&I)return g;if(4&I&&\"object\"==typeof g&&g&&g.__esModule)return g;var C=Object.create(null);if(A.r(C),Object.defineProperty(C,\"default\",{enumerable:!0,value:g}),2&I&&\"string\"!=typeof g)for(var i in g)A.d(C,i,function(I){return g[I];}.bind(null,i));return C;},A.n=function(g){var I=g&&g.__esModule?function(){return g.default;}:function(){return g;};return A.d(I,\"a\",I),I;},A.o=function(g,I){return Object.prototype.hasOwnProperty.call(g,I);},A.p=\"\",A(A.s=11);}([function(module,exports){eval(\"function _defineProperty(obj, key, value) {\\n if (key in obj) {\\n Object.defineProperty(obj, key, {\\n value: value,\\n enumerable: true,\\n configurable: true,\\n writable: true\\n });\\n } else {\\n obj[key] = value;\\n }\\n\\n return obj;\\n}\\n\\nmodule.exports = _defineProperty;//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL3dlYi1taWRpLXBsYXllci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzPzk1MjMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///0\\n\");},function(module,exports,__webpack_require__){eval(\"module.exports = __webpack_require__(7);\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL3dlYi1taWRpLXBsYXllci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcz9hMzRhIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iXSwibWFwcGluZ3MiOiJBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///1\\n\");},function(module,exports){eval('function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\\n try {\\n var info = gen[key](arg);\\n var value = info.value;\\n } catch (error) {\\n reject(error);\\n return;\\n }\\n\\n if (info.done) {\\n resolve(value);\\n } else {\\n Promise.resolve(value).then(_next, _throw);\\n }\\n}\\n\\nfunction _asyncToGenerator(fn) {\\n return function () {\\n var self = this,\\n args = arguments;\\n return new Promise(function (resolve, reject) {\\n var gen = fn.apply(self, args);\\n\\n function _next(value) {\\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\\n }\\n\\n function _throw(err) {\\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\\n }\\n\\n _next(undefined);\\n });\\n };\\n}\\n\\nmodule.exports = _asyncToGenerator;//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL3dlYi1taWRpLXBsYXllci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanM/Yzk3MyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvcjsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///2\\n');},function(module,exports){eval('function _classCallCheck(instance, Constructor) {\\n if (!(instance instanceof Constructor)) {\\n throw new TypeError(\"Cannot call a class as a function\");\\n }\\n}\\n\\nmodule.exports = _classCallCheck;//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL3dlYi1taWRpLXBsYXllci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzPzk3MGIiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///3\\n');},function(module,exports){eval('function _defineProperties(target, props) {\\n for (var i = 0; i < props.length; i++) {\\n var descriptor = props[i];\\n descriptor.enumerable = descriptor.enumerable || false;\\n descriptor.configurable = true;\\n if (\"value\" in descriptor) descriptor.writable = true;\\n Object.defineProperty(target, descriptor.key, descriptor);\\n }\\n}\\n\\nfunction _createClass(Constructor, protoProps, staticProps) {\\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\\n if (staticProps) _defineProperties(Constructor, staticProps);\\n return Constructor;\\n}\\n\\nmodule.exports = _createClass;//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL3dlYi1taWRpLXBsYXllci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzPzViYzMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///4\\n');},function(module,exports){eval('function _typeof(obj) {\\n \"@babel/helpers - typeof\";\\n\\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\\n module.exports = _typeof = function _typeof(obj) {\\n return typeof obj;\\n };\\n } else {\\n module.exports = _typeof = function _typeof(obj) {\\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\\n };\\n }\\n\\n return _typeof(obj);\\n}\\n\\nmodule.exports = _typeof;//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL3dlYi1taWRpLXBsYXllci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcz83MDM3Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///5\\n');},function(module,exports,__webpack_require__){eval(\"var rng = __webpack_require__(8);\\nvar bytesToUuid = __webpack_require__(9);\\n\\nfunction v4(options, buf, offset) {\\n var i = buf && offset || 0;\\n\\n if (typeof(options) == 'string') {\\n buf = options === 'binary' ? new Array(16) : null;\\n options = null;\\n }\\n options = options || {};\\n\\n var rnds = options.random || (options.rng || rng)();\\n\\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\\n\\n // Copy bytes to buffer, if provided\\n if (buf) {\\n for (var ii = 0; ii < 16; ++ii) {\\n buf[i + ii] = rnds[ii];\\n }\\n }\\n\\n return buf || bytesToUuid(rnds);\\n}\\n\\nmodule.exports = v4;\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL3dlYi1taWRpLXBsYXllci8uL25vZGVfbW9kdWxlcy91dWlkL3Y0LmpzP2M2NGUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJuZyA9IHJlcXVpcmUoJy4vbGliL3JuZycpO1xudmFyIGJ5dGVzVG9VdWlkID0gcmVxdWlyZSgnLi9saWIvYnl0ZXNUb1V1aWQnKTtcblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG5cbiAgaWYgKHR5cGVvZihvcHRpb25zKSA9PSAnc3RyaW5nJykge1xuICAgIGJ1ZiA9IG9wdGlvbnMgPT09ICdiaW5hcnknID8gbmV3IEFycmF5KDE2KSA6IG51bGw7XG4gICAgb3B0aW9ucyA9IG51bGw7XG4gIH1cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgcm5nKSgpO1xuXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcbiAgcm5kc1s2XSA9IChybmRzWzZdICYgMHgwZikgfCAweDQwO1xuICBybmRzWzhdID0gKHJuZHNbOF0gJiAweDNmKSB8IDB4ODA7XG5cbiAgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG4gIGlmIChidWYpIHtcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgMTY7ICsraWkpIHtcbiAgICAgIGJ1ZltpICsgaWldID0gcm5kc1tpaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCBieXRlc1RvVXVpZChybmRzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2NDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///6\\n\");},function(module,exports,__webpack_require__){eval('/**\\n * Copyright (c) 2014-present, Facebook, Inc.\\n *\\n * This source code is licensed under the MIT license found in the\\n * LICENSE file in the root directory of this source tree.\\n */\\n\\nvar runtime = (function (exports) {\\n \"use strict\";\\n\\n var Op = Object.prototype;\\n var hasOwn = Op.hasOwnProperty;\\n var undefined; // More compressible than void 0.\\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\\n\\n function wrap(innerFn, outerFn, self, tryLocsList) {\\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\\n var generator = Object.create(protoGenerator.prototype);\\n var context = new Context(tryLocsList || []);\\n\\n // The ._invoke method unifies the implementations of the .next,\\n // .throw, and .return methods.\\n generator._invoke = makeInvokeMethod(innerFn, self, context);\\n\\n return generator;\\n }\\n exports.wrap = wrap;\\n\\n // Try/catch helper to minimize deoptimizations. Returns a completion\\n // record like context.tryEntries[i].completion. This interface could\\n // have been (and was previously) designed to take a closure to be\\n // invoked without arguments, but in all the cases we care about we\\n // already have an existing method we want to call, so there\\'s no need\\n // to create a new function object. We can even get away with assuming\\n // the method takes exactly one argument, since that happens to be true\\n // in every case, so we don\\'t have to touch the arguments object. The\\n // only additional allocation required is the completion record, which\\n // has a stable shape and so hopefully should be cheap to allocate.\\n function tryCatch(fn, obj, arg) {\\n try {\\n return { type: \"normal\", arg: fn.call(obj, arg) };\\n } catch (err) {\\n return { type: \"throw\", arg: err };\\n }\\n }\\n\\n var GenStateSuspendedStart = \"suspendedStart\";\\n var GenStateSuspendedYield = \"suspendedYield\";\\n var GenStateExecuting = \"executing\";\\n var GenStateCompleted = \"completed\";\\n\\n // Returning this object from the innerFn has the same effect as\\n // breaking out of the dispatch switch statement.\\n var ContinueSentinel = {};\\n\\n // Dummy constructor functions that we use as the .constructor and\\n // .constructor.prototype properties for functions that return Generator\\n // objects. For full spec compliance, you may wish to configure your\\n // minifier not to mangle the names of these two functions.\\n function Generator() {}\\n function GeneratorFunction() {}\\n function GeneratorFunctionPrototype() {}\\n\\n // This is a polyfill for %IteratorPrototype% for environments that\\n // don\\'t natively support it.\\n var IteratorPrototype = {};\\n IteratorPrototype[iteratorSymbol] = function () {\\n return this;\\n };\\n\\n var getProto = Object.getPrototypeOf;\\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\\n if (NativeIteratorPrototype &&\\n NativeIteratorPrototype !== Op &&\\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\\n // This environment has a native %IteratorPrototype%; use it instead\\n // of the polyfill.\\n IteratorPrototype = NativeIteratorPrototype;\\n }\\n\\n var Gp = GeneratorFunctionPrototype.prototype =\\n Generator.prototype = Object.create(IteratorPrototype);\\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\\n GeneratorFunctionPrototype[toStringTagSymbol] =\\n GeneratorFunction.displayName = \"GeneratorFunction\";\\n\\n // Helper for defining the .next, .throw, and .return methods of the\\n // Iterator interface in terms of a single ._invoke method.\\n function defineIteratorMethods(prototype) {\\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\\n prototype[method] = function(arg) {\\n return this._invoke(method, arg);\\n };\\n });\\n }\\n\\n exports.isGeneratorFunction = function(genFun) {\\n var ctor = typeof genFun === \"function\" && genFun.constructor;\\n return ctor\\n ? ctor === GeneratorFunction ||\\n // For the native GeneratorFunction constructor, the best we can\\n // do is to check its .name property.\\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\\n : false;\\n };\\n\\n exports.mark = function(genFun) {\\n if (Object.setPrototypeOf) {\\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\\n } else {\\n genFun.__proto__ = GeneratorFunctionPrototype;\\n if (!(toStringTagSymbol in genFun)) {\\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\\n }\\n }\\n genFun.prototype = Object.create(Gp);\\n return genFun;\\n };\\n\\n // Within the body of any async function, `await x` is transformed to\\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\\n // meant to be awaited.\\n exports.awrap = function(arg) {\\n return { __await: arg };\\n };\\n\\n function AsyncIterator(generator) {\\n function invoke(method, arg, resolve, reject) {\\n var record = tryCatch(generator[method], generator, arg);\\n if (record.type === \"throw\") {\\n reject(record.arg);\\n } else {\\n var result = record.arg;\\n var value = result.value;\\n if (value &&\\n typeof value === \"object\" &&\\n hasOwn.call(value, \"__await\")) {\\n return Promise.resolve(value.__await).then(function(value) {\\n invoke(\"next\", value, resolve, reject);\\n }, function(err) {\\n invoke(\"throw\", err, resolve, reject);\\n });\\n }\\n\\n return Promise.resolve(value).then(function(unwrapped) {\\n // When a yielded Promise is resolved, its final value becomes\\n // the .value of the Promise<{value,done}> result for the\\n // current iteration.\\n result.value = unwrapped;\\n resolve(result);\\n }, function(error) {\\n // If a rejected Promise was yielded, throw the rejection back\\n // into the async generator function so it can be handled there.\\n return invoke(\"throw\", error, resolve, reject);\\n });\\n }\\n }\\n\\n var previousPromise;\\n\\n function enqueue(method, arg) {\\n function callInvokeWithMethodAndArg() {\\n return new Promise(function(resolve, reject) {\\n invoke(method, arg, resolve, reject);\\n });\\n }\\n\\n return previousPromise =\\n // If enqueue has been called before, then we want to wait until\\n // all previous Promises have been resolved before calling invoke,\\n // so that results are always delivered in the correct order. If\\n // enqueue has not been called before, then it is important to\\n // call invoke immediately, without waiting on a callback to fire,\\n // so that the async generator function has the opportunity to do\\n // any necessary setup in a predictable way. This predictability\\n // is why the Promise constructor synchronously invokes its\\n // executor callback, and why async functions synchronously\\n // execute code before the first await. Since we implement simple\\n // async functions in terms of async generators, it is especially\\n // important to get this right, even though it requires care.\\n previousPromise ? previousPromise.then(\\n callInvokeWithMethodAndArg,\\n // Avoid propagating failures to Promises returned by later\\n // invocations of the iterator.\\n callInvokeWithMethodAndArg\\n ) : callInvokeWithMethodAndArg();\\n }\\n\\n // Define the unified helper method that is used to implement .next,\\n // .throw, and .return (see defineIteratorMethods).\\n this._invoke = enqueue;\\n }\\n\\n defineIteratorMethods(AsyncIterator.prototype);\\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\\n return this;\\n };\\n exports.AsyncIterator = AsyncIterator;\\n\\n // Note that simple async functions are implemented on top of\\n // AsyncIterator objects; they just return a Promise for the value of\\n // the final result produced by the iterator.\\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\\n var iter = new AsyncIterator(\\n wrap(innerFn, outerFn, self, tryLocsList)\\n );\\n\\n return exports.isGeneratorFunction(outerFn)\\n ? iter // If outerFn is a generator, return the full iterator.\\n : iter.next().then(function(result) {\\n return result.done ? result.value : iter.next();\\n });\\n };\\n\\n function makeInvokeMethod(innerFn, self, context) {\\n var state = GenStateSuspendedStart;\\n\\n return function invoke(method, arg) {\\n if (state === GenStateExecuting) {\\n throw new Error(\"Generator is already running\");\\n }\\n\\n if (state === GenStateCompleted) {\\n if (method === \"throw\") {\\n throw arg;\\n }\\n\\n // Be forgiving, per 25.3.3.3.3 of the spec:\\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\\n return doneResult();\\n }\\n\\n context.method = method;\\n context.arg = arg;\\n\\n while (true) {\\n var delegate = context.delegate;\\n if (delegate) {\\n var delegateResult = maybeInvokeDelegate(delegate, context);\\n if (delegateResult) {\\n if (delegateResult === ContinueSentinel) continue;\\n return delegateResult;\\n }\\n }\\n\\n if (context.method === \"next\") {\\n // Setting context._sent for legacy support of Babel\\'s\\n // function.sent implementation.\\n context.sent = context._sent = context.arg;\\n\\n } else if (context.method === \"throw\") {\\n if (state === GenStateSuspendedStart) {\\n state = GenStateCompleted;\\n throw context.arg;\\n }\\n\\n context.dispatchException(context.arg);\\n\\n } else if (context.method === \"return\") {\\n context.abrupt(\"return\", context.arg);\\n }\\n\\n state = GenStateExecuting;\\n\\n var record = tryCatch(innerFn, self, context);\\n if (record.type === \"normal\") {\\n // If an exception is thrown from innerFn, we leave state ===\\n // GenStateExecuting and loop back for another invocation.\\n state = context.done\\n ? GenStateCompleted\\n : GenStateSuspendedYield;\\n\\n if (record.arg === ContinueSentinel) {\\n continue;\\n }\\n\\n return {\\n value: record.arg,\\n done: context.done\\n };\\n\\n } else if (record.type === \"throw\") {\\n state = GenStateCompleted;\\n // Dispatch the exception by looping back around to the\\n // context.dispatchException(context.arg) call above.\\n context.method = \"throw\";\\n context.arg = record.arg;\\n }\\n }\\n };\\n }\\n\\n // Call delegate.iterator[context.method](context.arg) and handle the\\n // result, either by returning a { value, done } result from the\\n // delegate iterator, or by modifying context.method and context.arg,\\n // setting context.delegate to null, and returning the ContinueSentinel.\\n function maybeInvokeDelegate(delegate, context) {\\n var method = delegate.iterator[context.method];\\n if (method === undefined) {\\n // A .throw or .return when the delegate iterator has no .throw\\n // method always terminates the yield* loop.\\n context.delegate = null;\\n\\n if (context.method === \"throw\") {\\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\\n if (delegate.iterator[\"return\"]) {\\n // If the delegate iterator has a return method, give it a\\n // chance to clean up.\\n context.method = \"return\";\\n context.arg = undefined;\\n maybeInvokeDelegate(delegate, context);\\n\\n if (context.method === \"throw\") {\\n // If maybeInvokeDelegate(context) changed context.method from\\n // \"return\" to \"throw\", let that override the TypeError below.\\n return ContinueSentinel;\\n }\\n }\\n\\n context.method = \"throw\";\\n context.arg = new TypeError(\\n \"The iterator does not provide a \\'throw\\' method\");\\n }\\n\\n return ContinueSentinel;\\n }\\n\\n var record = tryCatch(method, delegate.iterator, context.arg);\\n\\n if (record.type === \"throw\") {\\n context.method = \"throw\";\\n context.arg = record.arg;\\n context.delegate = null;\\n return ContinueSentinel;\\n }\\n\\n var info = record.arg;\\n\\n if (! info) {\\n context.method = \"throw\";\\n context.arg = new TypeError(\"iterator result is not an object\");\\n context.delegate = null;\\n return ContinueSentinel;\\n }\\n\\n if (info.done) {\\n // Assign the result of the finished delegate to the temporary\\n // variable specified by delegate.resultName (see delegateYield).\\n context[delegate.resultName] = info.value;\\n\\n // Resume execution at the desired location (see delegateYield).\\n context.next = delegate.nextLoc;\\n\\n // If context.method was \"throw\" but the delegate handled the\\n // exception, let the outer generator proceed normally. If\\n // context.method was \"next\", forget context.arg since it has been\\n // \"consumed\" by the delegate iterator. If context.method was\\n // \"return\", allow the original .return call to continue in the\\n // outer generator.\\n if (context.method !== \"return\") {\\n context.method = \"next\";\\n context.arg = undefined;\\n }\\n\\n } else {\\n // Re-yield the result returned by the delegate method.\\n return info;\\n }\\n\\n // The delegate iterator is finished, so forget it and continue with\\n // the outer generator.\\n context.delegate = null;\\n return ContinueSentinel;\\n }\\n\\n // Define Generator.prototype.{next,throw,return} in terms of the\\n // unified ._invoke helper method.\\n defineIteratorMethods(Gp);\\n\\n Gp[toStringTagSymbol] = \"Generator\";\\n\\n // A Generator should always return itself as the iterator object when the\\n // @@iterator function is called on it. Some browsers\\' implementations of the\\n // iterator prototype chain incorrectly implement this, causing the Generator\\n // object to not be returned from this call. This ensures that doesn\\'t happen.\\n // See https://github.com/facebook/regenerator/issues/274 for more details.\\n Gp[iteratorSymbol] = function() {\\n return this;\\n };\\n\\n Gp.toString = function() {\\n return \"[object Generator]\";\\n };\\n\\n function pushTryEntry(locs) {\\n var entry = { tryLoc: locs[0] };\\n\\n if (1 in locs) {\\n entry.catchLoc = locs[1];\\n }\\n\\n if (2 in locs) {\\n entry.finallyLoc = locs[2];\\n entry.afterLoc = locs[3];\\n }\\n\\n this.tryEntries.push(entry);\\n }\\n\\n function resetTryEntry(entry) {\\n var record = entry.completion || {};\\n record.type = \"normal\";\\n delete record.arg;\\n entry.completion = record;\\n }\\n\\n function Context(tryLocsList) {\\n // The root entry object (effectively a try statement without a catch\\n // or a finally block) gives us a place to store values thrown from\\n // locations where there is no enclosing try statement.\\n this.tryEntries = [{ tryLoc: \"root\" }];\\n tryLocsList.forEach(pushTryEntry, this);\\n this.reset(true);\\n }\\n\\n exports.keys = function(object) {\\n var keys = [];\\n for (var key in object) {\\n keys.push(key);\\n }\\n keys.reverse();\\n\\n // Rather than returning an object with a next method, we keep\\n // things simple and return the next function itself.\\n return function next() {\\n while (keys.length) {\\n var key = keys.pop();\\n if (key in object) {\\n next.value = key;\\n next.done = false;\\n return next;\\n }\\n }\\n\\n // To avoid creating an additional object, we just hang the .value\\n // and .done properties off the next function object itself. This\\n // also ensures that the minifier will not anonymize the function.\\n next.done = true;\\n return next;\\n };\\n };\\n\\n function values(iterable) {\\n if (iterable) {\\n var iteratorMethod = iterable[iteratorSymbol];\\n if (iteratorMethod) {\\n return iteratorMethod.call(iterable);\\n }\\n\\n if (typeof iterable.next === \"function\") {\\n return iterable;\\n }\\n\\n if (!isNaN(iterable.length)) {\\n var i = -1, next = function next() {\\n while (++i < iterable.length) {\\n if (hasOwn.call(iterable, i)) {\\n next.value = iterable[i];\\n next.done = false;\\n return next;\\n }\\n }\\n\\n next.value = undefined;\\n next.done = true;\\n\\n return next;\\n };\\n\\n return next.next = next;\\n }\\n }\\n\\n // Return an iterator with no values.\\n return { next: doneResult };\\n }\\n exports.values = values;\\n\\n function doneResult() {\\n return { value: undefined, done: true };\\n }\\n\\n Context.prototype = {\\n constructor: Context,\\n\\n reset: function(skipTempReset) {\\n this.prev = 0;\\n this.next = 0;\\n // Resetting context._sent for legacy support of Babel\\'s\\n // function.sent implementation.\\n this.sent = this._sent = undefined;\\n this.done = false;\\n this.delegate = null;\\n\\n this.method = \"next\";\\n this.arg = undefined;\\n\\n this.tryEntries.forEach(resetTryEntry);\\n\\n if (!skipTempReset) {\\n for (var name in this) {\\n // Not sure about the optimal order of these conditions:\\n if (name.charAt(0) === \"t\" &&\\n hasOwn.call(this, name) &&\\n !isNaN(+name.slice(1))) {\\n this[name] = undefined;\\n }\\n }\\n }\\n },\\n\\n stop: function() {\\n this.done = true;\\n\\n var rootEntry = this.tryEntries[0];\\n var rootRecord = rootEntry.completion;\\n if (rootRecord.type === \"throw\") {\\n throw rootRecord.arg;\\n }\\n\\n return this.rval;\\n },\\n\\n dispatchException: function(exception) {\\n if (this.done) {\\n throw exception;\\n }\\n\\n var context = this;\\n function handle(loc, caught) {\\n record.type = \"throw\";\\n record.arg = exception;\\n context.next = loc;\\n\\n if (caught) {\\n // If the dispatched exception was caught by a catch block,\\n // then let that catch block handle the exception normally.\\n context.method = \"next\";\\n context.arg = undefined;\\n }\\n\\n return !! caught;\\n }\\n\\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\\n var entry = this.tryEntries[i];\\n var record = entry.completion;\\n\\n if (entry.tryLoc === \"root\") {\\n // Exception thrown outside of any try block that could handle\\n // it, so set the completion value of the entire function to\\n // throw the exception.\\n return handle(\"end\");\\n }\\n\\n if (entry.tryLoc <= this.prev) {\\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\\n\\n if (hasCatch && hasFinally) {\\n if (this.prev < entry.catchLoc) {\\n return handle(entry.catchLoc, true);\\n } else if (this.prev < entry.finallyLoc) {\\n return handle(entry.finallyLoc);\\n }\\n\\n } else if (hasCatch) {\\n if (this.prev < entry.catchLoc) {\\n return handle(entry.catchLoc, true);\\n }\\n\\n } else if (hasFinally) {\\n if (this.prev < entry.finallyLoc) {\\n return handle(entry.finallyLoc);\\n }\\n\\n } else {\\n throw new Error(\"try statement without catch or finally\");\\n }\\n }\\n }\\n },\\n\\n abrupt: function(type, arg) {\\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\\n var entry = this.tryEntries[i];\\n if (entry.tryLoc <= this.prev &&\\n hasOwn.call(entry, \"finallyLoc\") &&\\n this.prev < entry.finallyLoc) {\\n var finallyEntry = entry;\\n break;\\n }\\n }\\n\\n if (finallyEntry &&\\n (type === \"break\" ||\\n type === \"continue\") &&\\n finallyEntry.tryLoc <= arg &&\\n arg <= finallyEntry.finallyLoc) {\\n // Ignore the finally entry if control is not jumping to a\\n // location outside the try/catch block.\\n finallyEntry = null;\\n }\\n\\n var record = finallyEntry ? finallyEntry.completion : {};\\n record.type = type;\\n record.arg = arg;\\n\\n if (finallyEntry) {\\n this.method = \"next\";\\n this.next = finallyEntry.finallyLoc;\\n return ContinueSentinel;\\n }\\n\\n return this.complete(record);\\n },\\n\\n complete: function(record, afterLoc) {\\n if (record.type === \"throw\") {\\n throw record.arg;\\n }\\n\\n if (record.type === \"break\" ||\\n record.type === \"continue\") {\\n this.next = record.arg;\\n } else if (record.type === \"return\") {\\n this.rval = this.arg = record.arg;\\n this.method = \"return\";\\n this.next = \"end\";\\n } else if (record.type === \"normal\" && afterLoc) {\\n this.next = afterLoc;\\n }\\n\\n return ContinueSentinel;\\n },\\n\\n finish: function(finallyLoc) {\\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\\n var entry = this.tryEntries[i];\\n if (entry.finallyLoc === finallyLoc) {\\n this.complete(entry.completion, entry.afterLoc);\\n resetTryEntry(entry);\\n return ContinueSentinel;\\n }\\n }\\n },\\n\\n \"catch\": function(tryLoc) {\\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\\n var entry = this.tryEntries[i];\\n if (entry.tryLoc === tryLoc) {\\n var record = entry.completion;\\n if (record.type === \"throw\") {\\n var thrown = record.arg;\\n resetTryEntry(entry);\\n }\\n return thrown;\\n }\\n }\\n\\n // The context.catch method must only be called with a location\\n // argument that corresponds to a known catch block.\\n throw new Error(\"illegal catch attempt\");\\n },\\n\\n delegateYield: function(iterable, resultName, nextLoc) {\\n this.delegate = {\\n iterator: values(iterable),\\n resultName: resultName,\\n nextLoc: nextLoc\\n };\\n\\n if (this.method === \"next\") {\\n // Deliberately forget the last sent value so that we don\\'t\\n // accidentally pass it on to the delegate.\\n this.arg = undefined;\\n }\\n\\n return ContinueSentinel;\\n }\\n };\\n\\n // Regardless of whether this script is executing as a CommonJS module\\n // or not, return the runtime object so that we can declare the variable\\n // regeneratorRuntime in the outer scope, which allows this module to be\\n // injected easily by `bin/regenerator --include-runtime script.js`.\\n return exports;\\n\\n}(\\n // If this script is executing as a CommonJS module, use module.exports\\n // as the regeneratorRuntime namespace. Otherwise create a new empty\\n // object. Either way, the resulting object will be used to initialize\\n // the regeneratorRuntime variable at the top of this file.\\n true ? module.exports : undefined\\n));\\n\\ntry {\\n regeneratorRuntime = runtime;\\n} catch (accidentalStrictMode) {\\n // This module should not be running in strict mode, so the above\\n // assignment should always work unless something is misconfigured. Just\\n // in case runtime.js accidentally runs in strict mode, we can escape\\n // strict mode using a global Function call. This could conceivably fail\\n // if a Content Security Policy forbids using Function, but in that case\\n // the proper solution is to fix the accidental strict mode problem. If\\n // you\\'ve misconfigured your bundler to force strict mode and applied a\\n // CSP to forbid Function, and you\\'re not willing to fix either of those\\n // problems, please detail your unique predicament in a GitHub issue.\\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\\n}\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL3dlYi1taWRpLXBsYXllci8uL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanM/OTZjZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbnZhciBydW50aW1lID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAvLyBJZiBhIHJlamVjdGVkIFByb21pc2Ugd2FzIHlpZWxkZWQsIHRocm93IHRoZSByZWplY3Rpb24gYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgaGFuZGxlZCB0aGVyZS5cbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIGV4cG9ydHMuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIGV4cG9ydHMuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgLy8gTm90ZTogW1wicmV0dXJuXCJdIG11c3QgYmUgdXNlZCBmb3IgRVMzIHBhcnNpbmcgY29tcGF0aWJpbGl0eS5cbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yW1wicmV0dXJuXCJdKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBleHBvcnRzLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlXG4gIC8vIG9yIG5vdCwgcmV0dXJuIHRoZSBydW50aW1lIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBkZWNsYXJlIHRoZSB2YXJpYWJsZVxuICAvLyByZWdlbmVyYXRvclJ1bnRpbWUgaW4gdGhlIG91dGVyIHNjb3BlLCB3aGljaCBhbGxvd3MgdGhpcyBtb2R1bGUgdG8gYmVcbiAgLy8gaW5qZWN0ZWQgZWFzaWx5IGJ5IGBiaW4vcmVnZW5lcmF0b3IgLS1pbmNsdWRlLXJ1bnRpbWUgc2NyaXB0LmpzYC5cbiAgcmV0dXJuIGV4cG9ydHM7XG5cbn0oXG4gIC8vIElmIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZSwgdXNlIG1vZHVsZS5leHBvcnRzXG4gIC8vIGFzIHRoZSByZWdlbmVyYXRvclJ1bnRpbWUgbmFtZXNwYWNlLiBPdGhlcndpc2UgY3JlYXRlIGEgbmV3IGVtcHR5XG4gIC8vIG9iamVjdC4gRWl0aGVyIHdheSwgdGhlIHJlc3VsdGluZyBvYmplY3Qgd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemVcbiAgLy8gdGhlIHJlZ2VuZXJhdG9yUnVudGltZSB2YXJpYWJsZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS5cbiAgdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiA/IG1vZHVsZS5leHBvcnRzIDoge31cbikpO1xuXG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgLy8gVGhpcyBtb2R1bGUgc2hvdWxkIG5vdCBiZSBydW5uaW5nIGluIHN0cmljdCBtb2RlLCBzbyB0aGUgYWJvdmVcbiAgLy8gYXNzaWdubWVudCBzaG91bGQgYWx3YXlzIHdvcmsgdW5sZXNzIHNvbWV0aGluZyBpcyBtaXNjb25maWd1cmVkLiBKdXN0XG4gIC8vIGluIGNhc2UgcnVudGltZS5qcyBhY2NpZGVudGFsbHkgcnVucyBpbiBzdHJpY3QgbW9kZSwgd2UgY2FuIGVzY2FwZVxuICAvLyBzdHJpY3QgbW9kZSB1c2luZyBhIGdsb2JhbCBGdW5jdGlvbiBjYWxsLiBUaGlzIGNvdWxkIGNvbmNlaXZhYmx5IGZhaWxcbiAgLy8gaWYgYSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBmb3JiaWRzIHVzaW5nIEZ1bmN0aW9uLCBidXQgaW4gdGhhdCBjYXNlXG4gIC8vIHRoZSBwcm9wZXIgc29sdXRpb24gaXMgdG8gZml4IHRoZSBhY2NpZGVudGFsIHN0cmljdCBtb2RlIHByb2JsZW0uIElmXG4gIC8vIHlvdSd2ZSBtaXNjb25maWd1cmVkIHlvdXIgYnVuZGxlciB0byBmb3JjZSBzdHJpY3QgbW9kZSBhbmQgYXBwbGllZCBhXG4gIC8vIENTUCB0byBmb3JiaWQgRnVuY3Rpb24sIGFuZCB5b3UncmUgbm90IHdpbGxpbmcgdG8gZml4IGVpdGhlciBvZiB0aG9zZVxuICAvLyBwcm9ibGVtcywgcGxlYXNlIGRldGFpbCB5b3VyIHVuaXF1ZSBwcmVkaWNhbWVudCBpbiBhIEdpdEh1YiBpc3N1ZS5cbiAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///7\\n');},function(module,exports){eval(\"// Unique ID creation requires a high quality random # generator. In the\\n// browser this is a little complicated due to unknown quality of Math.random()\\n// and inconsistent support for the `crypto` API. We do the best we can via\\n// feature-detection\\n\\n// getRandomValues needs to be invoked in a context where \\\"this\\\" is a Crypto\\n// implementation. Also, find the complete implementation of crypto on IE11.\\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\\n (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\\n\\nif (getRandomValues) {\\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\\n\\n module.exports = function whatwgRNG() {\\n getRandomValues(rnds8);\\n return rnds8;\\n };\\n} else {\\n // Math.random()-based (RNG)\\n //\\n // If all else fails, use Math.random(). It's fast, but is of unspecified\\n // quality.\\n var rnds = new Array(16);\\n\\n module.exports = function mathRNG() {\\n for (var i = 0, r; i < 16; i++) {\\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\\n }\\n\\n return rnds;\\n };\\n}\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL3dlYi1taWRpLXBsYXllci8uL25vZGVfbW9kdWxlcy91dWlkL2xpYi9ybmctYnJvd3Nlci5qcz9lMWY0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuICBJbiB0aGVcbi8vIGJyb3dzZXIgdGhpcyBpcyBhIGxpdHRsZSBjb21wbGljYXRlZCBkdWUgdG8gdW5rbm93biBxdWFsaXR5IG9mIE1hdGgucmFuZG9tKClcbi8vIGFuZCBpbmNvbnNpc3RlbnQgc3VwcG9ydCBmb3IgdGhlIGBjcnlwdG9gIEFQSS4gIFdlIGRvIHRoZSBiZXN0IHdlIGNhbiB2aWFcbi8vIGZlYXR1cmUtZGV0ZWN0aW9uXG5cbi8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0b1xuLy8gaW1wbGVtZW50YXRpb24uIEFsc28sIGZpbmQgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9mIGNyeXB0byBvbiBJRTExLlxudmFyIGdldFJhbmRvbVZhbHVlcyA9ICh0eXBlb2YoY3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YobXNDcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzID09ICdmdW5jdGlvbicgJiYgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pKTtcblxuaWYgKGdldFJhbmRvbVZhbHVlcykge1xuICAvLyBXSEFUV0cgY3J5cHRvIFJORyAtIGh0dHA6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9DcnlwdG9cbiAgdmFyIHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB3aGF0d2dSTkcoKSB7XG4gICAgZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbiAgICByZXR1cm4gcm5kczg7XG4gIH07XG59IGVsc2Uge1xuICAvLyBNYXRoLnJhbmRvbSgpLWJhc2VkIChSTkcpXG4gIC8vXG4gIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB1c2UgTWF0aC5yYW5kb20oKS4gIEl0J3MgZmFzdCwgYnV0IGlzIG9mIHVuc3BlY2lmaWVkXG4gIC8vIHF1YWxpdHkuXG4gIHZhciBybmRzID0gbmV3IEFycmF5KDE2KTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1hdGhSTkcoKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIHI7IGkgPCAxNjsgaSsrKSB7XG4gICAgICBpZiAoKGkgJiAweDAzKSA9PT0gMCkgciA9IE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAwMDtcbiAgICAgIHJuZHNbaV0gPSByID4+PiAoKGkgJiAweDAzKSA8PCAzKSAmIDB4ZmY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJuZHM7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///8\\n\");},function(module,exports){eval(\"/**\\n * Convert array of 16 byte values to UUID string format of the form:\\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\\n */\\nvar byteToHex = [];\\nfor (var i = 0; i < 256; ++i) {\\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\\n}\\n\\nfunction bytesToUuid(buf, offset) {\\n var i = offset || 0;\\n var bth = byteToHex;\\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\\n return ([\\n bth[buf[i++]], bth[buf[i++]],\\n bth[buf[i++]], bth[buf[i++]], '-',\\n bth[buf[i++]], bth[buf[i++]], '-',\\n bth[buf[i++]], bth[buf[i++]], '-',\\n bth[buf[i++]], bth[buf[i++]], '-',\\n bth[buf[i++]], bth[buf[i++]],\\n bth[buf[i++]], bth[buf[i++]],\\n bth[buf[i++]], bth[buf[i++]]\\n ]).join('');\\n}\\n\\nmodule.exports = bytesToUuid;\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL3dlYi1taWRpLXBsYXllci8uL25vZGVfbW9kdWxlcy91dWlkL2xpYi9ieXRlc1RvVXVpZC5qcz8yMzY2Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xudmFyIGJ5dGVUb0hleCA9IFtdO1xuZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICBieXRlVG9IZXhbaV0gPSAoaSArIDB4MTAwKS50b1N0cmluZygxNikuc3Vic3RyKDEpO1xufVxuXG5mdW5jdGlvbiBieXRlc1RvVXVpZChidWYsIG9mZnNldCkge1xuICB2YXIgaSA9IG9mZnNldCB8fCAwO1xuICB2YXIgYnRoID0gYnl0ZVRvSGV4O1xuICAvLyBqb2luIHVzZWQgdG8gZml4IG1lbW9yeSBpc3N1ZSBjYXVzZWQgYnkgY29uY2F0ZW5hdGlvbjogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzE3NSNjNFxuICByZXR1cm4gKFtcbiAgICBidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLFxuICAgIGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcbiAgICBidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG4gICAgYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuICAgIGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcbiAgICBidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLFxuICAgIGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sXG4gICAgYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXVxuICBdKS5qb2luKCcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBieXRlc1RvVXVpZDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///9\\n\");},function(module,exports,__webpack_require__){\"use strict\";eval(\"\\n\\nmodule.exports = function() {\\n throw new Error(\\n 'ws does not work in the browser. Browser clients must use the native ' +\\n 'WebSocket object'\\n );\\n};\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZWItbWlkaS1wbGF5ZXIvLi9ub2RlX21vZHVsZXMvd3MvYnJvd3Nlci5qcz83ZjczIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd3cyBkb2VzIG5vdCB3b3JrIGluIHRoZSBicm93c2VyLiBCcm93c2VyIGNsaWVudHMgbXVzdCB1c2UgdGhlIG5hdGl2ZSAnICtcbiAgICAgICdXZWJTb2NrZXQgb2JqZWN0J1xuICApO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///10\\n\");},function(module,__webpack_exports__,__webpack_require__){\"use strict\";eval(\"__webpack_require__.r(__webpack_exports__);\\n\\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/regenerator/index.js\\nvar regenerator = __webpack_require__(1);\\nvar regenerator_default = /*#__PURE__*/__webpack_require__.n(regenerator);\\n\\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\nvar asyncToGenerator = __webpack_require__(2);\\nvar asyncToGenerator_default = /*#__PURE__*/__webpack_require__.n(asyncToGenerator);\\n\\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/classCallCheck.js\\nvar classCallCheck = __webpack_require__(3);\\nvar classCallCheck_default = /*#__PURE__*/__webpack_require__.n(classCallCheck);\\n\\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/createClass.js\\nvar createClass = __webpack_require__(4);\\nvar createClass_default = /*#__PURE__*/__webpack_require__.n(createClass);\\n\\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/defineProperty.js\\nvar defineProperty = __webpack_require__(0);\\nvar defineProperty_default = /*#__PURE__*/__webpack_require__.n(defineProperty);\\n\\n// EXTERNAL MODULE: ./node_modules/uuid/v4.js\\nvar v4 = __webpack_require__(6);\\nvar v4_default = /*#__PURE__*/__webpack_require__.n(v4);\\n\\n// CONCATENATED MODULE: ./src/constants.js\\nvar MAX_I16 = Math.pow(2, 15);\\nvar MIDI_AUDIO_BUFFER_SIZE = 8192;\\nvar MIDI_AUDIO_S16LSB = 0x8010;\\nvar MIDI_DEFAULT_PATCH_URL = 'https://cdn.jsdelivr.net/npm/midi-instrument-patches@latest/';\\nvar MIDI_PLAYER_MESSAGE_PREFIX = 'Midi player:';\\nvar LIBTIMIDITY_PATCH_DIRECTORY = 'pat';\\nvar LIBTIMIDITY_PATCH_DRUM_DIRECTORY = 'MT32Drums';\\nvar LIBTIMIDITY_CONFIG_FILE = 'timidity.cfg';\\nvar LIBTIMIDITY_ERROR_CODES = {\\n EPERM: 1,\\n ENOENT: 2,\\n ESRCH: 3,\\n EINTR: 4,\\n EIO: 5,\\n ENXIO: 6,\\n E2BIG: 7,\\n ENOEXEC: 8,\\n EBADF: 9,\\n ECHILD: 10,\\n EAGAIN: 11,\\n EWOULDBLOCK: 11,\\n ENOMEM: 12,\\n EACCES: 13,\\n EFAULT: 14,\\n ENOTBLK: 15,\\n EBUSY: 16,\\n EEXIST: 17,\\n EXDEV: 18,\\n ENODEV: 19,\\n ENOTDIR: 20,\\n EISDIR: 21,\\n EINVAL: 22,\\n ENFILE: 23,\\n EMFILE: 24,\\n ENOTTY: 25,\\n ETXTBSY: 26,\\n EFBIG: 27,\\n ENOSPC: 28,\\n ESPIPE: 29,\\n EROFS: 30,\\n EMLINK: 31,\\n EPIPE: 32,\\n EDOM: 33,\\n ERANGE: 34,\\n ENOMSG: 42,\\n EIDRM: 43,\\n ECHRNG: 44,\\n EL2NSYNC: 45,\\n EL3HLT: 46,\\n EL3RST: 47,\\n ELNRNG: 48,\\n EUNATCH: 49,\\n ENOCSI: 50,\\n EL2HLT: 51,\\n EDEADLK: 35,\\n ENOLCK: 37,\\n EBADE: 52,\\n EBADR: 53,\\n EXFULL: 54,\\n ENOANO: 55,\\n EBADRQC: 56,\\n EBADSLT: 57,\\n EDEADLOCK: 35,\\n EBFONT: 59,\\n ENOSTR: 60,\\n ENODATA: 61,\\n ETIME: 62,\\n ENOSR: 63,\\n ENONET: 64,\\n ENOPKG: 65,\\n EREMOTE: 66,\\n ENOLINK: 67,\\n EADV: 68,\\n ESRMNT: 69,\\n ECOMM: 70,\\n EPROTO: 71,\\n EMULTIHOP: 72,\\n EDOTDOT: 73,\\n EBADMSG: 74,\\n ENOTUNIQ: 76,\\n EBADFD: 77,\\n EREMCHG: 78,\\n ELIBACC: 79,\\n ELIBBAD: 80,\\n ELIBSCN: 81,\\n ELIBMAX: 82,\\n ELIBEXEC: 83,\\n ENOSYS: 38,\\n ENOTEMPTY: 39,\\n ENAMETOOLONG: 36,\\n ELOOP: 40,\\n EOPNOTSUPP: 95,\\n EPFNOSUPPORT: 96,\\n ECONNRESET: 104,\\n ENOBUFS: 105,\\n EAFNOSUPPORT: 97,\\n EPROTOTYPE: 91,\\n ENOTSOCK: 88,\\n ENOPROTOOPT: 92,\\n ESHUTDOWN: 108,\\n ECONNREFUSED: 111,\\n EADDRINUSE: 98,\\n ECONNABORTED: 103,\\n ENETUNREACH: 101,\\n ENETDOWN: 100,\\n ETIMEDOUT: 110,\\n EHOSTDOWN: 112,\\n EHOSTUNREACH: 113,\\n EINPROGRESS: 115,\\n EALREADY: 114,\\n EDESTADDRREQ: 89,\\n EMSGSIZE: 90,\\n EPROTONOSUPPORT: 93,\\n ESOCKTNOSUPPORT: 94,\\n EADDRNOTAVAIL: 99,\\n ENETRESET: 102,\\n EISCONN: 106,\\n ENOTCONN: 107,\\n ETOOMANYREFS: 109,\\n EUSERS: 87,\\n EDQUOT: 122,\\n ESTALE: 116,\\n ENOTSUP: 95,\\n ENOMEDIUM: 123,\\n EILSEQ: 84,\\n EOVERFLOW: 75,\\n ECANCELED: 125,\\n ENOTRECOVERABLE: 131,\\n EOWNERDEAD: 130,\\n ESTRPIPE: 86\\n};\\nvar LIBTIMIDITY_ERROR_MESSAGES = {\\n 0: 'Success',\\n 1: 'Not super-user',\\n 2: 'No such file or directory',\\n 3: 'No such process',\\n 4: 'Interrupted system call',\\n 5: 'I/O error',\\n 6: 'No such device or address',\\n 7: 'Arg list too long',\\n 8: 'Exec format error',\\n 9: 'Bad file number',\\n 10: 'No children',\\n 11: 'No more processes',\\n 12: 'Not enough core',\\n 13: 'Permission denied',\\n 14: 'Bad address',\\n 15: 'Block device required',\\n 16: 'Mount device busy',\\n 17: 'File exists',\\n 18: 'Cross-device link',\\n 19: 'No such device',\\n 20: 'Not a directory',\\n 21: 'Is a directory',\\n 22: 'Invalid argument',\\n 23: 'Too many open files in system',\\n 24: 'Too many open files',\\n 25: 'Not a typewriter',\\n 26: 'Text file busy',\\n 27: 'File too large',\\n 28: 'No space left on device',\\n 29: 'Illegal seek',\\n 30: 'Read only file system',\\n 31: 'Too many links',\\n 32: 'Broken pipe',\\n 33: 'Math arg out of domain of func',\\n 34: 'Math result not representable',\\n 35: 'File locking deadlock error',\\n 36: 'File or path name too long',\\n 37: 'No record locks available',\\n 38: 'Function not implemented',\\n 39: 'Directory not empty',\\n 40: 'Too many symbolic links',\\n 42: 'No message of desired type',\\n 43: 'Identifier removed',\\n 44: 'Channel number out of range',\\n 45: 'Level 2 not synchronized',\\n 46: 'Level 3 halted',\\n 47: 'Level 3 reset',\\n 48: 'Link number out of range',\\n 49: 'Protocol driver not attached',\\n 50: 'No CSI structure available',\\n 51: 'Level 2 halted',\\n 52: 'Invalid exchange',\\n 53: 'Invalid request descriptor',\\n 54: 'Exchange full',\\n 55: 'No anode',\\n 56: 'Invalid request code',\\n 57: 'Invalid slot',\\n 59: 'Bad font file fmt',\\n 60: 'Device not a stream',\\n 61: 'No data (for no delay io)',\\n 62: 'Timer expired',\\n 63: 'Out of streams resources',\\n 64: 'Machine is not on the network',\\n 65: 'Package not installed',\\n 66: 'The object is remote',\\n 67: 'The link has been severed',\\n 68: 'Advertise error',\\n 69: 'Srmount error',\\n 70: 'Communication error on send',\\n 71: 'Protocol error',\\n 72: 'Multihop attempted',\\n 73: 'Cross mount point (not really error)',\\n 74: 'Trying to read unreadable message',\\n 75: 'Value too large for defined data type',\\n 76: 'Given log. name not unique',\\n 77: 'f.d. invalid for this operation',\\n 78: 'Remote address changed',\\n 79: 'Can access a needed shared lib',\\n 80: 'Accessing a corrupted shared lib',\\n 81: '.lib section in a.out corrupted',\\n 82: 'Attempting to link in too many libs',\\n 83: 'Attempting to exec a shared library',\\n 84: 'Illegal byte sequence',\\n 86: 'Streams pipe error',\\n 87: 'Too many users',\\n 88: 'Socket operation on non-socket',\\n 89: 'Destination address required',\\n 90: 'Message too long',\\n 91: 'Protocol wrong type for socket',\\n 92: 'Protocol not available',\\n 93: 'Unknown protocol',\\n 94: 'Socket type not supported',\\n 95: 'Not supported',\\n 96: 'Protocol family not supported',\\n 97: 'Address family not supported by protocol family',\\n 98: 'Address already in use',\\n 99: 'Address not available',\\n 100: 'Network interface is not configured',\\n 101: 'Network is unreachable',\\n 102: 'Connection reset by network',\\n 103: 'Connection aborted',\\n 104: 'Connection reset by peer',\\n 105: 'No buffer space available',\\n 106: 'Socket is already connected',\\n 107: 'Socket is not connected',\\n 108: \\\"Can't send after socket shutdown\\\",\\n 109: 'Too many references',\\n 110: 'Connection timed out',\\n 111: 'Connection refused',\\n 112: 'Host is down',\\n 113: 'Host is unreachable',\\n 114: 'Socket already connected',\\n 115: 'Connection already in progress',\\n 116: 'Stale file handle',\\n 122: 'Quota exceeded',\\n 123: 'No medium (in tape drive)',\\n 125: 'Operation canceled',\\n 130: 'Previous owner died',\\n 131: 'State not recoverable'\\n}; // prettier-ignore\\n\\nvar LIBTIMIDITY_CONFIG_DATA = [100, 105, 114, 32, 46, 47, 112, 97, 116, 10, 10, 100, 114, 117, 109, 115, 101, 116, 32, 48, 10, 10, 32, 51, 53, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 48, 46, 112, 97, 116, 10, 32, 51, 54, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 49, 46, 112, 97, 116, 10, 32, 51, 55, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 50, 46, 112, 97, 116, 10, 32, 51, 56, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 51, 46, 112, 97, 116, 10, 32, 51, 57, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 52, 46, 112, 97, 116, 10, 32, 52, 48, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 53, 46, 112, 97, 116, 10, 32, 52, 49, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 54, 46, 112, 97, 116, 10, 32, 52, 50, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 55, 46, 112, 97, 116, 10, 32, 52, 51, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 56, 46, 112, 97, 116, 10, 32, 52, 52, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 57, 46, 112, 97, 116, 10, 32, 52, 53, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 49, 48, 46, 112, 97, 116, 10, 32, 52, 54, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 49, 49, 46, 112, 97, 116, 10, 32, 52, 55, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 49, 50, 46, 112, 97, 116, 10, 32, 52, 56, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 49, 51, 46, 112, 97, 116, 10, 32, 52, 57, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 49, 52, 46, 112, 97, 116, 10, 32, 53, 48, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 49, 53, 46, 112, 97, 116, 10, 32, 53, 49, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 49, 54, 46, 112, 97, 116, 10, 32, 53, 50, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 49, 55, 46, 112, 97, 116, 10, 32, 53, 51, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 49, 56, 46, 112, 97, 116, 10, 32, 53, 52, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 49, 57, 46, 112, 97, 116, 10, 32, 53, 53, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 50, 48, 46, 112, 97, 116, 10, 32, 53, 54, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 50, 49, 46, 112, 97, 116, 10, 32, 53, 55, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 50, 50, 46, 112, 97, 116, 10, 32, 53, 56, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 50, 51, 46, 112, 97, 116, 10, 32, 53, 57, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 50, 52, 46, 112, 97, 116, 10, 32, 54, 48, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 50, 53, 46, 112, 97, 116, 10, 32, 54, 49, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 50, 54, 46, 112, 97, 116, 10, 32, 54, 50, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 50, 55, 46, 112, 97, 116, 10, 32, 54, 51, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 50, 56, 46, 112, 97, 116, 10, 32, 54, 52, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 50, 57, 46, 112, 97, 116, 10, 32, 54, 53, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 51, 48, 46, 112, 97, 116, 10, 32, 54, 54, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 51, 49, 46, 112, 97, 116, 10, 32, 54, 55, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 51, 50, 46, 112, 97, 116, 10, 32, 54, 56, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 51, 51, 46, 112, 97, 116, 10, 32, 54, 57, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 51, 52, 46, 112, 97, 116, 10, 32, 55, 48, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 51, 53, 46, 112, 97, 116, 10, 32, 55, 49, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 51, 54, 46, 112, 97, 116, 10, 32, 55, 50, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 51, 55, 46, 112, 97, 116, 10, 32, 55, 51, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 51, 56, 46, 112, 97, 116, 10, 32, 55, 52, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 51, 57, 46, 112, 97, 116, 10, 32, 55, 53, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 52, 48, 46, 112, 97, 116, 10, 32, 55, 54, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 52, 49, 46, 112, 97, 116, 10, 32, 55, 55, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 52, 50, 46, 112, 97, 116, 10, 32, 55, 56, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 52, 51, 46, 112, 97, 116, 10, 32, 55, 57, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 52, 52, 46, 112, 97, 116, 10, 32, 56, 48, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 52, 53, 46, 112, 97, 116, 10, 32, 56, 49, 9, 32, 77, 84, 51, 50, 68, 114, 117, 109, 115, 47, 109, 116, 51, 50, 100, 114, 117, 109, 45, 52, 54, 46, 112, 97, 116, 10, 10, 98, 97, 110, 107, 32, 48, 10, 10, 32, 48, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 50, 55, 46, 112, 97, 116, 10, 32, 49, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 50, 54, 46, 112, 97, 116, 10, 32, 50, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 50, 53, 46, 112, 97, 116, 10, 32, 51, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 50, 52, 46, 112, 97, 116, 10, 32, 52, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 50, 51, 46, 112, 97, 116, 10, 32, 53, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 50, 50, 46, 112, 97, 116, 10, 32, 54, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 50, 49, 46, 112, 97, 116, 10, 32, 55, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 50, 48, 46, 112, 97, 116, 10, 32, 56, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 49, 57, 46, 112, 97, 116, 10, 32, 57, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 49, 56, 46, 112, 97, 116, 10, 32, 49, 48, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 49, 55, 46, 112, 97, 116, 10, 32, 49, 49, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 49, 54, 46, 112, 97, 116, 10, 32, 49, 50, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 49, 53, 46, 112, 97, 116, 10, 32, 49, 51, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 49, 52, 46, 112, 97, 116, 10, 32, 49, 52, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 49, 51, 46, 112, 97, 116, 10, 32, 49, 53, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 49, 50, 46, 112, 97, 116, 10, 32, 49, 54, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 49, 49, 46, 112, 97, 116, 10, 32, 49, 55, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 49, 48, 46, 112, 97, 116, 10, 32, 49, 56, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 48, 57, 46, 112, 97, 116, 10, 32, 49, 57, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 48, 56, 46, 112, 97, 116, 10, 32, 50, 48, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 48, 55, 46, 112, 97, 116, 10, 32, 50, 49, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 48, 54, 46, 112, 97, 116, 10, 32, 50, 50, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 48, 53, 46, 112, 97, 116, 10, 32, 50, 51, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 48, 52, 46, 112, 97, 116, 10, 32, 50, 52, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 48, 51, 46, 112, 97, 116, 10, 32, 50, 53, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 48, 50, 46, 112, 97, 116, 10, 32, 50, 54, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 48, 49, 46, 112, 97, 116, 10, 32, 50, 55, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 48, 48, 46, 112, 97, 116, 10, 32, 50, 56, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 57, 57, 46, 112, 97, 116, 10, 32, 50, 57, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 57, 56, 46, 112, 97, 116, 10, 32, 51, 48, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 57, 55, 46, 112, 97, 116, 10, 32, 51, 49, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 57, 54, 46, 112, 97, 116, 10, 32, 51, 50, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 57, 53, 46, 112, 97, 116, 10, 32, 51, 51, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 57, 52, 46, 112, 97, 116, 10, 32, 51, 52, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 57, 51, 46, 112, 97, 116, 10, 32, 51, 53, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 57, 50, 46, 112, 97, 116, 10, 32, 51, 54, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 57, 49, 46, 112, 97, 116, 10, 32, 51, 55, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 57, 48, 46, 112, 97, 116, 10, 32, 51, 56, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 56, 57, 46, 112, 97, 116, 10, 32, 51, 57, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 56, 56, 46, 112, 97, 116, 10, 32, 52, 48, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 56, 55, 46, 112, 97, 116, 10, 32, 52, 49, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 56, 54, 46, 112, 97, 116, 10, 32, 52, 50, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 56, 53, 46, 112, 97, 116, 10, 32, 52, 51, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 56, 52, 46, 112, 97, 116, 10, 32, 52, 52, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 56, 51, 46, 112, 97, 116, 10, 32, 52, 53, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 56, 50, 46, 112, 97, 116, 10, 32, 52, 54, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 56, 49, 46, 112, 97, 116, 10, 32, 52, 55, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 56, 48, 46, 112, 97, 116, 10, 32, 52, 56, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 55, 57, 46, 112, 97, 116, 10, 32, 52, 57, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 55, 56, 46, 112, 97, 116, 10, 32, 53, 48, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 55, 55, 46, 112, 97, 116, 10, 32, 53, 49, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 55, 54, 46, 112, 97, 116, 10, 32, 53, 50, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 55, 53, 46, 112, 97, 116, 10, 32, 53, 51, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 55, 52, 46, 112, 97, 116, 10, 32, 53, 52, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 55, 51, 46, 112, 97, 116, 10, 32, 53, 53, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 55, 50, 46, 112, 97, 116, 10, 32, 53, 54, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 55, 49, 46, 112, 97, 116, 10, 32, 53, 55, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 55, 48, 46, 112, 97, 116, 10, 32, 53, 56, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 54, 57, 46, 112, 97, 116, 10, 32, 53, 57, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 54, 56, 46, 112, 97, 116, 10, 32, 54, 48, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 54, 55, 46, 112, 97, 116, 10, 32, 54, 49, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 54, 54, 46, 112, 97, 116, 10, 32, 54, 50, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 54, 53, 46, 112, 97, 116, 10, 32, 54, 51, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 54, 52, 46, 112, 97, 116, 10, 32, 54, 52, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 54, 51, 46, 112, 97, 116, 10, 32, 54, 53, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 54, 50, 46, 112, 97, 116, 10, 32, 54, 54, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 54, 49, 46, 112, 97, 116, 10, 32, 54, 55, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 54, 48, 46, 112, 97, 116, 10, 32, 54, 56, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 53, 57, 46, 112, 97, 116, 10, 32, 54, 57, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 53, 56, 46, 112, 97, 116, 10, 32, 55, 48, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 53, 55, 46, 112, 97, 116, 10, 32, 55, 49, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 53, 54, 46, 112, 97, 116, 10, 32, 55, 50, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 53, 53, 46, 112, 97, 116, 10, 32, 55, 51, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 53, 52, 46, 112, 97, 116, 10, 32, 55, 52, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 53, 51, 46, 112, 97, 116, 10, 32, 55, 53, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 53, 50, 46, 112, 97, 116, 10, 32, 55, 54, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 53, 49, 46, 112, 97, 116, 10, 32, 55, 55, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 53, 48, 46, 112, 97, 116, 10, 32, 55, 56, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 52, 57, 46, 112, 97, 116, 10, 32, 55, 57, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 52, 56, 46, 112, 97, 116, 10, 32, 56, 48, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 52, 55, 46, 112, 97, 116, 10, 32, 56, 49, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 52, 54, 46, 112, 97, 116, 10, 32, 56, 50, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 52, 53, 46, 112, 97, 116, 10, 32, 56, 51, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 52, 52, 46, 112, 97, 116, 10, 32, 56, 52, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 52, 51, 46, 112, 97, 116, 10, 32, 56, 53, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 52, 50, 46, 112, 97, 116, 10, 32, 56, 54, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 52, 49, 46, 112, 97, 116, 10, 32, 56, 55, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 52, 48, 46, 112, 97, 116, 10, 32, 56, 56, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 51, 57, 46, 112, 97, 116, 10, 32, 56, 57, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 51, 56, 46, 112, 97, 116, 10, 32, 57, 48, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 51, 55, 46, 112, 97, 116, 10, 32, 57, 49, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 51, 54, 46, 112, 97, 116, 10, 32, 57, 50, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 51, 53, 46, 112, 97, 116, 10, 32, 57, 51, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 51, 52, 46, 112, 97, 116, 10, 32, 57, 52, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 51, 51, 46, 112, 97, 116, 10, 32, 57, 53, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 51, 50, 46, 112, 97, 116, 10, 32, 57, 54, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 51, 49, 46, 112, 97, 116, 10, 32, 57, 55, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 51, 48, 46, 112, 97, 116, 10, 32, 57, 56, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 50, 57, 46, 112, 97, 116, 10, 32, 57, 57, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 50, 56, 46, 112, 97, 116, 10, 32, 49, 48, 48, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 50, 55, 46, 112, 97, 116, 10, 32, 49, 48, 49, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 50, 54, 46, 112, 97, 116, 10, 32, 49, 48, 50, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 50, 53, 46, 112, 97, 116, 10, 32, 49, 48, 51, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 50, 52, 46, 112, 97, 116, 10, 32, 49, 48, 52, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 50, 51, 46, 112, 97, 116, 10, 32, 49, 48, 53, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 50, 50, 46, 112, 97, 116, 10, 32, 49, 48, 54, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 50, 49, 46, 112, 97, 116, 10, 32, 49, 48, 55, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 50, 48, 46, 112, 97, 116, 10, 32, 49, 48, 56, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 57, 46, 112, 97, 116, 10, 32, 49, 48, 57, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 56, 46, 112, 97, 116, 10, 32, 49, 49, 48, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 55, 46, 112, 97, 116, 10, 32, 49, 49, 49, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 54, 46, 112, 97, 116, 10, 32, 49, 49, 50, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 53, 46, 112, 97, 116, 10, 32, 49, 49, 51, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 52, 46, 112, 97, 116, 10, 32, 49, 49, 52, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 51, 46, 112, 97, 116, 10, 32, 49, 49, 53, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 50, 46, 112, 97, 116, 10, 32, 49, 49, 54, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 49, 46, 112, 97, 116, 10, 32, 49, 49, 55, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 48, 46, 112, 97, 116, 10, 32, 49, 49, 56, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 57, 46, 112, 97, 116, 10, 32, 49, 49, 57, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 56, 46, 112, 97, 116, 10, 32, 49, 50, 48, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 55, 46, 112, 97, 116, 10, 32, 49, 50, 49, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 54, 46, 112, 97, 116, 10, 32, 49, 50, 50, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 53, 46, 112, 97, 116, 10, 32, 49, 50, 51, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 52, 46, 112, 97, 116, 10, 32, 49, 50, 52, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 51, 46, 112, 97, 116, 10, 32, 49, 50, 53, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 50, 46, 112, 97, 116, 10, 32, 49, 50, 54, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 49, 46, 112, 97, 116, 10, 32, 49, 50, 55, 9, 32, 97, 114, 97, 99, 104, 110, 111, 45, 48, 46, 112, 97, 116, 10];\\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/typeof.js\\nvar helpers_typeof = __webpack_require__(5);\\nvar typeof_default = /*#__PURE__*/__webpack_require__.n(helpers_typeof);\\n\\n// CONCATENATED MODULE: ./src/LibTiMidity.js\\n// https://github.com/kripken/emscripten/wiki/\\nvar INT_TYPES={i1:0,i8:0,i16:0,i32:0,i64:0};var FLOAT_TYPES={\\\"float\\\":0,\\\"double\\\":0};/** @class */var LibTiMidity_LibTiMidity=/**\\n * Library to enable playback of MIDI files.\\n * @param {undefined}\\n * @return {object} The module of an instance of LibTiMidity.\\n * @property {Number} TOTAL_MEMORY The amount of memory available to the library.\\n */function LibTiMidity(){classCallCheck_default()(this,LibTiMidity);var Runtime={stackSave:function stackSave(){return STACKTOP;},stackRestore:function stackRestore(stackTop){STACKTOP=stackTop;},isNumberType:function isNumberType(type){return type in INT_TYPES||type in FLOAT_TYPES;},isPointerType:function isPointerType(type){return type[type.length-1]=='*';},isStructType:function isStructType(type){if(isPointerType(type))return false;if(isArrayType(type))return true;if(/?/.test(type))return true;// { i32, i8 } etc. - anonymous struct types\\n// See comment in isStructPointerType()\\nreturn type[0]=='%';},getNativeTypeSize:function getNativeTypeSize(type){switch(type){case'i1':case'i8':return 1;case'i16':return 2;case'i32':return 4;case'i64':return 8;case'float':return 4;case'double':return 8;default:{if(type[type.length-1]==='*'){return Runtime.QUANTUM_SIZE;// A pointer\\n}else if(type[0]==='i'){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8;}}}},getNativeFieldSize:function getNativeFieldSize(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE);},dedup:function dedup(items,ident){var seen={};if(ident){return items.filter(function(item){if(seen[item[ident]])return false;seen[item[ident]]=true;return true;});}else{return items.filter(function(item){if(seen[item])return false;seen[item]=true;return true;});}},set:function set(){var args=typeof_default()(arguments[0])==='object'?arguments[0]:arguments;var ret={};for(var i=0;i=0){diffs.push(curr-prev);}prev=curr;return curr;});type.flatSize=Runtime.alignMemory(type.flatSize,type.alignSize);if(diffs.length==0){type.flatFactor=type.flatSize;}else if(Runtime.dedup(diffs).length==1){type.flatFactor=diffs[0];}type.needsFlattening=type.flatFactor!=1;return type.flatIndexes;},generateStructInfo:function generateStructInfo(struct,typeName,offset){var type,alignment;if(typeName){offset=offset||0;type=(typeof Types==='undefined'?Runtime.typeInfo:Types.types)[typeName];if(!type)return null;if(type.fields.length!=struct.length){console.warn('Number of named fields must match the type for '+typeName+': possibly duplicate struct names. Cannot return structInfo');return null;}alignment=type.flatIndexes;}else{var type={fields:struct.map(function(item){return item[0];})};alignment=Runtime.calculateStructAlignment(type);}var ret={__size__:type.flatSize};if(typeName){struct.forEach(function(item,i){if(typeof item==='string'){ret[item]=alignment[i]+offset;}else{// embedded struct\\nvar key;for(var k in item){key=k;}ret[key]=Runtime.generateStructInfo(item[key],type.fields[i],alignment[i]);}});}else{struct.forEach(function(item,i){ret[item[1]]=alignment[i];});}return ret;},dynCall:function dynCall(sig,ptr,args){if(args&&args.length){if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);return Module['dynCall_'+sig].apply(null,args);}else{return Module['dynCall_'+sig].call(null,ptr);}},UTF8Processor:function UTF8Processor(){var buffer=[];var needed=0;this.processCChar=function(code){code=code&0xff;if(buffer.length==0){if((code&0x80)==0x00){// 0xxxxxxx\\nreturn String.fromCharCode(code);}buffer.push(code);if((code&0xe0)==0xc0){// 110xxxxx\\nneeded=1;}else if((code&0xf0)==0xe0){// 1110xxxx\\nneeded=2;}else{// 11110xxx\\nneeded=3;}return'';}if(needed){buffer.push(code);needed--;if(needed>0)return'';}var c1=buffer[0];var c2=buffer[1];var c3=buffer[2];var c4=buffer[3];var ret;if(buffer.length==2){ret=String.fromCharCode((c1&0x1f)<<6|c2&0x3f);}else if(buffer.length==3){ret=String.fromCharCode((c1&0x0f)<<12|(c2&0x3f)<<6|c3&0x3f);}else{// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\\nvar codePoint=(c1&0x07)<<18|(c2&0x3f)<<12|(c3&0x3f)<<6|c4&0x3f;ret=String.fromCharCode(Math.floor((codePoint-0x10000)/0x400)+0xd800,(codePoint-0x10000)%0x400+0xdc00);}buffer.length=0;return ret;};this.processJSString=function(string){string=unescape(encodeURIComponent(string));var ret=[];for(var i=0;i=TOTAL_MEMORY){abort('Out of memory.');}return ret;},alignMemory:function alignMemory(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:8))*(quantum?quantum:8);return ret;},makeBigInt:function makeBigInt(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret;},GLOBAL_BASE:8,QUANTUM_SIZE:4};/* Initialize the runtime memory */ // TODO: Allow user to set up how much memory LibTimidity get at initialization\\n// original amount of memory was 67108864\\nvar TOTAL_MEMORY=67108864*8;var PAGE_SIZE=4096;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var STATIC_BASE=0,STATICTOP=0;var STACK_BASE=0,STACKTOP=0,STACK_MAX=0;// stack area\\nvar DYNAMIC_BASE=0,DYNAMICTOP=0;// dynamic area handled by sbrk\\nassert(typeof Int32Array!=='undefined'&&typeof Float64Array!=='undefined'&&!!new Int32Array(1)['subarray']&&!!new Int32Array(1)['set'],'Typed arrays not supported.');var buffer=new ArrayBuffer(TOTAL_MEMORY);HEAP8=new Int8Array(buffer);HEAP16=new Int16Array(buffer);HEAP32=new Int32Array(buffer);HEAPU8=new Uint8Array(buffer);HEAPU16=new Uint16Array(buffer);HEAPU32=new Uint32Array(buffer);HEAPF32=new Float32Array(buffer);HEAPF64=new Float64Array(buffer);// Endianness check (note: assumes compiler arch was little-endian)\\nHEAP32[0]=255;assert(HEAPU8[0]===255&&HEAPU8[3]===0,'Typed arrays 2 must be run on a little-endian system');/**\\n * @function alignMemoryPage\\n * @memberof LibTiMidity\\n * @instance\\n * @param {Number} x\\n */function alignMemoryPage(x){return x+4095&-4096;}var Module={};this.Module=Module;Module.arguments=arguments;if(!Module['arguments']){Module['arguments']=[];}Module.read=function(url){var xhr=new XMLHttpRequest();xhr.open('GET',url,false);xhr.send(null);return xhr.responseText;};Module.print=function(message){console.log(message);};Module.preRun=[];Module.postRun=[];// Whether we are quitting the application. If so, no more code should run.\\nvar ABORT=false;var tempI64;function ExitStatus(status){this.name='ExitStatus';this.message='Program terminated with exit('+status+')';this.status=status;}ExitStatus.prototype=new Error();ExitStatus.prototype.constructor=ExitStatus;/**\\n * Exits the script.\\n * @function exit\\n * @memberof LibTiMidity\\n * @instance\\n * @param {string} status The message to display.\\n */function exit(status){ABORT=true;STACKTOP=initialStackTop;// exit the runtime\\nexitRuntime();throw new ExitStatus(status);}Module.exit=exit;/**\\n * Throws an error that aborts the execution of the script.\\n * @function abort\\n * @memberof LibTiMidity\\n * @instance\\n * @param {string} text The message to display.\\n */function abort(text){ABORT=true;throw new Error(text).stack;}Module.abort=abort;/**\\n * Aborts the execution of the script if assertion fails.\\n * @function assert\\n * @memberof LibTiMidity\\n * @instance\\n * @param {boolean} condition The assertion to test.\\n * @param {string} text The message to display if the assertion fails.\\n */function assert(condition,text){if(!condition){abort(text);}}Module.assert=assert;/**\\n * A wrapper to call functions.\\n * @function call\\n * @memberof LibTiMidity\\n * @instance\\n * @param {string} ident The name of the function to call.\\n * @param {string} returnType The return type of the function, one of the JS types 'number', 'string' or 'array' (use 'number' for any C pointer, and 'array' for JavaScript arrays and typed arrays; note that arrays are 8-bit).\\n * @param {array} argTypes An array of the types of arguments for the function (if there are no arguments, this can be ommitted). Types are as in returnType, except that 'array' is not possible (there is no way for us to know the length of the array)\\n * @param {array} args An array of the arguments to the function, as native JS values (as in returnType). Note that string arguments will be stored on the stack (the JS string will become a C string on the stack).\\n * @return Native JS value (as in returnType)\\n */Module.call=function call(ident,returnType,argTypes,args){var func=Module['_'+ident];if(!func){abort(\\\"Unknown function: \\\\\\\"\\\".concat(ident,\\\"\\\\\\\".\\\"));}var stack=0;function toC(value,type){if(type=='string'){if(value===null||value===undefined||value===0)return 0;// null string\\nvalue=intArrayFromString(value);type='array';}if(type=='array'){if(!stack)stack=Runtime.stackSave();var _ret=Runtime.stackAlloc(value.length);writeArrayToMemory(value,_ret);return _ret;}return value;}function fromC(value,type){if(type=='string'){return Pointer_stringify(value);}assert(type!='array');return value;}var i=0;var cArgs=args?args.map(function(arg){return toC(arg,argTypes[i++]);}):[];var ret=fromC(func.apply(null,cArgs),returnType);if(stack)Runtime.stackRestore(stack);return ret;};/**\\n * Dynamically sets a value in memory at runtime. Only does *aligned* writes. This is a lower-level operation.\\n * @function setValue\\n * @memberof LibTiMidity\\n * @instance\\n * @param ptr Pointer.\\n * @param value\\n * @param {string} type LLVM type ('i8', , 'i16', 'i32', 'i64', 'float', 'double')\\n */function setValue(ptr,value,type){type=type||'i8';if(type.charAt(type.length-1)==='*')type='i32';// pointers are 32-bit\\nswitch(type){case'i1':HEAP8[ptr]=value;break;case'i8':HEAP8[ptr]=value;break;case'i16':HEAP16[ptr>>1]=value;break;case'i32':HEAP32[ptr>>2]=value;break;case'i64':tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case'float':HEAPF32[ptr>>2]=value;break;case'double':HEAPF64[ptr>>3]=value;break;default:abort('invalid type for setValue: '+type);}}Module.setValue=setValue;/**\\n * Dynamically gets a value in memory at runtime. Only does *aligned* reads. This is a lower-level operation.\\n * @function getValue\\n * @memberof LibTiMidity\\n * @instance\\n * @param ptr Pointer.\\n * @param {string} type LLVM type ('i8', , 'i16', 'i32', 'i64', 'float', 'double')\\n */function getValue(ptr,type){type=type||'i8';if(type.charAt(type.length-1)==='*')type='i32';// pointers are 32-bit\\nswitch(type){case'i1':return HEAP8[ptr];case'i8':return HEAP8[ptr];case'i16':return HEAP16[ptr>>1];case'i32':return HEAP32[ptr>>2];case'i64':return HEAP32[ptr>>2];case'float':return HEAPF32[ptr>>2];case'double':return HEAPF64[ptr>>3];default:abort('invalid type for getValue: '+type);}return null;}Module['getValue']=getValue;var ALLOC_NORMAL=0;// Tries to use _malloc()\\nvar ALLOC_STACK=1;// Lives for the duration of the current function call\\nvar ALLOC_STATIC=2;// Cannot be freed\\nvar ALLOC_DYNAMIC=3;// Cannot be freed except through sbrk\\nvar ALLOC_NONE=4;// Do not allocate\\nModule['ALLOC_NORMAL']=ALLOC_NORMAL;Module['ALLOC_STACK']=ALLOC_STACK;Module['ALLOC_STATIC']=ALLOC_STATIC;Module['ALLOC_DYNAMIC']=ALLOC_DYNAMIC;Module['ALLOC_NONE']=ALLOC_NONE;/**\\n * This is for internal use. Optimized for multiple syntaxes to save space in generated code. You should allocate memory using _malloc(), initialize it with setValue(), and so forth.\\n * @function allocate\\n * @memberof LibTiMidity\\n * @instance\\n * @param slab An array of data or a number. If a number, then the size of the block to allocate in *bytes* (note that this is sometimes confusing: the next parameter does not affect this).\\n * @param types Either an array of types, one for each byte (or 0 if no type at that position), or a single type which is used for the entire block. This only matters if there is initial data. If slab is a number, then this does not matter at all and is ignored.\\n * @param allocator How to allocate memory, see ALLOC_*\\n */function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==='number'){zeroinit=true;size=slab;}else{zeroinit=false;size=slab.length;}var singleType=typeof types==='string'?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr;}else{ret=[_malloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length));}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0;}stop=ret+size;while(ptr=128)hasUtf=true;else if(t==0&&!length)break;i++;if(length&&i==length)break;}if(!length)length=i;var ret='';if(!hasUtf){var MAX_CHUNK=1024;// split up into chunks, because .apply on a huge string can overflow the stack\\nvar curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK;}return ret;}var utf8=new Runtime.UTF8Processor();for(i=0;i>1];if(codeUnit==0)return str;++i;// fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.\\nstr+=String.fromCharCode(codeUnit);}}Module['UTF16ToString']=UTF16ToString;/**\\n * Copies a JavaScript string to the emscripten HEAP. The copy is null-terminated and encoded in UTF16LE form. The copy will require at most (str.length*2+1)*2 bytes of space in the HEAP.\\n * @function stringToUTF16\\n * @memberof LibTiMidity\\n * @instance\\n * @param {string} str JavaScript string.\\n * @param outPtr HEAP address (pointer).\\n */function stringToUTF16(str,outPtr){for(var i=0;i>1]=codeUnit;}// Null-terminate the pointer to the HEAP.\\nHEAP16[outPtr+str.length*2>>1]=0;}Module['stringToUTF16']=stringToUTF16;/**\\n * @function UTF32ToString\\n * @memberof LibTiMidity\\n * @instance\\n * @param ptr Pointer to a null-terminated UTF32LE-encoded string in the emscripten HEAP.\\n * @return\\n */function UTF32ToString(ptr){var i=0;var str='';while(1){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)return str;++i;// Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.\\nif(utf32>=0x10000){var ch=utf32-0x10000;str+=String.fromCharCode(0xd800|ch>>10,0xdc00|ch&0x3ff);}else{str+=String.fromCharCode(utf32);}}}Module['UTF32ToString']=UTF32ToString;/**\\n * Copies a JavaScript string to the emscripten HEAP. The copy is null-terminated and encoded in UTF32LE form. The copy will require at most (str.length+1)*4 bytes of space in the HEAP.\\n * @function stringToUTF32\\n * @memberof LibTiMidity\\n * @instance\\n * @param {string} str JavaScript string.\\n * @param outPtr HEAP address (pointer).\\n */function stringToUTF32(str,outPtr){var iChar=0;for(var iCodeUnit=0;iCodeUnit=0xd800&&codeUnit<=0xdfff){var trailSurrogate=str.charCodeAt(++iCodeUnit);codeUnit=0x10000+((codeUnit&0x3ff)<<10)|trailSurrogate&0x3ff;}HEAP32[outPtr+iChar*4>>2]=codeUnit;++iChar;}// Null-terminate the pointer to the HEAP.\\nHEAP32[outPtr+iChar*4>>2]=0;}Module['stringToUTF32']=stringToUTF32;/**\\n * @function callRuntimeCallbacks\\n * @memberof LibTiMidity\\n * @instance\\n * @param callbacks\\n */function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=='function'){callback();continue;}var func=callback.func;if(typeof func==='number'){if(callback.arg===undefined){Runtime.dynCall('v',func);}else{Runtime.dynCall('vi',func,[callback.arg]);}}else{func(callback.arg===undefined?null:callback.arg);}}}var __ATPRERUN__=[];// functions called before the runtime is initialized\\nvar __ATINIT__=[];// functions called during startup\\nvar __ATMAIN__=[];// functions called when main() is to be run\\nvar __ATEXIT__=[];// functions called during shutdown\\nvar __ATPOSTRUN__=[];// functions called after the runtime has exited\\nvar runtimeInitialized=false;function preRun(){// compatibility - merge in anything from Module['preRun'] at this time\\nif(Module['preRun']){if(typeof Module['preRun']=='function')Module['preRun']=[Module['preRun']];while(Module['preRun'].length){addOnPreRun(Module['preRun'].shift());}}callRuntimeCallbacks(__ATPRERUN__);}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__);}function preMain(){callRuntimeCallbacks(__ATMAIN__);}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);}function postRun(){// compatibility - merge in anything from Module['postRun'] at this time\\nif(Module['postRun']){if(typeof Module['postRun']=='function')Module['postRun']=[Module['postRun']];while(Module['postRun'].length){addOnPostRun(Module['postRun'].shift());}}callRuntimeCallbacks(__ATPOSTRUN__);}/**\\n * @function addOnPreRun\\n * @memberof LibTiMidity\\n * @instance\\n * @param cb Callback.\\n */function addOnPreRun(cb){__ATPRERUN__.unshift(cb);}Module['addOnPreRun']=Module.addOnPreRun=addOnPreRun;/**\\n * @function addOnInit\\n * @memberof LibTiMidity\\n * @instance\\n * @param cb Callback.\\n */function addOnInit(cb){__ATINIT__.unshift(cb);}Module['addOnInit']=addOnInit;/**\\n * @function addOnPreMain\\n * @memberof LibTiMidity\\n * @instance\\n * @param cb Callback.\\n */function addOnPreMain(cb){__ATMAIN__.unshift(cb);}Module['addOnPreMain']=addOnPreMain;/**\\n * @function addOnExit\\n * @memberof LibTiMidity\\n * @instance\\n * @param cb Callback.\\n */function addOnExit(cb){__ATEXIT__.unshift(cb);}Module['addOnExit']=addOnExit;/**\\n * @function addOnPostRun\\n * @memberof LibTiMidity\\n * @instance\\n * @param cb Callback.\\n */function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb);}Module['addOnPostRun']=addOnPostRun;/**\\n * @function intArrayFromString\\n * @memberof LibTiMidity\\n * @instance\\n * @param stringy\\n * @param dontAddNull\\n * @param length\\n */ // Tools\\n// This processes a JS string into a C-line array of numbers, 0-terminated.\\n// For LLVM-originating strings, see parser.js:parseLLVMString function\\nfunction intArrayFromString(stringy,dontAddNull,length/* optional */){var ret=new Runtime.UTF8Processor().processJSString(stringy);if(length){ret.length=length;}if(!dontAddNull){ret.push(0);}return ret;}Module['intArrayFromString']=intArrayFromString;/**\\n * @function intArrayToString\\n * @memberof LibTiMidity\\n * @instance\\n * @param array\\n */function intArrayToString(array){var ret=[];for(var i=0;i0xff){chr&=0xff;}ret.push(String.fromCharCode(chr));}return ret.join('');}Module['intArrayToString']=intArrayToString;/**\\n * @function writeStringToMemory\\n * @memberof LibTiMidity\\n * @instance\\n * @param string\\n * @param buffer\\n * @param dontAddNull\\n */ // Write a Javascript array to somewhere in the heap\\nfunction writeStringToMemory(string,buffer,dontAddNull){var array=intArrayFromString(string,dontAddNull);var i=0;while(i=0){return value;}return bits<=32?2*Math.abs(1<=half&&(bits<=32||value>half)){// for huge values, we can hit the precision limit and always get true here. so don't do that\\n// but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors\\n// TODO: In i64 mode 1, resign the two parts separately and safely\\nvalue=-2*half+value;// Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts\\n}return value;}if(!Math['imul'])Math['imul']=function(a,b){var ah=a>>>16;var al=a&0xffff;var bh=b>>>16;var bl=b&0xffff;return al*bl+(ah*bl+al*bh<<16)|0;};Math.imul=Math['imul'];var Math_abs=Math.abs;var Math_sin=Math.sin;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_min=Math.min;// A counter of dependencies for calling run(). If we need to\\n// do asynchronous work before running, increment this and\\n// decrement it. Incrementing must happen in a place like\\n// PRE_RUN_ADDITIONS (used by emcc to add file preloading).\\n// Note that you can add dependencies in preRun, even though\\n// it happens right before run - run will be postponed until\\n// the dependencies are met.\\nvar runDependencies=0;var runDependencyTracking={};var runDependencyWatcher=null;var dependenciesFulfilled=null;// overridden to take different actions when all run dependencies are fulfilled\\n/**\\n * @function addRunDependency\\n * @memberof LibTiMidity\\n * @instance\\n * @param id\\n */function addRunDependency(id){runDependencies++;if(Module['monitorRunDependencies']){Module['monitorRunDependencies'](runDependencies);}if(id){assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;}else{console.warn('warning: run dependency added without ID');}}Module['addRunDependency']=addRunDependency;/**\\n * @function removeRunDependency\\n * @memberof LibTiMidity\\n * @instance\\n * @param id\\n */function removeRunDependency(id){runDependencies--;if(Module['monitorRunDependencies']){Module['monitorRunDependencies'](runDependencies);}if(id){assert(runDependencyTracking[id]);delete runDependencyTracking[id];}else{console.warn('warning: run dependency removed without ID');}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null;}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback();// can add another dependenciesFulfilled\\n}}}Module['removeRunDependency']=removeRunDependency;var memoryInitializer=null;// === Body ===\\nSTATIC_BASE=8;STATICTOP=STATIC_BASE+8448;/* global initializers */__ATINIT__.push({func:function func(){runPostSets();}});var _stderr;var _stderr=_stderr=allocate([0,0,0,0,0,0,0,0],'i8',ALLOC_STATIC);/* memory initializer */ // prettier-ignore\\nallocate([0,0,0,0,0,0,144,63,75,191,53,65,90,136,144,63,241,46,189,130,62,21,145,63,249,198,51,115,211,166,145,63,194,109,221,10,65,61,146,63,61,194,157,150,176,216,146,63,232,234,78,195,76,121,147,63,204,6,121,169,65,31,148,63,172,119,109,217,188,202,148,63,136,88,201,103,237,123,149,63,154,143,98,250,3,51,150,63,89,8,163,213,50,240,150,63,69,192,85,234,173,179,151,63,98,112,233,227,170,125,152,63,242,189,44,55,97,78,153,63,189,253,135,49,10,38,154,63,84,184,184,8,225,4,155,63,232,64,19,235,34,235,155,63,101,213,78,16,15,217,156,63,82,228,224,202,230,206,157,63,110,60,236,153,237,204,158,63,149,18,201,59,105,211,159,63,39,122,149,224,80,113,160,63,129,244,116,208,112,253,160,63,39,24,58,230,58,142,161,63,74,29,119,226,214,35,162,63,50,84,131,216,109,190,162,63,137,39,194,57,42,94,163,63,195,57,74,225,55,3,164,63,225,208,239,31,196,173,164,63,141,222,181,200,253,93,165,63,62,15,169,61,21,20,166,63,223,103,40,125,60,208,166,63,155,23,159,47,167,146,167,63,148,66,179,181,138,91,168,63,80,170,237,54,30,43,169,63,237,57,222,176,154,1,170,63,104,158,193,6,59,223,170,63,182,54,172,17,60,196,171,63,248,203,62,177,220,176,172,63,49,168,233,220,93,165,173,63,115,200,194,181,2,162,174,63,108,16,244,152,16,167,175,63,78,71,99,153,103,90,176,63,213,5,40,73,196,229,176,63,17,38,228,158,196,117,177,63,185,204,197,35,144,10,178,63,128,43,232,177,79,164,178,63,152,204,138,127,45,67,179,63,121,115,168,42,85,231,179,63,129,193,240,196,243,144,180,63,19,232,39,224,55,64,181,63,242,205,239,154,81,245,181,63,121,42,254,173,114,176,182,63,62,55,195,121,206,113,183,63,150,183,132,20,154,57,184,63,124,53,241,88,12,8,185,63,40,116,47,245,93,221,185,63,234,58,110,122,201,185,186,63,0,190,248,108,139,157,187,63,185,15,212,84,226,136,188,63,119,41,234,206,14,124,189,63,90,67,199,158,83,119,190,63,113,89,238,192,245,122,191,63,90,243,228,62,158,67,192,63,134,4,159,190,56,206,192,63,250,182,112,109,112,93,193,63,134,74,113,157,108,241,193,63,158,146,207,239,85,138,194,63,241,160,249,95,86,40,195,63,53,128,35,79,153,203,195,63,8,41,48,144,75,116,196,63,52,246,255,115,155,34,197,63,60,249,39,214,184,214,197,63,231,172,21,42,213,144,198,63,103,161,162,136,35,81,199,63,64,220,27,190,216,23,200,63,253,197,192,88,43,229,200,63,169,160,189,183,83,185,201,63,151,163,165,26,140,148,202,63,112,252,112,177,16,119,203,63,132,25,3,173,31,97,204,63,196,198,61,80,249,82,205,63,129,205,165,1,224,76,206,63,12,239,157,93,24,79,207,63,179,157,158,164,244,44,208,63,24,248,226,2,206,182,208,63,221,27,97,34,62,69,209,63,241,38,102,30,108,216,209,63,184,223,131,95,128,112,210,63,143,212,168,166,164,13,211,63,246,6,151,24,4,176,211,63,25,72,188,73,203,87,212,63,38,135,111,74,40,5,213,63,234,109,150,179,74,184,213,63,94,196,182,179,99,113,214,63,191,49,119,28,166,48,215,63,64,16,147,112,70,246,215,63,245,39,69,242,122,194,216,63,68,70,45,178,123,149,217,63,234,200,180,158,130,111,218,63,100,86,246,147,203,80,219,63,204,33,45,108,148,57,220,63,17,61,176,16,29,42,221,63,59,163,126,139,167,34,222,63,13,204,96,25,120,35,223,63,161,97,82,158,106,22,224,63,42,244,60,232,131,159,224,63,162,211,120,142,45,45,225,63,38,84,213,117,142,191,225,63,187,17,150,206,206,86,226,63,84,154,123,31,24,243,226,63,218,31,42,81,149,148,227,63,89,83,241,185,114,59,228,63,111,165,248,41,222,231,228,63,145,67,211,247,6,154,229,63,32,70,127,13,30,82,230,63,216,160,211,245,85,16,231,63,137,133,96,234,226,212,231,63,76,8,198,225,250,159,232,63,27,245,132,158,213,113,233,63,9,232,77,190,172,74,234,63,44,220,210,201,187,42,235,63,254,136,31,69,64,18,236,63,11,11,125,192,121,1,237,63,244,122,229,233,169,248,237,63,130,61,12,159,20,248,238,63,0,0,0,0,0,0,240,63,0,0,128,63,0,0,0,0,0,0,220,67,0,0,0,0,168,25,0,0,0,0,0,0,240,31,0,0,214,33,0,0,217,35,0,0,251,37,0,0,61,40,0,0,161,42,0,0,42,45,0,0,218,47,0,0,178,50,0,0,182,53,0,0,232,56,0,0,74,60,0,0,224,63,0,0,172,67,0,0,178,71,0,0,245,75,0,0,122,80,0,0,67,85,0,0,85,90,0,0,180,95,0,0,101,101,0,0,108,107,0,0,207,113,0,0,148,120,0,0,191,127,0,0,88,135,0,0,100,143,0,0,235,151,0,0,243,160,0,0,134,170,0,0,169,180,0,0,103,191,0,0,201,202,0,0,216,214,0,0,158,227,0,0,39,241,0,0,126,255,0,0,176,14,1,0,200,30,1,0,214,47,1,0,231,65,1,0,11,85,1,0,83,105,1,0,207,126,1,0,146,149,1,0,176,173,1,0,61,199,1,0,79,226,1,0,253,254,1,0,95,29,2,0,144,61,2,0,171,95,2,0,206,131,2,0,22,170,2,0,165,210,2,0,158,253,2,0,36,43,3,0,96,91,3,0,122,142,3,0,158,196,3,0,250,253,3,0,191,58,4,0,33,123,4,0,87,191,4,0,156,7,5,0,44,84,5,0,74,165,5,0,59,251,5,0,73,86,6,0,192,182,6,0,244,28,7,0,59,137,7,0,243,251,7,0,125,117,8,0,66,246,8,0,174,126,9,0,55,15,10,0,88,168,10,0,149,74,11,0,119,246,11,0,145,172,12,0,128,109,13,0,232,57,14,0,119,18,15,0,230,247,15,0,251,234,16,0,131,236,17,0,92,253,18,0,110,30,20,0,177,80,21,0,42,149,22,0,238,236,23,0,35,89,25,0,0,219,26,0,207,115,28,0,237,36,30,0,205,239,31,0,245,213,33,0,6,217,35,0,184,250,37,0,220,60,40,0,98,161,42,0,83,42,45,0,219,217,47,0,70,178,50,0,0,182,53,0,158,231,56,0,218,73,60,0,153,223,63,0,234,171,67,0,12,178,71,0,112,245,75,0,185,121,80,0,196,66,85,0,167,84,90,0,183,179,95,0,139,100,101,0,0,108,107,0,60,207,113,0,181,147,120,0,50,191,127,0,212,87,135,0,25,100,143,0,223,234,151,0,114,243,160,0,135,133,170,0,78,169,180,0,110,103,191,0,32,161,7,0,0,0,0,0,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,240,63,113,93,245,158,236,0,240,63,84,18,150,75,217,1,240,63,207,232,226,5,198,2,240,63,21,171,220,205,178,3,240,63,102,35,132,163,159,4,240,63,10,28,218,134,140,5,240,63,88,95,223,119,121,6,240,63,177,183,148,118,102,7,240,63,131,239,250,130,83,8,240,63,70,209,18,157,64,9,240,63,127,39,221,196,45,10,240,63,191,188,90,250,26,11,240,63,160,91,140,61,8,12,240,63,204,206,114,142,245,12,240,63,245,224,14,237,226,13,240,63,218,92,97,89,208,14,240,63,71,13,107,211,189,15,240,63,17,189,44,91,171,16,240,63,28,55,167,240,152,17,240,63,85,70,219,147,134,18,240,63,181,181,201,68,116,19,240,63,66,80,115,3,98,20,240,63,14,225,216,207,79,21,240,63,53,51,251,169,61,22,240,63,224,17,219,145,43,23,240,63,68,72,121,135,25,24,240,63,159,161,214,138,7,25,240,63,63,233,243,155,245,25,240,63,122,234,209,186,227,26,240,63,180,112,113,231,209,27,240,63,93,71,211,33,192,28,240,63,238,57,248,105,174,29,240,63,239,19,225,191,156,30,240,63,242,160,142,35,139,31,240,63,148,172,1,149,121,32,240,63,129,2,59,20,104,33,240,63,109,110,59,161,86,34,240,63,26,188,3,60,69,35,240,63,85,183,148,228,51,36,240,63,247,43,239,154,34,37,240,63,228,229,19,95,17,38,240,63,14,177,3,49,0,39,240,63,112,89,191,16,239,39,240,63,19,171,71,254,221,40,240,63,10,114,157,249,204,41,240,63,117,122,193,2,188,42,240,63,128,144,180,25,171,43,240,63,97,128,119,62,154,44,240,63,92,22,11,113,137,45,240,63,191,30,112,177,120,46,240,63,230,101,167,255,103,47,240,63,54,184,177,91,87,48,240,63,34,226,143,197,70,49,240,63,39,176,66,61,54,50,240,63,209,238,202,194,37,51,240,63,180,106,41,86,21,52,240,63,113,240,94,247,4,53,240,63,183,76,108,166,244,53,240,63,63,76,82,99,228,54,240,63,204,187,17,46,212,55,240,63,49,104,171,6,196,56,240,63,73,30,32,237,179,57,240,63,254,170,112,225,163,58,240,63,67,219,157,227,147,59,240,63,24,124,168,243,131,60,240,63,138,90,145,17,116,61,240,63,177,67,89,61,100,62,240,63,176,4,1,119,84,63,240,63,182,106,137,190,68,64,240,63,0,67,243,19,53,65,240,63,212,90,63,119,37,66,240,63,133,127,110,232,21,67,240,63,114,126,129,103,6,68,240,63,7,37,121,244,246,68,240,63,185,64,86,143,231,69,240,63,12,159,25,56,216,70,240,63,141,13,196,238,200,71,240,63,216,89,86,179,185,72,240,63,146,81,209,133,170,73,240,63,109,194,53,102,155,74,240,63,40,122,132,84,140,75,240,63,140,70,190,80,125,76,240,63,110,245,227,90,110,77,240,63,177,84,246,114,95,78,240,63,66,50,246,152,80,79,240,63,26,92,228,204,65,80,240,63,63,160,193,14,51,81,240,63,194,204,142,94,36,82,240,63,192,175,76,188,21,83,240,63,98,23,252,39,7,84,240,63,220,209,157,161,248,84,240,63,112,173,50,41,234,85,240,63,107,120,187,190,219,86,240,63,37,1,57,98,205,87,240,63,2,22,172,19,191,88,240,63,116,133,21,211,176,89,240,63,247,29,118,160,162,90,240,63,18,174,206,123,148,91,240,63,91,4,32,101,134,92,240,63,113,239,106,92,120,93,240,63,1,62,176,97,106,94,240,63,194,190,240,116,92,95,240,63,122,64,45,150,78,96,240,63,247,145,102,197,64,97,240,63,22,130,157,2,51,98,240,63,191,223,210,77,37,99,240,63,229,121,7,167,23,100,240,63,137,31,60,14,10,101,240,63,181,159,113,131,252,101,240,63,130,201,168,6,239,102,240,63,20,108,226,151,225,103,240,63,154,86,31,55,212,104,240,63,79,88,96,228,198,105,240,63,124,64,166,159,185,106,240,63,115,222,241,104,172,107,240,63,149,1,68,64,159,108,240,63,77,121,157,37,146,109,240,63,18,21,255,24,133,110,240,63,104,164,105,26,120,111,240,63,222,246,221,41,107,112,240,63,16,220,92,71,94,113,240,63,165,35,231,114,81,114,240,63,81,157,125,172,68,115,240,63,211,24,33,244,55,116,240,63,246,101,210,73,43,117,240,63,147,84,146,173,30,118,240,63,140,180,97,31,18,119,240,63,209,85,65,159,5,120,240,63,93,8,50,45,249,120,240,63,57,156,52,201,236,121,240,63,118,225,73,115,224,122,240,63,54,168,114,43,212,123,240,63,163,192,175,241,199,124,240,63,246,250,1,198,187,125,240,63,113,39,106,168,175,126,240,63,101,22,233,152,163,127,240,63,44,152,127,151,151,128,240,63,48,125,46,164,139,129,240,63,226,149,246,190,127,130,240,63,197,178,216,231,115,131,240,63,98,164,213,30,104,132,240,63,82,59,238,99,92,133,240,63,58,72,35,183,80,134,240,63,200,155,117,24,69,135,240,63,185,6,230,135,57,136,240,63,214,89,117,5,46,137,240,63,242,101,36,145,34,138,240,63,237,251,243,42,23,139,240,63,180,236,228,210,11,140,240,63,63,9,248,136,0,141,240,63,147,34,46,77,245,141,240,63,192,9,136,31,234,142,240,63,226,143,6,0,223,143,240,63,35,134,170,238,211,144,240,63,184,189,116,235,200,145,240,63,224,7,102,246,189,146,240,63,233,53,127,15,179,147,240,63,44,25,193,54,168,148,240,63,13,131,44,108,157,149,240,63,0,69,194,175,146,150,240,63,127,48,131,1,136,151,240,63,22,23,112,97,125,152,240,63,89,202,137,207,114,153,240,63,234,27,209,75,104,154,240,63,119,221,70,214,93,155,240,63,185,224,235,110,83,156,240,63,119,247,192,21,73,157,240,63,131,243,198,202,62,158,240,63,187,166,254,141,52,159,240,63,9,227,104,95,42,160,240,63,99,122,6,63,32,161,240,63,205,62,216,44,22,162,240,63,85,2,223,40,12,163,240,63,21,151,27,51,2,164,240,63,53,207,142,75,248,164,240,63,233,124,57,114,238,165,240,63,110,114,28,167,228,166,240,63,17,130,56,234,218,167,240,63,40,126,142,59,209,168,240,63,25,57,31,155,199,169,240,63,83,133,235,8,190,170,240,63,81,53,244,132,180,171,240,63,156,27,58,15,171,172,240,63,200,10,190,167,161,173,240,63,118,213,128,78,152,174,240,63,82,78,131,3,143,175,240,63,22,72,198,198,133,176,240,63,134,149,74,152,124,177,240,63,116,9,17,120,115,178,240,63,188,118,26,102,106,179,240,63,73,176,103,98,97,180,240,63,15,137,249,108,88,181,240,63,18,212,208,133,79,182,240,63,95,100,238,172,70,183,240,63,17,13,83,226,61,184,240,63,78,161,255,37,53,185,240,63,72,244,244,119,44,186,240,63,63,217,51,216,35,187,240,63,125,35,189,70,27,188,240,63,91,166,145,195,18,189,240,63,59,53,178,78,10,190,240,63,142,163,31,232,1,191,240,63,206,196,218,143,249,191,240,63,133,108,228,69,241,192,240,63,71,110,61,10,233,193,240,63,180,157,230,220,224,194,240,63,122,206,224,189,216,195,240,63,80,212,44,173,208,196,240,63,253,130,203,170,200,197,240,63,83,174,189,182,192,198,240,63,46,42,4,209,184,199,240,63,121,202,159,249,176,200,240,63,42,99,145,48,169,201,240,63,67,200,217,117,161,202,240,63,212,205,121,201,153,203,240,63,247,71,114,43,146,204,240,63,212,10,196,155,138,205,240,63,158,234,111,26,131,206,240,63,148,187,118,167,123,207,240,63,3,82,217,66,116,208,240,63,68,130,152,236,108,209,240,63,186,32,181,164,101,210,240,63,214,1,48,107,94,211,240,63,22,250,9,64,87,212,240,63,2,222,67,35,80,213,240,63,50,130,222,20,73,214,240,63,69,187,218,20,66,215,240,63,236,93,57,35,59,216,240,63,223,62,251,63,52,217,240,63,230,50,33,107,45,218,240,63,213,14,172,164,38,219,240,63,137,167,156,236,31,220,240,63,240,209,243,66,25,221,240,63,0,99,178,167,18,222,240,63,191,47,217,26,12,223,240,63,61,13,105,156,5,224,240,63,150,208,98,44,255,224,240,63,245,78,199,202,248,225,240,63,141,93,151,119,242,226,240,63,162,209,211,50,236,227,240,63,129,128,125,252,229,228,240,63,133,63,149,212,223,229,240,63,21,228,27,187,217,230,240,63,163,67,18,176,211,231,240,63,176,51,121,179,205,232,240,63,198,137,81,197,199,233,240,63,127,27,156,229,193,234,240,63,126,190,89,20,188,235,240,63,116,72,139,81,182,236,240,63,31,143,49,157,176,237,240,63,72,104,77,247,170,238,240,63,197,169,223,95,165,239,240,63,119,41,233,214,159,240,240,63,79,189,106,92,154,241,240,63,69,59,101,240,148,242,240,63,0,0,0,0,0,0,240,63,99,121,217,146,143,243,240,63,192,214,199,195,154,245,241,63,21,183,49,10,254,6,243,63,139,114,141,249,162,40,244,63,94,236,240,8,129,91,245,63,205,59,127,102,158,160,246,63,176,207,104,215,16,249,247,63,60,110,61,165,254,101,249,63,173,211,90,153,159,232,250,63,41,193,78,7,62,130,252,63,67,19,16,231,55,52,254,63,0,0,0,0,0,0,0,64,99,121,217,146,143,243,0,64,192,214,199,195,154,245,1,64,21,183,49,10,254,6,3,64,139,114,141,249,162,40,4,64,94,236,240,8,129,91,5,64,205,59,127,102,158,160,6,64,176,207,104,215,16,249,7,64,61,110,61,165,254,101,9,64,173,211,90,153,159,232,10,64,41,193,78,7,62,130,12,64,68,19,16,231,55,52,14,64,0,0,0,0,0,0,16,64,99,121,217,146,143,243,16,64,191,214,199,195,154,245,17,64,21,183,49,10,254,6,19,64,139,114,141,249,162,40,20,64,93,236,240,8,129,91,21,64,205,59,127,102,158,160,22,64,177,207,104,215,16,249,23,64,60,110,61,165,254,101,25,64,173,211,90,153,159,232,26,64,42,193,78,7,62,130,28,64,67,19,16,231,55,52,30,64,0,0,0,0,0,0,32,64,99,121,217,146,143,243,32,64,191,214,199,195,154,245,33,64,21,183,49,10,254,6,35,64,139,114,141,249,162,40,36,64,93,236,240,8,129,91,37,64,205,59,127,102,158,160,38,64,177,207,104,215,16,249,39,64,60,110,61,165,254,101,41,64,173,211,90,153,159,232,42,64,42,193,78,7,62,130,44,64,67,19,16,231,55,52,46,64,0,0,0,0,0,0,48,64,98,121,217,146,143,243,48,64,193,214,199,195,154,245,49,64,21,183,49,10,254,6,51,64,138,114,141,249,162,40,52,64,95,236,240,8,129,91,53,64,205,59,127,102,158,160,54,64,175,207,104,215,16,249,55,64,62,110,61,165,254,101,57,64,173,211,90,153,159,232,58,64,40,193,78,7,62,130,60,64,69,19,16,231,55,52,62,64,0,0,0,0,0,0,64,64,98,121,217,146,143,243,64,64,193,214,199,195,154,245,65,64,21,183,49,10,254,6,67,64,138,114,141,249,162,40,68,64,95,236,240,8,129,91,69,64,205,59,127,102,158,160,70,64,175,207,104,215,16,249,71,64,62,110,61,165,254,101,73,64,173,211,90,153,159,232,74,64,40,193,78,7,62,130,76,64,69,19,16,231,55,52,78,64,0,0,0,0,0,0,80,64,98,121,217,146,143,243,80,64,193,214,199,195,154,245,81,64,21,183,49,10,254,6,83,64,138,114,141,249,162,40,84,64,95,236,240,8,129,91,85,64,205,59,127,102,158,160,86,64,175,207,104,215,16,249,87,64,62,110,61,165,254,101,89,64,173,211,90,153,159,232,90,64,40,193,78,7,62,130,92,64,69,19,16,231,55,52,94,64,0,0,0,0,0,0,96,64,98,121,217,146,143,243,96,64,193,214,199,195,154,245,97,64,21,183,49,10,254,6,99,64,138,114,141,249,162,40,100,64,95,236,240,8,129,91,101,64,205,59,127,102,158,160,102,64,175,207,104,215,16,249,103,64,62,110,61,165,254,101,105,64,173,211,90,153,159,232,106,64,40,193,78,7,62,130,108,64,69,19,16,231,55,52,110,64,0,0,0,0,0,0,112,64,101,121,217,146,143,243,112,64,190,214,199,195,154,245,113,64,21,183,49,10,254,6,115,64,141,114,141,249,162,40,116,64,92,236,240,8,129,91,117,64,205,59,127,102,158,160,118,64,179,207,104,215,16,249,119,64,58,110,61,165,254,101,121,64,173,211,90,153,159,232,122,64,45,193,78,7,62,130,124,64,64,19,16,231,55,52,126,64,0,0,0,0,0,0,128,64,101,121,217,146,143,243,128,64,190,214,199,195,154,245,129,64,21,183,49,10,254,6,131,64,141,114,141,249,162,40,132,64,92,236,240,8,129,91,133,64,205,59,127,102,158,160,134,64,179,207,104,215,16,249,135,64,58,110,61,165,254,101,137,64,173,211,90,153,159,232,138,64,45,193,78,7,62,130,140,64,64,19,16,231,55,52,142,64,0,0,0,0,0,0,144,64,101,121,217,146,143,243,144,64,190,214,199,195,154,245,145,64,21,183,49,10,254,6,147,64,141,114,141,249,162,40,148,64,92,236,240,8,129,91,149,64,205,59,127,102,158,160,150,64,179,207,104,215,16,249,151,64,77,84,104,100,0,0,0,0,86,101,108,111,99,105,116,121,32,37,100,32,37,100,10,0,70,84,80,112,114,111,120,121,0,0,0,0,0,0,0,0,72,84,84,80,112,114,111,120,121,0,0,0,0,0,0,0,99,111,109,109,0,0,0,0,35,101,120,116,101,110,115,105,111,110,0,0,0,0,0,0,78,117,109,32,77,105,115,115,105,110,103,32,112,97,116,99,104,101,115,58,32,37,100,10,0,0,0,0,0,0,0,0,37,115,58,32,108,105,110,101,32,37,100,58,32,115,116,114,105,112,32,109,117,115,116,32,98,101,32,101,110,118,44,32,108,111,111,112,44,32,111,114,32,116,97,105,108,10,0,0,116,97,105,108,0,0,0,0,115,116,114,105,112,0,0,0,37,115,58,32,108,105,110,101,32,37,100,58,32,107,101,101,112,32,109,117,115,116,32,98,101,32,101,110,118,32,111,114,32,108,111,111,112,10,0,0,108,111,111,112,0,0,0,0,101,110,118,0,0,0,0,0,107,101,101,112,0,0,0,0,37,115,58,32,108,105,110,101,32,37,100,58,32,112,97,110,110,105,110,103,32,109,117,115,116,32,98,101,32,108,101,102,116,44,32,114,105,103,104,116,44,32,99,101,110,116,101,114,44,32,111,114,32,98,101,116,119,101,101,110,32,45,49,48,48,32,97,110,100,32,49,48,48,10,0,0,0,0,0,0,32,9,160,0,0,0,0,0,114,105,103,104,116,0,0,0,108,101,102,116,0,0,0,0,77,105,115,115,105,110,103,32,112,97,116,99,104,58,32,37,115,10,0,0,0,0,0,0,99,101,110,116,101,114,0,0,112,97,110,0,0,0,0,0,37,115,58,32,108,105,110,101,32,37,100,58,32,110,111,116,101,32,109,117,115,116,32,98,101,32,98,101,116,119,101,101,110,32,48,32,97,110,100,32,49,50,55,10,0,0,0,0,110,111,116,101,0,0,0,0,37,115,58,32,108,105,110,101,32,37,100,58,32,97,109,112,108,105,102,105,99,97,116,105,111,110,32,109,117,115,116,32,98,101,32,98,101,116,119,101,101,110,32,48,32,97,110,100,32,37,100,10,0,0,0,0,97,109,112,0,0,0,0,0,37,115,58,32,108,105,110,101,32,37,100,58,32,98,97,100,32,112,97,116,99,104,32,111,112,116,105,111,110,32,37,115,10,0,0,0,0,0,0,0,37,115,58,32,108,105,110,101,32,37,100,58,32,77,117,115,116,32,115,112,101,99,105,102,121,32,116,111,110,101,32,98,97,110,107,32,111,114,32,100,114,117,109,32,115,101,116,32,98,101,102,111,114,101,32,97,115,115,105,103,110,109,101,110,116,10,0,0,0,0,0,0,67,111,110,102,105,103,117,114,97,116,105,111,110,32,102,105,108,101,32,37,115,32,110,111,116,32,102,111,117,110,100,10,0,0,0,0,0,0,0,0,37,115,58,32,108,105,110,101,32,37,100,58,32,80,114,111,103,114,97,109,32,109,117,115,116,32,98,101,32,98,101,116,119,101,101,110,32,48,32,97,110,100,32,49,50,55,10,0,37,115,58,32,108,105,110,101,32,37,100,58,32,115,121,110,116,97,120,32,101,114,114,111,114,10,0,0,0,0,0,0,63,63,63,63,63,63,0,0,37,115,58,32,108,105,110,101,32,37,100,58,32,84,111,110,101,32,98,97,110,107,32,109,117,115,116,32,98,101,32,98,101,116,119,101,101,110,32,48,32,97,110,100,32,49,50,55,10,0,0,0,0,0,0,0,37,115,58,32,108,105,110,101,32,37,100,58,32,78,111,32,98,97,110,107,32,110,117,109,98,101,114,32,103,105,118,101,110,10,0,0,0,0,0,0,98,97,110,107,0,0,0,0,37,115,58,32,108,105,110,101,32,37,100,58,32,68,114,117,109,32,115,101,116,32,109,117,115,116,32,98,101,32,98,101,116,119,101,101,110,32,48,32,97,110,100,32,49,50,55,10,0,0,0,0,0,0,0,0,37,115,58,32,108,105,110,101,32,37,100,58,32,78,111,32,100,114,117,109,32,115,101,116,32,110,117,109,98,101,114,32,103,105,118,101,110,10,0,0,100,114,117,109,115,101,116,0,37,115,58,32,108,105,110,101,32,37,100,58,32,77,117,115,116,32,115,112,101,99,105,102,121,32,101,120,97,99,116,108,121,32,111,110,101,32,112,97,116,99,104,32,110,97,109,101,10,0,0,0,0,0,0,0,100,101,102,97,117,108,116,0,80,114,111,98,97,98,108,101,32,115,111,117,114,99,101,32,108,111,111,112,32,105,110,32,99,111,110,102,105,103,117,114,97,116,105,111,110,32,102,105,108,101,115,10,0,0,0,0,37,115,58,32,108,105,110,101,32,37,100,58,32,78,111,32,102,105,108,101,32,110,97,109,101,32,103,105,118,101,110,10,0,0,0,0,0,0,0,0,115,111,117,114,99,101,0,0,71,70,49,80,65,84,67,72,49,48,48,0,73,68,35,48,48,48,48,48,50,0,0,0,37,115,58,32,108,105,110,101,32,37,100,58,32,78,111,32,100,105,114,101,99,116,111,114,121,32,103,105,118,101,110,10,0,0,0,0,0,0,0,0,100,105,114,0,0,0,0,0,70,73,88,77,69,58,32,73,109,112,108,101,109,101,110,116,32,34,109,97,112,34,32,105,110,32,84,105,77,105,100,105,116,121,32,99,111,110,102,105,103,46,10,0,0,0,0,0,109,97,112,0,0,0,0,0,70,73,88,77,69,58,32,73,109,112,108,101,109,101,110,116,32,34,112,114,111,103,98,97,115,101,34,32,105,110,32,84,105,77,105,100,105,116,121,32,99,111,110,102,105,103,46,10,0,0,0,0,0,0,0,0,112,114,111,103,98,97,115,101,0,0,0,0,0,0,0,0,70,73,88,77,69,58,32,73,109,112,108,109,101,109,101,110,116,32,34,37,115,34,32,105,110,32,84,105,77,105,100,105,116,121,32,99,111,110,102,105,103,46,10,0,0,0,0,0,102,111,110,116,0,0,0,0,85,110,115,117,112,112,111,114,116,101,100,32,97,117,100,105,111,32,102,111,114,109,97,116,10,0,0,0,0,0,0,0,115,111,117,110,100,102,111,110,116,0,0,0,0,0,0,0,70,73,88,77,69,58,32,73,109,112,108,101,109,101,110,116,32,34,97,108,116,97,115,115,105,103,110,34,32,105,110,32,84,105,77,105,100,105,116,121,32,99,111,110,102,105,103,46,10,0,0,0,0,0,0,0,71,70,49,80,65,84,67,72,49,49,48,0,73,68,35,48,48,48,48,48,50,0,0,0,77,84,114,107,0,0,0,0,97,108,116,97,115,115,105,103,110,0,0,0,0,0,0,0,70,73,88,77,69,58,32,73,109,112,108,101,109,101,110,116,32,34,117,110,100,101,102,34,32,105,110,32,84,105,77,105,100,105,116,121,32,99,111,110,102,105,103,46,10,0,0,0,117,110,100,101,102,0,0,0,70,73,88,77,69,58,32,73,109,112,108,101,109,101,110,116,32,34,37,115,34,32,105,110,32,84,105,77,105,100,105,116,121,32,99,111,110,102,105,103,46,10,0,0,0,0,0,0,99,111,112,121,98,97,110,107,0,0,0,0,0,0,0,0,99,111,112,121,100,114,117,109,115,101,116,0,0,0,0,0,70,73,88,77,69,58,32,73,109,112,108,101,109,101,110,116,32,34,116,105,109,101,111,117,116,34,32,105,110,32,84,105,77,105,100,105,116,121,32,99,111,110,102,105,103,46,10,0,97,100,100,32,116,111,32,112,97,116,104,108,105,115,116,58,32,37,115,10,0,0,0,0,116,105,109,101,111,117,116,0,46,0,0,0,0,0,0,0,116,105,109,105,100,105,116,121,46,99,102,103,0,0,0,0,111,112,116,0,0,0,0,0,114,98,0,0,0,0,0,0,109,97,105,108,97,100,100,114,0,0,0,0,0,0,0,0,46,112,97,116,0,0,0,0,114,98,0,0,0,0,0,0],\\\"i8\\\",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=Runtime.alignMemory(allocate(12,'i8',ALLOC_STATIC),8);assert(tempDoublePtr%8==0);var ___errno_state=0;function ___setErrNo(value){// For convenient setting and returning of errno.\\nHEAP32[___errno_state>>2]=value;return value;}var PATH={splitPath:function splitPath(filename){var splitPathRe=/^(\\\\/?|)([\\\\s\\\\S]*?)((?:\\\\.{1,2}|[^\\\\/]+?|)(\\\\.[^.\\\\/]*|))(?:[\\\\/]*)$/;return splitPathRe.exec(filename).slice(1);},normalizeArray:function normalizeArray(parts,allowAboveRoot){// if the path tries to go above the root, `up` ends up > 0\\nvar up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==='.'){parts.splice(i,1);}else if(last==='..'){parts.splice(i,1);up++;}else if(up){parts.splice(i,1);up--;}}// if the path is allowed to go above the root, restore leading ..s\\nif(allowAboveRoot){for(;up--;up){parts.unshift('..');}}return parts;},normalize:function normalize(path){var isAbsolute=path.charAt(0)==='/',trailingSlash=path.substr(-1)==='/';// Normalize the path\\npath=PATH.normalizeArray(path.split('/').filter(function(p){return!!p;}),!isAbsolute).join('/');if(!path&&!isAbsolute){path='.';}if(path&&trailingSlash){path+='/';}return(isAbsolute?'/':'')+path;},dirname:function dirname(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){// No dirname whatsoever\\nreturn'.';}if(dir){// It has a dirname, strip trailing slash\\ndir=dir.substr(0,dir.length-1);}return root+dir;},basename:function basename(path,ext){// EMSCRIPTEN return '/'' for '/', not an empty string\\nif(path==='/')return'/';var f=PATH.splitPath(path)[2];if(ext&&f.substr(-1*ext.length)===ext){f=f.substr(0,f.length-ext.length);}return f;},extname:function extname(path){return PATH.splitPath(path)[3];},join:function join(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.filter(function(p,index){if(typeof p!=='string'){throw new TypeError('Arguments to path.join must be strings');}return p;}).join('/'));},resolve:function resolve(){var resolvedPath='',resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();// Skip empty and invalid entries\\nif(typeof path!=='string'){throw new TypeError('Arguments to path.resolve must be strings');}else if(!path){continue;}resolvedPath=path+'/'+resolvedPath;resolvedAbsolute=path.charAt(0)==='/';}// At this point the path should be resolved to a full absolute path, but handle relative paths to be safe (might happen when process.cwd() fails)\\nresolvedPath=PATH.normalizeArray(resolvedPath.split('/').filter(function(p){return!!p;}),!resolvedAbsolute).join('/');return(resolvedAbsolute?'/':'')+resolvedPath||'.';},relative:function relative(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=='')break;}if(start>end)return[];return arr.slice(start,end-start+1);}var fromParts=trim(from.split('/'));var toParts=trim(to.split('/'));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;icontents.length){contents.push(0);}}},lookup:function lookup(){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.ENOENT);},mknod:function mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev);},rename:function rename(old_node,new_dir,new_name){// if we're overwriting a directory at new_name, make sure it's empty.\\nif(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name);}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.ENOTEMPTY);}}}// do the internal rewiring\\ndelete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;},unlink:function unlink(parent,name){delete parent.contents[name];},rmdir:function rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.ENOTEMPTY);}delete parent.contents[name];},readdir:function readdir(node){var entries=['.','..'];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue;}entries.push(key);}return entries;},symlink:function symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node;},readlink:function readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EINVAL);}return node.link;}},stream_ops:{read:function read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(size>8&&contents.subarray){// non-trivial and typed array\\nbuffer.set(contents.subarray(position,position+size),offset);}else{for(var i=0;icontents.length){contents.push(0);}},mmap:function mmap(stream,buffer,length,position,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.ENODEV);}var ptr;var allocated;var contents=stream.node.contents;// Only make a new copy when MAP_PRIVATE is specified.\\nif(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){// We can't emulate MAP_SHARED when the file is not backed by the buffer\\n// we're mapping to (e.g. the HEAP buffer).\\nallocated=false;ptr=contents.byteOffset;}else{// Try to avoid unnecessary slices.\\nif(position>0||position+length8){// max recursive lookup of 8\\nthrow new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.ELOOP);}// split the path\\nvar parts=PATH.normalizeArray(path.split('/').filter(function(p){return!!p;}),false);// start at the root\\nvar current=FS.root;var current_path='/';for(var i=0;i40){// limit max consecutive symlinks to 40 (SYMLOOP_MAX).\\nthrow new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.ELOOP);}}}}return{path:current_path,node:current};},getPath:function getPath(node){var path;while(true){if(FS.isRoot(node)){return path?PATH.join(node.mount.mountpoint,path):node.mount.mountpoint;}path=path?PATH.join(node.name,path):node.name;node=node.parent;}},hashName:function hashName(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length;},hashAddNode:function hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node;},hashRemoveNode:function hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next;}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break;}current=current.name_next;}}},lookupNode:function lookupNode(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,name);}var hash=FS.hashName(parent.id,name);for(var _node=FS.nameTable[hash];_node;_node=_node.name_next){var nodeName=_node.name;if(_node.parent.id===parent.id&&nodeName===name){return _node;}}// if we failed to find it in the cache, call into the VFS\\nreturn FS.lookup(parent,name);},createNode:function createNode(parent,name,mode,rdev){var node={id:FS.nextInode++,name:name,mode:mode,node_ops:{},stream_ops:{},rdev:rdev,parent:null,mount:null};if(!parent){parent=node;// root node sets parent to itself\\n}node.parent=parent;node.mount=parent.mount;// compatibility\\nvar readMode=292|73;var writeMode=146;// NOTE we must use Object.defineProperties instead of individual calls to\\n// Object.defineProperty in order to make closure compiler happy\\nObject.defineProperties(node,{read:{get:function get(){return(node.mode&readMode)===readMode;},set:function set(val){val?node.mode|=readMode:node.mode&=~readMode;}},write:{get:function get(){return(node.mode&writeMode)===writeMode;},set:function set(val){val?node.mode|=writeMode:node.mode&=~writeMode;}},isFolder:{get:function get(){return FS.isDir(node.mode);}},isDevice:{get:function get(){return FS.isChrdev(node.mode);}}});FS.hashAddNode(node);return node;},destroyNode:function destroyNode(node){FS.hashRemoveNode(node);},isRoot:function isRoot(node){return node===node.parent;},isMountpoint:function isMountpoint(node){return node.mounted;},isFile:function isFile(mode){return(mode&61440)===32768;},isDir:function isDir(mode){return(mode&61440)===16384;},isLink:function isLink(mode){return(mode&61440)===40960;},isChrdev:function isChrdev(mode){return(mode&61440)===8192;},isBlkdev:function isBlkdev(mode){return(mode&61440)===24576;},isFIFO:function isFIFO(mode){return(mode&61440)===4096;},isSocket:function isSocket(mode){return(mode&49152)===49152;},flagModes:{r:0,rs:1052672,'r+':2,w:577,wx:705,xw:705,'w+':578,'wx+':706,'xw+':706,a:1089,ax:1217,xa:1217,'a+':1090,'ax+':1218,'xa+':1218},modeStringToFlags:function modeStringToFlags(str){var flags=FS.flagModes[str];if(typeof flags==='undefined'){throw new Error('Unknown file open mode: '+str);}return flags;},flagsToPermissionString:function flagsToPermissionString(flag){var accmode=flag&2097155;var perms=['r','w','rw'][accmode];if(flag&512){perms+='w';}return perms;},nodePermissions:function nodePermissions(node,perms){if(FS.ignorePermissions){return 0;}// return 0 if any user, group or owner bits are set.\\nif(perms.indexOf('r')!==-1&&!(node.mode&292)){return LIBTIMIDITY_ERROR_CODES.EACCES;}else if(perms.indexOf('w')!==-1&&!(node.mode&146)){return LIBTIMIDITY_ERROR_CODES.EACCES;}else if(perms.indexOf('x')!==-1&&!(node.mode&73)){return LIBTIMIDITY_ERROR_CODES.EACCES;}return 0;},mayLookup:function mayLookup(dir){return FS.nodePermissions(dir,'x');},mayCreate:function mayCreate(dir,name){try{FS.lookupNode(dir,name);return LIBTIMIDITY_ERROR_CODES.EEXIST;}catch(e){}return FS.nodePermissions(dir,'wx');},mayDelete:function mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name);}catch(e){return e.errno;}var err=FS.nodePermissions(dir,'wx');if(err){return err;}if(isdir){if(!FS.isDir(node.mode)){return LIBTIMIDITY_ERROR_CODES.ENOTDIR;}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return LIBTIMIDITY_ERROR_CODES.EBUSY;}}else{if(FS.isDir(node.mode)){return LIBTIMIDITY_ERROR_CODES.EISDIR;}}return 0;},mayOpen:function mayOpen(node,flags){if(!node){return LIBTIMIDITY_ERROR_CODES.ENOENT;}if(FS.isLink(node.mode)){return LIBTIMIDITY_ERROR_CODES.ELOOP;}else if(FS.isDir(node.mode)){if((flags&2097155)!==0||// opening for write\\nflags&512){return LIBTIMIDITY_ERROR_CODES.EISDIR;}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags));},MAX_OPEN_FDS:4096,nextfd:function nextfd(fd_start,fd_end){fd_start=fd_start||1;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd;}}throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EMFILE);},getStream:function getStream(fd){return FS.streams[fd];},createStream:function createStream(stream,fd_start,fd_end){var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;// compatibility\\nObject.defineProperties(stream,{object:{get:function get(){return stream.node;},set:function set(val){stream.node=val;}},isRead:{get:function get(){return(stream.flags&2097155)!==1;}},isWrite:{get:function get(){return(stream.flags&2097155)!==0;}},isAppend:{get:function get(){return stream.flags&1024;}}});FS.streams[fd]=stream;return stream;},closeStream:function closeStream(fd){FS.streams[fd]=null;},chrdev_stream_ops:{open:function open(stream){var device=FS.getDevice(stream.node.rdev);// override node's stream ops with the device's\\nstream.stream_ops=device.stream_ops;// forward the open call\\nif(stream.stream_ops.open){stream.stream_ops.open(stream);}},llseek:function llseek(){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.ESPIPE);}},major:function major(dev){return dev>>8;},minor:function minor(dev){return dev&0xff;},makedev:function makedev(ma,mi){return ma<<8|mi;},registerDevice:function registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops};},getDevice:function getDevice(dev){return FS.devices[dev];},syncfs:function syncfs(populate,callback){if(typeof populate==='function'){callback=populate;populate=false;}var completed=0;var total=FS.mounts.length;var done=function done(err){if(err){return callback(err);}if(++completed>=total){callback(null);}};// sync all mounts\\nfor(var i=0;i3&&arguments[3]!==undefined?arguments[3]:true;var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var error=FS.mayCreate(parent,name);if(error){if(throwError){throw new FS.ErrnoError(error,path);}return;}if(!parent.node_ops.mknod){if(throwError){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EPERM,path);}return;}return parent.node_ops.mknod(parent,name,mode,dev);},create:function create(path,mode){var throwError=arguments.length>2&&arguments[2]!==undefined?arguments[2]:true;mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0,throwError);},mkdir:function mkdir(path,mode){var throwError=arguments.length>2&&arguments[2]!==undefined?arguments[2]:true;mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0,throwError);},mkdev:function mkdev(path,mode,dev){if(typeof dev==='undefined'){dev=mode;mode=438;}mode|=8192;return FS.mknod(path,mode,dev);},symlink:function symlink(oldpath,newpath){var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.symlink){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EPERM);}return parent.node_ops.symlink(parent,newname,oldpath);},rename:function rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);// parents must exist\\nvar lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;}catch(e){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EBUSY);}// need to be part of the same mount\\nif(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EXDEV);}// source must exist\\nvar old_node=FS.lookupNode(old_dir,old_name);// old path should not be an ancestor of the new path\\nvar relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=='.'){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EINVAL);}// new path should not be an ancestor of the old path\\nrelative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=='.'){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.ENOTEMPTY);}// see if the new path already exists\\nvar new_node;try{new_node=FS.lookupNode(new_dir,new_name);}catch(e){}// not fatal\\n// early out if nothing needs to change\\nif(old_node===new_node){return;}// we'll need to delete the old entry\\nvar isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err);}// need delete permissions if we'll be overwriting.\\n// need create permissions if new doesn't already exist.\\nerr=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err);}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EPERM);}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EBUSY);}// if we are going to change the parent, check write permissions\\nif(new_dir!==old_dir){err=FS.nodePermissions(old_dir,'w');if(err){throw new FS.ErrnoError(err);}}// remove the node from the lookup hash\\nFS.hashRemoveNode(old_node);// do the underlying fs rename\\ntry{old_dir.node_ops.rename(old_node,new_dir,new_name);}catch(e){throw e;}finally{// add the node back to the hash (in case node_ops.rename\\n// changed its name)\\nFS.hashAddNode(old_node);}},rmdir:function rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EPERM);}if(FS.isMountpoint(node)){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EBUSY);}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);},readdir:function readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.ENOTDIR);}return node.node_ops.readdir(node);},unlink:function unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){// POSIX says unlink should set EPERM, not EISDIR\\nif(err===LIBTIMIDITY_ERROR_CODES.EISDIR)err=LIBTIMIDITY_ERROR_CODES.EPERM;throw new FS.ErrnoError(err);}if(!parent.node_ops.unlink){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EPERM);}if(FS.isMountpoint(node)){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EBUSY);}parent.node_ops.unlink(parent,name);FS.destroyNode(node);},readlink:function readlink(path){var lookup=FS.lookupPath(path,{follow:false});var link=lookup.node;if(!link.node_ops.readlink){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EINVAL);}return link.node_ops.readlink(link);},stat:function stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node.node_ops.getattr){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EPERM);}return node.node_ops.getattr(node);},lstat:function lstat(path){return FS.stat(path,true);},chmod:function chmod(path,mode,dontFollow){var node;if(typeof path==='string'){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node;}else{node=path;}if(!node.node_ops.setattr){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EPERM);}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()});},lchmod:function lchmod(path,mode){FS.chmod(path,mode,true);},fchmod:function fchmod(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EBADF);}FS.chmod(stream.node,mode);},chown:function chown(path,uid,gid,dontFollow){var node;if(typeof path==='string'){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node;}else{node=path;}if(!node.node_ops.setattr){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EPERM);}node.node_ops.setattr(node,{timestamp:Date.now()// we ignore the uid / gid for now\\n});},lchown:function lchown(path,uid,gid){FS.chown(path,uid,gid,true);},fchown:function fchown(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EBADF);}FS.chown(stream.node,uid,gid);},truncate:function truncate(path,len){if(len<0){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EINVAL);}var node;if(typeof path==='string'){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;}else{node=path;}if(!node.node_ops.setattr){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EPERM);}if(FS.isDir(node.mode)){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EISDIR);}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EINVAL);}var err=FS.nodePermissions(node,'w');if(err){throw new FS.ErrnoError(err);}node.node_ops.setattr(node,{size:len,timestamp:Date.now()});},ftruncate:function ftruncate(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EBADF);}if((stream.flags&2097155)===0){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EINVAL);}FS.truncate(stream.node,len);},utime:function utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)});},open:function open(path,flags,mode,fd_start,fd_end){path=PATH.normalize(path);flags=typeof flags==='string'?FS.modeStringToFlags(flags):flags;mode=typeof mode==='undefined'?438:mode;if(flags&64){mode=mode&4095|32768;}else{mode=0;}var node;try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node;}catch(e){}// ignore\\n// perhaps we need to create the node\\nif(flags&64){if(node){// if O_CREAT and O_EXCL are set, error out if the node already exists\\nif(flags&128){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EEXIST);}}else{// node doesn't exist, try to create it\\nnode=FS.mknod(path,mode,0);}}if(!node){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.ENOENT);}// can't truncate a device\\nif(FS.isChrdev(node.mode)){flags&=~512;}// check permissions\\nvar err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err);}// do truncation if necessary\\nif(flags&512){FS.truncate(node,0);}// we've already handled these, don't pass down to the underlying vfs\\nflags&=~(128|512);// register the stream with the filesystem\\nvar stream=FS.createStream({node:node,path:FS.getPath(node),// we want the absolute path to the node\\nflags:flags,seekable:true,position:0,stream_ops:node.stream_ops,// used by the file family libc calls (fopen, fwrite, ferror, etc.)\\nungotten:[],error:false},fd_start,fd_end);// call the new stream's open function\\nif(stream.stream_ops.open){stream.stream_ops.open(stream);}if(Module['logReadFiles']&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;console.warn('read file: '+path);}}return stream;},close:function close(stream){try{if(stream.stream_ops.close){stream.stream_ops.close(stream);}}catch(e){throw e;}finally{FS.closeStream(stream.fd);}},llseek:function llseek(stream,offset,whence){if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.ESPIPE);}return stream.stream_ops.llseek(stream,offset,whence);},read:function read(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EINVAL);}if((stream.flags&2097155)===1){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EBADF);}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EISDIR);}if(!stream.stream_ops.read){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EINVAL);}var seeking=true;if(typeof position==='undefined'){position=stream.position;seeking=false;}else if(!stream.seekable){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.ESPIPE);}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead;},write:function write(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EINVAL);}if((stream.flags&2097155)===0){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EBADF);}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EISDIR);}if(!stream.stream_ops.write){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EINVAL);}var seeking=true;if(typeof position==='undefined'){position=stream.position;seeking=false;}else if(!stream.seekable){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.ESPIPE);}if(stream.flags&1024){// seek to the end before writing in append mode\\nFS.llseek(stream,0,2);}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten;},allocate:function allocate(stream,offset,length){if(offset<0||length<=0){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EINVAL);}if((stream.flags&2097155)===0){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EBADF);}if(!FS.isFile(stream.node.mode)&&!FS.isDir(node.mode)){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.ENODEV);}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EOPNOTSUPP);}stream.stream_ops.allocate(stream,offset,length);},mmap:function mmap(stream,buffer,offset,length,position,prot,flags){// TODO if PROT is PROT_WRITE, make sure we have write access\\nif((stream.flags&2097155)===1){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EACCES);}if(!stream.stream_ops.mmap){throw new FS.errnoError(LIBTIMIDITY_ERROR_CODES.ENODEV);}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags);},ioctl:function ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.ENOTTY);}return stream.stream_ops.ioctl(stream,cmd,arg);},readFile:function readFile(path,opts){opts=opts||{};opts.flags=opts.flags||'r';opts.encoding=opts.encoding||'binary';var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==='utf8'){ret='';var utf8=new Runtime.UTF8Processor();for(var i=0;i>2]=stdin.fd;assert(stdin.fd===1,'invalid handle for stdin ('+stdin.fd+')');var stdout=FS.open('/dev/stdout','w');HEAP32[_stdout>>2]=stdout.fd;assert(stdout.fd===2,'invalid handle for stdout ('+stdout.fd+')');var stderr=FS.open('/dev/stderr','w');HEAP32[_stderr>>2]=stderr.fd;assert(stderr.fd===3,'invalid handle for stderr ('+stderr.fd+')');},staticInit:function staticInit(){FS.nameTable=new Array(4096);FS.root=FS.createNode(null,'/',16384|511,0);FS.mount(MEMFS,{},'/');FS.createDefaultDirectories();FS.createDefaultDevices();},init:function init(input,output,error){assert(!FS.init.initialized,'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)');FS.init.initialized=true;// Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here\\nModule['stdin']=input||Module['stdin'];Module['stdout']=output||Module['stdout'];Module['stderr']=error||Module['stderr'];FS.createStandardStreams();},quit:function quit(){FS.init.initialized=false;for(var i=0;i2&&arguments[2]!==undefined?arguments[2]:true;var parts=path.split('/').reverse();while(parts.length){var part=parts.pop();if(!part){continue;}var current=PATH.join(parent,part);try{FS.mkdir(current,undefined,throwError);}catch(error){// console.error(error)\\n}parent=current;}},/**\\n * Creates a file.\\n * @function createFile\\n * @memberof LibTiMidity\\n * @instance\\n * @param {string} parent The parent folder.\\n * @param {string} name The path to create.\\n * @param {boolean} canRead\\n * @param {boolean} canWrite\\n */createFile:function createFile(parent,name,canRead,canWrite){var path=PATH.join(typeof parent==='string'?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode);},/**\\n * Creates a data file and writes data to it.\\n * @function createDataFile\\n * @memberof LibTiMidity\\n * @instance\\n * @param {string} parent\\n * @param {string} name\\n * @param {array} data\\n * @param {boolean} canRead\\n * @param {boolean} canWrite\\n * @param {boolean} [canOwn]\\n * @param {boolean} [throwError = true] If file creation failed, throw an error.\\n */createDataFile:function createDataFile(parent,name,data,canRead,canWrite,canOwn){var throwError=arguments.length>6&&arguments[6]!==undefined?arguments[6]:true;var path=name?PATH.join(typeof parent==='string'?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);if(throwError){FS.create(path,mode);}else{try{FS.create(path,mode);}catch(error){return;}}if(data){if(typeof data==='string'){var arr=new Array(data.length);for(var i=0,len=data.length;i>2];path=Pointer_stringify(path);try{var stream=FS.open(path,oflag,mode);return stream.fd;}catch(e){FS.handleFSError(e);return-1;}}function _fopen(filename,mode){// FILE *fopen(const char *restrict filename, const char *restrict mode);\\n// http://pubs.opengroup.org/onlinepubs/000095399/functions/fopen.html\\nvar flags;mode=Pointer_stringify(mode);if(mode[0]=='r'){if(mode.indexOf('+')!=-1){flags=2;}else{flags=0;}}else if(mode[0]=='w'){if(mode.indexOf('+')!=-1){flags=2;}else{flags=1;}flags|=64;flags|=512;}else if(mode[0]=='a'){if(mode.indexOf('+')!=-1){flags=2;}else{flags=1;}flags|=64;flags|=1024;}else{___setErrNo(LIBTIMIDITY_ERROR_CODES.EINVAL);return 0;}var ret=_open(filename,flags,allocate([0x1ff,0,0,0],'i32',ALLOC_STACK));// All creation permissions.\\nreturn ret==-1?0:ret;}Module['_strlen']=_strlen;Module['_strcpy']=_strcpy;Module['_strcat']=_strcat;var SOCKFS={mount:function mount(){return FS.createNode(null,'/',16384|511,0);},createSocket:function createSocket(family,type,protocol){var streaming=type==1;if(protocol){assert(streaming==(protocol==6));// if SOCK_STREAM, must be tcp\\n}// create our internal socket structure\\nvar sock={family:family,type:type,protocol:protocol,server:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};// create the filesystem node to store the socket structure\\nvar name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;// and the wrapping stream that enables library functions such as read and write to indirectly interact with the socket\\nvar stream=FS.createStream({path:name,node:node,flags:FS.modeStringToFlags('r+'),seekable:false,stream_ops:SOCKFS.stream_ops});// map the new stream to the socket structure (sockets have a 1:1 relationship with a stream)\\nsock.stream=stream;return sock;},getSocket:function getSocket(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null;}return stream.node.sock;},stream_ops:{poll:function poll(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock);},ioctl:function ioctl(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs);},read:function read(stream,buffer,offset,length){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){// socket is closed\\nreturn 0;}buffer.set(msg.buffer,offset);return msg.buffer.length;},write:function write(stream,buffer,offset,length){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length);},close:function close(stream){var sock=stream.node.sock;sock.sock_ops.close(sock);}},nextname:function nextname(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0;}return'socket['+SOCKFS.nextname.current++ +']';},websocket_sock_ops:{createPeer:function createPeer(sock,addr,port){var ws;if(typeof_default()(addr)==='object'){ws=addr;addr=null;port=null;}if(ws){// for sockets that've already connected (e.g. we're the server) we can inspect the _socket property for the address\\nif(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort;}// if we're just now initializing a connection to the remote, inspect the url property\\nelse{var result=/ws[s]?:\\\\/\\\\/([^:]+):(\\\\d+)/.exec(ws.url);if(!result){throw new Error('WebSocket URL must be in the format ws(s)://address:port');}addr=result[1];port=parseInt(result[2],10);}}else{// create the actual websocket object and connect\\ntry{var url='ws://'+addr+':'+port;// the node ws library API is slightly different than the browser's\\nvar opts=['binary'];ws=new WebSocket(url,opts);ws.binaryType='arraybuffer';}catch(e){throw new FS.ErrnoError(LIBTIMIDITY_ERROR_CODES.EHOSTUNREACH);}}var peer={addr:addr,port:port,socket:ws,dgram_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);// if this is a bound dgram socket, send the port number first to allow\\n// us to override the ephemeral port reported to us by remotePort on the\\n// remote end.\\nif(sock.type===2&&typeof sock.sport!=='undefined'){peer.dgram_send_queue.push(new Uint8Array([255,255,255,255,'p'.charCodeAt(0),'o'.charCodeAt(0),'r'.charCodeAt(0),'t'.charCodeAt(0),(sock.sport&0xff00)>>8,sock.sport&0xff]));}return peer;},getPeer:function getPeer(sock,addr,port){return sock.peers[addr+':'+port];},addPeer:function addPeer(sock,peer){sock.peers[peer.addr+':'+peer.port]=peer;},removePeer:function removePeer(sock,peer){delete sock.peers[peer.addr+':'+peer.port];},handlePeerEvents:function handlePeerEvents(sock,peer){var first=true;var handleOpen=function handleOpen(){try{var queued=peer.dgram_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.dgram_send_queue.shift();}}catch(e){// not much we can do here in the way of proper error handling as we've already\\n// lied and said this data was sent. shut it down.\\npeer.socket.close();}};var handleMessage=function handleMessage(data){assert(typeof data!=='string'&&data.byteLength!==undefined);// must receive an ArrayBuffer\\ndata=new Uint8Array(data);// make a typed array view on the array buffer\\n// if this is the port message, override the peer's port with it\\nvar wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==='p'.charCodeAt(0)&&data[5]==='o'.charCodeAt(0)&&data[6]==='r'.charCodeAt(0)&&data[7]==='t'.charCodeAt(0)){// update the peer's port and it's key in the peer map\\nvar newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return;}sock.recv_queue.push({addr:peer.addr,port:peer.port,data:data});};peer.socket.onopen=handleOpen;peer.socket.onmessage=function(event){handleMessage(event.data);};},poll:function poll(sock){if(sock.type===1&&sock.server){// listen sockets should only say they're available for reading\\n// if there are pending clients.\\nreturn sock.pending.length?64|1:0;}var mask=0;var dest=sock.type===1// we only care about the socket state for connection-based sockets\\n?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||// connection-less sockets are always ready to read\\ndest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){// let recv return 0 once closed\\nmask|=64|1;}if(!dest||// connection-less sockets are always ready to write\\ndest&&dest.socket.readyState===dest.socket.OPEN){mask|=4;}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=16;}return mask;},ioctl:function ioctl(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length;}HEAP32[arg>>2]=bytes;return 0;default:return LIBTIMIDITY_ERROR_CODES.EINVAL;}},close:function close(sock){// if we've spawned a listen server, close it\\nif(sock.server){try{sock.server.close();}catch(e){}sock.server=null;}// close any peer connections\\nvar peers=Object.keys(sock.peers);for(var i=0;i>3];}else if(type=='i64'){ret=[HEAP32[varargs+argIndex>>2],HEAP32[varargs+(argIndex+8)>>2]];argIndex+=8;// each 32-bit chunk is in a 64-bit block\\n}else{type='i32';// varargs are always i32, i64, or double\\nret=HEAP32[varargs+argIndex>>2];}argIndex+=Math.max(Runtime.getNativeFieldSize(type),Runtime.getAlignSize(type,null,true));return ret;}var ret=[];var curr,next,currArg;while(1){var startTextIndex=textIndex;curr=HEAP8[textIndex];if(curr===0)break;next=HEAP8[textIndex+1|0];if(curr==37){// Handle flags.\\nvar flagAlwaysSigned=false;var flagLeftAlign=false;var flagAlternative=false;var flagZeroPad=false;var flagPadSign=false;flagsLoop:while(1){switch(next){case 43:flagAlwaysSigned=true;break;case 45:flagLeftAlign=true;break;case 35:flagAlternative=true;break;case 48:if(flagZeroPad){break flagsLoop;}else{flagZeroPad=true;break;}case 32:flagPadSign=true;break;default:break flagsLoop;}textIndex++;next=HEAP8[textIndex+1|0];}// Handle width.\\nvar width=0;if(next==42){width=getNextArg('i32');textIndex++;next=HEAP8[textIndex+1|0];}else{while(next>=48&&next<=57){width=width*10+(next-48);textIndex++;next=HEAP8[textIndex+1|0];}}// Handle precision.\\nvar precisionSet=false;if(next==46){var precision=0;precisionSet=true;textIndex++;next=HEAP8[textIndex+1|0];if(next==42){precision=getNextArg('i32');textIndex++;}else{while(1){var precisionChr=HEAP8[textIndex+1|0];if(precisionChr<48||precisionChr>57)break;precision=precision*10+(precisionChr-48);textIndex++;}}next=HEAP8[textIndex+1|0];}else{var precision=6;// Standard default.\\n}// Handle integer sizes. WARNING: These assume a 32-bit architecture!\\nvar argSize=void 0;switch(String.fromCharCode(next)){case'h':var nextNext=HEAP8[textIndex+2|0];if(nextNext==104){textIndex++;argSize=1;// char (actually i32 in varargs)\\n}else{argSize=2;// short (actually i32 in varargs)\\n}break;case'l':var nextNext=HEAP8[textIndex+2|0];if(nextNext==108){textIndex++;argSize=8;// long long\\n}else{argSize=4;// long\\n}break;case'L':// long long\\ncase'q':// int64_t\\ncase'j':// intmax_t\\nargSize=8;break;case'z':// size_t\\ncase't':// ptrdiff_t\\ncase'I':// signed ptrdiff_t or unsigned size_t\\nargSize=4;break;default:argSize=null;}if(argSize)textIndex++;next=HEAP8[textIndex+1|0];// Handle type specifier.\\nswitch(String.fromCharCode(next)){case'd':case'i':case'u':case'o':case'x':case'X':case'p':{// Integer.\\nvar signed=next==100||next==105;argSize=argSize||4;var currArg=getNextArg('i'+argSize*8);var origArg=currArg;var argText;// Flatten i64-1 [low, high] into a (slightly rounded) double\\nif(argSize==8){currArg=Runtime.makeBigInt(currArg[0],currArg[1],next==117);}// Truncate to requested size.\\nif(argSize<=4){var limit=Math.pow(256,argSize)-1;currArg=(signed?reSign:unSign)(currArg&limit,argSize*8);}// Format the number.\\nvar currAbsArg=Math.abs(currArg);var prefix='';if(next==100||next==105){if(argSize==8&&i64Math)argText=i64Math.stringify(origArg[0],origArg[1],null);else argText=reSign(currArg,8*argSize,1).toString(10);}else if(next==117){if(argSize==8&&i64Math)argText=i64Math.stringify(origArg[0],origArg[1],true);else argText=unSign(currArg,8*argSize,1).toString(10);currArg=Math.abs(currArg);}else if(next==111){argText=(flagAlternative?'0':'')+currAbsArg.toString(8);}else if(next==120||next==88){prefix=flagAlternative&&currArg!=0?'0x':'';if(argSize==8&&i64Math){if(origArg[1]){argText=(origArg[1]>>>0).toString(16);var lower=(origArg[0]>>>0).toString(16);while(lower.length<8){lower='0'+lower;}argText+=lower;}else{argText=(origArg[0]>>>0).toString(16);}}else if(currArg<0){// Represent negative numbers in hex as 2's complement.\\ncurrArg=-currArg;argText=(currAbsArg-1).toString(16);var _buffer=[];for(var i=0;i=0){if(flagAlwaysSigned){prefix='+'+prefix;}else if(flagPadSign){prefix=' '+prefix;}}// Move sign to prefix so we zero-pad after the sign\\nif(argText.charAt(0)=='-'){prefix='-'+prefix;argText=argText.substr(1);}// Add padding.\\nwhile(prefix.length+argText.lengthexponent&&exponent>=-4){next=(next==103?'f':'F').charCodeAt(0);precision-=exponent+1;}else{next=(next==103?'e':'E').charCodeAt(0);precision--;}effectivePrecision=Math.min(precision,20);}if(next==101||next==69){argText=currArg.toExponential(effectivePrecision);// Make sure the exponent has at least 2 digits.\\nif(/[eE][-+]\\\\d$/.test(argText)){argText=argText.slice(0,-1)+'0'+argText.slice(-1);}}else if(next==102||next==70){argText=currArg.toFixed(effectivePrecision);if(currArg===0&&__reallyNegative(currArg)){argText='-'+argText;}}var parts=argText.split('e');if(isGeneral&&!flagAlternative){// Discard trailing zeros and periods.\\nwhile(parts[0].length>1&&parts[0].indexOf('.')!=-1&&(parts[0].slice(-1)=='0'||parts[0].slice(-1)=='.')){parts[0]=parts[0].slice(0,-1);}}else{// Make sure we have a period in alternative mode.\\nif(flagAlternative&&argText.indexOf('.')==-1)parts[0]+='.';// Zero pad until required precision.\\nwhile(precision>effectivePrecision++){parts[0]+='0';}}argText=parts[0]+(parts.length>1?'e'+parts[1]:'');// Capitalize 'E' if needed.\\nif(next==69)argText=argText.toUpperCase();// Add sign.\\nif(currArg>=0){if(flagAlwaysSigned){argText='+'+argText;}else if(flagPadSign){argText=' '+argText;}}}// Add padding.\\nwhile(argText.length0){ret.push(32);}if(!flagLeftAlign)ret.push(getNextArg('i8'));break;}case'n':{// Write the length written so far to the next parameter.\\nvar ptr=getNextArg('i32*');HEAP32[ptr>>2]=ret.length;break;}case'%':{// Literal percent sign.\\nret.push(curr);break;}default:{// Unknown specifiers remain untouched.\\nfor(var i=startTextIndex;i0){HEAP8[ptr++|0]=streamObj.ungotten.pop();bytesToRead--;bytesRead++;}var err=_read(stream,ptr,bytesToRead);if(err==-1){if(streamObj)streamObj.error=true;return 0;}bytesRead+=err;if(bytesRead>2];return _fprintf(stdout,format,varargs);}Module['_memset']=_memset;Module['_memcpy']=_memcpy;var _llvm_pow_f64=Math_pow;var _sin=Math_sin;function _strrchr(ptr,chr){var ptr2=ptr+_strlen(ptr);do{if(HEAP8[ptr2]==chr)return ptr2;ptr2--;}while(ptr2>=ptr);return 0;}var ___strtok_state=0;function _strtok_r(s,delim,lasts){var skip_leading_delim=1;var spanp;var c,sc;var tok;if(s==0&&(s=getValue(lasts,'i8*'))==0){return 0;}cont:while(1){c=getValue(s++,'i8');for(spanp=delim;(sc=getValue(spanp++,'i8'))!=0;){if(c==sc){if(skip_leading_delim){continue cont;}else{setValue(lasts,s,'i8*');setValue(s-1,0,'i8');return s-1;}}}break;}if(c==0){setValue(lasts,0,'i8*');return 0;}tok=s-1;for(;;){c=getValue(s++,'i8');spanp=delim;do{if((sc=getValue(spanp++,'i8'))==c){if(c==0){s=0;}else{setValue(s-1,0,'i8');}setValue(lasts,s,'i8*');return tok;}}while(sc!=0);}abort('strtok_r error!');}function _strtok(s,delim){return _strtok_r(s,delim,___strtok_state);}function _strncmp(px,py,n){var i=0;while(iy?1:-1;}}return 0;}function _strcmp(px,py){return _strncmp(px,py,TOTAL_MEMORY);}Module['_strncpy']=_strncpy;function _isspace(chr){return chr==32||chr>=9&&chr<=13;}function __parseInt(str,endptr,base,min,max,bits,unsign){// Skip space.\\nwhile(_isspace(HEAP8[str])){str++;}// Check for a plus/minus sign.\\nvar multiplier=1;if(HEAP8[str]==45){multiplier=-1;str++;}else if(HEAP8[str]==43){str++;}// Find base.\\nvar finalBase=base;if(!finalBase){if(HEAP8[str]==48){if(HEAP8[str+1|0]==120||HEAP8[str+1|0]==88){finalBase=16;str+=2;}else{finalBase=8;str++;}}}else if(finalBase==16){if(HEAP8[str]==48){if(HEAP8[str+1|0]==120||HEAP8[str+1|0]==88){str+=2;}}}if(!finalBase)finalBase=10;// Get digits.\\nvar chr;var ret=0;while((chr=HEAP8[str])!=0){var digit=parseInt(String.fromCharCode(chr),finalBase);if(isNaN(digit)){break;}else{ret=ret*finalBase+digit;str++;}}// Apply sign.\\nret*=multiplier;// Set end pointer.\\nif(endptr){HEAP32[endptr>>2]=str;}// Unsign if needed.\\nif(unsign){if(Math.abs(ret)>max){ret=max;___setErrNo(LIBTIMIDITY_ERROR_CODES.ERANGE);}else{ret=unSign(ret,bits);}}// Validate range.\\nif(ret>max||retmax?max:min;___setErrNo(LIBTIMIDITY_ERROR_CODES.ERANGE);}if(bits==64){return(asm['setTempRet0']((tempDouble=ret,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)),ret>>>0)|0;}return ret;}function _strtol(str,endptr,base){return __parseInt(str,endptr,base,-2147483648,2147483647,32);// LONG_MIN, LONG_MAX.\\n}function _atoi(ptr){return _strtol(ptr,null,10);}function _strchr(ptr,chr){ptr--;do{ptr++;var val=HEAP8[ptr];if(val==chr)return ptr;}while(val);return 0;}function _abort(){Module['abort']();}function ___errno_location(){return ___errno_state;}function _sbrk(bytes){/*\\n Implement a Linux-like 'memory area' for our 'process'.\\n Changes the size of the memory area by |bytes|.\\n Returns the address of the previous top ('break') of the memory area.\\n We control the \\\"dynamic\\\" memory - DYNAMIC_BASE to DYNAMICTOP.\\n */var self=_sbrk;if(!self.called){DYNAMICTOP=alignMemoryPage(DYNAMICTOP);// make sure we start out aligned\\nself.called=true;assert(Runtime.dynamicAlloc);self.alloc=Runtime.dynamicAlloc;Runtime.dynamicAlloc=function(){abort('cannot dynamically allocate, sbrk now has control');};}var ret=DYNAMICTOP;if(bytes!=0)self.alloc(bytes);return ret;// Previous break location.\\n}function _sysconf(name){// long sysconf(int name);\\n// http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html\\nswitch(name){case 30:return PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 79:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1000;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return 1;}___setErrNo(LIBTIMIDITY_ERROR_CODES.EINVAL);return-1;}function _time(ptr){var ret=Math.floor(Date.now()/1000);if(ptr){HEAP32[ptr>>2]=ret;}return ret;}FS.staticInit();__ATINIT__.unshift({func:function func(){if(!Module['noFSInit']&&!FS.init.initialized)FS.init();}});__ATMAIN__.push({func:function func(){FS.ignorePermissions=false;}});__ATEXIT__.push({func:function func(){FS.quit();}});Module['FS_createFolder']=FS.createFolder;Module.createPath=FS.createPath;Module.createDataFile=FS.createDataFile;Module.loadPatchFromUrl=FS.loadPatchFromUrl;Module['FS_createPreloadedFile']=FS.createPreloadedFile;Module['FS_createLink']=FS.createLink;Module['FS_createDevice']=FS.createDevice;___errno_state=Runtime.staticAlloc(4);HEAP32[___errno_state>>2]=0;__ATINIT__.unshift({func:function func(){TTY.init();}});__ATEXIT__.push({func:function func(){TTY.shutdown();}});TTY.utf8=new Runtime.UTF8Processor();__ATINIT__.push({func:function func(){SOCKFS.root=FS.mount(SOCKFS,{},null);}});___strtok_state=Runtime.staticAlloc(4);STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);STACK_MAX=STACK_BASE+5242880;DYNAMIC_BASE=DYNAMICTOP=Runtime.alignMemory(STACK_MAX);assert(DYNAMIC_BASE>2]|0)|0;if((l|0)!=0){m=e|0;n=c[b>>2]|0;c2(m|0,n|0)|0;if((a[e+(l-1)|0]|0)!=47){a[e+l|0]=47;a[e+(l+1)|0]=0;}}c3(e|0,f|0)|0;l=av(e|0,6576)|0;g=l;if((l|0)!=0){break;}b=c[b+4>>2]|0;}if((k|0)==16){break;}h=g;j=h;i=d;return j|0;}}while(0);h=0;j=h;i=d;return j|0;}}while(0);h=0;j=h;i=d;return j|0;}function bi(a){a=a|0;var b=0;b=c$(a)|0;return b|0;}function bj(a){a=a|0;var b=0,d=0,e=0;b=a;a=bi(8)|0;if((a|0)==0){return;}c[a>>2]=bi((c1(b|0)|0)+1|0)|0;if((c[a>>2]|0)==0){c0(a);return;}else{d=c[a>>2]|0;e=b;c2(d|0,e|0)|0;c[a+4>>2]=c[1664];c[1664]=a;return;}}function bk(){var a=0,b=0;a=c[1664]|0;while(1){if((a|0)==0){break;}b=c[a+4>>2]|0;c0(c[a>>2]|0);c0(a);a=b;}c[1664]=0;return;}function bl(f,h,j,k,l,n,o,p,q){f=f|0;h=h|0;j=j|0;k=k|0;l=l|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;j=i;i=i+1056|0;r=j|0;s=j+1024|0;t=j+1032|0;u=j+1040|0;v=j+1048|0;w=f;f=h;h=k;k=l;l=n;n=o;o=p;p=q;q=0;if((f|0)==0){x=0;y=x;i=j;return y|0;}z=bh(f)|0;A=z;if((z|0)==0){z=c[m>>2]|0;// _fprintf;\\nar(6512,(z=i,i=i+1|0,i=i+7&-8,c[z>>2]=0,z)|0)|0;i=z;q=1;B=0;while(1){if((c[1048+(B<<2)>>2]|0)==0){break;}z=c1(f|0)|0;if((z+(c1(c[1048+(B<<2)>>2]|0)|0)|0)>>>0<1024){z=r|0;C=f;c2(z|0,C|0)|0;C=r|0;z=c[1048+(B<<2)>>2]|0;c3(C|0,z|0)|0;z=bh(r|0)|0;A=z;if((z|0)!=0){D=46;break;}}B=B+1|0;}if((D|0)==46){q=0;f=r|0;}}if((q|0)!=0){x=0;y=x;i=j;return y|0;}do{if(239==(an(r|0,1,239,A|0)|0)){if((c4(r|0,6248,22)|0)!=0){if((c4(r|0,5888,22)|0)!=0){break;}}do{if((a[r+82|0]|0)!=1){if((a[r+82|0]|0)==0){break;}x=0;y=x;i=j;return y|0;}}while(0);do{if((a[r+151|0]|0)!=1){if((a[r+151|0]|0)==0){break;}x=0;y=x;i=j;return y|0;}}while(0);q=bi(8)|0;c[q>>2]=a[r+198|0]|0;c[q+4>>2]=bi((c[q>>2]|0)*116|0)|0;B=0;while(1){if((B|0)>=(c[q>>2]|0)){D=162;break;}aB(A|0,7,1)|0;if(1!=(an(s|0,1,1,A|0)|0)){D=66;break;}f=(c[q+4>>2]|0)+(B*116|0)|0;if(1!=(an(t|0,4,1,A|0)|0)){D=73;break;}c[f+8>>2]=c[t>>2];if(1!=(an(t|0,4,1,A|0)|0)){D=75;break;}c[f>>2]=c[t>>2];if(1!=(an(t|0,4,1,A|0)|0)){D=77;break;}c[f+4>>2]=c[t>>2];if(1!=(an(u|0,2,1,A|0)|0)){D=79;break;}c[f+12>>2]=e[u>>1]|0;if(1!=(an(t|0,4,1,A|0)|0)){D=81;break;}c[f+24>>2]=c[t>>2];if(1!=(an(t|0,4,1,A|0)|0)){D=83;break;}c[f+28>>2]=c[t>>2];if(1!=(an(t|0,4,1,A|0)|0)){D=85;break;}c[f+32>>2]=c[t>>2];c[f+16>>2]=0;c[f+20>>2]=127;aB(A|0,2,1)|0;if(1!=(an(v|0,1,1,A|0)|0)){D=87;break;}a[r|0]=a[v]|0;if((h|0)==-1){a[f+111|0]=(a[r|0]<<3)+4&127;}else{a[f+111|0]=h&127;}if(18!=(an(r|0,1,18,A|0)|0)){D=92;break;}do{if((a[r+13|0]|0)!=0){if((a[r+14|0]|0)==0){D=95;break;}c[f+92>>2]=bm(w,a[r+12|0]|0)|0;c[f+96>>2]=bn(w,a[r+13|0]|0)|0;a[f+108|0]=a[r+14|0]|0;}else{D=95;}}while(0);if((D|0)==95){D=0;a[f+108|0]=0;c[f+96>>2]=0;c[f+92>>2]=0;}do{if((a[r+16|0]|0)!=0){if((a[r+17|0]|0)==0){D=99;break;}c[f+104>>2]=bo(w,a[r+16|0]|0)|0;c[f+100>>2]=bp(w,a[r+15|0]|0,c[f+104>>2]|0)|0;a[f+109|0]=a[r+17|0]|0;}else{D=99;}}while(0);if((D|0)==99){D=0;a[f+109|0]=0;c[f+104>>2]=0;c[f+100>>2]=0;}if(1!=(an(v|0,1,1,A|0)|0)){D=102;break;}a[f+110|0]=a[v]|0;aB(A|0,40,1)|0;if((l|0)!=-1){a[f+112|0]=l&255;}else{a[f+112|0]=0;}if((a[f+110|0]&4|0)!=0){z=f+110|0;a[z]=(d[z]|32)&255;}do{if((n|0)==1){if((a[f+110|0]&60|0)==0){break;}z=f+110|0;a[z]=d[z]&-61&255;}}while(0);if((o|0)==1){(a[f+110|0]&64|0)!=0;z=f+110|0;a[z]=d[z]&-65&255;}else{if((o|0)!=0){if((a[f+110|0]&28|0)!=0){do{if((c4(r|0,5512,6)|0)!=0){if((a[r+11|0]|0)>=100){D=120;break;}if((a[f+110|0]&32|0)==0){z=f+110|0;a[z]=d[z]&-65&255;}}else{D=120;}}while(0);if((D|0)==120){D=0;z=f+110|0;a[z]=d[z]&-65&255;}}else{z=f+110|0;a[z]=d[z]&-97&255;}}}E=0;while(1){if((E|0)>=6){break;}c[f+36+(E<<2)>>2]=bq(w,a[r+E|0]|0)|0;c[f+60+(E<<2)>>2]=br(a[r+(E+6)|0]|0)|0;E=E+1|0;}c[f+88>>2]=bi(c[f+8>>2]|0)|0;if(1!=(an(c[f+88>>2]|0,c[f+8>>2]|0,1,A|0)|0)){D=132;break;}if((a[f+110|0]&1|0)==0){z=c[f+8>>2]|0;C=c[f+88>>2]|0;F=bi(c[f+8>>2]<<1)|0;G=F;H=F;while(1){F=z;z=F-1|0;if((F|0)==0){break;}F=C;C=F+1|0;I=H;H=I+2|0;b[I>>1]=(a[F]&255)<<8&65535;}C=c[f+88>>2]|0;c[f+88>>2]=G;c0(C);H=f+8|0;c[H>>2]=c[H>>2]<<1;H=f|0;c[H>>2]=c[H>>2]<<1;H=f+4|0;c[H>>2]=c[H>>2]<<1;}if((a[f+110|0]&2|0)!=0){H=(c[f+8>>2]|0)/2|0;z=c[f+88>>2]|0;while(1){F=H;H=F-1|0;if((F|0)==0){break;}F=z;z=F+2|0;b[F>>1]=(b[F>>1]^32768)&65535;}}if((a[f+110|0]&16|0)!=0){bs(c[f+88>>2]|0,0,(c[f+8>>2]|0)/2|0);z=c[f>>2]|0;c[f>>2]=(c[f+8>>2]|0)-(c[f+4>>2]|0);c[f+4>>2]=(c[f+8>>2]|0)-z;z=f+110|0;a[z]=d[z]&-17&255;z=f+110|0;a[z]=(d[z]|4)&255;}if((k|0)!=-1){g[f+84>>2]=+(k|0)/100.0;}else{z=(c[f+8>>2]|0)/2|0;H=0;C=c[f+88>>2]|0;while(1){G=z;z=G-1|0;if((G|0)==0){break;}G=C;C=G+2|0;F=b[G>>1]|0;if((F<<16>>16|0)<0){F=-(F<<16>>16)&65535;}if((F<<16>>16|0)>(H<<16>>16|0)){H=F;}}g[f+84>>2]=32768.0/+(H<<16>>16|0);}C=f+8|0;c[C>>2]=(c[C>>2]|0)/2|0;C=f|0;c[C>>2]=(c[C>>2]|0)/2|0;C=f+4|0;c[C>>2]=(c[C>>2]|0)/2|0;C=f+8|0;c[C>>2]=c[C>>2]<<12;C=f|0;c[C>>2]=c[C>>2]<<12;C=f+4|0;c[C>>2]=c[C>>2]<<12;C=f|0;c[C>>2]=c[C>>2]|(a[s]&15)<<8;C=f+4|0;c[C>>2]=c[C>>2]|(d[s]>>4&15)<<8;do{if((a[f+112|0]|0)!=0){if((a[f+110|0]&4|0)!=0){break;}cF(w,f);}}while(0);if((p|0)==1){c[f+8>>2]=c[f+4>>2];}B=B+1|0;}if((D|0)!=66)if((D|0)!=73)if((D|0)!=75)if((D|0)!=77)if((D|0)!=79)if((D|0)!=81)if((D|0)!=83)if((D|0)!=85)if((D|0)!=87)if((D|0)!=92)if((D|0)!=102)if((D|0)!=132)if((D|0)==162){ao(A|0)|0;x=q;y=x;i=j;return y|0;}E=0;while(1){if((E|0)>=(B|0)){break;}c0(c[(c[q+4>>2]|0)+(E*116|0)+88>>2]|0);E=E+1|0;}c0(c[q+4>>2]|0);c0(q);x=0;y=x;i=j;return y|0;}}while(0);x=0;y=x;i=j;return y|0;}function bm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a;a=b;if(a<<24>>24!=0){b=((c[d+13060>>2]|0)*38|0)<<16;e=(b|0)/(_(c[d+4>>2]|0,a&255)|0)|0;f=e;return f|0;}else{e=0;f=e;return f|0;}return 0;}function bn(a,b){a=a|0;b=b|0;var d=0;d=a;a=(_(c[d+13060>>2]<<10,b&255)|0)<<5;return(a|0)/((c[d+4>>2]|0)*38|0|0)|0|0;}function bo(a,b){a=a|0;b=b|0;return((c[a+4>>2]|0)*38|0|0)/((b&255)<<1<<5|0)|0|0;}function bp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=b;if(e<<24>>24!=0){f=~~(+(d|0)*38.0*65536.0/+(_(c[a+4>>2]|0,e&255)|0));g=f;return g|0;}else{f=0;g=f;return g|0;}return 0;}function bq(a,b){a=a|0;b=b|0;var d=0;d=a;a=b;b=3-((a&255)>>6&3)|0;b=b*3|0;b=(a&63)<>2]|0)|0,c[d+13060>>2]|0)|0;return b<<10|0;}function br(a){a=a|0;return(a&255)<<22|0;}function bs(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0;e=a;a=c;c=d;d=e+(c<<1)|0;e=e+(a<<1)|0;c=c-a|0;c=(c|0)/2|0;while(1){a=c;c=a-1|0;if((a|0)==0){break;}a=b[e>>1]|0;f=e;e=f+2|0;b[f>>1]=b[d>>1]|0;f=d;d=f-2|0;b[f>>1]=a;}return;}// mid_song_get_num_missing_instruments\\n// takes a number (a)\\n// returns a number\\nfunction bt(a){a=a|0;return c[a+13136>>2]|0;}// mid_song_get_missing_instrument\\nfunction bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a;a=b;do{if((a|0)>=0){// stops when reached last instrument\\nif((a|0)>=(c[d+13136>>2]|0)){break;}// path to patch file\\ne=c[d+13140+(a<<2)>>2]|0;f=e;return f|0;}}while(0);e=0;f=e;return f|0;}// returns number of missing patches\\nfunction bv(a){a=a|0;var b=0,d=0,e=0;b=a;a=128;d=0;c[b+13136>>2]=0;while(1){e=a;a=e-1|0;if((e|0)==0){break;}// get number of instrument patches\\nif((c[b+28+(a<<2)>>2]|0)!=0){d=d+(bw(b,0,a)|0)|0;}// get number of drum patches\\nif((c[b+540+(a<<2)>>2]|0)!=0){d=d+(bw(b,1,a)|0)|0;}}return d|0;}function bw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;e=i;f=a;a=b;b=d;d=0;if((a|0)!=0){g=c[f+540+(b<<2)>>2]|0;}else{g=c[f+28+(b<<2)>>2]|0;}h=g;if((h|0)==0){j=0;k=j;i=e;return k|0;}g=0;while(1){if((g|0)>=128){break;}do{if((c[h+4+(g<<2)>>2]|0)==-1){c[h+4+(g<<2)>>2]=bB(f,a,b,g)|0;if((c[h+4+(g<<2)>>2]|0)!=0){break;}if((c[(c[h>>2]|0)+(g*28|0)>>2]|0)!=0){l=f;n=c[(c[h>>2]|0)+(g*28|0)>>2]|0;o=(a|0)!=0?1:0;p=c[(c[h>>2]|0)+(g*28|0)+12>>2]|0;q=c[(c[h>>2]|0)+(g*28|0)+8>>2]|0;if((c[(c[h>>2]|0)+(g*28|0)+4>>2]|0)!=-1){r=c[(c[h>>2]|0)+(g*28|0)+4>>2]|0;}else{if((a|0)!=0){s=g;}else{s=-1;}r=s;}if((c[(c[h>>2]|0)+(g*28|0)+16>>2]|0)!=-1){t=c[(c[h>>2]|0)+(g*28|0)+16>>2]|0;}else{t=(a|0)!=0?1:-1;}if((c[(c[h>>2]|0)+(g*28|0)+20>>2]|0)!=-1){u=c[(c[h>>2]|0)+(g*28|0)+20>>2]|0;}else{u=(a|0)!=0?1:-1;}v=bl(l,n,o,p,q,r,t,u,c[(c[h>>2]|0)+(g*28|0)+24>>2]|0)|0;c[h+4+(g<<2)>>2]=v;if((v|0)==0){v=c[m>>2]|0;q=c[(c[h>>2]|0)+(g*28|0)>>2]|0;// prints 'Missing patch: arachno-88.pat' or 'Missing patch: MT32Drums/mt32drum-6.pat'\\nar(v|0,5120,(v=i,i=i+8|0,c[v>>2]=q,v)|0)|0;i=v;if((c[f+13136>>2]|0)<256){q=c[m>>2]|0;p=c[f+13136>>2]|0;i=v;c[f+13140+(c[f+13136>>2]<<2)>>2]=c[(c[h>>2]|0)+(g*28|0)>>2];v=f+13136|0;c[v>>2]=(c[v>>2]|0)+1;}d=d+1|0;}}else{if((b|0)!=0){if((a|0)!=0){if((c[(c[f+540>>2]|0)+4+(g<<2)>>2]|0)==0){c[(c[f+540>>2]|0)+4+(g<<2)>>2]=-1;}}else{if((c[(c[f+28>>2]|0)+4+(g<<2)>>2]|0)==0){c[(c[f+28>>2]|0)+4+(g<<2)>>2]=-1;}}}c[h+4+(g<<2)>>2]=0;d=d+1|0;}w=246;}else{w=246;}}while(0);if((w|0)==246){w=0;}g=g+1|0;}j=d;k=j;i=e;return k|0;}function bx(a){a=a|0;var b=0,d=0;b=a;a=128;while(1){d=a;a=d-1|0;if((d|0)==0){break;}if((c[b+28+(a<<2)>>2]|0)!=0){by(b,0,a);}if((c[b+540+(a<<2)>>2]|0)!=0){by(b,1,a);}}return;}function by(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a;a=d;if((b|0)!=0){f=c[e+540+(a<<2)>>2]|0;}else{f=c[e+28+(a<<2)>>2]|0;}a=f;f=0;while(1){if((f|0)>=128){break;}if((c[a+4+(f<<2)>>2]|0)!=0){if((c[a+4+(f<<2)>>2]|0)!=-1){bA(c[a+4+(f<<2)>>2]|0);}c[a+4+(f<<2)>>2]=0;}f=f+1|0;}return;}function bz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a;a=bl(d,b,0,-1,-1,-1,0,0,0)|0;if((a|0)!=0){c[d+1052>>2]=a;c[d+1056>>2]=-1;e=0;f=e;return f|0;}else{e=-1;f=e;return f|0;}return 0;}function bA(a){a=a|0;var b=0;b=a;if((b|0)==0){return;}a=0;while(1){if((a|0)>=(c[b>>2]|0)){break;}c0(c[(c[b+4>>2]|0)+(a*116|0)+88>>2]|0);a=a+1|0;}c0(c[b+4>>2]|0);c0(b);return;}function bB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=a;a=b;b=d;d=e;if((c[f+24>>2]|0)==0){g=0;h=g;return h|0;}a=(a|0)!=0?-2147483648:0;e=0;L368:while(1){if(e>>>0>=(c[(c[f+24>>2]|0)+4>>2]|0)>>>0){break;}i=(c[(c[f+24>>2]|0)+8>>2]|0)+(e*20|0)|0;do{if((c[(c[i+4>>2]|0)+4>>2]&-2147483648|0)==(a|0)){if(((c[(c[i+4>>2]|0)+4>>2]|0)>>>8&255|0)!=(b|0)){break;}if((c[(c[i+4>>2]|0)+8>>2]|0)==(d|0)){j=295;break L368;}}}while(0);e=e+1|0;}do{if((e|0)==(c[(c[f+24>>2]|0)+4>>2]|0)){if((b|0)!=0){break;}e=0;while(1){if(e>>>0>=(c[(c[f+24>>2]|0)+4>>2]|0)>>>0){break;}i=(c[(c[f+24>>2]|0)+8>>2]|0)+(e*20|0)|0;if((c[(c[i+4>>2]|0)+4>>2]&-2147483648|0)==(a|0)){if((c[(c[i+4>>2]|0)+8>>2]|0)==(d|0)){j=304;break;}}e=e+1|0;}}}while(0);if((e|0)==(c[(c[f+24>>2]|0)+4>>2]|0)){g=0;h=g;return h|0;}j=bi(8)|0;c[j>>2]=c[c[i+4>>2]>>2];c[j+4>>2]=bi((c[j>>2]|0)*116|0)|0;c5(c[j+4>>2]|0,0,(c[j>>2]|0)*116|0|0);e=0;while(1){if(e>>>0>=(c[c[i+4>>2]>>2]|0)>>>0){break;}bC(f,(c[j+4>>2]|0)+(e*116|0)|0,i,e);e=e+1|0;}g=j;h=g;return h|0;}function bC(b,f,h,i){b=b|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0.0;j=b;b=f;f=h;h=(c[f+8>>2]|0)+(i*24|0)|0;i=(c[(c[j+24>>2]|0)+20>>2]|0)+((c[(c[h+4>>2]|0)+8>>2]|0)*20|0)|0;k=1056+((e[c[h>>2]>>1]|0)<<2)|0;c[b+24>>2]=d[k]|d[k+1|0]<<8|d[k+2|0]<<16|d[k+3|0]<<24;k=1056+((e[(c[h>>2]|0)+2>>1]|0)<<2)|0;c[b+28>>2]=d[k]|d[k+1|0]<<8|d[k+2|0]<<16|d[k+3|0]<<24;k=1056+((e[(c[h+8>>2]|0)+4>>1]|0)<<2)|0;c[b+32>>2]=d[k]|d[k+1|0]<<8|d[k+2|0]<<16|d[k+3|0]<<24;c[b+16>>2]=e[(c[h>>2]|0)+4>>1]|0;c[b+20>>2]=e[(c[h>>2]|0)+6>>1]|0;a[b+110|0]=1;c[b+12>>2]=c[(c[i>>2]|0)+4>>2];c[b+8>>2]=((c[i+8>>2]|0)>>>0)/2|0;c[b+88>>2]=bi(c[i+8>>2]|0)|0;k=c[b+88>>2]|0;l=c[i+4>>2]|0;m=c[i+8>>2]|0;c6(k|0,l|0,m)|0;if((c[(c[h+8>>2]|0)+16>>2]|0)!=0){m=b+110|0;a[m]=(d[m]|0|36)&255;c[b>>2]=((c[(c[h+12>>2]|0)+8>>2]|0)>>>0)/2|0;c[b+4>>2]=(c[b>>2]|0)+(((c[(c[h+12>>2]|0)+12>>2]|0)>>>0)/2|0);}g[b+84>>2]=1.0;if((a[b+110|0]&32|0)==0){n=b;o=n+8|0;p=c[o>>2]|0;q=p<<12;c[o>>2]=q;r=b;s=r|0;t=c[s>>2]|0;u=t<<12;c[s>>2]=u;v=b;w=v+4|0;x=c[w>>2]|0;y=x<<12;c[w>>2]=y;return;}m=0;l=0;do{if((c[f+12>>2]|0)!=0){if((c[(c[f+12>>2]|0)+4>>2]|0)>>>0<=0){z=326;break;}if((c[f+16>>2]|0)==0){z=326;break;}m=c[f+12>>2]|0;l=c[f+16>>2]|0;}else{z=326;}}while(0);if((z|0)==326){m=c[h+16>>2]|0;l=c[h+20>>2]|0;}h=bD(c[m+4>>2]|0,l,518)|0;A=+bE(h);h=bD(c[m+4>>2]|0,l,524)|0;B=+bE(h);h=bD(c[m+4>>2]|0,l,519)|0;C=+bE(h);h=bD(c[m+4>>2]|0,l,521)|0;D=+bE(h);h=bD(c[m+4>>2]|0,l,522)|0;z=~~((1.0-+bF(h))*250.0);h=bD(c[m+4>>2]|0,l,4)|0;a[b+111|0]=~~((+bF(h)+0.5)*127.0)&255;c[b+60>>2]=bG(255)|0;c[b+36>>2]=bH(j,255,c[b+12>>2]|0,A)|0;c[b+64>>2]=bG(250)|0;c[b+40>>2]=bH(j,5,c[b+12>>2]|0,B)|0;c[b+68>>2]=bG(z)|0;c[b+44>>2]=bH(j,255-z|0,c[b+12>>2]|0,C)|0;c[b+72>>2]=bG(0)|0;c[b+48>>2]=bH(j,z+5|0,c[b+12>>2]|0,D)|0;c[b+76>>2]=bG(0)|0;c[b+52>>2]=bG(1)|0;c[b+80>>2]=bG(0)|0;c[b+56>>2]=bG(1)|0;z=b+110|0;a[z]=(d[z]|0|64)&255;n=b;o=n+8|0;p=c[o>>2]|0;q=p<<12;c[o>>2]=q;r=b;s=r|0;t=c[s>>2]|0;u=t<<12;c[s>>2]=u;v=b;w=v+4|0;x=c[w>>2]|0;y=x<<12;c[w>>2]=y;return;}function bD(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0;f=a;a=b;b=d;d=0;g=0;while(1){if(g>>>0>=f>>>0){break;}h=a+(g*12|0)|0;if((e[h+4>>1]|0|0)==(b&65535|0)){do{if((e[h>>1]|0|0)==0){if((e[h+2>>1]|0|0)!=0){break;}if((e[h+6>>1]|0|0)!=0){break;}d=d+(c[h+8>>2]|0)|0;}}while(0);}g=g+1|0;}return d|0;}function bE(a){a=a|0;var b=0,c=0.0,d=0.0;b=a;do{if((b|0)!=-2147483648){if((b|0)==0){break;}c=+P(2.0,+(+((b|0)/65536|0|0)/1200.0))*1.0e3;d=c;return+d;}}while(0);c=0.0;d=c;return+d;}function bF(a){a=a|0;return+(+((a|0)/65536|0|0)/1.0e3);}function bG(a){a=a|0;return a<<22|0;}function bH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0;d=a;a=b;f=e;if(f<6.0){f=6.0;}if((a|0)==0){a=255;}a=a<<22;return~~(+(a|0)/+(c[d+4>>2]|0)*+(c[d+13060>>2]|0)*1.0e3/f)|0;}function bI(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;f=b;b=e;e=c[f+1724+(b*236|0)+220>>2]|0;if((e|0)>5){a[f+1724+(b*236|0)|0]=0;g=1;h=g;return h|0;}if((a[(c[f+1724+(b*236|0)+4>>2]|0)+110|0]&64|0)!=0){if((d[f+1724+(b*236|0)|0]|0|0)==1){i=361;}else{if((d[f+1724+(b*236|0)|0]|0|0)==2){i=361;}}do{if((i|0)==361){if((e|0)<=2){break;}c[f+1724+(b*236|0)+32>>2]=0;g=0;h=g;return h|0;}}while(0);}c[f+1724+(b*236|0)+220>>2]=e+1;if((c[f+1724+(b*236|0)+24>>2]|0)==(c[(c[f+1724+(b*236|0)+4>>2]|0)+60+(e<<2)>>2]|0)){g=bI(f,b)|0;h=g;return h|0;}c[f+1724+(b*236|0)+28>>2]=c[(c[f+1724+(b*236|0)+4>>2]|0)+60+(e<<2)>>2];c[f+1724+(b*236|0)+32>>2]=c[(c[f+1724+(b*236|0)+4>>2]|0)+36+(e<<2)>>2];if((c[f+1724+(b*236|0)+28>>2]|0)<(c[f+1724+(b*236|0)+24>>2]|0)){c[f+1724+(b*236|0)+32>>2]=-(c[f+1724+(b*236|0)+32>>2]|0);}g=0;h=g;return h|0;}function bJ(b,e){b=b|0;e=e|0;var f=0,i=0.0,j=0,l=0.0;f=b;b=e;i=+g[f+1724+(b*236|0)+68>>2];if((c[f+1724+(b*236|0)+232>>2]|0)!=0){if((c[f+1724+(b*236|0)+48>>2]|0)!=0){i=i*+g[f+1724+(b*236|0)+76>>2];}if((a[(c[f+1724+(b*236|0)+4>>2]|0)+110|0]&64|0)!=0){e=8+(c[f+1724+(b*236|0)+24>>2]>>23<<3)|0;i=i*(c[k>>2]=d[e]|d[e+1|0]<<8|d[e+2|0]<<16|d[e+3|0]<<24,c[k+4>>2]=d[e+4|0]|d[e+5|0]<<8|d[e+6|0]<<16|d[e+7|0]<<24,+h[k>>3]);}j=~~(i*4096.0);if((j|0)>8191){j=8191;}c[f+1724+(b*236|0)+60>>2]=j;return;}l=+g[f+1724+(b*236|0)+72>>2];if((c[f+1724+(b*236|0)+48>>2]|0)!=0){i=i*+g[f+1724+(b*236|0)+76>>2];l=l*+g[f+1724+(b*236|0)+76>>2];}if((a[(c[f+1724+(b*236|0)+4>>2]|0)+110|0]&64|0)!=0){e=8+(c[f+1724+(b*236|0)+24>>2]>>23<<3)|0;i=i*(c[k>>2]=d[e]|d[e+1|0]<<8|d[e+2|0]<<16|d[e+3|0]<<24,c[k+4>>2]=d[e+4|0]|d[e+5|0]<<8|d[e+6|0]<<16|d[e+7|0]<<24,+h[k>>3]);e=8+(c[f+1724+(b*236|0)+24>>2]>>23<<3)|0;l=l*(c[k>>2]=d[e]|d[e+1|0]<<8|d[e+2|0]<<16|d[e+3|0]<<24,c[k+4>>2]=d[e+4|0]|d[e+5|0]<<8|d[e+6|0]<<16|d[e+7|0]<<24,+h[k>>3]);}j=~~(i*4096.0);if((j|0)>8191){j=8191;}e=~~(l*4096.0);if((e|0)>8191){e=8191;}c[f+1724+(b*236|0)+60>>2]=j;c[f+1724+(b*236|0)+64>>2]=e;return;}function bK(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+8|0;j=h|0;k=b;b=e;e=f;c[j>>2]=g;g=k+1724+(e*236|0)|0;if((d[g|0]|0|0)==4){if((c[j>>2]|0)>=20){c[j>>2]=20;}l=cy(k,e,j)|0;bL(k,l,b,e,c[j>>2]|0);a[g|0]=0;i=h;return;}l=cy(k,e,j)|0;if((c[k+8>>2]&1|0)!=0){do{if((c[g+32>>2]|0)!=0){m=402;}else{if((c[g+48>>2]|0)!=0){m=402;break;}bN(k,l,b,e,c[j>>2]|0);}}while(0);if((m|0)==402){bM(k,l,b,e,c[j>>2]|0);}}else{if((c[g+232>>2]|0)==0){do{if((c[g+32>>2]|0)!=0){m=408;}else{if((c[g+48>>2]|0)!=0){m=408;break;}bP(k,l,b,e,c[j>>2]|0);}}while(0);if((m|0)==408){bO(k,l,b,e,c[j>>2]|0);}}else{if((c[g+232>>2]|0)==3){do{if((c[g+32>>2]|0)!=0){m=414;}else{if((c[g+48>>2]|0)!=0){m=414;break;}bR(k,l,b,e,c[j>>2]|0);}}while(0);if((m|0)==414){bQ(k,l,b,e,c[j>>2]|0);}}else{if((c[g+232>>2]|0)==2){b=b+4|0;}do{if((c[g+32>>2]|0)!=0){m=421;}else{if((c[g+48>>2]|0)!=0){m=421;break;}bT(k,l,b,e,c[j>>2]|0);}}while(0);if((m|0)==421){bS(k,l,b,e,c[j>>2]|0);}}}}i=h;return;}function bL(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;h=a;a=d;d=e;e=f;f=g;g=0;if((f|0)==0){f=1;}i=c[h+1724+(e*236|0)+60>>2]|0;j=-((i|0)/(f|0)|0)|0;if((j|0)==0){j=-1;}if((c[h+8>>2]&1|0)!=0){while(1){k=f;f=k-1|0;if((k|0)==0){l=474;break;}i=i+j|0;if((i|0)<0){l=472;break;}k=a;a=k+2|0;g=b[k>>1]|0;k=_(i,g<<16>>16)|0;m=d;d=m+4|0;c[m>>2]=(c[m>>2]|0)+k;}if((l|0)==472){return;}else if((l|0)==474){return;}}if((c[h+1724+(e*236|0)+232>>2]|0)==0){k=c[h+1724+(e*236|0)+64>>2]|0;m=-((k|0)/(f|0)|0)|0;while(1){n=f;f=n-1|0;if((n|0)==0){break;}i=i+j|0;if((i|0)<0){i=0;}k=k+m|0;if((k|0)<0){k=0;}n=a;a=n+2|0;g=b[n>>1]|0;n=_(i,g<<16>>16)|0;o=d;d=o+4|0;c[o>>2]=(c[o>>2]|0)+n;n=_(k,g<<16>>16)|0;o=d;d=o+4|0;c[o>>2]=(c[o>>2]|0)+n;}}else{do{if((c[h+1724+(e*236|0)+232>>2]|0)==3){while(1){k=f;f=k-1|0;if((k|0)==0){l=450;break;}i=i+j|0;if((i|0)<0){break;}k=a;a=k+2|0;g=b[k>>1]|0;k=_(i,g<<16>>16)|0;m=d;d=m+4|0;c[m>>2]=(c[m>>2]|0)+k;k=_(i,g<<16>>16)|0;m=d;d=m+4|0;c[m>>2]=(c[m>>2]|0)+k;}if((l|0)==450){break;}return;}else{do{if((c[h+1724+(e*236|0)+232>>2]|0)==1){while(1){k=f;f=k-1|0;if((k|0)==0){l=457;break;}i=i+j|0;if((i|0)<0){break;}k=a;a=k+2|0;g=b[k>>1]|0;k=_(i,g<<16>>16)|0;m=d;d=m+4|0;c[m>>2]=(c[m>>2]|0)+k;d=d+4|0;}if((l|0)==457){break;}return;}else{do{if((c[h+1724+(e*236|0)+232>>2]|0)==2){while(1){k=f;f=k-1|0;if((k|0)==0){l=464;break;}i=i+j|0;if((i|0)<0){break;}k=a;a=k+2|0;g=b[k>>1]|0;d=d+4|0;k=_(i,g<<16>>16)|0;m=d;d=m+4|0;c[m>>2]=(c[m>>2]|0)+k;}if((l|0)==464){break;}return;}}while(0);}}while(0);}}while(0);}return;}function bM(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;h=a;a=d;d=e;e=f;f=g;g=h+1724+(e*236|0)|0;i=c[g+60>>2]|0;j=c[g+224>>2]|0;k=j;do{if((j|0)==0){k=c[h+13060>>2]|0;if((bU(h,e)|0)==0){i=c[g+60>>2]|0;break;}return;}}while(0);while(1){if((f|0)==0){l=502;break;}if((k|0)>=(f|0)){l=495;break;}f=f-k|0;while(1){j=k;k=j-1|0;if((j|0)==0){break;}j=a;a=j+2|0;m=b[j>>1]|0;j=_(i,m<<16>>16)|0;n=d;d=n+4|0;c[n>>2]=(c[n>>2]|0)+j;}k=c[h+13060>>2]|0;if((bU(h,e)|0)!=0){l=493;break;}i=c[g+60>>2]|0;}if((l|0)==502){return;}else if((l|0)==493){return;}else if((l|0)==495){c[g+224>>2]=k-f;while(1){k=f;f=k-1|0;if((k|0)==0){break;}k=a;a=k+2|0;m=b[k>>1]|0;k=_(i,m<<16>>16)|0;g=d;d=g+4|0;c[g>>2]=(c[g>>2]|0)+k;}return;}}function bN(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=d;d=e;e=g;g=c[a+1724+(f*236|0)+60>>2]|0;while(1){f=e;e=f-1|0;if((f|0)==0){break;}f=h;h=f+2|0;a=_(g,b[f>>1]|0)|0;f=d;d=f+4|0;c[f>>2]=(c[f>>2]|0)+a;}return;}function bO(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;h=a;a=d;d=e;e=f;f=g;g=h+1724+(e*236|0)|0;i=c[g+60>>2]|0;j=c[g+64>>2]|0;k=c[g+224>>2]|0;l=k;do{if((k|0)==0){l=c[h+13060>>2]|0;if((bU(h,e)|0)==0){i=c[g+60>>2]|0;j=c[g+64>>2]|0;break;}return;}}while(0);while(1){if((f|0)==0){m=530;break;}if((l|0)>=(f|0)){m=522;break;}f=f-l|0;while(1){k=l;l=k-1|0;if((k|0)==0){break;}k=a;a=k+2|0;n=b[k>>1]|0;k=_(i,n<<16>>16)|0;o=d;d=o+4|0;c[o>>2]=(c[o>>2]|0)+k;k=_(j,n<<16>>16)|0;o=d;d=o+4|0;c[o>>2]=(c[o>>2]|0)+k;}l=c[h+13060>>2]|0;if((bU(h,e)|0)!=0){m=520;break;}i=c[g+60>>2]|0;j=c[g+64>>2]|0;}if((m|0)==522){c[g+224>>2]=l-f;while(1){l=f;f=l-1|0;if((l|0)==0){break;}l=a;a=l+2|0;n=b[l>>1]|0;l=_(i,n<<16>>16)|0;g=d;d=g+4|0;c[g>>2]=(c[g>>2]|0)+l;l=_(j,n<<16>>16)|0;g=d;d=g+4|0;c[g>>2]=(c[g>>2]|0)+l;}return;}else if((m|0)==520){return;}else if((m|0)==530){return;}}function bP(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;h=a;a=d;d=e;e=f;f=g;g=c[h+1724+(e*236|0)+60>>2]|0;i=c[h+1724+(e*236|0)+64>>2]|0;while(1){e=f;f=e-1|0;if((e|0)==0){break;}e=a;a=e+2|0;h=b[e>>1]|0;e=_(g,h<<16>>16)|0;j=d;d=j+4|0;c[j>>2]=(c[j>>2]|0)+e;e=_(i,h<<16>>16)|0;h=d;d=h+4|0;c[h>>2]=(c[h>>2]|0)+e;}return;}function bQ(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;h=a;a=d;d=e;e=f;f=g;g=h+1724+(e*236|0)|0;i=c[g+60>>2]|0;j=c[g+224>>2]|0;k=j;do{if((j|0)==0){k=c[h+13060>>2]|0;if((bU(h,e)|0)==0){i=c[g+60>>2]|0;break;}return;}}while(0);while(1){if((f|0)==0){l=556;break;}if((k|0)>=(f|0)){l=549;break;}f=f-k|0;while(1){j=k;k=j-1|0;if((j|0)==0){break;}j=a;a=j+2|0;m=b[j>>1]|0;j=_(i,m<<16>>16)|0;n=d;d=n+4|0;c[n>>2]=(c[n>>2]|0)+j;j=_(i,m<<16>>16)|0;n=d;d=n+4|0;c[n>>2]=(c[n>>2]|0)+j;}k=c[h+13060>>2]|0;if((bU(h,e)|0)!=0){l=547;break;}i=c[g+60>>2]|0;}if((l|0)==549){c[g+224>>2]=k-f;while(1){k=f;f=k-1|0;if((k|0)==0){break;}k=a;a=k+2|0;m=b[k>>1]|0;k=_(i,m<<16>>16)|0;g=d;d=g+4|0;c[g>>2]=(c[g>>2]|0)+k;k=_(i,m<<16>>16)|0;g=d;d=g+4|0;c[g>>2]=(c[g>>2]|0)+k;}return;}else if((l|0)==556){return;}else if((l|0)==547){return;}}function bR(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=d;d=e;e=g;g=c[a+1724+(f*236|0)+60>>2]|0;while(1){f=e;e=f-1|0;if((f|0)==0){break;}f=h;h=f+2|0;a=b[f>>1]|0;f=_(g,a<<16>>16)|0;i=d;d=i+4|0;c[i>>2]=(c[i>>2]|0)+f;f=_(g,a<<16>>16)|0;a=d;d=a+4|0;c[a>>2]=(c[a>>2]|0)+f;}return;}function bS(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;h=a;a=d;d=e;e=f;f=g;g=h+1724+(e*236|0)|0;i=c[g+60>>2]|0;j=c[g+224>>2]|0;k=j;do{if((j|0)==0){k=c[h+13060>>2]|0;if((bU(h,e)|0)==0){i=c[g+60>>2]|0;break;}return;}}while(0);while(1){if((f|0)==0){l=582;break;}if((k|0)>=(f|0)){l=576;break;}f=f-k|0;while(1){j=k;k=j-1|0;if((j|0)==0){break;}j=a;a=j+2|0;m=b[j>>1]|0;j=_(i,m<<16>>16)|0;n=d;d=n+4|0;c[n>>2]=(c[n>>2]|0)+j;d=d+4|0;}k=c[h+13060>>2]|0;if((bU(h,e)|0)!=0){l=574;break;}i=c[g+60>>2]|0;}if((l|0)==582){return;}else if((l|0)==576){c[g+224>>2]=k-f;while(1){k=f;f=k-1|0;if((k|0)==0){break;}k=a;a=k+2|0;m=b[k>>1]|0;k=_(i,m<<16>>16)|0;g=d;d=g+4|0;c[g>>2]=(c[g>>2]|0)+k;d=d+4|0;}return;}else if((l|0)==574){return;}}function bT(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=d;d=e;e=g;g=c[a+1724+(f*236|0)+60>>2]|0;while(1){f=e;e=f-1|0;if((f|0)==0){break;}f=h;h=f+2|0;a=_(g,b[f>>1]|0)|0;f=d;d=f+4|0;c[f>>2]=(c[f>>2]|0)+a;d=d+4|0;}return;}function bU(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a;a=b;do{if((c[d+1724+(a*236|0)+32>>2]|0)!=0){if((bV(d,a)|0)==0){break;}e=1;f=e;return f|0;}}while(0);if((c[d+1724+(a*236|0)+48>>2]|0)!=0){bW(d,a);}bJ(d,a);e=0;f=e;return f|0;}function bV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=a;a=b;b=d+1724+(a*236|0)+24|0;c[b>>2]=(c[b>>2]|0)+(c[d+1724+(a*236|0)+32>>2]|0);if((c[d+1724+(a*236|0)+32>>2]|0)<0){if((c[d+1724+(a*236|0)+24>>2]|0)<=(c[d+1724+(a*236|0)+28>>2]|0)){e=603;}else{e=601;}}else{e=601;}do{if((e|0)==601){if((c[d+1724+(a*236|0)+32>>2]|0)<=0){break;}if((c[d+1724+(a*236|0)+24>>2]|0)>=(c[d+1724+(a*236|0)+28>>2]|0)){e=603;}}}while(0);do{if((e|0)==603){c[d+1724+(a*236|0)+24>>2]=c[d+1724+(a*236|0)+28>>2];if((bI(d,a)|0)==0){break;}f=1;g=f;return g|0;}}while(0);f=0;g=f;return g|0;}function bW(a,b){a=a|0;b=b|0;var e=0,f=0;e=a;a=b;b=(d[(c[e+1724+(a*236|0)+4>>2]|0)+108|0]|0)<<7;if((c[e+1724+(a*236|0)+36>>2]|0)!=0){f=e+1724+(a*236|0)+40|0;c[f>>2]=(c[f>>2]|0)+(c[e+1724+(a*236|0)+36>>2]|0);if((c[e+1724+(a*236|0)+40>>2]|0)>=65536){c[e+1724+(a*236|0)+36>>2]=0;}else{b=_(b,c[e+1724+(a*236|0)+40>>2]|0)|0;b=b>>16;}}f=e+1724+(a*236|0)+44|0;c[f>>2]=(c[f>>2]|0)+(c[e+1724+(a*236|0)+48>>2]|0);g[e+1724+(a*236|0)+76>>2]=1.0-(+R(+(+(c[e+1724+(a*236|0)+44>>2]>>5|0)*0.006135923151542565))+1.0)*+(b|0)*1.0*762939453125.0e-17;return;}function bX(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=d;d=e;e=b;while(1){b=d;d=b-1|0;if((b|0)==0){break;}b=f;f=b+4|0;g=c[b>>2]>>21;if((g|0)>127){g=127;}else{if((g|0)<-128){g=-128;}}b=e;e=b+1|0;a[b]=g&255;}return;}function bY(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=d;d=e;e=b;while(1){b=d;d=b-1|0;if((b|0)==0){break;}b=f;f=b+4|0;g=c[b>>2]>>21;if((g|0)>127){g=127;}else{if((g|0)<-128){g=-128;}}b=e;e=b+1|0;a[b]=(128^g&255)&255;}return;}function bZ(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;f=d;d=e;e=a;while(1){a=d;d=a-1|0;if((a|0)==0){break;}a=f;f=a+4|0;g=c[a>>2]>>13;if((g|0)>32767){g=32767;}else{if((g|0)<-32768){g=-32768;}}a=e;e=a+2|0;b[a>>1]=g&65535;}return;}function b_(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;f=d;d=e;e=a;while(1){a=d;d=a-1|0;if((a|0)==0){break;}a=f;f=a+4|0;g=c[a>>2]>>13;if((g|0)>32767){g=32767;}else{if((g|0)<-32768){g=-32768;}}a=e;e=a+2|0;b[a>>1]=(32768^g&65535)&65535;}return;}function b$(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;f=d;d=e;e=a;while(1){a=d;d=a-1|0;if((a|0)==0){break;}a=f;f=a+4|0;g=c[a>>2]>>13;if((g|0)>32767){g=32767;}else{if((g|0)<-32768){g=-32768;}}a=e;e=a+2|0;b[a>>1]=(((g&65535)<<16>>16&255)<<8|(g&65535)<<16>>16>>8&255)&65535;}return;}function b0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=i;i=i+8|0;h=g|0;c[h>>2]=0;a[h+5|0]=1;a[h+4|0]=d&255;a[h+6|0]=e&255;a[h+7|0]=f&255;b1(b,h);i=g;return;}function b1(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;f=b;b=e;e=c[f+13052>>2]|0;g=-1;h=2147483647;if(0==(b|0)){i=c[f+13080>>2]|0;}else{i=b;}while(1){b=e;e=b-1|0;if((b|0)==0){break;}if((d[f+1724+(e*236|0)|0]|0|0)==0){g=e;}else{do{if((d[f+1724+(e*236|0)+1|0]|0|0)==(d[i+4|0]|0|0)){if((d[f+1724+(e*236|0)+2|0]|0|0)!=(d[i+6|0]|0|0)){if((c[f+1084+((d[f+1724+(e*236|0)+1|0]|0)*40|0)+28>>2]|0)==0){break;}}ch(f,e);}}while(0);}}if((g|0)!=-1){cn(f,i,g);return;}e=c[f+13052>>2]|0;while(1){b=e;e=b-1|0;if((b|0)==0){break;}do{if((d[f+1724+(e*236|0)|0]|0|0)!=1){if((d[f+1724+(e*236|0)|0]|0|0)==4){break;}b=c[f+1724+(e*236|0)+60>>2]|0;do{if((c[f+1724+(e*236|0)+232>>2]|0)==0){if((c[f+1724+(e*236|0)+64>>2]|0)<=(b|0)){break;}b=c[f+1724+(e*236|0)+64>>2]|0;}}while(0);if((b|0)<(h|0)){h=b;g=e;}}}while(0);}if((g|0)!=-1){e=f+13068|0;c[e>>2]=(c[e>>2]|0)+1;a[f+1724+(g*236|0)|0]=0;cn(f,i,g);return;}else{g=f+13064|0;c[g>>2]=(c[g>>2]|0)+1;return;}}function b2(b,e){b=b|0;e=e|0;var f=0,g=0,h=0;f=b;b=e;e=c[f+13052>>2]|0;if(0==(b|0)){g=c[f+13080>>2]|0;}else{g=b;}L890:while(1){b=e;e=b-1|0;if((b|0)==0){h=709;break;}do{if((d[f+1724+(e*236|0)|0]|0|0)==1){if((d[f+1724+(e*236|0)+1|0]|0|0)!=(d[g+4|0]|0|0)){break;}if((d[f+1724+(e*236|0)+2|0]|0|0)==(d[g+6|0]|0|0)){break L890;}}}while(0);}if((h|0)==709){return;}if((c[f+1084+((d[g+4|0]|0)*40|0)+12>>2]|0)!=0){a[f+1724+(e*236|0)|0]=2;}else{ci(f,e);}return;}function b3(a){a=a|0;var b=0;b=a;c[b>>2]=1;b4(b);b5(b,0);return;}function b4(a){a=a|0;var b=0;b=a;g[b+16>>2]=+(c[b+20>>2]|0)/100.0;return;}function b5(a,b){a=a|0;b=b|0;var d=0;d=a;a=b;if((c[d+13088>>2]|0)>(a|0)){c[d+13088>>2]=0;}ck(d);c[d+13080>>2]=c[d+13076>>2];c[392]=5e5;if((a|0)==0){return;}cl(d,a);return;}function b6(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;j=i;i=i+8|0;k=j|0;l=b;c[k>>2]=e;e=h;if((c[l>>2]|0)==0){m=0;n=m;i=j;return n|0;}h=(f>>>0)/((c[l+12>>2]|0)>>>0)|0;f=c[l+13088>>2]|0;b=(c[l+13088>>2]|0)+h|0;L920:while(1){if((c[l+13088>>2]|0)>=(b|0)){o=758;break;}while(1){if(~~(+(c[c[l+13080>>2]>>2]|0)/+g[258])>>>0>(c[l+13088>>2]|0)>>>0){break;}switch(d[(c[l+13080>>2]|0)+5|0]|0){case 99:{if(0==(e|0)){o=752;break L920;}break;}case 6:{c[l+1084+((d[(c[l+13080>>2]|0)+4|0]|0)*40|0)+12>>2]=d[(c[l+13080>>2]|0)+6|0]|0;if((a[(c[l+13080>>2]|0)+6|0]|0)==0){ca(l);}break;}case 3:{b7(l);break;}case 11:{c[l+1084+((d[(c[l+13080>>2]|0)+4|0]|0)*40|0)+32>>2]=d[(c[l+13080>>2]|0)+6|0]|0;g[l+1084+((d[(c[l+13080>>2]|0)+4|0]|0)*40|0)+36>>2]=0.0;break;}case 14:{cc(l);break;}case 12:{cd(l);break;}case 13:{cb(l,d[(c[l+13080>>2]|0)+4|0]|0);break;}case 9:{if((c[l+13056>>2]&1<>2]|0)+4|0]|0)!=0){c[l+1084+((d[(c[l+13080>>2]|0)+4|0]|0)*40|0)>>2]=d[(c[l+13080>>2]|0)+6|0]|0;}else{c[l+1084+((d[(c[l+13080>>2]|0)+4|0]|0)*40|0)+4>>2]=d[(c[l+13080>>2]|0)+6|0]|0;}break;}case 5:{c[l+1084+((d[(c[l+13080>>2]|0)+4|0]|0)*40|0)+16>>2]=d[(c[l+13080>>2]|0)+6|0]|0;break;}case 7:{c[l+1084+((d[(c[l+13080>>2]|0)+4|0]|0)*40|0)+24>>2]=d[(c[l+13080>>2]|0)+6|0]|0;b9(l);break;}case 1:{if((a[(c[l+13080>>2]|0)+7|0]|0)!=0){b1(l,0);}else{b2(l,0);}break;}case 15:{c[l+1084+((d[(c[l+13080>>2]|0)+4|0]|0)*40|0)>>2]=d[(c[l+13080>>2]|0)+6|0]|0;break;}case 10:{c[392]=(d[(c[l+13080>>2]|0)+4|0]|0)+(d[(c[l+13080>>2]|0)+7|0]<<8)+(d[(c[l+13080>>2]|0)+6|0]<<16);break;}case 8:{c[l+1084+((d[(c[l+13080>>2]|0)+4|0]|0)*40|0)+20>>2]=(d[(c[l+13080>>2]|0)+6|0]|0)+(d[(c[l+13080>>2]|0)+7|0]<<7);g[l+1084+((d[(c[l+13080>>2]|0)+4|0]|0)*40|0)+36>>2]=0.0;b8(l);break;}case 4:{c[l+1084+((d[(c[l+13080>>2]|0)+4|0]|0)*40|0)+8>>2]=d[(c[l+13080>>2]|0)+6|0]|0;b9(l);break;}case 2:{b2(l,0);break;}default:{}}p=l+13080|0;c[p>>2]=(c[p>>2]|0)+8;}if(~~(+(c[c[l+13080>>2]>>2]|0)/+g[258])>>>0>b>>>0){ce(l,k,b-(c[l+13088>>2]|0)|0);}else{ce(l,k,~~(+(c[c[l+13080>>2]>>2]|0)/+g[258])-(c[l+13088>>2]|0)|0);}}if((o|0)==752){c[l>>2]=0;m=_((c[l+13088>>2]|0)-f|0,c[l+12>>2]|0)|0;n=m;i=j;return n|0;}else if((o|0)==758){m=_(h,c[l+12>>2]|0)|0;n=m;i=j;return n|0;}return 0;}function b7(b){b=b|0;var e=0,f=0,g=0,h=0;e=b;b=c[e+13080>>2]|0;f=c[e+13052>>2]|0;L967:while(1){g=f;f=g-1|0;if((g|0)==0){h=772;break;}do{if((d[e+1724+(f*236|0)|0]|0|0)==1){if((d[e+1724+(f*236|0)+1|0]|0|0)!=(d[b+4|0]|0|0)){break;}if((d[e+1724+(f*236|0)+2|0]|0|0)==(d[b+6|0]|0|0)){break L967;}}}while(0);}if((h|0)==772){return;}a[e+1724+(f*236|0)+3|0]=a[b+7|0]|0;cf(e,f);bJ(e,f);return;}function b8(a){a=a|0;var b=0,e=0,f=0;b=a;a=d[(c[b+13080>>2]|0)+4|0]|0;e=c[b+13052>>2]|0;while(1){f=e;e=f-1|0;if((f|0)==0){break;}do{if((d[b+1724+(e*236|0)|0]|0|0)!=0){if((d[b+1724+(e*236|0)+1|0]|0|0)!=(a|0)){break;}cj(b,e);}}while(0);}return;}function b9(a){a=a|0;var b=0,e=0,f=0;b=a;a=d[(c[b+13080>>2]|0)+4|0]|0;e=c[b+13052>>2]|0;while(1){f=e;e=f-1|0;if((f|0)==0){break;}do{if((d[b+1724+(e*236|0)+1|0]|0|0)==(a|0)){if((d[b+1724+(e*236|0)|0]|0|0)!=1){if((d[b+1724+(e*236|0)|0]|0|0)!=2){break;}}cf(b,e);bJ(b,e);}}while(0);}return;}function ca(a){a=a|0;var b=0,e=0,f=0;b=a;a=c[b+13052>>2]|0;e=d[(c[b+13080>>2]|0)+4|0]|0;while(1){f=a;a=f-1|0;if((f|0)==0){break;}do{if((d[b+1724+(a*236|0)|0]|0|0)==2){if((d[b+1724+(a*236|0)+1|0]|0|0)!=(e|0)){break;}ci(b,a);}}while(0);}return;}function cb(a,b){a=a|0;b=b|0;var d=0;d=a;a=b;c[d+1084+(a*40|0)+8>>2]=90;c[d+1084+(a*40|0)+24>>2]=127;c[d+1084+(a*40|0)+12>>2]=0;c[d+1084+(a*40|0)+20>>2]=8192;g[d+1084+(a*40|0)+36>>2]=0.0;return;}function cc(b){b=b|0;var e=0,f=0,g=0;e=b;b=c[e+13052>>2]|0;f=d[(c[e+13080>>2]|0)+4|0]|0;while(1){g=b;b=g-1|0;if((g|0)==0){break;}do{if((d[e+1724+(b*236|0)|0]|0|0)==1){if((d[e+1724+(b*236|0)+1|0]|0|0)!=(f|0)){break;}if((c[e+1084+(f*40|0)+12>>2]|0)!=0){a[e+1724+(b*236|0)|0]=2;}else{ci(e,b);}}}while(0);}return;}function cd(a){a=a|0;var b=0,e=0,f=0;b=a;a=c[b+13052>>2]|0;e=d[(c[b+13080>>2]|0)+4|0]|0;while(1){f=a;a=f-1|0;if((f|0)==0){break;}do{if((d[b+1724+(a*236|0)+1|0]|0|0)==(e|0)){if((d[b+1724+(a*236|0)|0]|0|0)==0){break;}if((d[b+1724+(a*236|0)|0]|0|0)==4){break;}ch(b,a);}}while(0);}return;}function ce(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=a;a=b;b=d;if((c[e+8>>2]&1|0)!=0){f=1;}else{f=2;}while(1){if((b|0)==0){break;}d=b;if((d|0)>(c[e+1064>>2]|0)){d=c[e+1064>>2]|0;}cg(e,d);g=c[e+1060>>2]|0;h=c[a>>2]|0;i=c[e+1072>>2]|0;j=_(f,d)|0;aZ[g&15](h,i,j);j=_(c[e+12>>2]|0,d)|0;i=a;c[i>>2]=(c[i>>2]|0)+j;b=b-d|0;}return;}function cf(a,b){a=a|0;b=b|0;var e=0,f=0,h=0;e=a;a=b;b=_(d[e+1724+(a*236|0)+3|0]|0,c[e+1084+((d[e+1724+(a*236|0)+1|0]|0)*40|0)+8>>2]|0)|0;f=_(b,c[e+1084+((d[e+1724+(a*236|0)+1|0]|0)*40|0)+24>>2]|0)|0;if((c[e+8>>2]&1|0)!=0){c[e+1724+(a*236|0)+232>>2]=3;g[e+1724+(a*236|0)+68>>2]=+(f|0)*+g[(c[e+1724+(a*236|0)+4>>2]|0)+84>>2]*+g[e+16>>2]*4.76837158203125e-7;return;}do{if((c[e+1724+(a*236|0)+228>>2]|0)>60){if((c[e+1724+(a*236|0)+228>>2]|0)>=68){h=827;break;}c[e+1724+(a*236|0)+232>>2]=3;g[e+1724+(a*236|0)+68>>2]=+(f|0)*+g[(c[e+1724+(a*236|0)+4>>2]|0)+84>>2]*+g[e+16>>2]*4.76837158203125e-7;}else{h=827;}}while(0);if((h|0)==827){if((c[e+1724+(a*236|0)+228>>2]|0)<5){c[e+1724+(a*236|0)+232>>2]=1;g[e+1724+(a*236|0)+68>>2]=+(f|0)*+g[(c[e+1724+(a*236|0)+4>>2]|0)+84>>2]*+g[e+16>>2]*9.5367431640625e-7;}else{if((c[e+1724+(a*236|0)+228>>2]|0)>123){c[e+1724+(a*236|0)+232>>2]=2;g[e+1724+(a*236|0)+68>>2]=+(f|0)*+g[(c[e+1724+(a*236|0)+4>>2]|0)+84>>2]*+g[e+16>>2]*9.5367431640625e-7;}else{c[e+1724+(a*236|0)+232>>2]=0;g[e+1724+(a*236|0)+68>>2]=+(f|0)*+g[(c[e+1724+(a*236|0)+4>>2]|0)+84>>2]*+g[e+16>>2]*7.450580596923828e-9;g[e+1724+(a*236|0)+72>>2]=+g[e+1724+(a*236|0)+68>>2]*+(c[e+1724+(a*236|0)+228>>2]|0);f=e+1724+(a*236|0)+68|0;g[f>>2]=+g[f>>2]*+(127-(c[e+1724+(a*236|0)+228>>2]|0)|0);}}}return;}function cg(a,b){a=a|0;b=b|0;var e=0,f=0;e=a;a=b;if((c[e+8>>2]&1|0)!=0){f=a<<2;}else{f=a<<3;}c5(c[e+1072>>2]|0,0,f|0);f=0;while(1){if((f|0)>=(c[e+13052>>2]|0)){break;}if((d[e+1724+(f*236|0)|0]|0|0)!=0){bK(e,c[e+1072>>2]|0,f,a);}f=f+1|0;}f=e+13088|0;c[f>>2]=(c[f>>2]|0)+a;return;}function ch(b,c){b=b|0;c=c|0;a[b+1724+(c*236|0)|0]=4;return;}function ci(b,d){b=b|0;d=d|0;var e=0,f=0;e=b;b=d;if((a[(c[e+1724+(b*236|0)+4>>2]|0)+110|0]&64|0)!=0){c[e+1724+(b*236|0)+220>>2]=3;a[e+1724+(b*236|0)|0]=3;d=e;f=b;bI(d,f)|0;bJ(e,b);return;}else{a[e+1724+(b*236|0)|0]=3;return;}}function cj(a,b){a=a|0;b=b|0;var e=0,f=0,i=0,j=0,l=0,m=0.0;e=a;a=b;b=(c[e+1724+(a*236|0)+20>>2]|0)<0|0;f=c[e+1084+((d[e+1724+(a*236|0)+1|0]|0)*40|0)+20>>2]|0;if((c[(c[e+1724+(a*236|0)+4>>2]|0)+12>>2]|0)==0){return;}if((c[e+1724+(a*236|0)+212>>2]|0)!=0){i=32;while(1){j=i;i=j-1|0;if((j|0)==0){break;}c[e+1724+(a*236|0)+80+(i<<2)>>2]=0;}}do{if((f|0)==8192){l=866;}else{if((f|0)<0){l=866;break;}if((f|0)>16383){l=866;break;}f=f-8192|0;if(+g[e+1084+((d[e+1724+(a*236|0)+1|0]|0)*40|0)+36>>2]==0.0){i=_(f,c[e+1084+((d[e+1724+(a*236|0)+1|0]|0)*40|0)+32>>2]|0)|0;if((f|0)<0){i=-i|0;}j=1704+((i>>5&255)<<3)|0;m=(c[k>>2]=d[j]|d[j+1|0]<<8|d[j+2|0]<<16|d[j+3|0]<<24,c[k+4>>2]=d[j+4|0]|d[j+5|0]<<8|d[j+6|0]<<16|d[j+7|0]<<24,+h[k>>3]);j=3752+(i>>13<<3)|0;g[e+1084+((d[e+1724+(a*236|0)+1|0]|0)*40|0)+36>>2]=m*(c[k>>2]=d[j]|d[j+1|0]<<8|d[j+2|0]<<16|d[j+3|0]<<24,c[k+4>>2]=d[j+4|0]|d[j+5|0]<<8|d[j+6|0]<<16|d[j+7|0]<<24,+h[k>>3]);}if((f|0)>0){c[e+1724+(a*236|0)+12>>2]=~~(+g[e+1084+((d[e+1724+(a*236|0)+1|0]|0)*40|0)+36>>2]*+(c[e+1724+(a*236|0)+8>>2]|0));}else{c[e+1724+(a*236|0)+12>>2]=~~(+(c[e+1724+(a*236|0)+8>>2]|0)/+g[e+1084+((d[e+1724+(a*236|0)+1|0]|0)*40|0)+36>>2]);}}}while(0);if((l|0)==866){c[e+1724+(a*236|0)+12>>2]=c[e+1724+(a*236|0)+8>>2];}m=+(c[(c[e+1724+(a*236|0)+4>>2]|0)+12>>2]|0)*+(c[e+1724+(a*236|0)+12>>2]|0)/(+(c[(c[e+1724+(a*236|0)+4>>2]|0)+32>>2]|0)*+(c[e+4>>2]|0))*4096.0;if((b|0)!=0){m=-0.0-m;}c[e+1724+(a*236|0)+20>>2]=~~m;return;}function ck(a){a=a|0;var b=0;b=a;a=0;while(1){if((a|0)>=16){break;}cb(b,a);c[b+1084+(a*40|0)+4>>2]=c[b+1056>>2];c[b+1084+(a*40|0)+16>>2]=-1;c[b+1084+(a*40|0)+32>>2]=2;c[b+1084+(a*40|0)>>2]=0;a=a+1|0;}cm(b);return;}function cl(a,b){a=a|0;b=b|0;var e=0,f=0;e=a;a=b;cm(e);L1123:while(1){if(+(c[c[e+13080>>2]>>2]|0)/+g[258]>=+(a|0)){break;}switch(d[(c[e+13080>>2]|0)+5|0]|0|0){case 7:{c[e+1084+((d[(c[e+13080>>2]|0)+4|0]|0)*40|0)+24>>2]=d[(c[e+13080>>2]|0)+6|0]|0;break;}case 13:{cb(e,d[(c[e+13080>>2]|0)+4|0]|0);break;}case 4:{c[e+1084+((d[(c[e+13080>>2]|0)+4|0]|0)*40|0)+8>>2]=d[(c[e+13080>>2]|0)+6|0]|0;break;}case 11:{c[e+1084+((d[(c[e+13080>>2]|0)+4|0]|0)*40|0)+32>>2]=d[(c[e+13080>>2]|0)+6|0]|0;g[e+1084+((d[(c[e+13080>>2]|0)+4|0]|0)*40|0)+36>>2]=0.0;break;}case 99:{f=902;break L1123;break;}case 9:{if((c[e+13056>>2]&1<<(d[(c[e+13080>>2]|0)+4|0]|0)|0)!=0){c[e+1084+((d[(c[e+13080>>2]|0)+4|0]|0)*40|0)>>2]=d[(c[e+13080>>2]|0)+6|0]|0;}else{c[e+1084+((d[(c[e+13080>>2]|0)+4|0]|0)*40|0)+4>>2]=d[(c[e+13080>>2]|0)+6|0]|0;}break;}case 8:{c[e+1084+((d[(c[e+13080>>2]|0)+4|0]|0)*40|0)+20>>2]=(d[(c[e+13080>>2]|0)+6|0]|0)+((d[(c[e+13080>>2]|0)+7|0]|0)<<7);g[e+1084+((d[(c[e+13080>>2]|0)+4|0]|0)*40|0)+36>>2]=0.0;break;}case 15:{c[e+1084+((d[(c[e+13080>>2]|0)+4|0]|0)*40|0)>>2]=d[(c[e+13080>>2]|0)+6|0]|0;break;}case 10:{c[392]=(d[(c[e+13080>>2]|0)+4|0]|0)+((d[(c[e+13080>>2]|0)+7|0]|0)<<8)+((d[(c[e+13080>>2]|0)+6|0]|0)<<16);break;}case 5:{c[e+1084+((d[(c[e+13080>>2]|0)+4|0]|0)*40|0)+16>>2]=d[(c[e+13080>>2]|0)+6|0]|0;break;}case 6:{c[e+1084+((d[(c[e+13080>>2]|0)+4|0]|0)*40|0)+12>>2]=d[(c[e+13080>>2]|0)+6|0]|0;break;}default:{}}b=e+13080|0;c[b>>2]=(c[b>>2]|0)+8;}if((f|0)==902){c[e+13088>>2]=~~(+(c[c[e+13080>>2]>>2]|0)/+g[258]);return;}if((c[e+13080>>2]|0)!=(c[e+13076>>2]|0)){f=e+13080|0;c[f>>2]=(c[f>>2]|0)-8;}c[e+13088>>2]=a;return;}function cm(b){b=b|0;var c=0;c=b;b=0;while(1){if((b|0)>=48){break;}a[c+1724+(b*236|0)|0]=0;b=b+1|0;}return;}function cn(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=b;b=e;e=f;if((c[h+13056>>2]&1<>2]<<2)>>2]|0)+4+(d[b+6|0]<<2)>>2]|0;i=f;do{if((f|0)==0){j=c[(c[h+540>>2]|0)+4+(d[b+6|0]<<2)>>2]|0;i=j;if((j|0)!=0){break;}return;}}while(0);(c[i>>2]|0)!=1;if((a[(c[i+4>>2]|0)+112|0]|0)!=0){f=1056+(a[(c[i+4>>2]|0)+112|0]<<2)|0;c[h+1724+(e*236|0)+8>>2]=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24;}else{f=1056+((a[b+6|0]&127)<<2)|0;c[h+1724+(e*236|0)+8>>2]=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24;}c[h+1724+(e*236|0)+4>>2]=c[i+4>>2];}else{if(-1!=(c[1640+(d[b+4|0]<<2)>>2]|0)){f=c[h+28+(c[h+1084+((d[b+4|0]|0)*40|0)>>2]<<2)>>2]|0;j=c[1640+(d[b+4|0]<<2)>>2]|0;if(0==(c[f+4+(j<<2)>>2]|0)){k=0;l=h;m=c[(c[f>>2]|0)+(j*28|0)>>2]|0;n=(k|0)!=0?1:0;o=c[(c[f>>2]|0)+(j*28|0)+12>>2]|0;p=c[(c[f>>2]|0)+(j*28|0)+8>>2]|0;if((c[(c[f>>2]|0)+(j*28|0)+4>>2]|0)!=-1){q=c[(c[f>>2]|0)+(j*28|0)+4>>2]|0;}else{if((k|0)!=0){r=j;}else{r=-1;}q=r;}if((c[(c[f>>2]|0)+(j*28|0)+16>>2]|0)!=-1){s=c[(c[f>>2]|0)+(j*28|0)+16>>2]|0;}else{s=(k|0)!=0?1:-1;}if((c[(c[f>>2]|0)+(j*28|0)+20>>2]|0)!=-1){t=c[(c[f>>2]|0)+(j*28|0)+20>>2]|0;}else{t=(k|0)!=0?1:-1;}c[f+4+(j<<2)>>2]=bl(l,m,n,o,p,q,s,t,c[(c[f>>2]|0)+(j*28|0)+24>>2]|0)|0;}i=c[f+4+(j<<2)>>2]|0;}else{if((c[h+1084+((d[b+4|0]|0)*40|0)+4>>2]|0)==-1){i=c[h+1052>>2]|0;}else{j=c[(c[h+28+(c[h+1084+((d[b+4|0]|0)*40|0)>>2]<<2)>>2]|0)+4+(c[h+1084+((d[b+4|0]|0)*40|0)+4>>2]<<2)>>2]|0;i=j;do{if((j|0)==0){f=c[(c[h+28>>2]|0)+4+(c[h+1084+((d[b+4|0]|0)*40|0)+4>>2]<<2)>>2]|0;i=f;if((f|0)!=0){break;}return;}}while(0);}}if((a[(c[i+4>>2]|0)+112|0]|0)!=0){j=1056+(a[(c[i+4>>2]|0)+112|0]<<2)|0;c[h+1724+(e*236|0)+8>>2]=d[j]|d[j+1|0]<<8|d[j+2|0]<<16|d[j+3|0]<<24;}else{j=1056+(((d[b+6|0]|0)+(c[1662]|0)&127)<<2)|0;c[h+1724+(e*236|0)+8>>2]=d[j]|d[j+1|0]<<8|d[j+2|0]<<16|d[j+3|0]<<24;}c[h+1724+(e*236|0)+8>>2]=~~(+(c[h+1724+(e*236|0)+8>>2]|0)*+g[260]/440.0);co(h,e,i,d[b+7|0]|0);}a[h+1724+(e*236|0)|0]=1;a[h+1724+(e*236|0)+1|0]=a[b+4|0]|0;a[h+1724+(e*236|0)+2|0]=a[b+6|0]|0;a[h+1724+(e*236|0)+3|0]=cp(a[b+7|0]|0,+g[1576+(d[b+4|0]<<2)>>2])|0;c[h+1724+(e*236|0)+16>>2]=0;c[h+1724+(e*236|0)+20>>2]=0;c[h+1724+(e*236|0)+44>>2]=0;c[h+1724+(e*236|0)+48>>2]=c[(c[h+1724+(e*236|0)+4>>2]|0)+96>>2];c[h+1724+(e*236|0)+36>>2]=c[(c[h+1724+(e*236|0)+4>>2]|0)+92>>2];c[h+1724+(e*236|0)+40>>2]=0;c[h+1724+(e*236|0)+52>>2]=c[(c[h+1724+(e*236|0)+4>>2]|0)+100>>2];c[h+1724+(e*236|0)+56>>2]=0;c[h+1724+(e*236|0)+212>>2]=c[(c[h+1724+(e*236|0)+4>>2]|0)+104>>2];c[h+1724+(e*236|0)+208>>2]=0;c[h+1724+(e*236|0)+216>>2]=0;i=0;while(1){if((i|0)>=32){break;}c[h+1724+(e*236|0)+80+(i<<2)>>2]=0;i=i+1|0;}if((c[h+1084+((d[b+4|0]|0)*40|0)+16>>2]|0)!=-1){c[h+1724+(e*236|0)+228>>2]=c[h+1084+((d[b+4|0]|0)*40|0)+16>>2];}else{c[h+1724+(e*236|0)+228>>2]=a[(c[h+1724+(e*236|0)+4>>2]|0)+111|0]|0;}cj(h,e);cf(h,e);if((a[(c[h+1724+(e*236|0)+4>>2]|0)+110|0]&64|0)!=0){c[h+1724+(e*236|0)+220>>2]=0;c[h+1724+(e*236|0)+24>>2]=0;c[h+1724+(e*236|0)+224>>2]=0;b=h;i=e;bI(b,i)|0;bJ(h,e);return;}else{c[h+1724+(e*236|0)+32>>2]=0;bJ(h,e);return;}}function co(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=a;a=b;b=d;d=e;e=c[b>>2]|0;g=c[b+4>>2]|0;if((e|0)==1){c[f+1724+(a*236|0)+4>>2]=g;return;}h=c[f+1724+(a*236|0)+8>>2]|0;i=0;L1232:while(1){if((i|0)>=(e|0)){break;}do{if((c[g+16>>2]|0)<=(d|0)){if((c[g+20>>2]|0)<(d|0)){break;}if((c[g+24>>2]|0)>(h|0)){break;}if((c[g+28>>2]|0)>=(h|0)){j=977;break L1232;}}}while(0);g=g+116|0;i=i+1|0;}if((j|0)==977){c[f+1724+(a*236|0)+4>>2]=g;return;}j=2147483647;d=c[b+4>>2]|0;g=d;b=d;i=0;while(1){if((i|0)>=(e|0)){break;}d=(c[g+32>>2]|0)-h|0;if((d|0)<0){d=-d|0;}if((d|0)<(j|0)){j=d;b=g;}g=g+116|0;i=i+1|0;}c[f+1724+(a*236|0)+4>>2]=b;return;}function cp(a,b){a=a|0;b=+b;var d=0,e=0,f=0.0,g=0,h=0,j=0,k=0;d=i;e=a;f=b;if(f<=1.0){g=~~(+(e&255|0)*f);h=g;i=d;return h|0;}else{a=(e&255)+(~~(+(127-(e&255)|0)*(f-1.0))&255)&255;j=e&255;e=a&255;aG(4784,(k=i,i=i+16|0,c[k>>2]=j,c[k+8>>2]=e,k)|0)|0;i=k;g=a;h=g;i=d;return h|0;}return 0;}function cq(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;h=i;i=i+40|0;j=h|0;k=h+8|0;l=h+16|0;m=h+24|0;n=h+32|0;o=d;d=e;e=f;f=g;c[d+13092>>2]=0;c[d+13096>>2]=0;c[d+13084>>2]=0;do{if((cP(o,n|0,1,4)|0)==4){if((cP(o,j,4,1)|0)!=1){break;}c[j>>2]=(c[j>>2]&255)<<24|(c[j>>2]&65280)<<8|(c[j>>2]&16711680)>>8|c[j>>2]>>24&255;do{if((c4(n|0,4776,4)|0)==0){if((c[j>>2]|0)<6){break;}g=o;p=k;cP(g,p,2,1)|0;p=o;g=l;cP(p,g,2,1)|0;g=o;p=m;cP(g,p,2,1)|0;b[k>>1]=((b[k>>1]&255)<<8|b[k>>1]>>8&255)&65535;b[l>>1]=((b[l>>1]&255)<<8|b[l>>1]>>8&255)&65535;b[m>>1]=((b[m>>1]&255)<<8|b[m>>1]>>8&255)&65535;if((b[m>>1]|0)<0){q=_(-((b[m>>1]|0)/256|0)|0,b[m>>1]&255)|0;}else{q=b[m>>1]|0;}if((c[j>>2]|0)>6){cQ(o,(c[j>>2]|0)-6|0);}do{if((b[k>>1]|0)>=0){if((b[k>>1]|0)>2){break;}c[d+13084>>2]=bi(12)|0;c[c[d+13084>>2]>>2]=0;a[(c[d+13084>>2]|0)+5|0]=0;c[(c[d+13084>>2]|0)+8>>2]=0;p=d+13092|0;c[p>>2]=(c[p>>2]|0)+1;p=b[k>>1]|0;do{if((p|0)==1){r=0;while(1){if((r|0)>=(b[l>>1]|0)){s=1023;break;}if((cr(o,d,0)|0)!=0){break;}r=r+1|0;}if((s|0)==1023){break;}cs(d);t=0;u=t;i=h;return u|0;}else if((p|0)==2){r=0;while(1){if((r|0)>=(b[l>>1]|0)){s=1030;break;}if((cr(o,d,1)|0)!=0){break;}r=r+1|0;}if((s|0)==1030){break;}cs(d);t=0;u=t;i=h;return u|0;}else if((p|0)==0){if((cr(o,d,0)|0)==0){break;}cs(d);t=0;u=t;i=h;return u|0;}}while(0);t=ct(d,q,e,f)|0;u=t;i=h;return u|0;}}while(0);t=0;u=t;i=h;return u|0;}}while(0);t=0;u=t;i=h;return u|0;}}while(0);t=0;u=t;i=h;return u|0;}function cr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;e=i;i=i+16|0;f=e|0;g=e+8|0;h=a;a=b;b=c[a+13084>>2]|0;do{if((d|0)!=0){if((b|0)==0){j=1047;break;}while(1){if((c[b+8>>2]|0)==0){break;}b=c[b+8>>2]|0;}c[a+13096>>2]=c[b>>2];}else{j=1047;}}while(0);if((j|0)==1047){c[a+13096>>2]=0;}do{if((cP(h,g|0,1,4)|0)==4){if((cP(h,f,4,1)|0)!=1){break;}c[f>>2]=(c[f>>2]&255)<<24|(c[f>>2]&65280)<<8|(c[f>>2]&16711680)>>8|c[f>>2]>>24&255;if((c4(g|0,6272,4)|0)!=0){k=-2;l=k;i=e;return l|0;}while(1){d=cv(h,a)|0;m=d;if((d|0)==0){j=1055;break;}if((m|0)==-1){j=1057;break;}d=c[b+8>>2]|0;while(1){if((d|0)!=0){n=(c[d>>2]|0)<(c[m>>2]|0);}else{n=0;}if(!n){break;}b=d;d=c[b+8>>2]|0;}c[m+8>>2]=d;c[b+8>>2]=m;o=a+13092|0;c[o>>2]=(c[o>>2]|0)+1;b=m;}if((j|0)==1055){k=-2;l=k;i=e;return l|0;}else if((j|0)==1057){k=0;l=k;i=e;return l|0;}}}while(0);k=-1;l=k;i=e;return l|0;}function cs(a){a=a|0;var b=0,d=0;b=a;a=c[b+13084>>2]|0;d=a;if((a|0)==0){return;}while(1){if((d|0)==0){break;}a=c[d+8>>2]|0;c0(d);d=a;}c[b+13084>>2]=0;return;}function ct(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;h=i;i=i+192|0;j=h|0;k=h+64|0;l=h+128|0;m=b;b=e;e=f;f=g;g=0;while(1){if((g|0)>=16){break;}c[j+(g<<2)>>2]=0;c[k+(g<<2)>>2]=0;c[l+(g<<2)>>2]=c[m+1056>>2];g=g+1|0;}n=5e5;cu(m,n,b);o=bi((c[m+13092>>2]|0)+1<<3)|0;p=o;q=o;o=c[m+13084>>2]|0;r=0;s=0;t=0;u=0;v=0;g=0;while(1){if((g|0)>=(c[m+13092>>2]|0)){break;}w=0;x=d[o+5|0]|0;do{if((x|0)==9){if((c[m+13056>>2]&1<<(d[o+4|0]|0)|0)!=0){if((c[m+540+((d[o+6|0]|0)<<2)>>2]|0)!=0){y=d[o+6|0]|0;}else{a[o+6|0]=0;y=0;}if((c[k+((d[o+4|0]|0)<<2)>>2]|0)!=(y|0)){c[k+((d[o+4|0]|0)<<2)>>2]=y;}else{w=1;}}else{y=d[o+6|0]|0;do{if((c[l+((d[o+4|0]|0)<<2)>>2]|0)!=-1){if((c[l+((d[o+4|0]|0)<<2)>>2]|0)==(y|0)){z=1096;break;}c[l+((d[o+4|0]|0)<<2)>>2]=y;}else{z=1096;}}while(0);if((z|0)==1096){z=0;w=1;}}}else if((x|0)==15){if((c[m+13056>>2]&1<<(d[o+4|0]|0)|0)!=0){w=1;break;}if((c[m+28+((d[o+6|0]|0)<<2)>>2]|0)!=0){y=d[o+6|0]|0;}else{a[o+6|0]=0;y=0;}if((c[j+((d[o+4|0]|0)<<2)>>2]|0)!=(y|0)){c[j+((d[o+4|0]|0)<<2)>>2]=y;}else{w=1;}}else if((x|0)==1){if((v|0)!=0){v=1;}if((c[m+13056>>2]&1<<(d[o+4|0]|0)|0)!=0){if((c[(c[m+540+(c[k+((d[o+4|0]|0)<<2)>>2]<<2)>>2]|0)+4+((d[o+6|0]|0)<<2)>>2]|0)==0){c[(c[m+540+(c[k+((d[o+4|0]|0)<<2)>>2]<<2)>>2]|0)+4+((d[o+6|0]|0)<<2)>>2]=-1;}}else{if((c[l+((d[o+4|0]|0)<<2)>>2]|0)==-1){break;}if((c[(c[m+28+(c[j+((d[o+4|0]|0)<<2)>>2]<<2)>>2]|0)+4+(c[l+((d[o+4|0]|0)<<2)>>2]<<2)>>2]|0)==0){c[(c[m+28+(c[j+((d[o+4|0]|0)<<2)>>2]<<2)>>2]|0)+4+(c[l+((d[o+4|0]|0)<<2)>>2]<<2)>>2]=-1;}}}}while(0);x=(c[o>>2]|0)-t|0;A=x;do{if((x|0)!=0){if((v|0)!=0){z=1125;break;}B=_(c[m+1076>>2]|0,A)|0;s=s+(_(c[m+1080>>2]|0,A)|0)|0;if((s&-65536|0)!=0){B=B+(s>>16&65535)|0;s=s&65535;}u=u+B|0;}else{z=1125;}}while(0);if((z|0)==1125){z=0;if((v|0)==1){v=0;}}if((d[o+5|0]|0|0)==10){n=(d[o+4|0]|0)+((d[o+7|0]|0)<<8)+((d[o+6|0]|0)<<16)|0;cu(m,n,b);}if((w|0)==0){A=p;x=o|0;c[A>>2]=c[x>>2];c[A+4>>2]=c[x+4>>2];c[p>>2]=u;p=p+8|0;r=r+1|0;}t=c[o>>2]|0;o=c[o+8>>2]|0;g=g+1|0;}c[p>>2]=u;a[p+5|0]=99;r=r+1|0;cs(m);c[e>>2]=r;c[f>>2]=u;i=h;return q|0;}function cu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0;e=a;f=+(b|0)*+(c[e+4>>2]|0)*0.065536/+(d|0);c[e+1080>>2]=~~f&65535;c[e+1076>>2]=~~f>>16;return;}function cv(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;f=i;i=i+40|0;g=f|0;h=f+8|0;j=f+16|0;k=f+24|0;l=f+32|0;m=b;b=e;L1442:while(1){e=cw(m)|0;n=b+13096|0;c[n>>2]=(c[n>>2]|0)+e;if((cP(m,g,1,1)|0)!=1){o=1138;break;}do{if((d[g]|0)==240){o=1141;}else{if((d[g]|0)==247){o=1141;break;}if((d[g]|0)==255){e=m;cP(e,h,1,1)|0;p=cw(m)|0;do{if((d[h]|0)>0){if((d[h]|0)>=16){o=1146;break;}e=m;n=p;q=a[h]|0;r=b;cx(e,n,q,r)|0;}else{o=1146;}}while(0);if((o|0)==1146){o=0;r=d[h]|0;if((r|0)==47){o=1147;break L1442;}else if((r|0)==81){o=1148;break L1442;}cQ(m,p);}}else{a[j]=a[g]|0;if((a[j]&128|0)!=0){a[6632]=d[j]&15;a[6624]=d[j]>>4&7;r=m;cP(r,j,1,1)|0;a[j]=d[j]&127;}switch(d[6624]|0){case 1:{o=1156;break L1442;break;}case 6:{o=1188;break L1442;break;}case 4:{o=1186;break L1442;break;}case 5:{break;}case 0:{o=1155;break L1442;break;}case 2:{o=1157;break L1442;break;}case 3:{cP(m,k,1,1)|0;a[k]=d[k]&127;s=255;L1466:do{switch(d[j]|0){case 98:{a[6616]=1;a[6600+(d[6632]|0)|0]=a[k]|0;break;}case 6:{if((a[6616]|0)!=0){break L1466;}r=d[6584+(d[6632]|0)|0]<<8|d[6600+(d[6632]|0)|0];if((r|0)==0){s=11;}else if((r|0)==32639){o=1179;break L1442;}break;}case 7:{s=4;break;}case 10:{s=5;break;}case 11:{s=7;break;}case 64:{s=6;break;}case 120:{s=12;break;}case 121:{s=13;break;}case 123:{s=14;break;}case 0:{s=15;break;}case 32:{if((d[k]|0)==0){s=15;}break;}case 100:{a[6616]=0;a[6584+(d[6632]|0)|0]=a[k]|0;break;}case 101:{a[6616]=0;a[6600+(d[6632]|0)|0]=a[k]|0;break;}case 99:{a[6616]=1;a[6584+(d[6632]|0)|0]=a[k]|0;break;}default:{}}}while(0);if((s|0)!=255){o=1184;break L1442;}break;}default:{}}}}}while(0);if((o|0)==1141){o=0;p=cw(m)|0;cQ(m,p);}}if((o|0)==1184){t=bi(12)|0;c[t>>2]=c[b+13096>>2];a[t+5|0]=s&255;a[t+4|0]=a[6632]|0;a[t+6|0]=a[k]|0;a[t+7|0]=0;c[t+8>>2]=0;u=t;v=u;i=f;return v|0;}else if((o|0)==1156){cP(m,k,1,1)|0;a[k]=d[k]&127;t=bi(12)|0;c[t>>2]=c[b+13096>>2];a[t+5|0]=1;a[t+4|0]=a[6632]|0;a[t+6|0]=a[j]|0;a[t+7|0]=a[k]|0;c[t+8>>2]=0;u=t;v=u;i=f;return v|0;}else if((o|0)==1179){t=bi(12)|0;c[t>>2]=c[b+13096>>2];a[t+5|0]=11;a[t+4|0]=a[6632]|0;a[t+6|0]=2;a[t+7|0]=0;c[t+8>>2]=0;u=t;v=u;i=f;return v|0;}else if((o|0)==1138){u=0;v=u;i=f;return v|0;}else if((o|0)==1188){cP(m,k,1,1)|0;a[k]=d[k]&127;t=bi(12)|0;c[t>>2]=c[b+13096>>2];a[t+5|0]=8;a[t+4|0]=a[6632]|0;a[t+6|0]=a[j]|0;a[t+7|0]=a[k]|0;c[t+8>>2]=0;u=t;v=u;i=f;return v|0;}else if((o|0)==1186){a[j]=d[j]&127;t=bi(12)|0;c[t>>2]=c[b+13096>>2];a[t+5|0]=9;a[t+4|0]=a[6632]|0;a[t+6|0]=a[j]|0;a[t+7|0]=0;c[t+8>>2]=0;u=t;v=u;i=f;return v|0;}else if((o|0)==1147){u=-1;v=u;i=f;return v|0;}else if((o|0)==1148){cP(m,j,1,1)|0;cP(m,k,1,1)|0;cP(m,l,1,1)|0;t=bi(12)|0;c[t>>2]=c[b+13096>>2];a[t+5|0]=10;a[t+4|0]=a[l]|0;a[t+6|0]=a[j]|0;a[t+7|0]=a[k]|0;c[t+8>>2]=0;u=t;v=u;i=f;return v|0;}else if((o|0)==1155){cP(m,k,1,1)|0;a[k]=d[k]&127;t=bi(12)|0;c[t>>2]=c[b+13096>>2];a[t+5|0]=2;a[t+4|0]=a[6632]|0;a[t+6|0]=a[j]|0;a[t+7|0]=a[k]|0;c[t+8>>2]=0;u=t;v=u;i=f;return v|0;}else if((o|0)==1157){cP(m,k,1,1)|0;a[k]=d[k]&127;t=bi(12)|0;c[t>>2]=c[b+13096>>2];a[t+5|0]=3;a[t+4|0]=a[6632]|0;a[t+6|0]=a[j]|0;a[t+7|0]=a[k]|0;c[t+8>>2]=0;u=t;v=u;i=f;return v|0;}return 0;}function cw(b){b=b|0;var c=0,d=0,e=0;c=i;i=i+8|0;d=c|0;e=b;b=0;while(1){cP(e,d,1,1)|0;b=b+(a[d]&127)|0;if((a[d]&128|0)==0){break;}b=b<<7;}i=c;return b|0;}function cx(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=e;e=f;f=g;g=bi(h+1|0)|0;if((h|0)!=(cP(b,g,1,h)|0)){c0(g);i=-1;j=i;return j|0;}a[g+h|0]=0;while(1){b=h;h=b-1|0;if((b|0)==0){break;}if((d[g+h|0]|0|0)<32){a[g+h|0]=46;}}h=e&255;if((h|0)==1){k=0;}else if((h|0)==2){k=1;}else{c0(g);g=0;}if((g|0)!=0){if((c[f+13104+(k<<2)>>2]|0)!=0){c0(c[f+13104+(k<<2)>>2]|0);}c[f+13104+(k<<2)>>2]=g;}i=0;j=i;return j|0;}function cy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=b;b=e;e=f;f=g+1724+(b*236|0)|0;if((c[(c[f+4>>2]|0)+12>>2]|0)==0){h=c[f+16>>2]>>12;if((c[e>>2]|0)>=((c[(c[f+4>>2]|0)+8>>2]>>12)-h|0)){a[f|0]=0;c[e>>2]=(c[(c[f+4>>2]|0)+8>>2]>>12)-h;}else{i=f+16|0;c[i>>2]=(c[i>>2]|0)+(c[e>>2]<<12);}j=(c[(c[f+4>>2]|0)+88>>2]|0)+(h<<1)|0;k=j;return k|0;}h=a[(c[f+4>>2]|0)+110|0]|0;if((c[f+212>>2]|0)!=0){L1575:do{if((h&4|0)!=0){do{if((h&64|0)==0){if((d[f|0]|0|0)==1){break;}if((d[f|0]|0|0)!=2){break L1575;}}}while(0);if((h&8|0)!=0){j=cz(g,f,c[e>>2]|0)|0;k=j;return k|0;}else{j=cA(g,f,c[e>>2]|0)|0;k=j;return k|0;}}}while(0);j=cB(g,b,e)|0;k=j;return k|0;}else{L1561:do{if((h&4|0)!=0){do{if((h&64|0)==0){if((d[f|0]|0|0)==1){break;}if((d[f|0]|0|0)!=2){break L1561;}}}while(0);if((h&8|0)!=0){j=cC(g,f,c[e>>2]|0)|0;k=j;return k|0;}else{j=cD(g,f,c[e>>2]|0)|0;k=j;return k|0;}}}while(0);j=cE(g,b,e)|0;k=j;return k|0;}return 0;}function cz(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=a;a=d;d=e;e=c[a+16>>2]|0;g=c[a+20>>2]|0;h=c[(c[a+4>>2]|0)+4>>2]|0;i=c[c[a+4>>2]>>2]|0;j=c[f+1068>>2]|0;k=c[(c[a+4>>2]|0)+88>>2]|0;l=c[a+216>>2]|0;m=h<<1;n=i<<1;o=0;while(1){if((d|0)!=0){p=(e|0)<=(i|0);}else{p=0;}if(!p){break;}q=((i-e|0)/(g|0)|0)+1|0;if((q|0)>(d|0)){q=d;}if((q|0)>(l|0)){q=l;o=1;}else{l=l-q|0;}d=d-q|0;while(1){r=q;q=r-1|0;if((r|0)==0){break;}s=b[k+(e>>12<<1)>>1]|0;t=b[k+((e>>12)+1<<1)>>1]|0;r=j;j=r+2|0;b[r>>1]=(s<<16>>16)+((_((t<<16>>16)-(s<<16>>16)|0,e&4095)|0)>>>12)&65535;e=e+g|0;}if((o|0)!=0){l=c[a+212>>2]|0;g=cG(f,a,0)|0;o=0;}}while(1){if((d|0)==0){break;}if((g|0)>0){u=h;}else{u=i;}q=((u-e|0)/(g|0)|0)+1|0;if((q|0)>(d|0)){q=d;}if((q|0)>(l|0)){q=l;o=1;}else{l=l-q|0;}d=d-q|0;while(1){p=q;q=p-1|0;if((p|0)==0){break;}s=b[k+(e>>12<<1)>>1]|0;t=b[k+((e>>12)+1<<1)>>1]|0;p=j;j=p+2|0;b[p>>1]=(s<<16>>16)+((_((t<<16>>16)-(s<<16>>16)|0,e&4095)|0)>>>12)&65535;e=e+g|0;}if((o|0)!=0){l=c[a+212>>2]|0;g=cG(f,a,(g|0)<0|0)|0;o=0;}if((e|0)>=(h|0)){e=m-e|0;g=g*-1|0;}else{if((e|0)<=(i|0)){e=n-e|0;g=g*-1|0;}}}c[a+216>>2]=l;c[a+20>>2]=g;c[a+16>>2]=e;return c[f+1068>>2]|0;}function cA(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;f=a;a=d;d=e;e=c[a+16>>2]|0;g=c[a+20>>2]|0;h=c[(c[a+4>>2]|0)+4>>2]|0;i=h-(c[c[a+4>>2]>>2]|0)|0;j=c[f+1068>>2]|0;k=c[(c[a+4>>2]|0)+88>>2]|0;l=c[a+216>>2]|0;m=0;while(1){if((d|0)==0){break;}if((e|0)>=(h|0)){e=e-i|0;}n=((h-e|0)/(g|0)|0)+1|0;if((n|0)>(d|0)){n=d;}if((n|0)>(l|0)){n=l;m=1;}else{l=l-n|0;}d=d-n|0;while(1){o=n;n=o-1|0;if((o|0)==0){break;}o=b[k+(e>>12<<1)>>1]|0;p=j;j=p+2|0;b[p>>1]=(o<<16>>16)+((_((b[k+((e>>12)+1<<1)>>1]|0)-(o<<16>>16)|0,e&4095)|0)>>>12)&65535;e=e+g|0;}if((m|0)!=0){l=c[a+212>>2]|0;g=cG(f,a,0)|0;m=0;}}c[a+216>>2]=l;c[a+20>>2]=g;c[a+16>>2]=e;return c[f+1068>>2]|0;}function cB(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;g=d;d=f;f=g+1724+(e*236|0)|0;e=c[g+1068>>2]|0;h=c[(c[f+4>>2]|0)+88>>2]|0;i=c[(c[f+4>>2]|0)+8>>2]|0;j=c[f+16>>2]|0;k=c[f+20>>2]|0;l=c[d>>2]|0;m=c[f+216>>2]|0;if((k|0)<0){k=-k|0;}do{n=l;l=n-1|0;if((n|0)==0){o=1322;break;}n=m;m=n-1|0;if((n|0)==0){m=c[f+212>>2]|0;k=cG(g,f,0)|0;}n=b[h+(j>>12<<1)>>1]|0;p=e;e=p+2|0;b[p>>1]=(n<<16>>16)+((_((b[h+((j>>12)+1<<1)>>1]|0)-(n<<16>>16)|0,j&4095)|0)>>>12)&65535;j=j+k|0;}while((j|0)<(i|0));if((o|0)==1322){q=m;r=f;s=r+216|0;c[s>>2]=q;t=k;u=f;v=u+20|0;c[v>>2]=t;w=j;x=f;y=x+16|0;c[y>>2]=w;z=g;A=z+1068|0;B=c[A>>2]|0;return B|0;}if((j|0)==(i|0)){i=e;e=i+2|0;b[i>>1]=b[h+(j>>12<<1)>>1]|0;}a[f|0]=0;h=d;c[h>>2]=(c[h>>2]|0)-(l+1);q=m;r=f;s=r+216|0;c[s>>2]=q;t=k;u=f;v=u+20|0;c[v>>2]=t;w=j;x=f;y=x+16|0;c[y>>2]=w;z=g;A=z+1068|0;B=c[A>>2]|0;return B|0;}function cC(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;f=a;a=d;d=e;e=c[a+16>>2]|0;g=c[a+20>>2]|0;h=c[(c[a+4>>2]|0)+4>>2]|0;i=c[c[a+4>>2]>>2]|0;j=c[f+1068>>2]|0;k=c[(c[a+4>>2]|0)+88>>2]|0;l=h<<1;m=i<<1;if((e|0)<=(i|0)){n=((i-e|0)/(g|0)|0)+1|0;if((n|0)>(d|0)){n=d;d=0;}else{d=d-n|0;}while(1){o=n;n=o-1|0;if((o|0)==0){break;}p=b[k+(e>>12<<1)>>1]|0;q=b[k+((e>>12)+1<<1)>>1]|0;o=j;j=o+2|0;b[o>>1]=(p<<16>>16)+((_((q<<16>>16)-(p<<16>>16)|0,e&4095)|0)>>>12)&65535;e=e+g|0;}}while(1){if((d|0)==0){break;}if((g|0)>0){r=h;}else{r=i;}n=((r-e|0)/(g|0)|0)+1|0;if((n|0)>(d|0)){n=d;d=0;}else{d=d-n|0;}while(1){o=n;n=o-1|0;if((o|0)==0){break;}p=b[k+(e>>12<<1)>>1]|0;q=b[k+((e>>12)+1<<1)>>1]|0;o=j;j=o+2|0;b[o>>1]=(p<<16>>16)+((_((q<<16>>16)-(p<<16>>16)|0,e&4095)|0)>>>12)&65535;e=e+g|0;}if((e|0)>=(h|0)){e=l-e|0;g=g*-1|0;}else{if((e|0)<=(i|0)){e=m-e|0;g=g*-1|0;}}}c[a+20>>2]=g;c[a+16>>2]=e;return c[f+1068>>2]|0;}function cD(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=a;a=d;d=e;e=c[a+16>>2]|0;g=c[a+20>>2]|0;h=c[(c[a+4>>2]|0)+4>>2]|0;i=h-(c[c[a+4>>2]>>2]|0)|0;j=c[f+1068>>2]|0;k=c[(c[a+4>>2]|0)+88>>2]|0;while(1){if((d|0)==0){break;}if((e|0)>=(h|0)){e=e-i|0;}l=((h-e|0)/(g|0)|0)+1|0;if((l|0)>(d|0)){l=d;d=0;}else{d=d-l|0;}while(1){m=l;l=m-1|0;if((m|0)==0){break;}m=b[k+(e>>12<<1)>>1]|0;n=j;j=n+2|0;b[n>>1]=(m<<16>>16)+((_((b[k+((e>>12)+1<<1)>>1]|0)-(m<<16>>16)|0,e&4095)|0)>>>12)&65535;e=e+g|0;}}c[a+16>>2]=e;return c[f+1068>>2]|0;}function cE(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;g=d;d=f;f=g+1724+(e*236|0)|0;e=c[g+1068>>2]|0;h=c[(c[f+4>>2]|0)+88>>2]|0;i=c[f+16>>2]|0;j=c[f+20>>2]|0;k=c[(c[f+4>>2]|0)+8>>2]|0;l=c[d>>2]|0;if((j|0)<0){j=-j|0;}m=((k-i|0)/(j|0)|0)+1|0;if((m|0)>(l|0)){m=l;l=0;}else{l=l-m|0;}while(1){n=m;m=n-1|0;if((n|0)==0){break;}n=b[h+(i>>12<<1)>>1]|0;o=e;e=o+2|0;b[o>>1]=(n<<16>>16)+((_((b[h+((i>>12)+1<<1)>>1]|0)-(n<<16>>16)|0,i&4095)|0)>>>12)&65535;i=i+j|0;}if((i|0)<(k|0)){p=i;q=f;r=q+16|0;c[r>>2]=p;s=g;t=s+1068|0;u=c[t>>2]|0;return u|0;}if((i|0)==(k|0)){k=e;e=k+2|0;b[k>>1]=b[h+(i>>12<<1)>>1]|0;}a[f|0]=0;h=d;c[h>>2]=(c[h>>2]|0)-(l+1);p=i;q=f;r=q+16|0;c[r>>2]=p;s=g;t=s+1068|0;u=c[t>>2]|0;return u|0;}function cF(e,f){e=e|0;f=f|0;var g=0,h=0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;g=f;f=c[g+88>>2]|0;h=1056+(a[g+112|0]<<2)|0;i=+(c[g+12>>2]|0)*+(d[h]|d[h+1|0]<<8|d[h+2|0]<<16|d[h+3|0]<<24|0)/(+(c[g+32>>2]|0)*+(c[e+4>>2]|0));e=~~(+(c[g+8>>2]|0)/i);h=bi(e>>11)|0;j=h;k=h;h=(e>>12)-1|0;l=((c[g+8>>2]|0)-4096|0)/(h|0)|0;m=l;n=l;l=h-1|0;h=l;if((l|0)!=0){l=k;k=l+2|0;b[l>>1]=b[f>>1]|0;}while(1){l=h-1|0;h=l;if((l|0)==0){break;}l=f+(n>>12<<1)|0;if(l>>>0>f>>>0){o=b[l-2>>1]|0;}else{o=0;}p=o&65535;q=b[l>>1]|0;r=b[l+2>>1]|0;s=b[l+4>>1]|0;t=+((n&4095)>>>0>>>0)*0.000244140625;l=k;k=l+2|0;b[l>>1]=~~(+(q<<16>>16|0)+t/6.0*(+(((p<<16>>16)*-2|0)-((q<<16>>16)*3|0)+((r<<16>>16)*6|0)-(s<<16>>16)|0)+t*(+(((p<<16>>16)-(q<<16>>16<<1)+(r<<16>>16)|0)*3|0|0)+t*+((-(p<<16>>16)|0)+(((q<<16>>16)-(r<<16>>16)|0)*3|0)+(s<<16>>16)|0))));n=n+m|0;}if((n&4095|0)!=0){p=b[f+(n>>12<<1)>>1]|0;q=b[f+((n>>12)+1<<1)>>1]|0;m=k;k=m+2|0;b[m>>1]=(p<<16>>16)+((_((q<<16>>16)-(p<<16>>16)|0,n&4095)|0)>>>12)&65535;u=e;v=g;w=v+8|0;c[w>>2]=u;x=g;y=x|0;z=c[y>>2]|0;A=+(z|0);B=i;C=A/B;D=~~C;E=g;F=E|0;c[F>>2]=D;G=g;H=G+4|0;I=c[H>>2]|0;J=+(I|0);K=i;L=J/K;M=~~L;N=g;O=N+4|0;c[O>>2]=M;P=g;Q=P+88|0;R=c[Q>>2]|0;S=R;c0(S);T=j;U=g;V=U+88|0;c[V>>2]=T;W=g;X=W+12|0;c[X>>2]=0;return;}else{p=k;k=p+2|0;b[p>>1]=b[f+(n>>12<<1)>>1]|0;u=e;v=g;w=v+8|0;c[w>>2]=u;x=g;y=x|0;z=c[y>>2]|0;A=+(z|0);B=i;C=A/B;D=~~C;E=g;F=E|0;c[F>>2]=D;G=g;H=G+4|0;I=c[H>>2]|0;J=+(I|0);K=i;L=J/K;M=~~L;N=g;O=N+4|0;c[O>>2]=M;P=g;Q=P+88|0;R=c[Q>>2]|0;S=R;c0(S);T=j;U=g;V=U+88|0;c[V>>2]=T;W=g;X=W+12|0;c[X>>2]=0;return;}}function cG(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,i=0,j=0,l=0,m=0.0,n=0.0;f=a;a=b;b=e;e=a+208|0;g=c[e>>2]|0;c[e>>2]=g+1;if((g|0)>=63){c[a+208>>2]=0;}g=cH(c[a+208>>2]|0)|0;if((c[a+80+(g<<2)>>2]|0)!=0){if((b|0)!=0){i=-(c[a+80+(g<<2)>>2]|0)|0;j=i;return j|0;}else{i=c[a+80+(g<<2)>>2]|0;j=i;return j|0;}}e=(d[(c[a+4>>2]|0)+109|0]|0)<<7;if((c[a+52>>2]|0)!=0){l=a+56|0;c[l>>2]=(c[l>>2]|0)+(c[a+52>>2]|0);if((c[a+56>>2]|0)>=65536){c[a+52>>2]=0;}else{e=_(e,c[a+56>>2]|0)|0;e=e>>16;}}m=+(c[(c[a+4>>2]|0)+12>>2]|0)*+(c[a+12>>2]|0)/(+(c[(c[a+4>>2]|0)+32>>2]|0)*+(c[f+4>>2]|0))*4096.0;f=~~(+R(+(+(c[a+208>>2]<<4|0)*0.006135923151542565))*+(e|0)*1.0);if((f|0)<0){f=-f|0;e=1704+((f>>5&255)<<3)|0;n=(c[k>>2]=d[e]|d[e+1|0]<<8|d[e+2|0]<<16|d[e+3|0]<<24,c[k+4>>2]=d[e+4|0]|d[e+5|0]<<8|d[e+6|0]<<16|d[e+7|0]<<24,+h[k>>3]);e=3752+(f>>13<<3)|0;m=m/(n*(c[k>>2]=d[e]|d[e+1|0]<<8|d[e+2|0]<<16|d[e+3|0]<<24,c[k+4>>2]=d[e+4|0]|d[e+5|0]<<8|d[e+6|0]<<16|d[e+7|0]<<24,+h[k>>3]));}else{e=1704+((f>>5&255)<<3)|0;n=(c[k>>2]=d[e]|d[e+1|0]<<8|d[e+2|0]<<16|d[e+3|0]<<24,c[k+4>>2]=d[e+4|0]|d[e+5|0]<<8|d[e+6|0]<<16|d[e+7|0]<<24,+h[k>>3]);e=3752+(f>>13<<3)|0;m=m*n*(c[k>>2]=d[e]|d[e+1|0]<<8|d[e+2|0]<<16|d[e+3|0]<<24,c[k+4>>2]=d[e+4|0]|d[e+5|0]<<8|d[e+6|0]<<16|d[e+7|0]<<24,+h[k>>3]);}if((c[a+52>>2]|0)==0){c[a+80+(g<<2)>>2]=~~m;}if((b|0)!=0){m=-0.0-m;}i=~~m;j=i;return j|0;}function cH(a){a=a|0;var b=0,c=0;b=a;do{if((b|0)<16){c=15-b|0;}else{if((b|0)>=48){c=79-b|0;break;}else{c=b-16|0;break;}}}while(0);return c|0;}function cI(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return an(b|0,d|0,e|0,c[a>>2]|0)|0;}function cJ(a){a=a|0;var b=0,d=0,e=0;b=a;a=0;if((c[b+4>>2]|0)==0){d=b;c0(d);e=a;return e|0;}a=ao(c[b>>2]|0)|0;d=b;c0(d);e=a;return e|0;}function cK(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=d;d=a;a=e;e=c[d+4>>2]|0;g=e+(_(a,f)|0)|0;if(g>>>0>(c[d+8>>2]|0)>>>0){a=(((c[d+8>>2]|0)-(c[d+4>>2]|0)|0)>>>0)/(f>>>0)|0;}g=b;b=c[d+4>>2]|0;e=_(a,f)|0;c6(g|0,b|0,e)|0;e=_(a,f)|0;f=d+4|0;c[f>>2]=(c[f>>2]|0)+e;return a|0;}function cL(a){a=a|0;var b=0,d=0;b=a;if((c[b+12>>2]|0)==0){d=b;c0(d);return 0;}c0(c[b>>2]|0);d=b;c0(d);return 0;}function cM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bi(12)|0;if((d|0)==0){e=0;f=e;return f|0;}g=bi(8)|0;if((g|0)==0){c0(d);e=0;f=e;return f|0;}else{c[g>>2]=a;c[g+4>>2]=b;c[d+8>>2]=g;c[d>>2]=2;c[d+4>>2]=4;e=d;f=e;return f|0;}return 0;}function cN(a){a=a|0;var b=0,c=0,d=0;b=av(a|0,6544)|0;if((b|0)==0){c=0;d=c;return d|0;}else{c=cM(b,1)|0;d=c;return d|0;}return 0;}function cO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a;a=bi(12)|0;if((a|0)==0){f=0;g=f;return g|0;}h=bi(16)|0;if((h|0)==0){c0(a);f=0;g=f;return g|0;}else{c[h>>2]=e;c[h+4>>2]=e;c[h+8>>2]=e+b;c[h+12>>2]=d;c[a+8>>2]=h;c[a>>2]=4;c[a+4>>2]=2;f=a;g=f;return g|0;}return 0;}function cP(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=a;return aY[c[f>>2]&7](c[f+8>>2]|0,b,d,e)|0;}function cQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=i;i=i+1024|0;d=c|0;e=a;a=b;while(1){if(a>>>0<=0){break;}b=a;if(b>>>0>1024){b=1024;}a=a-b|0;(b|0)!=(cP(e,d|0,1,b)|0);}i=c;return;}function cR(a){a=a|0;var b=0;b=a;a=aW[c[b+4>>2]&7](c[b+8>>2]|0)|0;c0(b);return a|0;}function cS(){var a=0;c[1676]=bi(516)|0;c5(c[1676]|0,0,516);a=bi(3584)|0;c[c[1676]>>2]=a;c5(c[c[1676]>>2]|0,0,3584);c[1804]=bi(516)|0;c5(c[1804]|0,0,516);a=bi(3584)|0;c[c[1804]>>2]=a;c5(c[c[1804]>>2]|0,0,3584);return 0;}function cT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;i=i+1024|0;e=d|0;f=b;do{if((f|0)!=0){if((c1(f|0)|0)>>>0>=1024){break;}b=e|0;g=f;c2(b|0,g|0)|0;g=aE(f|0,47)|0;if((g|0)!=0){a[e+(g-f)|0]=0;g=c[m>>2]|0;b=e|0;ar(g|0,6480,(g=i,i=i+8|0,c[g>>2]=b,g)|0)|0;i=g;bj(e|0);}}}while(0);cS()|0;do{if((f|0)!=0){if((a[f]|0)==0){break;}h=f;j=cU(h)|0;i=d;return j|0;}}while(0);f=6520;h=f;j=cU(h)|0;i=d;return j|0;}function cU(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;d=i;i=i+1064|0;e=d|0;f=d+1024|0;g=b;b=0;h=0;if((c[1660]|0)>50){j=c[m>>2]|0;ar(j|0,5792,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0)|0;i=k;l=-1;n=l;i=d;return n|0;}j=bh(g)|0;o=j;if((j|0)==0){j=c[m>>2]|0;p=g;ar(j|0,5392,(k=i,i=i+8|0,c[k>>2]=p,k)|0)|0;i=k;l=-1;n=l;i=d;return n|0;}L1881:while(1){if((c_(e|0,1024,o)|0)==0){q=1646;break;}h=h+1|0;p=0;c[f>>2]=ay(e|0,5096)|0;if((c[f>>2]|0)==0){continue;}do{if((aV(c[f>>2]|0,4840)|0)==0){p=-1;}else{if((a[c[f>>2]|0]|0)==35){continue L1881;}else{break;}}}while(0);while(1){do{if((c[f+(p<<2)>>2]|0)!=0){if((a[c[f+(p<<2)>>2]|0]|0)==35){r=0;break;}r=(p|0)<10;}else{r=0;}}while(0);if(!r){break;}j=p+1|0;p=j;c[f+(j<<2)>>2]=ay(0,5096)|0;}do{if((aV(c[f>>2]|0,4832)|0)!=0){if((aV(c[f>>2]|0,4816)|0)==0){q=1504;break;}if((aV(c[f>>2]|0,4800)|0)==0){q=1504;break;}if((aV(c[f>>2]|0,6552)|0)==0){q=1504;break;}if((aV(c[f>>2]|0,6536)|0)==0){q=1504;break;}if((aV(c[f>>2]|0,6504)|0)!=0){do{if((aV(c[f>>2]|0,6416)|0)!=0){if((aV(c[f>>2]|0,6400)|0)==0){q=1509;break;}if((aV(c[f>>2]|0,6344)|0)!=0){if((aV(c[f>>2]|0,6280)|0)!=0){do{if((aV(c[f>>2]|0,6176)|0)!=0){if((aV(c[f>>2]|0,6136)|0)==0){q=1516;break;}if((aV(c[f>>2]|0,6072)|0)!=0){if((aV(c[f>>2]|0,6008)|0)!=0){if((aV(c[f>>2]|0,5952)|0)!=0){if((aV(c[f>>2]|0,5880)|0)!=0){if((aV(c[f>>2]|0,5784)|0)!=0){if((aV(c[f>>2]|0,5720)|0)!=0){if((aV(c[f>>2]|0,5616)|0)!=0){if((p|0)<2){q=1562;break L1881;}if((a[c[f>>2]|0]|0)<48){q=1562;break L1881;}if((a[c[f>>2]|0]|0)>57){q=1562;break L1881;}s=aL(c[f>>2]|0)|0;if((s|0)<0){q=1565;break L1881;}if((s|0)>127){q=1565;break L1881;}if((b|0)==0){q=1567;break L1881;}if((c[(c[b>>2]|0)+(s*28|0)>>2]|0)!=0){c0(c[(c[b>>2]|0)+(s*28|0)>>2]|0);}j=bi((c1(c[f+4>>2]|0)|0)+1|0)|0;c[(c[b>>2]|0)+(s*28|0)>>2]=j;t=c[f+4>>2]|0;c2(j|0,t|0)|0;c[(c[b>>2]|0)+(s*28|0)+24>>2]=-1;c[(c[b>>2]|0)+(s*28|0)+20>>2]=-1;c[(c[b>>2]|0)+(s*28|0)+16>>2]=-1;c[(c[b>>2]|0)+(s*28|0)+12>>2]=-1;c[(c[b>>2]|0)+(s*28|0)+8>>2]=-1;c[(c[b>>2]|0)+(s*28|0)+4>>2]=-1;u=2;while(1){if((u|0)>=(p|0)){break;}t=aH(c[f+(u<<2)>>2]|0,61)|0;j=t;if((t|0)==0){q=1573;break L1881;}t=j;j=t+1|0;a[t]=0;if((aV(c[f+(u<<2)>>2]|0,5272)|0)!=0){if((aV(c[f+(u<<2)>>2]|0,5208)|0)!=0){if((aV(c[f+(u<<2)>>2]|0,5152)|0)!=0){if((aV(c[f+(u<<2)>>2]|0,5008)|0)!=0){if((aV(c[f+(u<<2)>>2]|0,4944)|0)!=0){q=1625;break L1881;}if((aV(j|0,5e3)|0)!=0){if((aV(j|0,4992)|0)!=0){if((aV(j|0,4936)|0)!=0){q=1621;break L1881;}c[(c[b>>2]|0)+(s*28|0)+24>>2]=1;}else{c[(c[b>>2]|0)+(s*28|0)+16>>2]=1;}}else{c[(c[b>>2]|0)+(s*28|0)+20>>2]=1;}}else{if((aV(j|0,5e3)|0)!=0){if((aV(j|0,4992)|0)!=0){q=1611;break L1881;}c[(c[b>>2]|0)+(s*28|0)+16>>2]=0;}else{c[(c[b>>2]|0)+(s*28|0)+20>>2]=0;}}}else{if((aV(j|0,5144)|0)!=0){if((aV(j|0,5112)|0)!=0){if((aV(j|0,5104)|0)!=0){v=(((aL(j|0)|0)+100|0)*100|0|0)/157|0;}else{v=127;}}else{v=0;}}else{v=64;}if((v|0)<0){q=1604;break L1881;}if((v|0)>127){q=1604;break L1881;}do{if((v|0)==0){if((a[j]|0)==45){break;}if((a[j]|0)<48){q=1604;break L1881;}if((a[j]|0)>57){q=1604;break L1881;}}}while(0);c[(c[b>>2]|0)+(s*28|0)+12>>2]=v;}}else{v=aL(j|0)|0;if((v|0)<0){q=1586;break L1881;}if((v|0)>127){q=1586;break L1881;}if((a[j]|0)<48){q=1586;break L1881;}if((a[j]|0)>57){q=1586;break L1881;}c[(c[b>>2]|0)+(s*28|0)+4>>2]=v;}}else{v=aL(j|0)|0;if((v|0)<0){q=1579;break L1881;}if((v|0)>800){q=1579;break L1881;}if((a[j]|0)<48){q=1579;break L1881;}if((a[j]|0)>57){q=1579;break L1881;}c[(c[b>>2]|0)+(s*28|0)+8>>2]=v;}u=u+1|0;}}else{if((p|0)<2){q=1552;break L1881;}s=aL(c[f+4>>2]|0)|0;if((s|0)<0){q=1555;break L1881;}if((s|0)>127){q=1555;break L1881;}if((c[6704+(s<<2)>>2]|0)==0){c[6704+(s<<2)>>2]=bi(516)|0;c5(c[6704+(s<<2)>>2]|0,0,516);t=bi(3584)|0;c[c[6704+(s<<2)>>2]>>2]=t;c5(c[c[6704+(s<<2)>>2]>>2]|0,0,3584);}b=c[6704+(s<<2)>>2]|0;}}else{if((p|0)<2){q=1543;break L1881;}s=aL(c[f+4>>2]|0)|0;if((s|0)<0){q=1546;break L1881;}if((s|0)>127){q=1546;break L1881;}if((c[7216+(s<<2)>>2]|0)==0){c[7216+(s<<2)>>2]=bi(516)|0;c5(c[7216+(s<<2)>>2]|0,0,516);t=bi(3584)|0;c[c[7216+(s<<2)>>2]>>2]=t;c5(c[c[7216+(s<<2)>>2]>>2]|0,0,3584);}b=c[7216+(s<<2)>>2]|0;}}else{if((p|0)!=2){q=1539;break L1881;}t=c[f+4>>2]|0;c7(7728,t|0,255)|0;a[7983]=0;}}else{if((p|0)<2){q=1531;break L1881;}s=1;while(1){if((s|0)>=(p|0)){break;}c[1660]=(c[1660]|0)+1;cU(c[f+(s<<2)>>2]|0)|0;c[1660]=(c[1660]|0)-1;s=s+1|0;}}}else{if((p|0)<2){q=1523;break L1881;}s=1;while(1){if((s|0)>=(p|0)){break;}bj(c[f+(s<<2)>>2]|0);s=s+1|0;}}}else{t=c[m>>2]|0;ar(t|0,5960,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0)|0;i=k;}}else{t=c[m>>2]|0;ar(t|0,6016,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0)|0;i=k;}}else{q=1516;}}while(0);if((q|0)==1516){q=0;t=c[m>>2]|0;w=c[f>>2]|0;ar(t|0,6088,(k=i,i=i+8|0,c[k>>2]=w,k)|0)|0;i=k;}}else{w=c[m>>2]|0;ar(w|0,6192,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0)|0;i=k;}}else{w=c[m>>2]|0;ar(w|0,6296,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0)|0;i=k;}}else{q=1509;}}while(0);if((q|0)==1509){q=0;w=c[m>>2]|0;t=c[f>>2]|0;ar(w|0,6352,(k=i,i=i+8|0,c[k>>2]=t,k)|0)|0;i=k;}}else{t=c[m>>2]|0;ar(t|0,6432,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0)|0;i=k;}}else{q=1504;}}while(0);if((q|0)==1504){q=0;}}if((q|0)==1523){s=c[m>>2]|0;b=g;v=h;ar(s|0,5912,(k=i,i=i+16|0,c[k>>2]=b,c[k+8>>2]=v,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1555){ar(c[m>>2]|0,5520,(k=i,i=i+16|0,c[k>>2]=g,c[k+8>>2]=h,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1562){ar(c[m>>2]|0,5480,(k=i,i=i+16|0,c[k>>2]=g,c[k+8>>2]=h,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1565){ar(c[m>>2]|0,5432,(k=i,i=i+16|0,c[k>>2]=g,c[k+8>>2]=h,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1567){ar(c[m>>2]|0,5320,(k=i,i=i+16|0,c[k>>2]=g,c[k+8>>2]=h,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1539){ar(c[m>>2]|0,5728,(k=i,i=i+16|0,c[k>>2]=g,c[k+8>>2]=h,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1531){ar(c[m>>2]|0,5840,(k=i,i=i+16|0,c[k>>2]=g,c[k+8>>2]=h,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1552){ar(c[m>>2]|0,5576,(k=i,i=i+16|0,c[k>>2]=g,c[k+8>>2]=h,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1579){ar(c[m>>2]|0,5216,(k=i,i=i+24|0,c[k>>2]=g,c[k+8>>2]=h,c[k+16>>2]=800,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1586){ar(c[m>>2]|0,5160,(k=i,i=i+16|0,c[k>>2]=g,c[k+8>>2]=h,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1611){ar(c[m>>2]|0,4952,(k=i,i=i+16|0,c[k>>2]=g,c[k+8>>2]=h,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1621){ar(c[m>>2]|0,4888,(k=i,i=i+16|0,c[k>>2]=g,c[k+8>>2]=h,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1625){v=c[f+(u<<2)>>2]|0;ar(c[m>>2]|0,5280,(k=i,i=i+24|0,c[k>>2]=g,c[k+8>>2]=h,c[k+16>>2]=v,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1546){ar(c[m>>2]|0,5624,(k=i,i=i+16|0,c[k>>2]=g,c[k+8>>2]=h,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1543){ar(c[m>>2]|0,5680,(k=i,i=i+16|0,c[k>>2]=g,c[k+8>>2]=h,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1604){ar(c[m>>2]|0,5016,(k=i,i=i+16|0,c[k>>2]=g,c[k+8>>2]=h,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1573){v=c[f+(u<<2)>>2]|0;ar(c[m>>2]|0,5280,(k=i,i=i+24|0,c[k>>2]=g,c[k+8>>2]=h,c[k+16>>2]=v,k)|0)|0;i=k;l=-2;n=l;i=d;return n|0;}else if((q|0)==1646){ao(o|0)|0;l=0;n=l;i=d;return n|0;}return 0;}function cV(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;c[1672]=d;b[3346]=e;a[6694]=f;b[3348]=g;return 6688;}function cW(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,n=0;j=i;k=f;f=h;if((k|0)==0){l=0;n=l;i=j;return n|0;}h=bi(14164)|0;c5(h|0,0,14164);c[h+24>>2]=g;g=0;while(1){if((g|0)>=128){break;}if((c[6704+(g<<2)>>2]|0)!=0){c[h+28+(g<<2)>>2]=bi(516)|0;c5(c[h+28+(g<<2)>>2]|0,0,516);c[c[h+28+(g<<2)>>2]>>2]=c[c[6704+(g<<2)>>2]>>2];}if((c[7216+(g<<2)>>2]|0)!=0){c[h+540+(g<<2)>>2]=bi(516)|0;c5(c[h+540+(g<<2)>>2]|0,0,516);c[c[h+540+(g<<2)>>2]>>2]=c[c[7216+(g<<2)>>2]>>2];}g=g+1|0;}c[h+20>>2]=70;c[h+13052>>2]=32;c[h+13056>>2]=33280;c[h+4>>2]=c[f>>2];c[h+8>>2]=0;if((b[f+4>>1]&255|0)==16){g=h+8|0;c[g>>2]=c[g>>2]|4;}if((b[f+4>>1]&32768|0)!=0){g=h+8|0;c[g>>2]=c[g>>2]|2;}if((d[f+6|0]|0)==1){g=h+8|0;c[g>>2]=c[g>>2]|1;}g=e[f+4>>1]|0;if((g|0)==36880){c[h+1060>>2]=4;}else if((g|0)==16){c[h+1060>>2]=6;}else if((g|0)==32776){c[h+1060>>2]=10;}else if((g|0)==8){c[h+1060>>2]=8;}else if((g|0)==32784){c[h+1060>>2]=2;}else{ar(c[m>>2]|0,6144,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0)|0;i=g;c[h+1060>>2]=6;}c[h+1064>>2]=e[f+8>>1]|0;c[h+1068>>2]=bi(e[f+8>>1]<<1)|0;c[h+1072>>2]=bi(e[f+8>>1]<<1<<2)|0;c[h+12>>2]=_((c[h+8>>2]&1|0)!=0?1:2,(c[h+8>>2]&4|0)!=0?2:1)|0;c[h+13060>>2]=(c[f>>2]|0)/1e3|0;if((c[h+13060>>2]|0)<1){c[h+13060>>2]=1;}else{if((c[h+13060>>2]|0)>255){c[h+13060>>2]=255;}}c[h+13064>>2]=0;c[h+13068>>2]=0;c[h+13076>>2]=cq(k,h,h+13100|0,h+13072|0)|0;if((c[h+13076>>2]|0)==0){c0(h);l=0;n=l;i=j;return n|0;}c[h+1052>>2]=0;c[h+1056>>2]=0;if((a[7728]|0)!=0){k=h;bz(k,7728)|0;}bv(h)|0;l=h;n=l;i=j;return n|0;}// mid_song_load\\nfunction cX(a,b){a=a|0;b=b|0;return cW(a,0,b)|0;}// mid_song_free\\nfunction cY(a){a=a|0;var b=0;b=a;bx(b);a=0;while(1){if((a|0)>=128){break;}if((c[b+28+(a<<2)>>2]|0)!=0){c0(c[b+28+(a<<2)>>2]|0);}if((c[b+540+(a<<2)>>2]|0)!=0){c0(c[b+540+(a<<2)>>2]|0);}a=a+1|0;}c0(c[b+1072>>2]|0);c0(c[b+1068>>2]|0);c0(c[b+13076>>2]|0);a=0;while(1){if(a>>>0>=8){break;}if((c[b+13104+(a<<2)>>2]|0)!=0){c0(c[b+13104+(a<<2)>>2]|0);}a=a+1|0;}c0(b);return;}// mid_exit\\nfunction cZ(){var a=0,b=0,d=0,e=0;a=0;while(1){if((a|0)>=128){break;}if((c[6704+(a<<2)>>2]|0)!=0){b=c[c[6704+(a<<2)>>2]>>2]|0;if((b|0)!=0){d=0;while(1){if((d|0)>=128){break;}if((c[b+(d*28|0)>>2]|0)!=0){c0(c[b+(d*28|0)>>2]|0);}d=d+1|0;}c0(b);}c0(c[6704+(a<<2)>>2]|0);}if((c[7216+(a<<2)>>2]|0)!=0){e=c[c[7216+(a<<2)>>2]>>2]|0;if((e|0)!=0){d=0;while(1){if((d|0)>=128){break;}if((c[e+(d*28|0)>>2]|0)!=0){c0(c[e+(d*28|0)>>2]|0);}d=d+1|0;}c0(e);}c0(c[7216+(a<<2)>>2]|0);}a=a+1|0;}bk();return;}function c_(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b;b=c;c=d;d=0;f=0;while(1){if((d|0)<(b|0)){g=(f|0)!=0^1;}else{g=0;}if(!g){break;}if((an(e+d|0,1,1,c|0)|0)!=1){h=1752;break;}if((a[e+d|0]|0)==10){h=1755;}else{if((a[e+d|0]|0)==13){h=1755;}}if((h|0)==1755){h=0;a[e+d|0]=0;f=1;}d=d+1|0;}a[e+d|0]=0;if((d|0)!=0){i=e;return i|0;}else{i=0;return i|0;}return 0;}// malloc\\nfunction c$(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,an=0,ao=0,ap=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0;do{if(a>>>0<245){if(a>>>0<11){b=16;}else{b=a+11&-8;}d=b>>>3;e=c[1996]|0;f=e>>>(d>>>0);if((f&3|0)!=0){g=(f&1^1)+d|0;h=g<<1;i=8024+(h<<2)|0;j=8024+(h+2<<2)|0;h=c[j>>2]|0;k=h+8|0;l=c[k>>2]|0;do{if((i|0)==(l|0)){c[1996]=e&~(1<>>0<(c[2e3]|0)>>>0){aq();return 0;}m=l+12|0;if((c[m>>2]|0)==(h|0)){c[m>>2]=i;c[j>>2]=l;break;}else{aq();return 0;}}}while(0);l=g<<3;c[h+4>>2]=l|3;j=h+(l|4)|0;c[j>>2]=c[j>>2]|1;n=k;return n|0;}if(b>>>0<=(c[1998]|0)>>>0){o=b;break;}if((f|0)!=0){j=2<>>12&16;i=j>>>(l>>>0);j=i>>>5&8;m=i>>>(j>>>0);i=m>>>2&4;p=m>>>(i>>>0);m=p>>>1&2;q=p>>>(m>>>0);p=q>>>1&1;r=(j|l|i|m|p)+(q>>>(p>>>0))|0;p=r<<1;q=8024+(p<<2)|0;m=8024+(p+2<<2)|0;p=c[m>>2]|0;i=p+8|0;l=c[i>>2]|0;do{if((q|0)==(l|0)){c[1996]=e&~(1<>>0<(c[2e3]|0)>>>0){aq();return 0;}j=l+12|0;if((c[j>>2]|0)==(p|0)){c[j>>2]=q;c[m>>2]=l;break;}else{aq();return 0;}}}while(0);l=r<<3;m=l-b|0;c[p+4>>2]=b|3;q=p;e=q+b|0;c[q+(b|4)>>2]=m|1;c[q+l>>2]=m;l=c[1998]|0;if((l|0)!=0){q=c[2001]|0;d=l>>>3;l=d<<1;f=8024+(l<<2)|0;k=c[1996]|0;h=1<>2]|0;if(g>>>0>=(c[2e3]|0)>>>0){s=g;t=d;break;}aq();return 0;}}while(0);c[t>>2]=q;c[s+12>>2]=q;c[q+8>>2]=s;c[q+12>>2]=f;}c[1998]=m;c[2001]=e;n=i;return n|0;}l=c[1997]|0;if((l|0)==0){o=b;break;}h=(l&-l)-1|0;l=h>>>12&16;k=h>>>(l>>>0);h=k>>>5&8;p=k>>>(h>>>0);k=p>>>2&4;r=p>>>(k>>>0);p=r>>>1&2;d=r>>>(p>>>0);r=d>>>1&1;g=c[8288+((h|l|k|p|r)+(d>>>(r>>>0))<<2)>>2]|0;r=g;d=g;p=(c[g+4>>2]&-8)-b|0;while(1){g=c[r+16>>2]|0;if((g|0)==0){k=c[r+20>>2]|0;if((k|0)==0){break;}else{u=k;}}else{u=g;}g=(c[u+4>>2]&-8)-b|0;k=g>>>0

>>0;r=u;d=k?u:d;p=k?g:p;}r=d;i=c[2e3]|0;if(r>>>0>>0){aq();return 0;}e=r+b|0;m=e;if(r>>>0>=e>>>0){aq();return 0;}e=c[d+24>>2]|0;f=c[d+12>>2]|0;do{if((f|0)==(d|0)){q=d+20|0;g=c[q>>2]|0;if((g|0)==0){k=d+16|0;l=c[k>>2]|0;if((l|0)==0){v=0;break;}else{w=l;x=k;}}else{w=g;x=q;}while(1){q=w+20|0;g=c[q>>2]|0;if((g|0)!=0){w=g;x=q;continue;}q=w+16|0;g=c[q>>2]|0;if((g|0)==0){break;}else{w=g;x=q;}}if(x>>>0>>0){aq();return 0;}else{c[x>>2]=0;v=w;break;}}else{q=c[d+8>>2]|0;if(q>>>0>>0){aq();return 0;}g=q+12|0;if((c[g>>2]|0)!=(d|0)){aq();return 0;}k=f+8|0;if((c[k>>2]|0)==(d|0)){c[g>>2]=f;c[k>>2]=q;v=f;break;}else{aq();return 0;}}}while(0);L2304:do{if((e|0)!=0){f=d+28|0;i=8288+(c[f>>2]<<2)|0;do{if((d|0)==(c[i>>2]|0)){c[i>>2]=v;if((v|0)!=0){break;}c[1997]=c[1997]&~(1<>2]);break L2304;}else{if(e>>>0<(c[2e3]|0)>>>0){aq();return 0;}q=e+16|0;if((c[q>>2]|0)==(d|0)){c[q>>2]=v;}else{c[e+20>>2]=v;}if((v|0)==0){break L2304;}}}while(0);if(v>>>0<(c[2e3]|0)>>>0){aq();return 0;}c[v+24>>2]=e;f=c[d+16>>2]|0;do{if((f|0)!=0){if(f>>>0<(c[2e3]|0)>>>0){aq();return 0;}else{c[v+16>>2]=f;c[f+24>>2]=v;break;}}}while(0);f=c[d+20>>2]|0;if((f|0)==0){break;}if(f>>>0<(c[2e3]|0)>>>0){aq();return 0;}else{c[v+20>>2]=f;c[f+24>>2]=v;break;}}}while(0);if(p>>>0<16){e=p+b|0;c[d+4>>2]=e|3;f=r+(e+4)|0;c[f>>2]=c[f>>2]|1;}else{c[d+4>>2]=b|3;c[r+(b|4)>>2]=p|1;c[r+(p+b)>>2]=p;f=c[1998]|0;if((f|0)!=0){e=c[2001]|0;i=f>>>3;f=i<<1;q=8024+(f<<2)|0;k=c[1996]|0;g=1<>2]|0;if(l>>>0>=(c[2e3]|0)>>>0){y=l;z=i;break;}aq();return 0;}}while(0);c[z>>2]=e;c[y+12>>2]=e;c[e+8>>2]=y;c[e+12>>2]=q;}c[1998]=p;c[2001]=m;}f=d+8|0;if((f|0)==0){o=b;break;}else{n=f;}return n|0;}else{if(a>>>0>4294967231){o=-1;break;}f=a+11|0;g=f&-8;k=c[1997]|0;if((k|0)==0){o=g;break;}r=-g|0;i=f>>>8;do{if((i|0)==0){A=0;}else{if(g>>>0>16777215){A=31;break;}f=(i+1048320|0)>>>16&8;l=i<>>16&4;j=l<>>16&2;B=14-(h|f|l)+(j<>>15)|0;A=g>>>((B+7|0)>>>0)&1|B<<1;}}while(0);i=c[8288+(A<<2)>>2]|0;L2352:do{if((i|0)==0){C=0;D=r;E=0;}else{if((A|0)==31){F=0;}else{F=25-(A>>>1)|0;}d=0;m=r;p=i;q=g<>2]&-8;l=B-g|0;if(l>>>0>>0){if((B|0)==(g|0)){C=p;D=l;E=p;break L2352;}else{G=p;H=l;}}else{G=d;H=m;}l=c[p+20>>2]|0;B=c[p+16+(q>>>31<<2)>>2]|0;j=(l|0)==0|(l|0)==(B|0)?e:l;if((B|0)==0){C=G;D=H;E=j;break;}else{d=G;m=H;p=B;q=q<<1;e=j;}}}}while(0);if((E|0)==0&(C|0)==0){i=2<>>12&16;e=i>>>(r>>>0);i=e>>>5&8;q=e>>>(i>>>0);e=q>>>2&4;p=q>>>(e>>>0);q=p>>>1&2;m=p>>>(q>>>0);p=m>>>1&1;I=c[8288+((i|r|e|q|p)+(m>>>(p>>>0))<<2)>>2]|0;}else{I=E;}if((I|0)==0){J=D;K=C;}else{p=I;m=D;q=C;while(1){e=(c[p+4>>2]&-8)-g|0;r=e>>>0>>0;i=r?e:m;e=r?p:q;r=c[p+16>>2]|0;if((r|0)!=0){p=r;m=i;q=e;continue;}r=c[p+20>>2]|0;if((r|0)==0){J=i;K=e;break;}else{p=r;m=i;q=e;}}}if((K|0)==0){o=g;break;}if(J>>>0>=((c[1998]|0)-g|0)>>>0){o=g;break;}q=K;m=c[2e3]|0;if(q>>>0>>0){aq();return 0;}p=q+g|0;k=p;if(q>>>0>=p>>>0){aq();return 0;}e=c[K+24>>2]|0;i=c[K+12>>2]|0;do{if((i|0)==(K|0)){r=K+20|0;d=c[r>>2]|0;if((d|0)==0){j=K+16|0;B=c[j>>2]|0;if((B|0)==0){L=0;break;}else{M=B;N=j;}}else{M=d;N=r;}while(1){r=M+20|0;d=c[r>>2]|0;if((d|0)!=0){M=d;N=r;continue;}r=M+16|0;d=c[r>>2]|0;if((d|0)==0){break;}else{M=d;N=r;}}if(N>>>0>>0){aq();return 0;}else{c[N>>2]=0;L=M;break;}}else{r=c[K+8>>2]|0;if(r>>>0>>0){aq();return 0;}d=r+12|0;if((c[d>>2]|0)!=(K|0)){aq();return 0;}j=i+8|0;if((c[j>>2]|0)==(K|0)){c[d>>2]=i;c[j>>2]=r;L=i;break;}else{aq();return 0;}}}while(0);L2402:do{if((e|0)!=0){i=K+28|0;m=8288+(c[i>>2]<<2)|0;do{if((K|0)==(c[m>>2]|0)){c[m>>2]=L;if((L|0)!=0){break;}c[1997]=c[1997]&~(1<>2]);break L2402;}else{if(e>>>0<(c[2e3]|0)>>>0){aq();return 0;}r=e+16|0;if((c[r>>2]|0)==(K|0)){c[r>>2]=L;}else{c[e+20>>2]=L;}if((L|0)==0){break L2402;}}}while(0);if(L>>>0<(c[2e3]|0)>>>0){aq();return 0;}c[L+24>>2]=e;i=c[K+16>>2]|0;do{if((i|0)!=0){if(i>>>0<(c[2e3]|0)>>>0){aq();return 0;}else{c[L+16>>2]=i;c[i+24>>2]=L;break;}}}while(0);i=c[K+20>>2]|0;if((i|0)==0){break;}if(i>>>0<(c[2e3]|0)>>>0){aq();return 0;}else{c[L+20>>2]=i;c[i+24>>2]=L;break;}}}while(0);do{if(J>>>0<16){e=J+g|0;c[K+4>>2]=e|3;i=q+(e+4)|0;c[i>>2]=c[i>>2]|1;}else{c[K+4>>2]=g|3;c[q+(g|4)>>2]=J|1;c[q+(J+g)>>2]=J;i=J>>>3;if(J>>>0<256){e=i<<1;m=8024+(e<<2)|0;r=c[1996]|0;j=1<>2]|0;if(d>>>0>=(c[2e3]|0)>>>0){O=d;P=i;break;}aq();return 0;}}while(0);c[P>>2]=k;c[O+12>>2]=k;c[q+(g+8)>>2]=O;c[q+(g+12)>>2]=m;break;}e=p;j=J>>>8;do{if((j|0)==0){Q=0;}else{if(J>>>0>16777215){Q=31;break;}r=(j+1048320|0)>>>16&8;i=j<>>16&4;B=i<>>16&2;l=14-(d|r|i)+(B<>>15)|0;Q=J>>>((l+7|0)>>>0)&1|l<<1;}}while(0);j=8288+(Q<<2)|0;c[q+(g+28)>>2]=Q;c[q+(g+20)>>2]=0;c[q+(g+16)>>2]=0;m=c[1997]|0;l=1<>2]=e;c[q+(g+24)>>2]=j;c[q+(g+12)>>2]=e;c[q+(g+8)>>2]=e;break;}if((Q|0)==31){R=0;}else{R=25-(Q>>>1)|0;}l=J<>2]|0;while(1){if((c[m+4>>2]&-8|0)==(J|0)){break;}S=m+16+(l>>>31<<2)|0;j=c[S>>2]|0;if((j|0)==0){T=1913;break;}else{l=l<<1;m=j;}}if((T|0)==1913){if(S>>>0<(c[2e3]|0)>>>0){aq();return 0;}else{c[S>>2]=e;c[q+(g+24)>>2]=m;c[q+(g+12)>>2]=e;c[q+(g+8)>>2]=e;break;}}l=m+8|0;j=c[l>>2]|0;i=c[2e3]|0;if(m>>>0>>0){aq();return 0;}if(j>>>0>>0){aq();return 0;}else{c[j+12>>2]=e;c[l>>2]=e;c[q+(g+8)>>2]=j;c[q+(g+12)>>2]=m;c[q+(g+24)>>2]=0;break;}}}while(0);q=K+8|0;if((q|0)==0){o=g;break;}else{n=q;}return n|0;}}while(0);K=c[1998]|0;if(o>>>0<=K>>>0){S=K-o|0;J=c[2001]|0;if(S>>>0>15){R=J;c[2001]=R+o;c[1998]=S;c[R+(o+4)>>2]=S|1;c[R+K>>2]=S;c[J+4>>2]=o|3;}else{c[1998]=0;c[2001]=0;c[J+4>>2]=K|3;S=J+(K+4)|0;c[S>>2]=c[S>>2]|1;}n=J+8|0;return n|0;}J=c[1999]|0;if(o>>>0>>0){S=J-o|0;c[1999]=S;J=c[2002]|0;K=J;c[2002]=K+o;c[K+(o+4)>>2]=S|1;c[J+4>>2]=o|3;n=J+8|0;return n|0;}do{if((c[1666]|0)==0){J=am(30)|0;if((J-1&J|0)==0){c[1668]=J;c[1667]=J;c[1669]=-1;c[1670]=-1;c[1671]=0;c[2107]=0;c[1666]=(aJ(0)|0)&-16^1431655768;break;}else{aq();return 0;}}}while(0);J=o+48|0;S=c[1668]|0;K=o+47|0;R=S+K|0;Q=-S|0;S=R&Q;if(S>>>0<=o>>>0){n=0;return n|0;}O=c[2106]|0;do{if((O|0)!=0){P=c[2104]|0;L=P+S|0;if(L>>>0<=P>>>0|L>>>0>O>>>0){n=0;}else{break;}return n|0;}}while(0);L2494:do{if((c[2107]&4|0)==0){O=c[2002]|0;L2496:do{if((O|0)==0){T=1943;}else{L=O;P=8432;while(1){U=P|0;M=c[U>>2]|0;if(M>>>0<=L>>>0){V=P+4|0;if((M+(c[V>>2]|0)|0)>>>0>L>>>0){break;}}M=c[P+8>>2]|0;if((M|0)==0){T=1943;break L2496;}else{P=M;}}if((P|0)==0){T=1943;break;}L=R-(c[1999]|0)&Q;if(L>>>0>=2147483647){W=0;break;}m=aS(L|0)|0;e=(m|0)==((c[U>>2]|0)+(c[V>>2]|0)|0);X=e?m:-1;Y=e?L:0;Z=m;_=L;T=1952;}}while(0);do{if((T|0)==1943){O=aS(0)|0;if((O|0)==-1){W=0;break;}g=O;L=c[1667]|0;m=L-1|0;if((m&g|0)==0){$=S;}else{$=S-g+(m+g&-L)|0;}L=c[2104]|0;g=L+$|0;if(!($>>>0>o>>>0&$>>>0<2147483647)){W=0;break;}m=c[2106]|0;if((m|0)!=0){if(g>>>0<=L>>>0|g>>>0>m>>>0){W=0;break;}}m=aS($|0)|0;g=(m|0)==(O|0);X=g?O:-1;Y=g?$:0;Z=m;_=$;T=1952;}}while(0);L2516:do{if((T|0)==1952){m=-_|0;if((X|0)!=-1){aa=Y;ab=X;T=1963;break L2494;}do{if((Z|0)!=-1&_>>>0<2147483647&_>>>0>>0){g=c[1668]|0;O=K-_+g&-g;if(O>>>0>=2147483647){ac=_;break;}if((aS(O|0)|0)==-1){aS(m|0)|0;W=Y;break L2516;}else{ac=O+_|0;break;}}else{ac=_;}}while(0);if((Z|0)==-1){W=Y;}else{aa=ac;ab=Z;T=1963;break L2494;}}}while(0);c[2107]=c[2107]|4;ad=W;T=1960;}else{ad=0;T=1960;}}while(0);do{if((T|0)==1960){if(S>>>0>=2147483647){break;}W=aS(S|0)|0;Z=aS(0)|0;if(!((Z|0)!=-1&(W|0)!=-1&W>>>0>>0)){break;}ac=Z-W|0;Z=ac>>>0>(o+40|0)>>>0;Y=Z?W:-1;if((Y|0)!=-1){aa=Z?ac:ad;ab=Y;T=1963;}}}while(0);do{if((T|0)==1963){ad=(c[2104]|0)+aa|0;c[2104]=ad;if(ad>>>0>(c[2105]|0)>>>0){c[2105]=ad;}ad=c[2002]|0;L2536:do{if((ad|0)==0){S=c[2e3]|0;if((S|0)==0|ab>>>0>>0){c[2e3]=ab;}c[2108]=ab;c[2109]=aa;c[2111]=0;c[2005]=c[1666];c[2004]=-1;S=0;do{Y=S<<1;ac=8024+(Y<<2)|0;c[8024+(Y+3<<2)>>2]=ac;c[8024+(Y+2<<2)>>2]=ac;S=S+1|0;}while(S>>>0<32);S=ab+8|0;if((S&7|0)==0){ae=0;}else{ae=-S&7;}S=aa-40-ae|0;c[2002]=ab+ae;c[1999]=S;c[ab+(ae+4)>>2]=S|1;c[ab+(aa-36)>>2]=40;c[2003]=c[1670];}else{S=8432;while(1){af=c[S>>2]|0;ag=S+4|0;ah=c[ag>>2]|0;if((ab|0)==(af+ah|0)){T=1975;break;}ac=c[S+8>>2]|0;if((ac|0)==0){break;}else{S=ac;}}do{if((T|0)==1975){if((c[S+12>>2]&8|0)!=0){break;}ac=ad;if(!(ac>>>0>=af>>>0&ac>>>0>>0)){break;}c[ag>>2]=ah+aa;ac=c[2002]|0;Y=(c[1999]|0)+aa|0;Z=ac;W=ac+8|0;if((W&7|0)==0){ai=0;}else{ai=-W&7;}W=Y-ai|0;c[2002]=Z+ai;c[1999]=W;c[Z+(ai+4)>>2]=W|1;c[Z+(Y+4)>>2]=40;c[2003]=c[1670];break L2536;}}while(0);if(ab>>>0<(c[2e3]|0)>>>0){c[2e3]=ab;}S=ab+aa|0;Y=8432;while(1){aj=Y|0;if((c[aj>>2]|0)==(S|0)){T=1985;break;}Z=c[Y+8>>2]|0;if((Z|0)==0){break;}else{Y=Z;}}do{if((T|0)==1985){if((c[Y+12>>2]&8|0)!=0){break;}c[aj>>2]=ab;S=Y+4|0;c[S>>2]=(c[S>>2]|0)+aa;S=ab+8|0;if((S&7|0)==0){ak=0;}else{ak=-S&7;}S=ab+(aa+8)|0;if((S&7|0)==0){al=0;}else{al=-S&7;}S=ab+(al+aa)|0;Z=S;W=ak+o|0;ac=ab+W|0;_=ac;K=S-(ab+ak)-o|0;c[ab+(ak+4)>>2]=o|3;do{if((Z|0)==(c[2002]|0)){J=(c[1999]|0)+K|0;c[1999]=J;c[2002]=_;c[ab+(W+4)>>2]=J|1;}else{if((Z|0)==(c[2001]|0)){J=(c[1998]|0)+K|0;c[1998]=J;c[2001]=_;c[ab+(W+4)>>2]=J|1;c[ab+(J+W)>>2]=J;break;}J=aa+4|0;X=c[ab+(J+al)>>2]|0;if((X&3|0)==1){$=X&-8;V=X>>>3;L2571:do{if(X>>>0<256){U=c[ab+((al|8)+aa)>>2]|0;Q=c[ab+(aa+12+al)>>2]|0;R=8024+(V<<1<<2)|0;do{if((U|0)!=(R|0)){if(U>>>0<(c[2e3]|0)>>>0){aq();return 0;}if((c[U+12>>2]|0)==(Z|0)){break;}aq();return 0;}}while(0);if((Q|0)==(U|0)){c[1996]=c[1996]&~(1<>>0<(c[2e3]|0)>>>0){aq();return 0;}m=Q+8|0;if((c[m>>2]|0)==(Z|0)){an=m;break;}aq();return 0;}}while(0);c[U+12>>2]=Q;c[an>>2]=U;}else{R=S;m=c[ab+((al|24)+aa)>>2]|0;P=c[ab+(aa+12+al)>>2]|0;do{if((P|0)==(R|0)){O=al|16;g=ab+(J+O)|0;L=c[g>>2]|0;if((L|0)==0){e=ab+(O+aa)|0;O=c[e>>2]|0;if((O|0)==0){ao=0;break;}else{ap=O;ar=e;}}else{ap=L;ar=g;}while(1){g=ap+20|0;L=c[g>>2]|0;if((L|0)!=0){ap=L;ar=g;continue;}g=ap+16|0;L=c[g>>2]|0;if((L|0)==0){break;}else{ap=L;ar=g;}}if(ar>>>0<(c[2e3]|0)>>>0){aq();return 0;}else{c[ar>>2]=0;ao=ap;break;}}else{g=c[ab+((al|8)+aa)>>2]|0;if(g>>>0<(c[2e3]|0)>>>0){aq();return 0;}L=g+12|0;if((c[L>>2]|0)!=(R|0)){aq();return 0;}e=P+8|0;if((c[e>>2]|0)==(R|0)){c[L>>2]=P;c[e>>2]=g;ao=P;break;}else{aq();return 0;}}}while(0);if((m|0)==0){break;}P=ab+(aa+28+al)|0;U=8288+(c[P>>2]<<2)|0;do{if((R|0)==(c[U>>2]|0)){c[U>>2]=ao;if((ao|0)!=0){break;}c[1997]=c[1997]&~(1<>2]);break L2571;}else{if(m>>>0<(c[2e3]|0)>>>0){aq();return 0;}Q=m+16|0;if((c[Q>>2]|0)==(R|0)){c[Q>>2]=ao;}else{c[m+20>>2]=ao;}if((ao|0)==0){break L2571;}}}while(0);if(ao>>>0<(c[2e3]|0)>>>0){aq();return 0;}c[ao+24>>2]=m;R=al|16;P=c[ab+(R+aa)>>2]|0;do{if((P|0)!=0){if(P>>>0<(c[2e3]|0)>>>0){aq();return 0;}else{c[ao+16>>2]=P;c[P+24>>2]=ao;break;}}}while(0);P=c[ab+(J+R)>>2]|0;if((P|0)==0){break;}if(P>>>0<(c[2e3]|0)>>>0){aq();return 0;}else{c[ao+20>>2]=P;c[P+24>>2]=ao;break;}}}while(0);as=ab+(($|al)+aa)|0;at=$+K|0;}else{as=Z;at=K;}J=as+4|0;c[J>>2]=c[J>>2]&-2;c[ab+(W+4)>>2]=at|1;c[ab+(at+W)>>2]=at;J=at>>>3;if(at>>>0<256){V=J<<1;X=8024+(V<<2)|0;P=c[1996]|0;m=1<>2]|0;if(U>>>0>=(c[2e3]|0)>>>0){au=U;av=J;break;}aq();return 0;}}while(0);c[av>>2]=_;c[au+12>>2]=_;c[ab+(W+8)>>2]=au;c[ab+(W+12)>>2]=X;break;}V=ac;m=at>>>8;do{if((m|0)==0){aw=0;}else{if(at>>>0>16777215){aw=31;break;}P=(m+1048320|0)>>>16&8;$=m<>>16&4;U=$<>>16&2;Q=14-(J|P|$)+(U<<$>>>15)|0;aw=at>>>((Q+7|0)>>>0)&1|Q<<1;}}while(0);m=8288+(aw<<2)|0;c[ab+(W+28)>>2]=aw;c[ab+(W+20)>>2]=0;c[ab+(W+16)>>2]=0;X=c[1997]|0;Q=1<>2]=V;c[ab+(W+24)>>2]=m;c[ab+(W+12)>>2]=V;c[ab+(W+8)>>2]=V;break;}if((aw|0)==31){ax=0;}else{ax=25-(aw>>>1)|0;}Q=at<>2]|0;while(1){if((c[X+4>>2]&-8|0)==(at|0)){break;}ay=X+16+(Q>>>31<<2)|0;m=c[ay>>2]|0;if((m|0)==0){T=2058;break;}else{Q=Q<<1;X=m;}}if((T|0)==2058){if(ay>>>0<(c[2e3]|0)>>>0){aq();return 0;}else{c[ay>>2]=V;c[ab+(W+24)>>2]=X;c[ab+(W+12)>>2]=V;c[ab+(W+8)>>2]=V;break;}}Q=X+8|0;m=c[Q>>2]|0;$=c[2e3]|0;if(X>>>0<$>>>0){aq();return 0;}if(m>>>0<$>>>0){aq();return 0;}else{c[m+12>>2]=V;c[Q>>2]=V;c[ab+(W+8)>>2]=m;c[ab+(W+12)>>2]=X;c[ab+(W+24)>>2]=0;break;}}}while(0);n=ab+(ak|8)|0;return n|0;}}while(0);Y=ad;W=8432;while(1){az=c[W>>2]|0;if(az>>>0<=Y>>>0){aA=c[W+4>>2]|0;aB=az+aA|0;if(aB>>>0>Y>>>0){break;}}W=c[W+8>>2]|0;}W=az+(aA-39)|0;if((W&7|0)==0){aC=0;}else{aC=-W&7;}W=az+(aA-47+aC)|0;ac=W>>>0<(ad+16|0)>>>0?Y:W;W=ac+8|0;_=ab+8|0;if((_&7|0)==0){aD=0;}else{aD=-_&7;}_=aa-40-aD|0;c[2002]=ab+aD;c[1999]=_;c[ab+(aD+4)>>2]=_|1;c[ab+(aa-36)>>2]=40;c[2003]=c[1670];c[ac+4>>2]=27;c[W>>2]=c[2108];c[W+4>>2]=c[2109];c[W+8>>2]=c[2110];c[W+12>>2]=c[2111];c[2108]=ab;c[2109]=aa;c[2111]=0;c[2110]=W;W=ac+28|0;c[W>>2]=7;if((ac+32|0)>>>0>>0){_=W;while(1){W=_+4|0;c[W>>2]=7;if((_+8|0)>>>0>>0){_=W;}else{break;}}}if((ac|0)==(Y|0)){break;}_=ac-ad|0;W=Y+(_+4)|0;c[W>>2]=c[W>>2]&-2;c[ad+4>>2]=_|1;c[Y+_>>2]=_;W=_>>>3;if(_>>>0<256){K=W<<1;Z=8024+(K<<2)|0;S=c[1996]|0;m=1<>2]|0;if(Q>>>0>=(c[2e3]|0)>>>0){aE=Q;aF=W;break;}aq();return 0;}}while(0);c[aF>>2]=ad;c[aE+12>>2]=ad;c[ad+8>>2]=aE;c[ad+12>>2]=Z;break;}K=ad;m=_>>>8;do{if((m|0)==0){aG=0;}else{if(_>>>0>16777215){aG=31;break;}S=(m+1048320|0)>>>16&8;Y=m<>>16&4;W=Y<>>16&2;Q=14-(ac|S|Y)+(W<>>15)|0;aG=_>>>((Q+7|0)>>>0)&1|Q<<1;}}while(0);m=8288+(aG<<2)|0;c[ad+28>>2]=aG;c[ad+20>>2]=0;c[ad+16>>2]=0;Z=c[1997]|0;Q=1<>2]=K;c[ad+24>>2]=m;c[ad+12>>2]=ad;c[ad+8>>2]=ad;break;}if((aG|0)==31){aH=0;}else{aH=25-(aG>>>1)|0;}Q=_<>2]|0;while(1){if((c[Z+4>>2]&-8|0)==(_|0)){break;}aI=Z+16+(Q>>>31<<2)|0;m=c[aI>>2]|0;if((m|0)==0){T=2093;break;}else{Q=Q<<1;Z=m;}}if((T|0)==2093){if(aI>>>0<(c[2e3]|0)>>>0){aq();return 0;}else{c[aI>>2]=K;c[ad+24>>2]=Z;c[ad+12>>2]=ad;c[ad+8>>2]=ad;break;}}Q=Z+8|0;_=c[Q>>2]|0;m=c[2e3]|0;if(Z>>>0>>0){aq();return 0;}if(_>>>0>>0){aq();return 0;}else{c[_+12>>2]=K;c[Q>>2]=K;c[ad+8>>2]=_;c[ad+12>>2]=Z;c[ad+24>>2]=0;break;}}}while(0);ad=c[1999]|0;if(ad>>>0<=o>>>0){break;}_=ad-o|0;c[1999]=_;ad=c[2002]|0;Q=ad;c[2002]=Q+o;c[Q+(o+4)>>2]=_|1;c[ad+4>>2]=o|3;n=ad+8|0;return n|0;}}while(0);c[(aQ()|0)>>2]=12;n=0;return n|0;}// free\\nfunction c0(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;if((a|0)==0){return;}b=a-8|0;d=b;e=c[2e3]|0;if(b>>>0>>0){aq();}f=c[a-4>>2]|0;g=f&3;if((g|0)==1){aq();}h=f&-8;i=a+(h-8)|0;j=i;L2753:do{if((f&1|0)==0){k=c[b>>2]|0;if((g|0)==0){return;}l=-8-k|0;m=a+l|0;n=m;o=k+h|0;if(m>>>0>>0){aq();}if((n|0)==(c[2001]|0)){p=a+(h-4)|0;if((c[p>>2]&3|0)!=3){q=n;r=o;break;}c[1998]=o;c[p>>2]=c[p>>2]&-2;c[a+(l+4)>>2]=o|1;c[i>>2]=o;return;}p=k>>>3;if(k>>>0<256){k=c[a+(l+8)>>2]|0;s=c[a+(l+12)>>2]|0;t=8024+(p<<1<<2)|0;do{if((k|0)!=(t|0)){if(k>>>0>>0){aq();}if((c[k+12>>2]|0)==(n|0)){break;}aq();}}while(0);if((s|0)==(k|0)){c[1996]=c[1996]&~(1<>>0>>0){aq();}v=s+8|0;if((c[v>>2]|0)==(n|0)){u=v;break;}aq();}}while(0);c[k+12>>2]=s;c[u>>2]=k;q=n;r=o;break;}t=m;p=c[a+(l+24)>>2]|0;v=c[a+(l+12)>>2]|0;do{if((v|0)==(t|0)){w=a+(l+20)|0;x=c[w>>2]|0;if((x|0)==0){y=a+(l+16)|0;z=c[y>>2]|0;if((z|0)==0){A=0;break;}else{B=z;C=y;}}else{B=x;C=w;}while(1){w=B+20|0;x=c[w>>2]|0;if((x|0)!=0){B=x;C=w;continue;}w=B+16|0;x=c[w>>2]|0;if((x|0)==0){break;}else{B=x;C=w;}}if(C>>>0>>0){aq();}else{c[C>>2]=0;A=B;break;}}else{w=c[a+(l+8)>>2]|0;if(w>>>0>>0){aq();}x=w+12|0;if((c[x>>2]|0)!=(t|0)){aq();}y=v+8|0;if((c[y>>2]|0)==(t|0)){c[x>>2]=v;c[y>>2]=w;A=v;break;}else{aq();}}}while(0);if((p|0)==0){q=n;r=o;break;}v=a+(l+28)|0;m=8288+(c[v>>2]<<2)|0;do{if((t|0)==(c[m>>2]|0)){c[m>>2]=A;if((A|0)!=0){break;}c[1997]=c[1997]&~(1<>2]);q=n;r=o;break L2753;}else{if(p>>>0<(c[2e3]|0)>>>0){aq();}k=p+16|0;if((c[k>>2]|0)==(t|0)){c[k>>2]=A;}else{c[p+20>>2]=A;}if((A|0)==0){q=n;r=o;break L2753;}}}while(0);if(A>>>0<(c[2e3]|0)>>>0){aq();}c[A+24>>2]=p;t=c[a+(l+16)>>2]|0;do{if((t|0)!=0){if(t>>>0<(c[2e3]|0)>>>0){aq();}else{c[A+16>>2]=t;c[t+24>>2]=A;break;}}}while(0);t=c[a+(l+20)>>2]|0;if((t|0)==0){q=n;r=o;break;}if(t>>>0<(c[2e3]|0)>>>0){aq();}else{c[A+20>>2]=t;c[t+24>>2]=A;q=n;r=o;break;}}else{q=d;r=h;}}while(0);d=q;if(d>>>0>=i>>>0){aq();}A=a+(h-4)|0;e=c[A>>2]|0;if((e&1|0)==0){aq();}do{if((e&2|0)==0){if((j|0)==(c[2002]|0)){B=(c[1999]|0)+r|0;c[1999]=B;c[2002]=q;c[q+4>>2]=B|1;if((q|0)!=(c[2001]|0)){return;}c[2001]=0;c[1998]=0;return;}if((j|0)==(c[2001]|0)){B=(c[1998]|0)+r|0;c[1998]=B;c[2001]=q;c[q+4>>2]=B|1;c[d+B>>2]=B;return;}B=(e&-8)+r|0;C=e>>>3;L2856:do{if(e>>>0<256){u=c[a+h>>2]|0;g=c[a+(h|4)>>2]|0;b=8024+(C<<1<<2)|0;do{if((u|0)!=(b|0)){if(u>>>0<(c[2e3]|0)>>>0){aq();}if((c[u+12>>2]|0)==(j|0)){break;}aq();}}while(0);if((g|0)==(u|0)){c[1996]=c[1996]&~(1<>>0<(c[2e3]|0)>>>0){aq();}f=g+8|0;if((c[f>>2]|0)==(j|0)){D=f;break;}aq();}}while(0);c[u+12>>2]=g;c[D>>2]=u;}else{b=i;f=c[a+(h+16)>>2]|0;t=c[a+(h|4)>>2]|0;do{if((t|0)==(b|0)){p=a+(h+12)|0;v=c[p>>2]|0;if((v|0)==0){m=a+(h+8)|0;k=c[m>>2]|0;if((k|0)==0){E=0;break;}else{F=k;G=m;}}else{F=v;G=p;}while(1){p=F+20|0;v=c[p>>2]|0;if((v|0)!=0){F=v;G=p;continue;}p=F+16|0;v=c[p>>2]|0;if((v|0)==0){break;}else{F=v;G=p;}}if(G>>>0<(c[2e3]|0)>>>0){aq();}else{c[G>>2]=0;E=F;break;}}else{p=c[a+h>>2]|0;if(p>>>0<(c[2e3]|0)>>>0){aq();}v=p+12|0;if((c[v>>2]|0)!=(b|0)){aq();}m=t+8|0;if((c[m>>2]|0)==(b|0)){c[v>>2]=t;c[m>>2]=p;E=t;break;}else{aq();}}}while(0);if((f|0)==0){break;}t=a+(h+20)|0;u=8288+(c[t>>2]<<2)|0;do{if((b|0)==(c[u>>2]|0)){c[u>>2]=E;if((E|0)!=0){break;}c[1997]=c[1997]&~(1<>2]);break L2856;}else{if(f>>>0<(c[2e3]|0)>>>0){aq();}g=f+16|0;if((c[g>>2]|0)==(b|0)){c[g>>2]=E;}else{c[f+20>>2]=E;}if((E|0)==0){break L2856;}}}while(0);if(E>>>0<(c[2e3]|0)>>>0){aq();}c[E+24>>2]=f;b=c[a+(h+8)>>2]|0;do{if((b|0)!=0){if(b>>>0<(c[2e3]|0)>>>0){aq();}else{c[E+16>>2]=b;c[b+24>>2]=E;break;}}}while(0);b=c[a+(h+12)>>2]|0;if((b|0)==0){break;}if(b>>>0<(c[2e3]|0)>>>0){aq();}else{c[E+20>>2]=b;c[b+24>>2]=E;break;}}}while(0);c[q+4>>2]=B|1;c[d+B>>2]=B;if((q|0)!=(c[2001]|0)){H=B;break;}c[1998]=B;return;}else{c[A>>2]=e&-2;c[q+4>>2]=r|1;c[d+r>>2]=r;H=r;}}while(0);r=H>>>3;if(H>>>0<256){d=r<<1;e=8024+(d<<2)|0;A=c[1996]|0;E=1<>2]|0;if(h>>>0>=(c[2e3]|0)>>>0){I=h;J=r;break;}aq();}}while(0);c[J>>2]=q;c[I+12>>2]=q;c[q+8>>2]=I;c[q+12>>2]=e;return;}e=q;I=H>>>8;do{if((I|0)==0){K=0;}else{if(H>>>0>16777215){K=31;break;}J=(I+1048320|0)>>>16&8;d=I<>>16&4;A=d<>>16&2;r=14-(E|J|d)+(A<>>15)|0;K=H>>>((r+7|0)>>>0)&1|r<<1;}}while(0);I=8288+(K<<2)|0;c[q+28>>2]=K;c[q+20>>2]=0;c[q+16>>2]=0;r=c[1997]|0;d=1<>2]=e;c[q+24>>2]=I;c[q+12>>2]=q;c[q+8>>2]=q;}else{if((K|0)==31){L=0;}else{L=25-(K>>>1)|0;}A=H<>2]|0;while(1){if((c[J+4>>2]&-8|0)==(H|0)){break;}M=J+16+(A>>>31<<2)|0;E=c[M>>2]|0;if((E|0)==0){N=2270;break;}else{A=A<<1;J=E;}}if((N|0)==2270){if(M>>>0<(c[2e3]|0)>>>0){aq();}else{c[M>>2]=e;c[q+24>>2]=J;c[q+12>>2]=q;c[q+8>>2]=q;break;}}A=J+8|0;B=c[A>>2]|0;E=c[2e3]|0;if(J>>>0>>0){aq();}if(B>>>0>>0){aq();}else{c[B+12>>2]=e;c[A>>2]=e;c[q+8>>2]=B;c[q+12>>2]=J;c[q+24>>2]=0;break;}}}while(0);q=(c[2004]|0)-1|0;c[2004]=q;if((q|0)==0){O=8440;}else{return;}while(1){q=c[O>>2]|0;if((q|0)==0){break;}else{O=q+8|0;}}c[2004]=-1;return;}function c1(b){b=b|0;var c=0;c=b;while(a[c]|0){c=c+1|0;}return c-b|0;}function c2(b,c){b=b|0;c=c|0;var d=0;do{a[b+d|0]=a[c+d|0];d=d+1|0;}while(a[c+(d-1)|0]|0);return b|0;}function c3(b,c){b=b|0;c=c|0;var d=0,e=0;d=b+(c1(b)|0)|0;do{a[d+e|0]=a[c+e|0];e=e+1|0;}while(a[c+(e-1)|0]|0);return b|0;}function c4(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,f=0,g=0;while((e|0)<(c|0)){f=d[a+e|0]|0;g=d[b+e|0]|0;if((f|0)!=(g|0))return((f|0)>(g|0)?1:-1)|0;e=e+1|0;}return 0;}function c5(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=b+e|0;if((e|0)>=20){d=d&255;e=b&3;g=d|d<<8|d<<16|d<<24;h=f&~3;if(e){e=b+4-e|0;while((b|0)<(e|0)){a[b]=d;b=b+1|0;}}while((b|0)<(h|0)){c[b>>2]=g;b=b+4|0;}}while((b|0)<(f|0)){a[b]=d;b=b+1|0;}}function c6(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=b|0;if((b&3)==(d&3)){while(b&3){if((e|0)==0)return f|0;a[b]=a[d]|0;b=b+1|0;d=d+1|0;e=e-1|0;}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0;}}while((e|0)>0){a[b]=a[d]|0;b=b+1|0;d=d+1|0;e=e-1|0;}return f|0;}function c7(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;while((e|0)<(d|0)){a[b+e|0]=f?0:a[c+e|0]|0;f=f?1:(a[c+e|0]|0)==0;e=e+1|0;}return b|0;}function c8(a,b){a=a|0;b=b|0;return aW[a&7](b|0)|0;}function c9(a,b){a=a|0;b=b|0;aX[a&1](b|0);}function da(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return aY[a&7](b|0,c|0,d|0,e|0)|0;}function db(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;aZ[a&15](b|0,c|0,d|0);}function dc(a){a=a|0;a_[a&1]();}function dd(a,b,c){a=a|0;b=b|0;c=c|0;return a$[a&1](b|0,c|0)|0;}function de(a){a=a|0;$(0);return 0;}function df(a){a=a|0;$(1);}function dg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;$(2);return 0;}function dh(a,b,c){a=a|0;b=b|0;c=c|0;$(3);}function di(){$(4);}function dj(a,b){a=a|0;b=b|0;$(5);return 0;}// EMSCRIPTEN_END_FUNCS\\nvar aW=[de,de,cL,de,cJ,de,de,de];var aX=[df,df];var aY=[dg,dg,cI,dg,cK,dg,dg,dg];var aZ=[dh,dh,bZ,dh,b$,dh,b_,dh,bY,dh,bX,dh,dh,dh,dh,dh];var a_=[di,di];var a$=[dj,dj];return{_strlen:c1,_strcat:c3,_mid_create_options:cV,_mid_istream_open_mem:cO,_mid_istream_open_file:cN,_mid_song_read_wave:b6,_mid_exit:cZ,_mid_song_note_on:b0,_strncpy:c7,_memset:c5,_memcpy:c6,_mid_song_get_missing_instrument:bu,_mid_istream_close:cR,_mid_song_free:cY,_mid_init:cT,_mid_song_load:cX,_mid_song_start:b3,_mid_song_get_num_missing_instruments:bt,_memcmp:c4,_free:c0,_malloc:c$,_strcpy:c2,runPostSets:bg,stackAlloc:a0,stackSave:a1,stackRestore:a2,setThrew:a3,setTempRet0:a6,setTempRet1:a7,setTempRet2:a8,setTempRet3:a9,setTempRet4:ba,setTempRet5:bb,setTempRet6:bc,setTempRet7:bd,setTempRet8:be,setTempRet9:bf,dynCall_ii:c8,dynCall_vi:c9,dynCall_iiiii:da,dynCall_viii:db,dynCall_v:dc,dynCall_iii:dd};}(// EMSCRIPTEN_END_ASM\\n{Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array},{abort:abort,assert:assert,asmPrintInt:asmPrintInt,asmPrintFloat:asmPrintFloat,min:Math_min,invoke_ii:invoke_ii,invoke_vi:invoke_vi,invoke_iiiii:invoke_iiiii,invoke_viii:invoke_viii,invoke_v:invoke_v,invoke_iii:invoke_iii,_strncmp:_strncmp,_lseek:_lseek,_sysconf:_sysconf,_fread:_fread,_fclose:_fclose,_strtok_r:_strtok_r,_abort:_abort,_fprintf:_fprintf,_close:_close,_pread:_pread,_fflush:_fflush,_fopen:_fopen,_open:_open,_strtol:_strtol,_strtok:_strtok,___setErrNo:___setErrNo,__reallyNegative:__reallyNegative,_fseek:_fseek,_send:_send,_write:_write,_strrchr:_strrchr,_sin:_sin,_printf:_printf,_strchr:_strchr,_read:_read,_time:_time,__formatString:__formatString,_atoi:_atoi,_recv:_recv,_pwrite:_pwrite,_llvm_pow_f64:_llvm_pow_f64,_fsync:_fsync,___errno_location:___errno_location,_isspace:_isspace,_sbrk:_sbrk,__parseInt:__parseInt,_fwrite:_fwrite,_strcmp:_strcmp,STACKTOP:STACKTOP,STACK_MAX:STACK_MAX,tempDoublePtr:tempDoublePtr,ABORT:ABORT,NaN:NaN,Infinity:Infinity,_stderr:_stderr},buffer);var _strlen=Module['_strlen']=asm['_strlen'];var _strcat=Module['_strcat']=asm['_strcat'];Module['_mid_create_options']=asm['_mid_create_options'];Module['_mid_istream_open_mem']=asm['_mid_istream_open_mem'];Module['_mid_istream_open_file']=asm['_mid_istream_open_file'];Module['_mid_song_read_wave']=asm['_mid_song_read_wave'];Module['_mid_exit']=asm['_mid_exit'];Module['_mid_song_note_on']=asm['_mid_song_note_on'];var _strncpy=Module['_strncpy']=asm['_strncpy'];var _memset=Module['_memset']=asm['_memset'];var _memcpy=Module['_memcpy']=asm['_memcpy'];Module['_mid_song_get_missing_instrument']=asm['_mid_song_get_missing_instrument'];Module['_mid_istream_close']=asm['_mid_istream_close'];Module['_mid_song_free']=asm['_mid_song_free'];Module['_mid_init']=asm['_mid_init'];Module['_mid_song_load']=asm['_mid_song_load'];Module['_mid_song_start']=asm['_mid_song_start'];Module['_mid_song_get_num_missing_instruments']=asm['_mid_song_get_num_missing_instruments'];var _memcmp=Module['_memcmp']=asm['_memcmp'];Module['_free']=asm['_free'];var _malloc=Module._malloc=asm['_malloc'];var _strcpy=Module['_strcpy']=asm['_strcpy'];var runPostSets=Module['runPostSets']=asm['runPostSets'];Module['dynCall_ii']=asm['dynCall_ii'];Module['dynCall_vi']=asm['dynCall_vi'];Module['dynCall_iiiii']=asm['dynCall_iiiii'];Module['dynCall_viii']=asm['dynCall_viii'];Module['dynCall_v']=asm['dynCall_v'];Module['dynCall_iii']=asm['dynCall_iii'];Runtime.stackAlloc=function(size){return asm['stackAlloc'](size);};Runtime.stackSave=function(){return asm['stackSave']();};Runtime.stackRestore=function(top){asm['stackRestore'](top);};// Warning: printing of i64 values may be slightly rounded! No deep i64 math used, so precise i64 code not included\\nvar i64Math=null;// === Auto-generated postamble setup entry stuff ===\\nif(memoryInitializer){var applyData=function applyData(data){HEAPU8.set(data,STATIC_BASE);};addRunDependency('memory initializer');}var initialStackTop;var calledRun=false;dependenciesFulfilled=function runCaller(){// If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\\nif(!calledRun&&shouldRunNow)run();if(!calledRun)dependenciesFulfilled=runCaller;// try this again later, after new deps are fulfilled\\n};Module['callMain']=Module.callMain=function callMain(args){assert(runDependencies==0,'cannot call main when async dependencies remain! (listen on __ATMAIN__)');assert(__ATPRERUN__.length==0,'cannot call main when preRun functions remain to be called');args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var _i=0;_i<4-1;_i++){argv.push(0);}}var argv=[allocate(intArrayFromString('/bin/this.program'),'i8',ALLOC_NORMAL)];pad();for(var i=0;i0){console.warn('run() called, but dependencies remain, so not running');return FS;}preRun();if(runDependencies>0){// a preRun added a dependency, run will be called later\\nreturn FS;}function doRun(){ensureInitRuntime();preMain();calledRun=true;if(Module['_main']&&shouldRunNow){Module['callMain'](args);}postRun();}if(Module['setStatus']){Module['setStatus']('Running...');setTimeout(function(){setTimeout(function(){Module['setStatus']('');},1);if(!ABORT)doRun();},1);}else{doRun();}return FS;}Module.run=run;/**\\n * Initializes the library.\\n * @function init\\n * @memberof LibTiMidity\\n * @param {boolean} [throwError = true] Throw an error if file/folder creation failed.\\n * @instance\\n */Module.init=function(){var throwError=arguments.length>0&&arguments[0]!==undefined?arguments[0]:true;// creates folders for instrument patches\\nModule.createPath('/',LIBTIMIDITY_PATCH_DIRECTORY,throwError);Module.createPath(\\\"/\\\".concat(LIBTIMIDITY_PATCH_DIRECTORY),LIBTIMIDITY_PATCH_DRUM_DIRECTORY,throwError);// creates config file\\nModule.createDataFile('/',LIBTIMIDITY_CONFIG_FILE,LIBTIMIDITY_CONFIG_DATA,true,true,undefined,throwError);};// shouldRunNow refers to calling main(), not run().\\nvar shouldRunNow=true;if(Module['noInitialRun']){shouldRunNow=false;}Module.FS=run();this.Module=Module;};var libtimidity=new LibTiMidity_LibTiMidity();/* harmony default export */ var src_LibTiMidity = (libtimidity.Module);\\n// CONCATENATED MODULE: ./src/events.js\\nvar MIDI_INIT = 'MIDI_INIT';\\nvar MIDI_ERROR = 'MIDI_ERROR';\\nvar MIDI_STATUS = 'MIDI_STATUS';\\nvar MIDI_PRELOAD = 'MIDI_PRELOAD';\\nvar MIDI_LOAD_FILE = 'MIDI_LOAD_FILE';\\nvar MIDI_LOAD_PATCH = 'MIDI_LOAD_PATCH';\\nvar MIDI_PLAY = 'MIDI_PLAY';\\nvar MIDI_PAUSE = 'MIDI_PAUSE';\\nvar MIDI_RESUME = 'MIDI_RESUME';\\nvar MIDI_STOP = 'MIDI_STOP';\\nvar MIDI_END = 'MIDI_END';\\n// CONCATENATED MODULE: ./src/EventHandler.js\\n\\n\\n\\n\\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\\n\\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { defineProperty_default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\\n\\n\\n\\nvar EventHandler_EventHandler =\\n/*#__PURE__*/\\nfunction () {\\n /**\\n * @class EventHandler\\n * @param {object} [configuration]\\n * @param {string} [configuration.playerId = undefined] The ID of the Midi Player that sends events.\\n * @param {function} [configuration.eventLogger = undefined] The function that receives event payloads.\\n * @param {boolean} [configuration.logging = false] Turns ON or OFF logging to the console.\\n * @return {object} An `EventHandler` instance.\\n */\\n function EventHandler(_ref) {\\n var _this = this;\\n\\n var _ref$eventLogger = _ref.eventLogger,\\n eventLogger = _ref$eventLogger === void 0 ? undefined : _ref$eventLogger,\\n _ref$logging = _ref.logging,\\n logging = _ref$logging === void 0 ? false : _ref$logging,\\n _ref$playerId = _ref.playerId,\\n playerId = _ref$playerId === void 0 ? undefined : _ref$playerId;\\n\\n classCallCheck_default()(this, EventHandler);\\n\\n defineProperty_default()(this, \\\"emitLoadFile\\\", function (_ref2) {\\n var _ref2$message = _ref2.message,\\n message = _ref2$message === void 0 ? 'Loading MIDI file...' : _ref2$message;\\n\\n _this.emitEvent({\\n event: MIDI_LOAD_FILE,\\n message: message\\n });\\n });\\n\\n defineProperty_default()(this, \\\"emitLoadPatch\\\", function (_ref3) {\\n var _ref3$message = _ref3.message,\\n message = _ref3$message === void 0 ? 'Loading instrument patch...' : _ref3$message;\\n\\n _this.emitEvent({\\n event: MIDI_LOAD_PATCH,\\n message: message\\n });\\n });\\n\\n defineProperty_default()(this, \\\"emitError\\\", function (_ref4) {\\n var _ref4$message = _ref4.message,\\n message = _ref4$message === void 0 ? 'An error occurred.' : _ref4$message,\\n _ref4$error = _ref4.error,\\n error = _ref4$error === void 0 ? '' : _ref4$error;\\n\\n _this.emitEvent({\\n event: MIDI_ERROR,\\n message: message,\\n error: error\\n });\\n });\\n\\n defineProperty_default()(this, \\\"emitEvent\\\", function (payload) {\\n var payloadWithId = _objectSpread({}, payload, {\\n playerId: _this.playerId\\n });\\n\\n if (_this.eventLogger) {\\n _this.eventLogger(payloadWithId);\\n } else if (_this.logging) {\\n if (payloadWithId.event === MIDI_ERROR) {\\n console.error(payloadWithId);\\n } else {\\n console.log(payloadWithId);\\n }\\n }\\n });\\n\\n this.playerId = playerId;\\n this.logging = logging;\\n this.eventLogger = eventLogger;\\n }\\n /**\\n * Emits an event that indicates that the MIDI player is initialized.\\n * @function\\n * @param {undefined}\\n */\\n\\n\\n createClass_default()(EventHandler, [{\\n key: \\\"emitInit\\\",\\n value: function emitInit() {\\n this.emitEvent({\\n event: MIDI_INIT,\\n message: 'MIDI player initialized.'\\n });\\n }\\n /**\\n * Emits an event that indicates that a MIDI file is being loaded.\\n * @function\\n * @param {object} payload\\n * @param {string} [payload.message] A message about the MIDI file being loaded.\\n */\\n\\n }, {\\n key: \\\"emitPlay\\\",\\n\\n /**\\n * Emits an event that indicates that the MIDI player currently playing a MIDI file.\\n * @function\\n * @param {object} payload\\n * @param {string} [payload.time] The playback position.\\n */\\n value: function emitPlay(_ref5) {\\n var time = _ref5.time;\\n this.emitEvent({\\n event: MIDI_PLAY,\\n time: time\\n });\\n }\\n /**\\n * Emits an event that indicates that the MIDI player has paused the playback of a file.\\n * @function\\n * @param {object} payload\\n * @param {string} [payload.time] The playback position.\\n */\\n\\n }, {\\n key: \\\"emitPause\\\",\\n value: function emitPause(_ref6) {\\n var time = _ref6.time;\\n this.emitEvent({\\n event: MIDI_PAUSE,\\n time: time\\n });\\n }\\n /**\\n * Emits an event that indicates that the MIDI player has resumed the playback of a file.\\n * @function\\n * @param {object} payload\\n * @param {string} [payload.time] The playback position.\\n */\\n\\n }, {\\n key: \\\"emitResume\\\",\\n value: function emitResume(_ref7) {\\n var time = _ref7.time;\\n this.emitEvent({\\n event: MIDI_RESUME,\\n time: time\\n });\\n }\\n /**\\n * Emits an event that indicates that the MIDI player has stopped the playback of a file.\\n * @function\\n * @param {undefined}\\n */\\n\\n }, {\\n key: \\\"emitStop\\\",\\n value: function emitStop() {\\n this.emitEvent({\\n event: MIDI_STOP,\\n time: 0\\n });\\n }\\n /**\\n * Emits an event that indicates that the MIDI player has reached the end of a file.\\n * @function\\n * @param {object} payload\\n * @param {string} [payload.time] The playback position.\\n */\\n\\n }, {\\n key: \\\"emitEnd\\\",\\n value: function emitEnd(_ref8) {\\n var time = _ref8.time;\\n this.emitEvent({\\n event: MIDI_END,\\n time: time\\n });\\n }\\n /**\\n * Emits an event that indicates that an error prevented the MIDI player to continue.\\n * @function\\n * @param {object} payload\\n * @param {string} [payload.message] A message that indicates that an error occurred.\\n * @param {string} [payload.error] A message that describes the details of the error.\\n */\\n\\n }, {\\n key: \\\"setLogger\\\",\\n\\n /**\\n * Updates the configuration of the logger.\\n * @function\\n * @param {object} [configuration]\\n * @param {function} [configuration.eventLogger = undefined] The function that receives event payloads.\\n * @param {boolean} [configuration.logging = false] Turns ON or OFF logging to the console.\\n */\\n value: function setLogger(_ref9) {\\n var _ref9$eventLogger = _ref9.eventLogger,\\n eventLogger = _ref9$eventLogger === void 0 ? undefined : _ref9$eventLogger,\\n _ref9$logging = _ref9.logging,\\n logging = _ref9$logging === void 0 ? false : _ref9$logging;\\n this.eventLogger = eventLogger;\\n this.logging = logging;\\n }\\n }]);\\n\\n return EventHandler;\\n}();\\n\\n\\n// CONCATENATED MODULE: ./src/MidiPlayer.js\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nvar isFirstInstance = true;\\n\\nvar MidiPlayer_MidiPlayer =\\n/*#__PURE__*/\\nfunction () {\\n /**\\n * @class MidiPlayer\\n * @param {object} [configuration]\\n * @param {function} [configuration.eventLogger = undefined] The function that receives event payloads.\\n * @param {boolean} [configuration.logging = false] Turns ON or OFF logging to the console.\\n * @param {string} [configuration.patchUrl = https://cdn.jsdelivr.net/npm/midi-instrument-patches@latest/] The public path where MIDI instrument patches can be found.\\n * @property {string} playerId ID of this instance of Midi Player.\\n * @property {object} context The AudioContext instance.\\n * @property {number} sampleRate The sample rate of the AudioContext.\\n * @property {function} eventLogger The function that is called to emit events.\\n * @property {boolean} logging Whether console logging is ON or OFF.\\n * @property {arrayBuffer} midiFileArray A typed array that represents the content of the MIDI.\\n * @property {*} midiFileBuffer The buffer with the MIDI data.\\n * @property {string} patchUrl The URL used to load MIDI instrument patches.\\n * @property {object} source The source that plays the audio signal.\\n * @property {number} startTime The time when MIDI playback started.\\n * @property {number} stream The MIDI stream.\\n * @property {*} waveBuffer The buffer with the MIDI data converted to WAV.\\n * @property {boolean} isFirstInstance Whether this is the first instance of the Midi Player or not.\\n *\\n * @return {object} A `MidiPlayer` instance.\\n * @example\\n * import MidiPlayer from 'web-midi-player';\\n *\\n * const eventLogger = (payload) => {\\n * console.log('Received event:', payload.event);\\n * }\\n *\\n * const midiPlayer = new MidiPlayer({ eventLogger });\\n */\\n function MidiPlayer() {\\n var _this = this;\\n\\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\\n _ref$eventLogger = _ref.eventLogger,\\n eventLogger = _ref$eventLogger === void 0 ? undefined : _ref$eventLogger,\\n _ref$logging = _ref.logging,\\n logging = _ref$logging === void 0 ? false : _ref$logging,\\n _ref$patchUrl = _ref.patchUrl,\\n patchUrl = _ref$patchUrl === void 0 ? MIDI_DEFAULT_PATCH_URL : _ref$patchUrl;\\n\\n classCallCheck_default()(this, MidiPlayer);\\n\\n defineProperty_default()(this, \\\"initPlayback\\\", function () {\\n src_LibTiMidity.call('mid_song_start', 'void', ['number'], [_this.song]);\\n\\n try {\\n _this.connectSource();\\n\\n _this.waveBuffer = src_LibTiMidity._malloc(MIDI_AUDIO_BUFFER_SIZE * 2);\\n _this.startTime = _this.context.currentTime;\\n } catch (error) {\\n _this.eventHandler.emitError({\\n message: 'Could not initialize playback.',\\n error: error\\n });\\n\\n return;\\n }\\n\\n _this.eventHandler.emitPlay({\\n time: 0\\n });\\n });\\n\\n defineProperty_default()(this, \\\"connectSource\\\", function () {\\n // Warning! This feature has been marked as deprecated: https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/createScriptProcessor\\n // See issue: https://github.com/yvesgurcan/web-midi-player/issues/29\\n _this.source = _this.context.createScriptProcessor(MIDI_AUDIO_BUFFER_SIZE, 0, 1); // event handler for next buffer full of audio data\\n\\n _this.source.onaudioprocess = function (event) {\\n return _this.handleOutput(event);\\n }; // connects the source to the context's destination (the speakers)\\n\\n\\n _this.source.connect(_this.context.destination);\\n });\\n\\n defineProperty_default()(this, \\\"emitEvent\\\", function (payload) {\\n return _this.eventHandler.emitEvent(payload);\\n });\\n\\n try {\\n var playerId = v4_default()();\\n this.playerId = playerId;\\n this.eventHandler = new EventHandler_EventHandler({\\n eventLogger: eventLogger,\\n logging: logging,\\n playerId: playerId\\n });\\n } catch (error) {\\n console.error('Fatal error. Could not initialize event handler.');\\n return;\\n }\\n\\n try {\\n this.eventLogger = eventLogger;\\n this.logging = logging;\\n this.patchUrl = patchUrl;\\n this.startTime = 0;\\n src_LibTiMidity.init(isFirstInstance);\\n this.isFirstInstance = isFirstInstance;\\n\\n if (isFirstInstance) {\\n isFirstInstance = false;\\n }\\n\\n this.eventHandler.emitInit();\\n } catch (error) {\\n this.eventHandler.emitError({\\n message: 'Could not initialize instance of MidiPlayer.',\\n error: error\\n });\\n }\\n }\\n /**\\n * Formats the name of a MIDI for display purposes.\\n * @param {String} name Name of the MIDI song.\\n * @return {String}\\n */\\n\\n\\n createClass_default()(MidiPlayer, [{\\n key: \\\"preload\\\",\\n\\n /**\\n * Loads instrument patches for a list of MIDI input.\\n *\\n * Please note that you can not use `parameters.items.arrayBuffer` and `parameters.items.url` concurrently.\\n * @param {object} parameters\\n * @param {object} [parameters.items] An array.\\n * @param {arrayBuffer} [parameters.items.arrayBuffer] An array buffer containing MIDI data to play.\\n * @param {string} [parameters.items.url] The URL where the MIDI file to play is located.\\n * @param {object} [parameters.audioContext] An instance of the Web Audio API AudioContext interface.\\n * @return {boolean} Whether instrument patches were successfully preloaded or not.\\n * @example\\n * const name1 = 'My MIDI file from URL';\\n * const url = 'media/file.midi';\\n * const name2 = 'My MIDI file from ArrayBuffer';\\n * const arrayBuffer = new ArrayBuffer();\\n *\\n * midiPlayer.preload({\\n * items: [\\n * { url, name: name1 },\\n * { arrayBuffer, name: name2 }\\n * ]\\n * });\\n */\\n value: function () {\\n var _preload = asyncToGenerator_default()(\\n /*#__PURE__*/\\n regenerator_default.a.mark(function _callee() {\\n var _ref2,\\n _ref2$items,\\n items,\\n audioContext,\\n i,\\n item,\\n url,\\n arrayBuffer,\\n initialized,\\n data,\\n _args = arguments;\\n\\n return regenerator_default.a.wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n _ref2 = _args.length > 0 && _args[0] !== undefined ? _args[0] : {}, _ref2$items = _ref2.items, items = _ref2$items === void 0 ? [] : _ref2$items, audioContext = _ref2.audioContext;\\n i = 0;\\n\\n case 2:\\n if (!(i < items.length)) {\\n _context.next = 22;\\n break;\\n }\\n\\n item = items[i];\\n url = item.url, arrayBuffer = item.arrayBuffer;\\n initialized = this.initAudioContext({\\n audioContext: audioContext\\n });\\n\\n if (initialized) {\\n _context.next = 8;\\n break;\\n }\\n\\n return _context.abrupt(\\\"return\\\", false);\\n\\n case 8:\\n if (this.isSourceValid({\\n url: url,\\n arrayBuffer: arrayBuffer\\n })) {\\n _context.next = 10;\\n break;\\n }\\n\\n return _context.abrupt(\\\"return\\\", false);\\n\\n case 10:\\n _context.next = 12;\\n return this.getSource({\\n url: url,\\n arrayBuffer: arrayBuffer\\n });\\n\\n case 12:\\n data = _context.sent;\\n\\n if (data) {\\n _context.next = 15;\\n break;\\n }\\n\\n return _context.abrupt(\\\"return\\\", false);\\n\\n case 15:\\n this.midiFileArray = new Int8Array(data);\\n this.handleStream();\\n _context.next = 19;\\n return this.getInstrumentPatches();\\n\\n case 19:\\n i++;\\n _context.next = 2;\\n break;\\n\\n case 22:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee, this);\\n }));\\n\\n function preload() {\\n return _preload.apply(this, arguments);\\n }\\n\\n return preload;\\n }()\\n /**\\n * Starts playback of MIDI input.\\n *\\n * Please note that you can not use `input.arrayBuffer` and `input.url` concurrently.\\n * @param {object} input\\n * @param {arrayBuffer} [input.arrayBuffer] An array buffer containing MIDI data to play.\\n * @param {string} [input.url] The URL where the MIDI file to play is located.\\n * @param {string} [input.name] A human-friendly name for the song.\\n * @param {object} [input.audioContext] An instance of the Web Audio API AudioContext interface.\\n * @return {boolean} Whether playback was successfully initiated or not.\\n * @example\\n * const name1 = 'My MIDI file from URL';\\n * const url = 'media/file.midi';\\n * midiPlayer.play({ url, name: name1 });\\n *\\n * const name2 = 'My MIDI file from ArrayBuffer';\\n * const arrayBuffer = new ArrayBuffer();\\n * midiPlayer.play({ arrayBuffer, name: name2 });\\n */\\n\\n }, {\\n key: \\\"play\\\",\\n value: function () {\\n var _play = asyncToGenerator_default()(\\n /*#__PURE__*/\\n regenerator_default.a.mark(function _callee2() {\\n var _ref3,\\n arrayBuffer,\\n url,\\n name,\\n audioContext,\\n initialized,\\n data,\\n loaded,\\n _args2 = arguments;\\n\\n return regenerator_default.a.wrap(function _callee2$(_context2) {\\n while (1) {\\n switch (_context2.prev = _context2.next) {\\n case 0:\\n _ref3 = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {}, arrayBuffer = _ref3.arrayBuffer, url = _ref3.url, name = _ref3.name, audioContext = _ref3.audioContext;\\n this.stop();\\n initialized = this.initAudioContext({\\n audioContext: audioContext\\n });\\n\\n if (initialized) {\\n _context2.next = 5;\\n break;\\n }\\n\\n return _context2.abrupt(\\\"return\\\", false);\\n\\n case 5:\\n if (this.isSourceValid({\\n url: url,\\n arrayBuffer: arrayBuffer\\n })) {\\n _context2.next = 7;\\n break;\\n }\\n\\n return _context2.abrupt(\\\"return\\\", false);\\n\\n case 7:\\n this.eventHandler.emitLoadFile({\\n message: \\\"Loading\\\".concat(MidiPlayer.formatMidiName(name), \\\"...\\\")\\n });\\n _context2.next = 10;\\n return this.getSource({\\n url: url,\\n arrayBuffer: arrayBuffer\\n });\\n\\n case 10:\\n data = _context2.sent;\\n\\n if (data) {\\n _context2.next = 13;\\n break;\\n }\\n\\n return _context2.abrupt(\\\"return\\\", false);\\n\\n case 13:\\n _context2.next = 15;\\n return this.loadSong({\\n arrayBuffer: data\\n });\\n\\n case 15:\\n loaded = _context2.sent;\\n\\n if (!loaded) {\\n _context2.next = 18;\\n break;\\n }\\n\\n return _context2.abrupt(\\\"return\\\", this.initPlayback());\\n\\n case 18:\\n case \\\"end\\\":\\n return _context2.stop();\\n }\\n }\\n }, _callee2, this);\\n }));\\n\\n function play() {\\n return _play.apply(this, arguments);\\n }\\n\\n return play;\\n }()\\n }, {\\n key: \\\"initAudioContext\\\",\\n value: function initAudioContext(_ref4) {\\n var audioContext = _ref4.audioContext;\\n\\n try {\\n // AudioContext must be fired close to the touch/click event initiated by the user to work in Safari\\n this.context = audioContext || new (window.AudioContext || window.webkitAudioContext)();\\n this.sampleRate = this.context.sampleRate;\\n var gainNode = this.context.createGain();\\n gainNode.gain.value = 1; // volume\\n\\n return true;\\n } catch (error) {\\n this.eventHandler.emitError({\\n message: \\\"Could not set AudioContext.\\\",\\n error: error\\n });\\n return false;\\n }\\n }\\n }, {\\n key: \\\"isSourceValid\\\",\\n value: function isSourceValid(_ref5) {\\n var arrayBuffer = _ref5.arrayBuffer,\\n url = _ref5.url;\\n\\n if (!arrayBuffer && !url) {\\n this.eventHandler.emitError({\\n message: \\\"Unknown source. URL or array buffer can't be both undefined to start playback.\\\"\\n });\\n return false;\\n }\\n\\n if (arrayBuffer && url) {\\n this.eventHandler.emitError({\\n message: 'Ambiguous source. MIDI data must originate either from a URL or an array buffer to start playback. Not both.'\\n });\\n return false;\\n }\\n\\n return true;\\n }\\n }, {\\n key: \\\"getSource\\\",\\n value: function () {\\n var _getSource = asyncToGenerator_default()(\\n /*#__PURE__*/\\n regenerator_default.a.mark(function _callee3(_ref6) {\\n var arrayBuffer, url, response;\\n return regenerator_default.a.wrap(function _callee3$(_context3) {\\n while (1) {\\n switch (_context3.prev = _context3.next) {\\n case 0:\\n arrayBuffer = _ref6.arrayBuffer, url = _ref6.url;\\n\\n if (!arrayBuffer) {\\n _context3.next = 3;\\n break;\\n }\\n\\n return _context3.abrupt(\\\"return\\\", arrayBuffer);\\n\\n case 3:\\n _context3.prev = 3;\\n _context3.next = 6;\\n return fetch(url);\\n\\n case 6:\\n response = _context3.sent;\\n\\n if (!(response.status !== 200)) {\\n _context3.next = 10;\\n break;\\n }\\n\\n this.eventHandler.emitError({\\n message: \\\"Could not retrieve MIDI\\\".concat(MidiPlayer.formatMidiName(name), \\\".\\\"),\\n error: \\\"Status code: \\\".concat(response.status, \\\".\\\")\\n });\\n return _context3.abrupt(\\\"return\\\", false);\\n\\n case 10:\\n return _context3.abrupt(\\\"return\\\", response.arrayBuffer());\\n\\n case 13:\\n _context3.prev = 13;\\n _context3.t0 = _context3[\\\"catch\\\"](3);\\n this.eventHandler.emitError({\\n message: \\\"Could not retrieve MIDI\\\".concat(MidiPlayer.formatMidiName(name), \\\".\\\"),\\n error: _context3.t0\\n });\\n return _context3.abrupt(\\\"return\\\", null);\\n\\n case 17:\\n case \\\"end\\\":\\n return _context3.stop();\\n }\\n }\\n }, _callee3, this, [[3, 13]]);\\n }));\\n\\n function getSource(_x) {\\n return _getSource.apply(this, arguments);\\n }\\n\\n return getSource;\\n }()\\n }, {\\n key: \\\"loadSong\\\",\\n value: function () {\\n var _loadSong = asyncToGenerator_default()(\\n /*#__PURE__*/\\n regenerator_default.a.mark(function _callee4(_ref7) {\\n var arrayBuffer, options;\\n return regenerator_default.a.wrap(function _callee4$(_context4) {\\n while (1) {\\n switch (_context4.prev = _context4.next) {\\n case 0:\\n arrayBuffer = _ref7.arrayBuffer;\\n this.midiFileArray = new Int8Array(arrayBuffer);\\n _context4.prev = 2;\\n options = this.handleStream();\\n _context4.next = 6;\\n return this.getInstrumentPatches();\\n\\n case 6:\\n // we need to reload the MIDI once the instrument patches have been loaded\\n this.stream = src_LibTiMidity.call('mid_istream_open_mem', 'number', ['number', 'number', 'number'], [this.midiFileBuffer, this.midiFileArray.length, false]);\\n this.song = src_LibTiMidity.call('mid_song_load', 'number', ['number', 'number'], [this.stream, options]);\\n src_LibTiMidity.call('mid_istream_close', 'number', ['number'], [this.stream]);\\n _context4.next = 15;\\n break;\\n\\n case 11:\\n _context4.prev = 11;\\n _context4.t0 = _context4[\\\"catch\\\"](2);\\n this.eventHandler.emitError({\\n message: 'Could not load song.',\\n error: _context4.t0\\n });\\n return _context4.abrupt(\\\"return\\\", false);\\n\\n case 15:\\n return _context4.abrupt(\\\"return\\\", true);\\n\\n case 16:\\n case \\\"end\\\":\\n return _context4.stop();\\n }\\n }\\n }, _callee4, this, [[2, 11]]);\\n }));\\n\\n function loadSong(_x2) {\\n return _loadSong.apply(this, arguments);\\n }\\n\\n return loadSong;\\n }()\\n }, {\\n key: \\\"handleStream\\\",\\n value: function handleStream() {\\n this.midiFileBuffer = src_LibTiMidity._malloc(this.midiFileArray.length);\\n src_LibTiMidity.writeArrayToMemory(this.midiFileArray, this.midiFileBuffer);\\n src_LibTiMidity.call('mid_init', 'number', [], []);\\n this.stream = src_LibTiMidity.call('mid_istream_open_mem', 'number', ['number', 'number', 'number'], [this.midiFileBuffer, this.midiFileArray.length, false]);\\n var options = src_LibTiMidity.call('mid_create_options', 'number', ['number', 'number', 'number', 'number'], [this.sampleRate, MIDI_AUDIO_S16LSB, 1, MIDI_AUDIO_BUFFER_SIZE * 2]);\\n this.song = src_LibTiMidity.call('mid_song_load', 'number', ['number', 'number'], [this.stream, options]);\\n src_LibTiMidity.call('mid_istream_close', 'number', ['number'], [this.stream]);\\n return options;\\n }\\n }, {\\n key: \\\"getInstrumentPatches\\\",\\n value: function () {\\n var _getInstrumentPatches = asyncToGenerator_default()(\\n /*#__PURE__*/\\n regenerator_default.a.mark(function _callee5() {\\n var missingPatchCount, i, missingPatch;\\n return regenerator_default.a.wrap(function _callee5$(_context5) {\\n while (1) {\\n switch (_context5.prev = _context5.next) {\\n case 0:\\n missingPatchCount = src_LibTiMidity.call('mid_song_get_num_missing_instruments', 'number', ['number'], [this.song]);\\n\\n if (!(missingPatchCount > 0)) {\\n _context5.next = 18;\\n break;\\n }\\n\\n this.eventHandler.emitLoadPatch({\\n message: \\\"Loading \\\".concat(missingPatchCount, \\\" instrument patches...\\\")\\n });\\n i = 0;\\n\\n case 4:\\n if (!(i < missingPatchCount)) {\\n _context5.next = 18;\\n break;\\n }\\n\\n missingPatch = src_LibTiMidity.call('mid_song_get_missing_instrument', 'string', ['number', 'number'], [this.song, i]);\\n _context5.prev = 6;\\n _context5.next = 9;\\n return src_LibTiMidity.loadPatchFromUrl(this.patchUrl, missingPatch);\\n\\n case 9:\\n _context5.next = 15;\\n break;\\n\\n case 11:\\n _context5.prev = 11;\\n _context5.t0 = _context5[\\\"catch\\\"](6);\\n this.eventHandler.emitError({\\n message: \\\"Could not retrieve missing instrument patch \\\".concat(missingPatch ? \\\"'\\\".concat(missingPatch, \\\"'\\\") : \\\"#\\\".concat(i), \\\".\\\"),\\n error: _context5.t0\\n });\\n return _context5.abrupt(\\\"return\\\", false);\\n\\n case 15:\\n i++;\\n _context5.next = 4;\\n break;\\n\\n case 18:\\n case \\\"end\\\":\\n return _context5.stop();\\n }\\n }\\n }, _callee5, this, [[6, 11]]);\\n }));\\n\\n function getInstrumentPatches() {\\n return _getInstrumentPatches.apply(this, arguments);\\n }\\n\\n return getInstrumentPatches;\\n }()\\n }, {\\n key: \\\"handleOutput\\\",\\n value: function handleOutput(_ref8) {\\n var outputBuffer = _ref8.outputBuffer;\\n\\n try {\\n var time = this.context.currentTime - this.startTime;\\n this.eventHandler.emitPlay({\\n time: time\\n }); // collect new wave data from LibTiMidity into waveBuffer\\n\\n var readWaveBytes = src_LibTiMidity.call('mid_song_read_wave', 'number', ['number', 'number', 'number', 'number'], [this.song, this.waveBuffer, MIDI_AUDIO_BUFFER_SIZE * 2, false]);\\n\\n if (readWaveBytes === 0) {\\n this.stop();\\n this.eventHandler.emitEnd({\\n time: time\\n });\\n return;\\n } // loop through the samples\\n\\n\\n for (var i = 0; i < MIDI_AUDIO_BUFFER_SIZE; i++) {\\n if (i < readWaveBytes) {\\n // converts PCM data from sint16 in C to number in JavaScript (range: -1.0 .. +1.0)\\n outputBuffer.getChannelData(0)[i] = src_LibTiMidity.getValue(this.waveBuffer + 2 * i, 'i16') / MAX_I16;\\n } else {\\n // fill end of buffer with zeroes, may happen at the end of a piece\\n outputBuffer.getChannelData(0)[i] = 0;\\n }\\n }\\n } catch (error) {\\n this.eventHandler.emitError({\\n message: 'Could not process audio.',\\n error: error\\n });\\n }\\n }\\n /**\\n * Pauses playback of MIDI input.\\n * @param {undefined}\\n * @return {boolean} Whether playback was successfully paused or not.\\n * @example\\n * midiPlayer.pause();\\n */\\n\\n }, {\\n key: \\\"pause\\\",\\n value: function pause() {\\n try {\\n var time = 0;\\n\\n if (this.context) {\\n this.context.suspend();\\n time = this.context.currentTime - this.startTime;\\n }\\n\\n this.eventHandler.emitPause({\\n time: time\\n });\\n return true;\\n } catch (error) {\\n this.eventHandler.emitError({\\n message: 'Could not pause playback.',\\n error: error\\n });\\n return false;\\n }\\n }\\n /**\\n * Resumes playback of MIDI input.\\n * @param {undefined}\\n * @return {boolean} Whether playback was successfully ressumed or not.\\n * @example\\n * midiPlayer.resume();\\n */\\n\\n }, {\\n key: \\\"resume\\\",\\n value: function resume() {\\n try {\\n var time = 0;\\n\\n if (this.context) {\\n this.context.resume();\\n time = this.context.currentTime - this.startTime;\\n }\\n\\n this.eventHandler.emitResume({\\n time: time\\n });\\n return true;\\n } catch (error) {\\n this.eventHandler.emitError({\\n message: 'Could not resume playback.',\\n error: error\\n });\\n return false;\\n }\\n }\\n /**\\n * Stops playback of MIDI input.\\n * @param {undefined}\\n * @return {boolean} Whether playback was successfully stopped or not.\\n * @example\\n * midiPlayer.stop();\\n */\\n\\n }, {\\n key: \\\"stop\\\",\\n value: function stop() {\\n try {\\n if (this.source) {\\n this.context.close();\\n this.disconnectSource();\\n this.freeMemory();\\n src_LibTiMidity.call('mid_exit', 'void', [], []);\\n this.song = 0;\\n }\\n\\n this.startTime = 0;\\n this.eventHandler.emitStop();\\n return true;\\n } catch (error) {\\n this.eventHandler.emitError({\\n message: 'Could not stop playback.',\\n error: error\\n });\\n return false;\\n }\\n }\\n }, {\\n key: \\\"freeMemory\\\",\\n value: function freeMemory() {\\n src_LibTiMidity._free(this.waveBuffer);\\n\\n src_LibTiMidity._free(this.midiFileBuffer);\\n\\n src_LibTiMidity.call('mid_song_free', 'void', ['number'], [this.song]);\\n } // terminate playback\\n\\n }, {\\n key: \\\"disconnectSource\\\",\\n value: function disconnectSource() {\\n this.source.disconnect();\\n this.source = null;\\n }\\n /**\\n * Send custom payloads to the event logger.\\n * @function\\n * @param {object} payload\\n * @param {string} [payload.event] The name of the event.\\n * @param {string} [payload.message] A message that described the event.\\n * @example\\n * const event = 'MIDI_CUSTOM_EVENT';\\n * const message = 'Something happened.';\\n * midiPlayer.emitEvent({ event, message });\\n */\\n\\n }, {\\n key: \\\"setLogger\\\",\\n\\n /**\\n * Updates the configuration of the logger.\\n * @param {object} [configuration]\\n * @param {function} [configuration.eventLogger = undefined] The function that receives event payloads.\\n * @param {boolean} [configuration.logging = false] Turns ON or OFF logging to the console.\\n * @example\\n * const eventLogger = (payload) => {\\n * console.log('Received event:', payload.event);\\n * }\\n * midiPlayer.setLogger({ eventLogger });\\n */\\n value: function setLogger(_ref9) {\\n var _ref9$eventLogger = _ref9.eventLogger,\\n eventLogger = _ref9$eventLogger === void 0 ? undefined : _ref9$eventLogger,\\n _ref9$logging = _ref9.logging,\\n logging = _ref9$logging === void 0 ? false : _ref9$logging;\\n this.eventLogger = eventLogger;\\n this.logging = logging;\\n this.eventHandler.setLogger({\\n eventLogger: eventLogger,\\n logging: logging\\n });\\n }\\n }], [{\\n key: \\\"formatMidiName\\\",\\n value: function formatMidiName(name) {\\n return name ? \\\" '\\\".concat(name, \\\"'\\\") : '';\\n }\\n }]);\\n\\n return MidiPlayer;\\n}();\\n\\n\\n// CONCATENATED MODULE: ./src/index.js\\n\\n/* harmony default export */ var src = __webpack_exports__[\\\"default\\\"] = (MidiPlayer_MidiPlayer);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTEuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZWItbWlkaS1wbGF5ZXIvLi9zcmMvY29uc3RhbnRzLmpzPzVmYjAiLCJ3ZWJwYWNrOi8vd2ViLW1pZGktcGxheWVyLy4vc3JjL0xpYlRpTWlkaXR5LmpzP2NiMjAiLCJ3ZWJwYWNrOi8vd2ViLW1pZGktcGxheWVyLy4vc3JjL2V2ZW50cy5qcz8xNTY2Iiwid2VicGFjazovL3dlYi1taWRpLXBsYXllci8uL3NyYy9FdmVudEhhbmRsZXIuanM/ZjdkMCIsIndlYnBhY2s6Ly93ZWItbWlkaS1wbGF5ZXIvLi9zcmMvTWlkaVBsYXllci5qcz9mMmM1Iiwid2VicGFjazovL3dlYi1taWRpLXBsYXllci8uL3NyYy9pbmRleC5qcz9iNjM1Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBNQVhfSTE2ID0gMiAqKiAxNTtcblxuZXhwb3J0IGNvbnN0IE1JRElfQVVESU9fQlVGRkVSX1NJWkUgPSA4MTkyO1xuXG5leHBvcnQgY29uc3QgTUlESV9BVURJT19TMTZMU0IgPSAweDgwMTA7XG5cbmV4cG9ydCBjb25zdCBNSURJX0RFRkFVTFRfUEFUQ0hfVVJMID1cbiAgICAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9taWRpLWluc3RydW1lbnQtcGF0Y2hlc0BsYXRlc3QvJztcblxuZXhwb3J0IGNvbnN0IE1JRElfUExBWUVSX01FU1NBR0VfUFJFRklYID0gJ01pZGkgcGxheWVyOic7XG5cbmV4cG9ydCBjb25zdCBMSUJUSU1JRElUWV9QQVRDSF9ESVJFQ1RPUlkgPSAncGF0JztcblxuZXhwb3J0IGNvbnN0IExJQlRJTUlESVRZX1BBVENIX0RSVU1fRElSRUNUT1JZID0gJ01UMzJEcnVtcyc7XG5cbmV4cG9ydCBjb25zdCBMSUJUSU1JRElUWV9DT05GSUdfRklMRSA9ICd0aW1pZGl0eS5jZmcnO1xuXG5leHBvcnQgY29uc3QgTElCVElNSURJVFlfRVJST1JfQ09ERVMgPSB7XG4gICAgRVBFUk06IDEsXG4gICAgRU5PRU5UOiAyLFxuICAgIEVTUkNIOiAzLFxuICAgIEVJTlRSOiA0LFxuICAgIEVJTzogNSxcbiAgICBFTlhJTzogNixcbiAgICBFMkJJRzogNyxcbiAgICBFTk9FWEVDOiA4LFxuICAgIEVCQURGOiA5LFxuICAgIEVDSElMRDogMTAsXG4gICAgRUFHQUlOOiAxMSxcbiAgICBFV09VTERCTE9DSzogMTEsXG4gICAgRU5PTUVNOiAxMixcbiAgICBFQUNDRVM6IDEzLFxuICAgIEVGQVVMVDogMTQsXG4gICAgRU5PVEJMSzogMTUsXG4gICAgRUJVU1k6IDE2LFxuICAgIEVFWElTVDogMTcsXG4gICAgRVhERVY6IDE4LFxuICAgIEVOT0RFVjogMTksXG4gICAgRU5PVERJUjogMjAsXG4gICAgRUlTRElSOiAyMSxcbiAgICBFSU5WQUw6IDIyLFxuICAgIEVORklMRTogMjMsXG4gICAgRU1GSUxFOiAyNCxcbiAgICBFTk9UVFk6IDI1LFxuICAgIEVUWFRCU1k6IDI2LFxuICAgIEVGQklHOiAyNyxcbiAgICBFTk9TUEM6IDI4LFxuICAgIEVTUElQRTogMjksXG4gICAgRVJPRlM6IDMwLFxuICAgIEVNTElOSzogMzEsXG4gICAgRVBJUEU6IDMyLFxuICAgIEVET006IDMzLFxuICAgIEVSQU5HRTogMzQsXG4gICAgRU5PTVNHOiA0MixcbiAgICBFSURSTTogNDMsXG4gICAgRUNIUk5HOiA0NCxcbiAgICBFTDJOU1lOQzogNDUsXG4gICAgRUwzSExUOiA0NixcbiAgICBFTDNSU1Q6IDQ3LFxuICAgIEVMTlJORzogNDgsXG4gICAgRVVOQVRDSDogNDksXG4gICAgRU5PQ1NJOiA1MCxcbiAgICBFTDJITFQ6IDUxLFxuICAgIEVERUFETEs6IDM1LFxuICAgIEVOT0xDSzogMzcsXG4gICAgRUJBREU6IDUyLFxuICAgIEVCQURSOiA1MyxcbiAgICBFWEZVTEw6IDU0LFxuICAgIEVOT0FOTzogNTUsXG4gICAgRUJBRFJRQzogNTYsXG4gICAgRUJBRFNMVDogNTcsXG4gICAgRURFQURMT0NLOiAzNSxcbiAgICBFQkZPTlQ6IDU5LFxuICAgIEVOT1NUUjogNjAsXG4gICAgRU5PREFUQTogNjEsXG4gICAgRVRJTUU6IDYyLFxuICAgIEVOT1NSOiA2MyxcbiAgICBFTk9ORVQ6IDY0LFxuICAgIEVOT1BLRzogNjUsXG4gICAgRVJFTU9URTogNjYsXG4gICAgRU5PTElOSzogNjcsXG4gICAgRUFEVjogNjgsXG4gICAgRVNSTU5UOiA2OSxcbiAgICBFQ09NTTogNzAsXG4gICAgRVBST1RPOiA3MSxcbiAgICBFTVVMVElIT1A6IDcyLFxuICAgIEVET1RET1Q6IDczLFxuICAgIEVCQURNU0c6IDc0LFxuICAgIEVOT1RVTklROiA3NixcbiAgICBFQkFERkQ6IDc3LFxuICAgIEVSRU1DSEc6IDc4LFxuICAgIEVMSUJBQ0M6IDc5LFxuICAgIEVMSUJCQUQ6IDgwLFxuICAgIEVMSUJTQ046IDgxLFxuICAgIEVMSUJNQVg6IDgyLFxuICAgIEVMSUJFWEVDOiA4MyxcbiAgICBFTk9TWVM6IDM4LFxuICAgIEVOT1RFTVBUWTogMzksXG4gICAgRU5BTUVUT09MT05HOiAzNixcbiAgICBFTE9PUDogNDAsXG4gICAgRU9QTk9UU1VQUDogOTUsXG4gICAgRVBGTk9TVVBQT1JUOiA5NixcbiAgICBFQ09OTlJFU0VUOiAxMDQsXG4gICAgRU5PQlVGUzogMTA1LFxuICAgIEVBRk5PU1VQUE9SVDogOTcsXG4gICAgRVBST1RPVFlQRTogOTEsXG4gICAgRU5PVFNPQ0s6IDg4LFxuICAgIEVOT1BST1RPT1BUOiA5MixcbiAgICBFU0hVVERPV046IDEwOCxcbiAgICBFQ09OTlJFRlVTRUQ6IDExMSxcbiAgICBFQUREUklOVVNFOiA5OCxcbiAgICBFQ09OTkFCT1JURUQ6IDEwMyxcbiAgICBFTkVUVU5SRUFDSDogMTAxLFxuICAgIEVORVRET1dOOiAxMDAsXG4gICAgRVRJTUVET1VUOiAxMTAsXG4gICAgRUhPU1RET1dOOiAxMTIsXG4gICAgRUhPU1RVTlJFQUNIOiAxMTMsXG4gICAgRUlOUFJPR1JFU1M6IDExNSxcbiAgICBFQUxSRUFEWTogMTE0LFxuICAgIEVERVNUQUREUlJFUTogODksXG4gICAgRU1TR1NJWkU6IDkwLFxuICAgIEVQUk9UT05PU1VQUE9SVDogOTMsXG4gICAgRVNPQ0tUTk9TVVBQT1JUOiA5NCxcbiAgICBFQUREUk5PVEFWQUlMOiA5OSxcbiAgICBFTkVUUkVTRVQ6IDEwMixcbiAgICBFSVNDT05OOiAxMDYsXG4gICAgRU5PVENPTk46IDEwNyxcbiAgICBFVE9PTUFOWVJFRlM6IDEwOSxcbiAgICBFVVNFUlM6IDg3LFxuICAgIEVEUVVPVDogMTIyLFxuICAgIEVTVEFMRTogMTE2LFxuICAgIEVOT1RTVVA6IDk1LFxuICAgIEVOT01FRElVTTogMTIzLFxuICAgIEVJTFNFUTogODQsXG4gICAgRU9WRVJGTE9XOiA3NSxcbiAgICBFQ0FOQ0VMRUQ6IDEyNSxcbiAgICBFTk9UUkVDT1ZFUkFCTEU6IDEzMSxcbiAgICBFT1dORVJERUFEOiAxMzAsXG4gICAgRVNUUlBJUEU6IDg2XG59O1xuXG5leHBvcnQgY29uc3QgTElCVElNSURJVFlfRVJST1JfTUVTU0FHRVMgPSB7XG4gICAgMDogJ1N1Y2Nlc3MnLFxuICAgIDE6ICdOb3Qgc3VwZXItdXNlcicsXG4gICAgMjogJ05vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknLFxuICAgIDM6ICdObyBzdWNoIHByb2Nlc3MnLFxuICAgIDQ6ICdJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCcsXG4gICAgNTogJ0kvTyBlcnJvcicsXG4gICAgNjogJ05vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MnLFxuICAgIDc6ICdBcmcgbGlzdCB0b28gbG9uZycsXG4gICAgODogJ0V4ZWMgZm9ybWF0IGVycm9yJyxcbiAgICA5OiAnQmFkIGZpbGUgbnVtYmVyJyxcbiAgICAxMDogJ05vIGNoaWxkcmVuJyxcbiAgICAxMTogJ05vIG1vcmUgcHJvY2Vzc2VzJyxcbiAgICAxMjogJ05vdCBlbm91Z2ggY29yZScsXG4gICAgMTM6ICdQZXJtaXNzaW9uIGRlbmllZCcsXG4gICAgMTQ6ICdCYWQgYWRkcmVzcycsXG4gICAgMTU6ICdCbG9jayBkZXZpY2UgcmVxdWlyZWQnLFxuICAgIDE2OiAnTW91bnQgZGV2aWNlIGJ1c3knLFxuICAgIDE3OiAnRmlsZSBleGlzdHMnLFxuICAgIDE4OiAnQ3Jvc3MtZGV2aWNlIGxpbmsnLFxuICAgIDE5OiAnTm8gc3VjaCBkZXZpY2UnLFxuICAgIDIwOiAnTm90IGEgZGlyZWN0b3J5JyxcbiAgICAyMTogJ0lzIGEgZGlyZWN0b3J5JyxcbiAgICAyMjogJ0ludmFsaWQgYXJndW1lbnQnLFxuICAgIDIzOiAnVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0nLFxuICAgIDI0OiAnVG9vIG1hbnkgb3BlbiBmaWxlcycsXG4gICAgMjU6ICdOb3QgYSB0eXBld3JpdGVyJyxcbiAgICAyNjogJ1RleHQgZmlsZSBidXN5JyxcbiAgICAyNzogJ0ZpbGUgdG9vIGxhcmdlJyxcbiAgICAyODogJ05vIHNwYWNlIGxlZnQgb24gZGV2aWNlJyxcbiAgICAyOTogJ0lsbGVnYWwgc2VlaycsXG4gICAgMzA6ICdSZWFkIG9ubHkgZmlsZSBzeXN0ZW0nLFxuICAgIDMxOiAnVG9vIG1hbnkgbGlua3MnLFxuICAgIDMyOiAnQnJva2VuIHBpcGUnLFxuICAgIDMzOiAnTWF0aCBhcmcgb3V0IG9mIGRvbWFpbiBvZiBmdW5jJyxcbiAgICAzNDogJ01hdGggcmVzdWx0IG5vdCByZXByZXNlbnRhYmxlJyxcbiAgICAzNTogJ0ZpbGUgbG9ja2luZyBkZWFkbG9jayBlcnJvcicsXG4gICAgMzY6ICdGaWxlIG9yIHBhdGggbmFtZSB0b28gbG9uZycsXG4gICAgMzc6ICdObyByZWNvcmQgbG9ja3MgYXZhaWxhYmxlJyxcbiAgICAzODogJ0Z1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCcsXG4gICAgMzk6ICdEaXJlY3Rvcnkgbm90IGVtcHR5JyxcbiAgICA0MDogJ1RvbyBtYW55IHN5bWJvbGljIGxpbmtzJyxcbiAgICA0MjogJ05vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlJyxcbiAgICA0MzogJ0lkZW50aWZpZXIgcmVtb3ZlZCcsXG4gICAgNDQ6ICdDaGFubmVsIG51bWJlciBvdXQgb2YgcmFuZ2UnLFxuICAgIDQ1OiAnTGV2ZWwgMiBub3Qgc3luY2hyb25pemVkJyxcbiAgICA0NjogJ0xldmVsIDMgaGFsdGVkJyxcbiAgICA0NzogJ0xldmVsIDMgcmVzZXQnLFxuICAgIDQ4OiAnTGluayBudW1iZXIgb3V0IG9mIHJhbmdlJyxcbiAgICA0OTogJ1Byb3RvY29sIGRyaXZlciBub3QgYXR0YWNoZWQnLFxuICAgIDUwOiAnTm8gQ1NJIHN0cnVjdHVyZSBhdmFpbGFibGUnLFxuICAgIDUxOiAnTGV2ZWwgMiBoYWx0ZWQnLFxuICAgIDUyOiAnSW52YWxpZCBleGNoYW5nZScsXG4gICAgNTM6ICdJbnZhbGlkIHJlcXVlc3QgZGVzY3JpcHRvcicsXG4gICAgNTQ6ICdFeGNoYW5nZSBmdWxsJyxcbiAgICA1NTogJ05vIGFub2RlJyxcbiAgICA1NjogJ0ludmFsaWQgcmVxdWVzdCBjb2RlJyxcbiAgICA1NzogJ0ludmFsaWQgc2xvdCcsXG4gICAgNTk6ICdCYWQgZm9udCBmaWxlIGZtdCcsXG4gICAgNjA6ICdEZXZpY2Ugbm90IGEgc3RyZWFtJyxcbiAgICA2MTogJ05vIGRhdGEgKGZvciBubyBkZWxheSBpbyknLFxuICAgIDYyOiAnVGltZXIgZXhwaXJlZCcsXG4gICAgNjM6ICdPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMnLFxuICAgIDY0OiAnTWFjaGluZSBpcyBub3Qgb24gdGhlIG5ldHdvcmsnLFxuICAgIDY1OiAnUGFja2FnZSBub3QgaW5zdGFsbGVkJyxcbiAgICA2NjogJ1RoZSBvYmplY3QgaXMgcmVtb3RlJyxcbiAgICA2NzogJ1RoZSBsaW5rIGhhcyBiZWVuIHNldmVyZWQnLFxuICAgIDY4OiAnQWR2ZXJ0aXNlIGVycm9yJyxcbiAgICA2OTogJ1NybW91bnQgZXJyb3InLFxuICAgIDcwOiAnQ29tbXVuaWNhdGlvbiBlcnJvciBvbiBzZW5kJyxcbiAgICA3MTogJ1Byb3RvY29sIGVycm9yJyxcbiAgICA3MjogJ011bHRpaG9wIGF0dGVtcHRlZCcsXG4gICAgNzM6ICdDcm9zcyBtb3VudCBwb2ludCAobm90IHJlYWxseSBlcnJvciknLFxuICAgIDc0OiAnVHJ5aW5nIHRvIHJlYWQgdW5yZWFkYWJsZSBtZXNzYWdlJyxcbiAgICA3NTogJ1ZhbHVlIHRvbyBsYXJnZSBmb3IgZGVmaW5lZCBkYXRhIHR5cGUnLFxuICAgIDc2OiAnR2l2ZW4gbG9nLiBuYW1lIG5vdCB1bmlxdWUnLFxuICAgIDc3OiAnZi5kLiBpbnZhbGlkIGZvciB0aGlzIG9wZXJhdGlvbicsXG4gICAgNzg6ICdSZW1vdGUgYWRkcmVzcyBjaGFuZ2VkJyxcbiAgICA3OTogJ0NhbiAgIGFjY2VzcyBhIG5lZWRlZCBzaGFyZWQgbGliJyxcbiAgICA4MDogJ0FjY2Vzc2luZyBhIGNvcnJ1cHRlZCBzaGFyZWQgbGliJyxcbiAgICA4MTogJy5saWIgc2VjdGlvbiBpbiBhLm91dCBjb3JydXB0ZWQnLFxuICAgIDgyOiAnQXR0ZW1wdGluZyB0byBsaW5rIGluIHRvbyBtYW55IGxpYnMnLFxuICAgIDgzOiAnQXR0ZW1wdGluZyB0byBleGVjIGEgc2hhcmVkIGxpYnJhcnknLFxuICAgIDg0OiAnSWxsZWdhbCBieXRlIHNlcXVlbmNlJyxcbiAgICA4NjogJ1N0cmVhbXMgcGlwZSBlcnJvcicsXG4gICAgODc6ICdUb28gbWFueSB1c2VycycsXG4gICAgODg6ICdTb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXQnLFxuICAgIDg5OiAnRGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZCcsXG4gICAgOTA6ICdNZXNzYWdlIHRvbyBsb25nJyxcbiAgICA5MTogJ1Byb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldCcsXG4gICAgOTI6ICdQcm90b2NvbCBub3QgYXZhaWxhYmxlJyxcbiAgICA5MzogJ1Vua25vd24gcHJvdG9jb2wnLFxuICAgIDk0OiAnU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZCcsXG4gICAgOTU6ICdOb3Qgc3VwcG9ydGVkJyxcbiAgICA5NjogJ1Byb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkJyxcbiAgICA5NzogJ0FkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wgZmFtaWx5JyxcbiAgICA5ODogJ0FkZHJlc3MgYWxyZWFkeSBpbiB1c2UnLFxuICAgIDk5OiAnQWRkcmVzcyBub3QgYXZhaWxhYmxlJyxcbiAgICAxMDA6ICdOZXR3b3JrIGludGVyZmFjZSBpcyBub3QgY29uZmlndXJlZCcsXG4gICAgMTAxOiAnTmV0d29yayBpcyB1bnJlYWNoYWJsZScsXG4gICAgMTAyOiAnQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrJyxcbiAgICAxMDM6ICdDb25uZWN0aW9uIGFib3J0ZWQnLFxuICAgIDEwNDogJ0Nvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcicsXG4gICAgMTA1OiAnTm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZScsXG4gICAgMTA2OiAnU29ja2V0IGlzIGFscmVhZHkgY29ubmVjdGVkJyxcbiAgICAxMDc6ICdTb2NrZXQgaXMgbm90IGNvbm5lY3RlZCcsXG4gICAgMTA4OiBcIkNhbid0IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duXCIsXG4gICAgMTA5OiAnVG9vIG1hbnkgcmVmZXJlbmNlcycsXG4gICAgMTEwOiAnQ29ubmVjdGlvbiB0aW1lZCBvdXQnLFxuICAgIDExMTogJ0Nvbm5lY3Rpb24gcmVmdXNlZCcsXG4gICAgMTEyOiAnSG9zdCBpcyBkb3duJyxcbiAgICAxMTM6ICdIb3N0IGlzIHVucmVhY2hhYmxlJyxcbiAgICAxMTQ6ICdTb2NrZXQgYWxyZWFkeSBjb25uZWN0ZWQnLFxuICAgIDExNTogJ0Nvbm5lY3Rpb24gYWxyZWFkeSBpbiBwcm9ncmVzcycsXG4gICAgMTE2OiAnU3RhbGUgZmlsZSBoYW5kbGUnLFxuICAgIDEyMjogJ1F1b3RhIGV4Y2VlZGVkJyxcbiAgICAxMjM6ICdObyBtZWRpdW0gKGluIHRhcGUgZHJpdmUpJyxcbiAgICAxMjU6ICdPcGVyYXRpb24gY2FuY2VsZWQnLFxuICAgIDEzMDogJ1ByZXZpb3VzIG93bmVyIGRpZWQnLFxuICAgIDEzMTogJ1N0YXRlIG5vdCByZWNvdmVyYWJsZSdcbn07XG5cbi8vIHByZXR0aWVyLWlnbm9yZVxuZXhwb3J0IGNvbnN0IExJQlRJTUlESVRZX0NPTkZJR19EQVRBID0gWzEwMCwgMTA1LCAxMTQsIDMyLCA0NiwgNDcsIDExMiwgOTcsIDExNiwgMTAsIDEwLCAxMDAsIDExNCwgMTE3LCAxMDksIDExNSwgMTAxLCAxMTYsIDMyLCA0OCwgMTAsIDEwLCAzMiwgNTEsIDUzLCA5LCAzMiwgNzcsIDg0LCA1MSwgNTAsIDY4LCAxMTQsIDExNywgMTA5LCAxMTUsIDQ3LCAxMDksIDExNiwgNTEsIDUwLCAxMDAsIDExNCwgMTE3LCAxMDksIDQ1LCA0OCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MSwgNTQsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDQ5LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUxLCA1NSwgOSwgMzIsIDc3LCA4NCwgNTEsIDUwLCA2OCwgMTE0LCAxMTcsIDEwOSwgMTE1LCA0NywgMTA5LCAxMTYsIDUxLCA1MCwgMTAwLCAxMTQsIDExNywgMTA5LCA0NSwgNTAsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTEsIDU2LCA5LCAzMiwgNzcsIDg0LCA1MSwgNTAsIDY4LCAxMTQsIDExNywgMTA5LCAxMTUsIDQ3LCAxMDksIDExNiwgNTEsIDUwLCAxMDAsIDExNCwgMTE3LCAxMDksIDQ1LCA1MSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MSwgNTcsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUyLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUyLCA0OCwgOSwgMzIsIDc3LCA4NCwgNTEsIDUwLCA2OCwgMTE0LCAxMTcsIDEwOSwgMTE1LCA0NywgMTA5LCAxMTYsIDUxLCA1MCwgMTAwLCAxMTQsIDExNywgMTA5LCA0NSwgNTMsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTIsIDQ5LCA5LCAzMiwgNzcsIDg0LCA1MSwgNTAsIDY4LCAxMTQsIDExNywgMTA5LCAxMTUsIDQ3LCAxMDksIDExNiwgNTEsIDUwLCAxMDAsIDExNCwgMTE3LCAxMDksIDQ1LCA1NCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MiwgNTAsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDU1LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUyLCA1MSwgOSwgMzIsIDc3LCA4NCwgNTEsIDUwLCA2OCwgMTE0LCAxMTcsIDEwOSwgMTE1LCA0NywgMTA5LCAxMTYsIDUxLCA1MCwgMTAwLCAxMTQsIDExNywgMTA5LCA0NSwgNTYsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTIsIDUyLCA5LCAzMiwgNzcsIDg0LCA1MSwgNTAsIDY4LCAxMTQsIDExNywgMTA5LCAxMTUsIDQ3LCAxMDksIDExNiwgNTEsIDUwLCAxMDAsIDExNCwgMTE3LCAxMDksIDQ1LCA1NywgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MiwgNTMsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDQ5LCA0OCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MiwgNTQsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDQ5LCA0OSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MiwgNTUsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDQ5LCA1MCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MiwgNTYsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDQ5LCA1MSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MiwgNTcsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDQ5LCA1MiwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MywgNDgsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDQ5LCA1MywgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MywgNDksIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDQ5LCA1NCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MywgNTAsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDQ5LCA1NSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MywgNTEsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDQ5LCA1NiwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MywgNTIsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDQ5LCA1NywgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MywgNTMsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUwLCA0OCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MywgNTQsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUwLCA0OSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MywgNTUsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUwLCA1MCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MywgNTYsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUwLCA1MSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MywgNTcsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUwLCA1MiwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NCwgNDgsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUwLCA1MywgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NCwgNDksIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUwLCA1NCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NCwgNTAsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUwLCA1NSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NCwgNTEsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUwLCA1NiwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NCwgNTIsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUwLCA1NywgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NCwgNTMsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUxLCA0OCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NCwgNTQsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUxLCA0OSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NCwgNTUsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUxLCA1MCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NCwgNTYsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUxLCA1MSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NCwgNTcsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUxLCA1MiwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NSwgNDgsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUxLCA1MywgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NSwgNDksIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUxLCA1NCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NSwgNTAsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUxLCA1NSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NSwgNTEsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUxLCA1NiwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NSwgNTIsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUxLCA1NywgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NSwgNTMsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUyLCA0OCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NSwgNTQsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUyLCA0OSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NSwgNTUsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUyLCA1MCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NSwgNTYsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUyLCA1MSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NSwgNTcsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUyLCA1MiwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NiwgNDgsIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUyLCA1MywgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NiwgNDksIDksIDMyLCA3NywgODQsIDUxLCA1MCwgNjgsIDExNCwgMTE3LCAxMDksIDExNSwgNDcsIDEwOSwgMTE2LCA1MSwgNTAsIDEwMCwgMTE0LCAxMTcsIDEwOSwgNDUsIDUyLCA1NCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDEwLCA5OCwgOTcsIDExMCwgMTA3LCAzMiwgNDgsIDEwLCAxMCwgMzIsIDQ4LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNDksIDUwLCA1NSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA0OSwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDQ5LCA1MCwgNTQsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTAsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA0OSwgNTAsIDUzLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUxLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNDksIDUwLCA1MiwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MiwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDQ5LCA1MCwgNTEsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTMsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA0OSwgNTAsIDUwLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDU0LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNDksIDUwLCA0OSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NSwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDQ5LCA1MCwgNDgsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTYsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA0OSwgNDksIDU3LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDU3LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNDksIDQ5LCA1NiwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA0OSwgNDgsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA0OSwgNDksIDU1LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDQ5LCA0OSwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDQ5LCA0OSwgNTQsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNDksIDUwLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNDksIDQ5LCA1MywgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA0OSwgNTEsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA0OSwgNDksIDUyLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDQ5LCA1MiwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDQ5LCA0OSwgNTEsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNDksIDUzLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNDksIDQ5LCA1MCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA0OSwgNTQsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA0OSwgNDksIDQ5LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDQ5LCA1NSwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDQ5LCA0OSwgNDgsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNDksIDU2LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNDksIDQ4LCA1NywgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA0OSwgNTcsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA0OSwgNDgsIDU2LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUwLCA0OCwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDQ5LCA0OCwgNTUsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTAsIDQ5LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNDksIDQ4LCA1NCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MCwgNTAsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA0OSwgNDgsIDUzLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUwLCA1MSwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDQ5LCA0OCwgNTIsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTAsIDUyLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNDksIDQ4LCA1MSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MCwgNTMsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA0OSwgNDgsIDUwLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUwLCA1NCwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDQ5LCA0OCwgNDksIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTAsIDU1LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNDksIDQ4LCA0OCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MCwgNTYsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1NywgNTcsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTAsIDU3LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTcsIDU2LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUxLCA0OCwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDU3LCA1NSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MSwgNDksIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1NywgNTQsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTEsIDUwLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTcsIDUzLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUxLCA1MSwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDU3LCA1MiwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MSwgNTIsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1NywgNTEsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTEsIDUzLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTcsIDUwLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUxLCA1NCwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDU3LCA0OSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MSwgNTUsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1NywgNDgsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTEsIDU2LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTYsIDU3LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUxLCA1NywgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDU2LCA1NiwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MiwgNDgsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1NiwgNTUsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTIsIDQ5LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTYsIDU0LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUyLCA1MCwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDU2LCA1MywgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MiwgNTEsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1NiwgNTIsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTIsIDUyLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTYsIDUxLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUyLCA1MywgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDU2LCA1MCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MiwgNTQsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1NiwgNDksIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTIsIDU1LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTYsIDQ4LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUyLCA1NiwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDU1LCA1NywgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MiwgNTcsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1NSwgNTYsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTMsIDQ4LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTUsIDU1LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUzLCA0OSwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDU1LCA1NCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MywgNTAsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1NSwgNTMsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTMsIDUxLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTUsIDUyLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUzLCA1MiwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDU1LCA1MSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MywgNTMsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1NSwgNTAsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTMsIDU0LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTUsIDQ5LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDUzLCA1NSwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDU1LCA0OCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1MywgNTYsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1NCwgNTcsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTMsIDU3LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTQsIDU2LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDU0LCA0OCwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDU0LCA1NSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NCwgNDksIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1NCwgNTQsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTQsIDUwLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTQsIDUzLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDU0LCA1MSwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDU0LCA1MiwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NCwgNTIsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1NCwgNTEsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTQsIDUzLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTQsIDUwLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDU0LCA1NCwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDU0LCA0OSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NCwgNTUsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1NCwgNDgsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTQsIDU2LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTMsIDU3LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDU0LCA1NywgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDUzLCA1NiwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NSwgNDgsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1MywgNTUsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTUsIDQ5LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTMsIDU0LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDU1LCA1MCwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDUzLCA1MywgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NSwgNTEsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1MywgNTIsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTUsIDUyLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTMsIDUxLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDU1LCA1MywgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDUzLCA1MCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NSwgNTQsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1MywgNDksIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTUsIDU1LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTMsIDQ4LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDU1LCA1NiwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDUyLCA1NywgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NSwgNTcsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1MiwgNTYsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTYsIDQ4LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTIsIDU1LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDU2LCA0OSwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDUyLCA1NCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NiwgNTAsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1MiwgNTMsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTYsIDUxLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTIsIDUyLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDU2LCA1MiwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDUyLCA1MSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NiwgNTMsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1MiwgNTAsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTYsIDU0LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTIsIDQ5LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDU2LCA1NSwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDUyLCA0OCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NiwgNTYsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1MSwgNTcsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTYsIDU3LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTEsIDU2LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDU3LCA0OCwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDUxLCA1NSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NywgNDksIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1MSwgNTQsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTcsIDUwLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTEsIDUzLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDU3LCA1MSwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDUxLCA1MiwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NywgNTIsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1MSwgNTEsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTcsIDUzLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTEsIDUwLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDU3LCA1NCwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDUxLCA0OSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA1NywgNTUsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1MSwgNDgsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNTcsIDU2LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTAsIDU3LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDU3LCA1NywgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDUwLCA1NiwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA0OSwgNDgsIDQ4LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTAsIDU1LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDQ5LCA0OCwgNDksIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1MCwgNTQsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNDksIDQ4LCA1MCwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDUwLCA1MywgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA0OSwgNDgsIDUxLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTAsIDUyLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDQ5LCA0OCwgNTIsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1MCwgNTEsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNDksIDQ4LCA1MywgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDUwLCA1MCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA0OSwgNDgsIDU0LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTAsIDQ5LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDQ5LCA0OCwgNTUsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1MCwgNDgsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNDksIDQ4LCA1NiwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDQ5LCA1NywgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA0OSwgNDgsIDU3LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNDksIDU2LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDQ5LCA0OSwgNDgsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA0OSwgNTUsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNDksIDQ5LCA0OSwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDQ5LCA1NCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA0OSwgNDksIDUwLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNDksIDUzLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDQ5LCA0OSwgNTEsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA0OSwgNTIsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNDksIDQ5LCA1MiwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDQ5LCA1MSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA0OSwgNDksIDUzLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNDksIDUwLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDQ5LCA0OSwgNTQsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA0OSwgNDksIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNDksIDQ5LCA1NSwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDQ5LCA0OCwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA0OSwgNDksIDU2LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTcsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNDksIDQ5LCA1NywgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDU2LCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDQ5LCA1MCwgNDgsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1NSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA0OSwgNTAsIDQ5LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTQsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNDksIDUwLCA1MCwgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDUzLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDQ5LCA1MCwgNTEsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA1MiwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA0OSwgNTAsIDUyLCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNTEsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwLCAzMiwgNDksIDUwLCA1MywgOSwgMzIsIDk3LCAxMTQsIDk3LCA5OSwgMTA0LCAxMTAsIDExMSwgNDUsIDUwLCA0NiwgMTEyLCA5NywgMTE2LCAxMCwgMzIsIDQ5LCA1MCwgNTQsIDksIDMyLCA5NywgMTE0LCA5NywgOTksIDEwNCwgMTEwLCAxMTEsIDQ1LCA0OSwgNDYsIDExMiwgOTcsIDExNiwgMTAsIDMyLCA0OSwgNTAsIDU1LCA5LCAzMiwgOTcsIDExNCwgOTcsIDk5LCAxMDQsIDExMCwgMTExLCA0NSwgNDgsIDQ2LCAxMTIsIDk3LCAxMTYsIDEwXTtcbiIsImltcG9ydCB7XG4gICAgTElCVElNSURJVFlfUEFUQ0hfRElSRUNUT1JZLFxuICAgIExJQlRJTUlESVRZX1BBVENIX0RSVU1fRElSRUNUT1JZLFxuICAgIExJQlRJTUlESVRZX0NPTkZJR19GSUxFLFxuICAgIExJQlRJTUlESVRZX0NPTkZJR19EQVRBLFxuICAgIExJQlRJTUlESVRZX0VSUk9SX0NPREVTIGFzIEVSUk5PX0NPREVTLFxuICAgIExJQlRJTUlESVRZX0VSUk9SX01FU1NBR0VTIGFzIEVSUk5PX01FU1NBR0VTXG59IGZyb20gJy4vY29uc3RhbnRzJztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2tyaXBrZW4vZW1zY3JpcHRlbi93aWtpL1xuXG5jb25zdCBJTlRfVFlQRVMgPSB7IGkxOiAwLCBpODogMCwgaTE2OiAwLCBpMzI6IDAsIGk2NDogMCB9O1xuY29uc3QgRkxPQVRfVFlQRVMgPSB7IGZsb2F0OiAwLCBkb3VibGU6IDAgfTtcblxuLyoqIEBjbGFzcyAqL1xuY2xhc3MgTGliVGlNaWRpdHkge1xuICAgIC8qKlxuICAgICAqIExpYnJhcnkgdG8gZW5hYmxlIHBsYXliYWNrIG9mIE1JREkgZmlsZXMuXG4gICAgICogQHBhcmFtIHt1bmRlZmluZWR9XG4gICAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgbW9kdWxlIG9mIGFuIGluc3RhbmNlIG9mIExpYlRpTWlkaXR5LlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBUT1RBTF9NRU1PUlkgVGhlIGFtb3VudCBvZiBtZW1vcnkgYXZhaWxhYmxlIHRvIHRoZSBsaWJyYXJ5LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb25zdCBSdW50aW1lID0ge1xuICAgICAgICAgICAgc3RhY2tTYXZlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU1RBQ0tUT1A7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhY2tSZXN0b3JlOiBmdW5jdGlvbihzdGFja1RvcCkge1xuICAgICAgICAgICAgICAgIFNUQUNLVE9QID0gc3RhY2tUb3A7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNOdW1iZXJUeXBlOiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUgaW4gSU5UX1RZUEVTIHx8IHR5cGUgaW4gRkxPQVRfVFlQRVM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNQb2ludGVyVHlwZTogZnVuY3Rpb24gaXNQb2ludGVyVHlwZSh0eXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVbdHlwZS5sZW5ndGggLSAxXSA9PSAnKic7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTdHJ1Y3RUeXBlOiBmdW5jdGlvbiBpc1N0cnVjdFR5cGUodHlwZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc1BvaW50ZXJUeXBlKHR5cGUpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXlUeXBlKHR5cGUpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoLzw/eyA/W159XSogP30+Py8udGVzdCh0eXBlKSkgcmV0dXJuIHRydWU7IC8vIHsgaTMyLCBpOCB9IGV0Yy4gLSBhbm9ueW1vdXMgc3RydWN0IHR5cGVzXG4gICAgICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gaXNTdHJ1Y3RQb2ludGVyVHlwZSgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVbMF0gPT0gJyUnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldE5hdGl2ZVR5cGVTaXplOiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2kxJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaTgnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2kxNic6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaTMyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdpNjQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDg7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdkb3VibGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDg7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlW3R5cGUubGVuZ3RoIC0gMV0gPT09ICcqJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSdW50aW1lLlFVQU5UVU1fU0laRTsgLy8gQSBwb2ludGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVbMF0gPT09ICdpJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJpdHMgPSBwYXJzZUludCh0eXBlLnN1YnN0cigxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGJpdHMgJSA4ID09PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0cyAvIDg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0TmF0aXZlRmllbGRTaXplOiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICAgICAgICAgICAgICBSdW50aW1lLmdldE5hdGl2ZVR5cGVTaXplKHR5cGUpLFxuICAgICAgICAgICAgICAgICAgICBSdW50aW1lLlFVQU5UVU1fU0laRVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVkdXA6IGZ1bmN0aW9uIGRlZHVwKGl0ZW1zLCBpZGVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlZW4gPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAoaWRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VlbltpdGVtW2lkZW50XV0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5baXRlbVtpZGVudF1dID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWVuW2l0ZW1dKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuW2l0ZW1dID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJncyA9XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdvYmplY3QnID8gYXJndW1lbnRzWzBdIDogYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldCA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICByZXRbYXJnc1tpXV0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldEFsaWduU2l6ZTogZnVuY3Rpb24odHlwZSwgc2l6ZSwgdmFyYXJnKSB7XG4gICAgICAgICAgICAgICAgLy8gd2UgYWxpZ24gaTY0cyBhbmQgZG91YmxlcyBvbiA2NC1iaXQgYm91bmRhcmllcywgdW5saWtlIHg4NlxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09ICdpNjQnIHx8IHR5cGUgPT0gJ2RvdWJsZScgfHwgdmFyYXJnKSByZXR1cm4gODtcbiAgICAgICAgICAgICAgICBpZiAoIXR5cGUpIHJldHVybiBNYXRoLm1pbihzaXplLCA4KTsgLy8gYWxpZ24gc3RydWN0dXJlcyBpbnRlcm5hbGx5IHRvIDY0IGJpdHNcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgICAgIHNpemUgfHwgKHR5cGUgPyBSdW50aW1lLmdldE5hdGl2ZUZpZWxkU2l6ZSh0eXBlKSA6IDApLFxuICAgICAgICAgICAgICAgICAgICBSdW50aW1lLlFVQU5UVU1fU0laRVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsY3VsYXRlU3RydWN0QWxpZ25tZW50OiBmdW5jdGlvbiBjYWxjdWxhdGVTdHJ1Y3RBbGlnbm1lbnQodHlwZSkge1xuICAgICAgICAgICAgICAgIHR5cGUuZmxhdFNpemUgPSAwO1xuICAgICAgICAgICAgICAgIHR5cGUuYWxpZ25TaXplID0gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBkaWZmcyA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gLTE7XG4gICAgICAgICAgICAgICAgdHlwZS5mbGF0SW5kZXhlcyA9IHR5cGUuZmllbGRzLm1hcChmdW5jdGlvbihmaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgc2l6ZSwgYWxpZ25TaXplO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lLmlzTnVtYmVyVHlwZShmaWVsZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWUuaXNQb2ludGVyVHlwZShmaWVsZClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gUnVudGltZS5nZXROYXRpdmVUeXBlU2l6ZShmaWVsZCk7IC8vIHBhY2sgY2hhcjsgY2hhcjsgaW4gc3RydWN0cywgYWxzbyBjaGFyW1hdcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduU2l6ZSA9IFJ1bnRpbWUuZ2V0QWxpZ25TaXplKGZpZWxkLCBzaXplKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChSdW50aW1lLmlzU3RydWN0VHlwZShmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZFsxXSA9PT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBbMCB4IHNvbWV0aGluZ10uIFdoZW4gaW5zaWRlIGFub3RoZXIgc3RydWN0dXJlIGxpa2UgaGVyZSwgaXQgbXVzdCBiZSBhdCB0aGUgZW5kLCBhbmQgaXQgYWRkcyBubyBzaXplXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBoYXBwZW5zIGluIGphdmEtbmJvZHkgZm9yIGV4YW1wbGUuLi4gYXNzZXJ0KGluZGV4ID09PSB0eXBlLmZpZWxkcy5sZW5ndGgsICd6ZXJvLWxlbmd0aCBpbiB0aGUgbWlkZGxlIScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUeXBlcy50eXBlc1tmaWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25TaXplID0gUnVudGltZS5nZXRBbGlnblNpemUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMudHlwZXNbZmllbGRdLmFsaWduU2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduU2l6ZSA9IHR5cGUuYWxpZ25TaXplIHx8IFFVQU5UVU1fU0laRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBUeXBlcy50eXBlc1tmaWVsZF0uZmxhdFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25TaXplID0gUnVudGltZS5nZXRBbGlnblNpemUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLnR5cGVzW2ZpZWxkXS5hbGlnblNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkWzBdID09ICdiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYk4sIGxhcmdlIG51bWJlciBmaWVsZCwgbGlrZSBhIFtOIHggaThdXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gZmllbGQuc3Vic3RyKDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduU2l6ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyAnVW5jbGVhciB0eXBlIGluIHN0cnVjdDogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcsIGluICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUubmFtZV8gK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgOjogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcChUeXBlcy50eXBlc1t0eXBlLm5hbWVfXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUucGFja2VkKSBhbGlnblNpemUgPSAxO1xuICAgICAgICAgICAgICAgICAgICB0eXBlLmFsaWduU2l6ZSA9IE1hdGgubWF4KHR5cGUuYWxpZ25TaXplLCBhbGlnblNpemUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyID0gUnVudGltZS5hbGlnbk1lbW9yeSh0eXBlLmZsYXRTaXplLCBhbGlnblNpemUpOyAvLyBpZiBuZWNlc3NhcnksIHBsYWNlIHRoaXMgb24gYWxpZ25lZCBtZW1vcnlcbiAgICAgICAgICAgICAgICAgICAgdHlwZS5mbGF0U2l6ZSA9IGN1cnIgKyBzaXplO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldiA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWZmcy5wdXNoKGN1cnIgLSBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwcmV2ID0gY3VycjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdHlwZS5mbGF0U2l6ZSA9IFJ1bnRpbWUuYWxpZ25NZW1vcnkoXG4gICAgICAgICAgICAgICAgICAgIHR5cGUuZmxhdFNpemUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGUuYWxpZ25TaXplXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoZGlmZnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZS5mbGF0RmFjdG9yID0gdHlwZS5mbGF0U2l6ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFJ1bnRpbWUuZGVkdXAoZGlmZnMpLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGUuZmxhdEZhY3RvciA9IGRpZmZzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0eXBlLm5lZWRzRmxhdHRlbmluZyA9IHR5cGUuZmxhdEZhY3RvciAhPSAxO1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlLmZsYXRJbmRleGVzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdlbmVyYXRlU3RydWN0SW5mbzogZnVuY3Rpb24oc3RydWN0LCB0eXBlTmFtZSwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHR5cGUsIGFsaWdubWVudDtcbiAgICAgICAgICAgICAgICBpZiAodHlwZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSAodHlwZW9mIFR5cGVzID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBSdW50aW1lLnR5cGVJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFR5cGVzLnR5cGVzKVt0eXBlTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghdHlwZSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlLmZpZWxkcy5sZW5ndGggIT0gc3RydWN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdW1iZXIgb2YgbmFtZWQgZmllbGRzIG11c3QgbWF0Y2ggdGhlIHR5cGUgZm9yICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IHBvc3NpYmx5IGR1cGxpY2F0ZSBzdHJ1Y3QgbmFtZXMuIENhbm5vdCByZXR1cm4gc3RydWN0SW5mbydcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQgPSB0eXBlLmZsYXRJbmRleGVzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzOiBzdHJ1Y3QubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudCA9IFJ1bnRpbWUuY2FsY3VsYXRlU3RydWN0QWxpZ25tZW50KHR5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXQgPSB7XG4gICAgICAgICAgICAgICAgICAgIF9fc2l6ZV9fOiB0eXBlLmZsYXRTaXplXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RydWN0LmZvckVhY2goZnVuY3Rpb24oaXRlbSwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFtpdGVtXSA9IGFsaWdubWVudFtpXSArIG9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW1iZWRkZWQgc3RydWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGsgaW4gaXRlbSkga2V5ID0gaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRba2V5XSA9IFJ1bnRpbWUuZ2VuZXJhdGVTdHJ1Y3RJbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtW2tleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUuZmllbGRzW2ldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRbaV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QuZm9yRWFjaChmdW5jdGlvbihpdGVtLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXRbaXRlbVsxXV0gPSBhbGlnbm1lbnRbaV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGR5bkNhbGw6IGZ1bmN0aW9uKHNpZywgcHRyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MgJiYgYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzLnNwbGljZSkgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICBhcmdzLnNwbGljZSgwLCAwLCBwdHIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTW9kdWxlWydkeW5DYWxsXycgKyBzaWddLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNb2R1bGVbJ2R5bkNhbGxfJyArIHNpZ10uY2FsbChudWxsLCBwdHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBVVEY4UHJvY2Vzc29yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgICAgICBsZXQgbmVlZGVkID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NDQ2hhciA9IGZ1bmN0aW9uKGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNvZGUgJiAweDgwKSA9PSAweDAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMHh4eHh4eHhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjb2RlICYgMHhlMCkgPT0gMHhjMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDExMHh4eHh4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNvZGUgJiAweGYwKSA9PSAweGUwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTExMHh4eHhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMTExMHh4eFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZCA9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnB1c2goY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkZWQgPiAwKSByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYzEgPSBidWZmZXJbMF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGMyID0gYnVmZmVyWzFdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjMyA9IGJ1ZmZlclsyXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYzQgPSBidWZmZXJbM107XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjMSAmIDB4MWYpIDw8IDYpIHwgKGMyICYgMHgzZilcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyLmxlbmd0aCA9PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYzEgJiAweDBmKSA8PCAxMikgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGMyICYgMHgzZikgPDwgNikgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYzMgJiAweDNmKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2RlUG9pbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYzEgJiAweDA3KSA8PCAxOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYzIgJiAweDNmKSA8PCAxMikgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYzMgJiAweDNmKSA8PCA2KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGM0ICYgMHgzZik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoKGNvZGVQb2ludCAtIDB4MTAwMDApIC8gMHg0MDApICsgMHhkODAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY29kZVBvaW50IC0gMHgxMDAwMCkgJSAweDQwMCkgKyAweGRjMDBcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NKU1N0cmluZyA9IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goc3RyaW5nLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGFja0FsbG9jOiBmdW5jdGlvbihzaXplKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV0ID0gU1RBQ0tUT1A7XG4gICAgICAgICAgICAgICAgU1RBQ0tUT1AgPSAoU1RBQ0tUT1AgKyBzaXplKSB8IDA7XG4gICAgICAgICAgICAgICAgU1RBQ0tUT1AgPSAoU1RBQ0tUT1AgKyA3KSAmIC04O1xuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdGljQWxsb2M6IGZ1bmN0aW9uKHNpemUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXQgPSBTVEFUSUNUT1A7XG4gICAgICAgICAgICAgICAgU1RBVElDVE9QID0gKFNUQVRJQ1RPUCArIHNpemUpIHwgMDtcbiAgICAgICAgICAgICAgICBTVEFUSUNUT1AgPSAoU1RBVElDVE9QICsgNykgJiAtODtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGR5bmFtaWNBbGxvYzogZnVuY3Rpb24oc2l6ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldCA9IERZTkFNSUNUT1A7XG4gICAgICAgICAgICAgICAgRFlOQU1JQ1RPUCA9IChEWU5BTUlDVE9QICsgc2l6ZSkgfCAwO1xuICAgICAgICAgICAgICAgIERZTkFNSUNUT1AgPSAoRFlOQU1JQ1RPUCArIDcpICYgLTg7XG5cbiAgICAgICAgICAgICAgICBpZiAoRFlOQU1JQ1RPUCA+PSBUT1RBTF9NRU1PUlkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoJ091dCBvZiBtZW1vcnkuJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhbGlnbk1lbW9yeTogZnVuY3Rpb24oc2l6ZSwgcXVhbnR1bSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldCA9IChzaXplID1cbiAgICAgICAgICAgICAgICAgICAgTWF0aC5jZWlsKHNpemUgLyAocXVhbnR1bSA/IHF1YW50dW0gOiA4KSkgKlxuICAgICAgICAgICAgICAgICAgICAocXVhbnR1bSA/IHF1YW50dW0gOiA4KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYWtlQmlnSW50OiBmdW5jdGlvbihsb3csIGhpZ2gsIHVuc2lnbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV0ID0gdW5zaWduZWRcbiAgICAgICAgICAgICAgICAgICAgPyArKGxvdyA+Pj4gMCkgKyArKGhpZ2ggPj4+IDApICogKzQyOTQ5NjcyOTZcbiAgICAgICAgICAgICAgICAgICAgOiArKGxvdyA+Pj4gMCkgKyArKGhpZ2ggfCAwKSAqICs0Mjk0OTY3Mjk2O1xuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgR0xPQkFMX0JBU0U6IDgsXG4gICAgICAgICAgICBRVUFOVFVNX1NJWkU6IDRcbiAgICAgICAgfTtcblxuICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBydW50aW1lIG1lbW9yeSAqL1xuXG4gICAgICAgIC8vIFRPRE86IEFsbG93IHVzZXIgdG8gc2V0IHVwIGhvdyBtdWNoIG1lbW9yeSBMaWJUaW1pZGl0eSBnZXQgYXQgaW5pdGlhbGl6YXRpb25cbiAgICAgICAgLy8gb3JpZ2luYWwgYW1vdW50IG9mIG1lbW9yeSB3YXMgNjcxMDg4NjRcbiAgICAgICAgY29uc3QgVE9UQUxfTUVNT1JZID0gNjcxMDg4NjQgKiA4O1xuICAgICAgICBjb25zdCBQQUdFX1NJWkUgPSA0MDk2O1xuXG4gICAgICAgIGxldCBIRUFQOCwgSEVBUFU4LCBIRUFQMTYsIEhFQVBVMTYsIEhFQVAzMiwgSEVBUFUzMiwgSEVBUEYzMiwgSEVBUEY2NDtcbiAgICAgICAgbGV0IFNUQVRJQ19CQVNFID0gMCxcbiAgICAgICAgICAgIFNUQVRJQ1RPUCA9IDA7XG4gICAgICAgIGxldCBTVEFDS19CQVNFID0gMCxcbiAgICAgICAgICAgIFNUQUNLVE9QID0gMCxcbiAgICAgICAgICAgIFNUQUNLX01BWCA9IDA7IC8vIHN0YWNrIGFyZWFcbiAgICAgICAgbGV0IERZTkFNSUNfQkFTRSA9IDAsXG4gICAgICAgICAgICBEWU5BTUlDVE9QID0gMDsgLy8gZHluYW1pYyBhcmVhIGhhbmRsZWQgYnkgc2Jya1xuXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICAgIHR5cGVvZiBJbnQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBGbG9hdDY0QXJyYXkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgISFuZXcgSW50MzJBcnJheSgxKVsnc3ViYXJyYXknXSAmJlxuICAgICAgICAgICAgICAgICEhbmV3IEludDMyQXJyYXkoMSlbJ3NldCddLFxuICAgICAgICAgICAgJ1R5cGVkIGFycmF5cyBub3Qgc3VwcG9ydGVkLidcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoVE9UQUxfTUVNT1JZKTtcbiAgICAgICAgSEVBUDggPSBuZXcgSW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIEhFQVAxNiA9IG5ldyBJbnQxNkFycmF5KGJ1ZmZlcik7XG4gICAgICAgIEhFQVAzMiA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlcik7XG4gICAgICAgIEhFQVBVOCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIEhFQVBVMTYgPSBuZXcgVWludDE2QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgSEVBUFUzMiA9IG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuICAgICAgICBIRUFQRjMyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIpO1xuICAgICAgICBIRUFQRjY0ID0gbmV3IEZsb2F0NjRBcnJheShidWZmZXIpO1xuXG4gICAgICAgIC8vIEVuZGlhbm5lc3MgY2hlY2sgKG5vdGU6IGFzc3VtZXMgY29tcGlsZXIgYXJjaCB3YXMgbGl0dGxlLWVuZGlhbilcbiAgICAgICAgSEVBUDMyWzBdID0gMjU1O1xuICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICBIRUFQVThbMF0gPT09IDI1NSAmJiBIRUFQVThbM10gPT09IDAsXG4gICAgICAgICAgICAnVHlwZWQgYXJyYXlzIDIgbXVzdCBiZSBydW4gb24gYSBsaXR0bGUtZW5kaWFuIHN5c3RlbSdcbiAgICAgICAgKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGZ1bmN0aW9uIGFsaWduTWVtb3J5UGFnZVxuICAgICAgICAgKiBAbWVtYmVyb2YgTGliVGlNaWRpdHlcbiAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gICAgICAgICAqL1xuXG4gICAgICAgIGZ1bmN0aW9uIGFsaWduTWVtb3J5UGFnZSh4KSB7XG4gICAgICAgICAgICByZXR1cm4gKHggKyA0MDk1KSAmIC00MDk2O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgTW9kdWxlID0ge307XG4gICAgICAgIHRoaXMuTW9kdWxlID0gTW9kdWxlO1xuXG4gICAgICAgIE1vZHVsZS5hcmd1bWVudHMgPSBhcmd1bWVudHM7XG5cbiAgICAgICAgaWYgKCFNb2R1bGVbJ2FyZ3VtZW50cyddKSB7XG4gICAgICAgICAgICBNb2R1bGVbJ2FyZ3VtZW50cyddID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBNb2R1bGUucmVhZCA9IGZ1bmN0aW9uKHVybCkge1xuICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICB4aHIub3BlbignR0VUJywgdXJsLCBmYWxzZSk7XG4gICAgICAgICAgICB4aHIuc2VuZChudWxsKTtcbiAgICAgICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIE1vZHVsZS5wcmludCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICAgICAgICB9O1xuXG4gICAgICAgIE1vZHVsZS5wcmVSdW4gPSBbXTtcbiAgICAgICAgTW9kdWxlLnBvc3RSdW4gPSBbXTtcblxuICAgICAgICAvLyBXaGV0aGVyIHdlIGFyZSBxdWl0dGluZyB0aGUgYXBwbGljYXRpb24uIElmIHNvLCBubyBtb3JlIGNvZGUgc2hvdWxkIHJ1bi5cbiAgICAgICAgdmFyIEFCT1JUID0gZmFsc2U7XG4gICAgICAgIGxldCB0ZW1wSTY0O1xuXG4gICAgICAgIGZ1bmN0aW9uIEV4aXRTdGF0dXMoc3RhdHVzKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSAnRXhpdFN0YXR1cyc7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgnICsgc3RhdHVzICsgJyknO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIH1cblxuICAgICAgICBFeGl0U3RhdHVzLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICBFeGl0U3RhdHVzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEV4aXRTdGF0dXM7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEV4aXRzIHRoZSBzY3JpcHQuXG4gICAgICAgICAqIEBmdW5jdGlvbiBleGl0XG4gICAgICAgICAqIEBtZW1iZXJvZiBMaWJUaU1pZGl0eVxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0YXR1cyBUaGUgbWVzc2FnZSB0byBkaXNwbGF5LlxuICAgICAgICAgKi9cblxuICAgICAgICBmdW5jdGlvbiBleGl0KHN0YXR1cykge1xuICAgICAgICAgICAgQUJPUlQgPSB0cnVlO1xuICAgICAgICAgICAgU1RBQ0tUT1AgPSBpbml0aWFsU3RhY2tUb3A7XG4gICAgICAgICAgICAvLyBleGl0IHRoZSBydW50aW1lXG4gICAgICAgICAgICBleGl0UnVudGltZSgpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV4aXRTdGF0dXMoc3RhdHVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIE1vZHVsZS5leGl0ID0gZXhpdDtcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhyb3dzIGFuIGVycm9yIHRoYXQgYWJvcnRzIHRoZSBleGVjdXRpb24gb2YgdGhlIHNjcmlwdC5cbiAgICAgICAgICogQGZ1bmN0aW9uIGFib3J0XG4gICAgICAgICAqIEBtZW1iZXJvZiBMaWJUaU1pZGl0eVxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGhlIG1lc3NhZ2UgdG8gZGlzcGxheS5cbiAgICAgICAgICovXG5cbiAgICAgICAgZnVuY3Rpb24gYWJvcnQodGV4dCkge1xuICAgICAgICAgICAgQUJPUlQgPSB0cnVlO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRleHQpLnN0YWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgTW9kdWxlLmFib3J0ID0gYWJvcnQ7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFib3J0cyB0aGUgZXhlY3V0aW9uIG9mIHRoZSBzY3JpcHQgaWYgYXNzZXJ0aW9uIGZhaWxzLlxuICAgICAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0XG4gICAgICAgICAqIEBtZW1iZXJvZiBMaWJUaU1pZGl0eVxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBjb25kaXRpb24gVGhlIGFzc2VydGlvbiB0byB0ZXN0LlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUaGUgbWVzc2FnZSB0byBkaXNwbGF5IGlmIHRoZSBhc3NlcnRpb24gZmFpbHMuXG4gICAgICAgICAqL1xuXG4gICAgICAgIGZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIHRleHQpIHtcbiAgICAgICAgICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgYWJvcnQodGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBNb2R1bGUuYXNzZXJ0ID0gYXNzZXJ0O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHdyYXBwZXIgdG8gY2FsbCBmdW5jdGlvbnMuXG4gICAgICAgICAqIEBmdW5jdGlvbiBjYWxsXG4gICAgICAgICAqIEBtZW1iZXJvZiBMaWJUaU1pZGl0eVxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlkZW50IFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsLlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmV0dXJuVHlwZSBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uLCBvbmUgb2YgdGhlIEpTIHR5cGVzICdudW1iZXInLCAnc3RyaW5nJyBvciAnYXJyYXknICh1c2UgJ251bWJlcicgZm9yIGFueSBDIHBvaW50ZXIsIGFuZCAnYXJyYXknIGZvciBKYXZhU2NyaXB0IGFycmF5cyBhbmQgdHlwZWQgYXJyYXlzOyBub3RlIHRoYXQgYXJyYXlzIGFyZSA4LWJpdCkuXG4gICAgICAgICAqIEBwYXJhbSB7YXJyYXl9IGFyZ1R5cGVzIEFuIGFycmF5IG9mIHRoZSB0eXBlcyBvZiBhcmd1bWVudHMgZm9yIHRoZSBmdW5jdGlvbiAoaWYgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cywgdGhpcyBjYW4gYmUgb21taXR0ZWQpLiBUeXBlcyBhcmUgYXMgaW4gcmV0dXJuVHlwZSwgZXhjZXB0IHRoYXQgJ2FycmF5JyBpcyBub3QgcG9zc2libGUgKHRoZXJlIGlzIG5vIHdheSBmb3IgdXMgdG8ga25vdyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSlcbiAgICAgICAgICogQHBhcmFtIHthcnJheX0gYXJncyBBbiBhcnJheSBvZiB0aGUgYXJndW1lbnRzIHRvIHRoZSBmdW5jdGlvbiwgYXMgbmF0aXZlIEpTIHZhbHVlcyAoYXMgaW4gcmV0dXJuVHlwZSkuIE5vdGUgdGhhdCBzdHJpbmcgYXJndW1lbnRzIHdpbGwgYmUgc3RvcmVkIG9uIHRoZSBzdGFjayAodGhlIEpTIHN0cmluZyB3aWxsIGJlY29tZSBhIEMgc3RyaW5nIG9uIHRoZSBzdGFjaykuXG4gICAgICAgICAqIEByZXR1cm4gTmF0aXZlIEpTIHZhbHVlIChhcyBpbiByZXR1cm5UeXBlKVxuICAgICAgICAgKi9cblxuICAgICAgICBNb2R1bGUuY2FsbCA9IGZ1bmN0aW9uIGNhbGwoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBhcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBmdW5jID0gTW9kdWxlWydfJyArIGlkZW50XTtcbiAgICAgICAgICAgIGlmICghZnVuYykge1xuICAgICAgICAgICAgICAgIGFib3J0KGBVbmtub3duIGZ1bmN0aW9uOiBcIiR7aWRlbnR9XCIuYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBzdGFjayA9IDA7XG4gICAgICAgICAgICBmdW5jdGlvbiB0b0ModmFsdWUsIHR5cGUpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOyAvLyBudWxsIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGludEFycmF5RnJvbVN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSAnYXJyYXknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2spIHN0YWNrID0gUnVudGltZS5zdGFja1NhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV0ID0gUnVudGltZS5zdGFja0FsbG9jKHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlQXJyYXlUb01lbW9yeSh2YWx1ZSwgcmV0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBmcm9tQyh2YWx1ZSwgdHlwZSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQb2ludGVyX3N0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzc2VydCh0eXBlICE9ICdhcnJheScpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgY29uc3QgY0FyZ3MgPSBhcmdzXG4gICAgICAgICAgICAgICAgPyBhcmdzLm1hcChmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9DKGFyZywgYXJnVHlwZXNbaSsrXSk7XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogW107XG4gICAgICAgICAgICB2YXIgcmV0ID0gZnJvbUMoZnVuYy5hcHBseShudWxsLCBjQXJncyksIHJldHVyblR5cGUpO1xuICAgICAgICAgICAgaWYgKHN0YWNrKSBSdW50aW1lLnN0YWNrUmVzdG9yZShzdGFjayk7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEeW5hbWljYWxseSBzZXRzIGEgdmFsdWUgaW4gbWVtb3J5IGF0IHJ1bnRpbWUuIE9ubHkgZG9lcyAqYWxpZ25lZCogd3JpdGVzLiBUaGlzIGlzIGEgbG93ZXItbGV2ZWwgb3BlcmF0aW9uLlxuICAgICAgICAgKiBAZnVuY3Rpb24gc2V0VmFsdWVcbiAgICAgICAgICogQG1lbWJlcm9mIExpYlRpTWlkaXR5XG4gICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgKiBAcGFyYW0gcHRyIFBvaW50ZXIuXG4gICAgICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBMTFZNIHR5cGUgKCdpOCcsICwgJ2kxNicsICdpMzInLCAnaTY0JywgJ2Zsb2F0JywgJ2RvdWJsZScpXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBzZXRWYWx1ZShwdHIsIHZhbHVlLCB0eXBlKSB7XG4gICAgICAgICAgICB0eXBlID0gdHlwZSB8fCAnaTgnO1xuICAgICAgICAgICAgaWYgKHR5cGUuY2hhckF0KHR5cGUubGVuZ3RoIC0gMSkgPT09ICcqJykgdHlwZSA9ICdpMzInOyAvLyBwb2ludGVycyBhcmUgMzItYml0XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdpMSc6XG4gICAgICAgICAgICAgICAgICAgIEhFQVA4W3B0cl0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnaTgnOlxuICAgICAgICAgICAgICAgICAgICBIRUFQOFtwdHJdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2kxNic6XG4gICAgICAgICAgICAgICAgICAgIEhFQVAxNltwdHIgPj4gMV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnaTMyJzpcbiAgICAgICAgICAgICAgICAgICAgSEVBUDMyW3B0ciA+PiAyXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdpNjQnOlxuICAgICAgICAgICAgICAgICAgICAodGVtcEk2NCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID4+PiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgKCh0ZW1wRG91YmxlID0gdmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgK01hdGhfYWJzKHRlbXBEb3VibGUpID49ICsxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0ZW1wRG91YmxlID4gKzBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoTWF0aF9taW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICtNYXRoX2Zsb29yKHRlbXBEb3VibGUgLyArNDI5NDk2NzI5NiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs0Mjk0OTY3Mjk1XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID4+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB+fitNYXRoX2NlaWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZW1wRG91YmxlIC0gKyh+fnRlbXBEb3VibGUgPj4+IDApKSAvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArNDI5NDk2NzI5NlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPj4+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDApXG4gICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKEhFQVAzMltwdHIgPj4gMl0gPSB0ZW1wSTY0WzBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChIRUFQMzJbKHB0ciArIDQpID4+IDJdID0gdGVtcEk2NFsxXSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICAgICAgICAgICAgICAgICAgSEVBUEYzMltwdHIgPj4gMl0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZG91YmxlJzpcbiAgICAgICAgICAgICAgICAgICAgSEVBUEY2NFtwdHIgPj4gM10gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoJ2ludmFsaWQgdHlwZSBmb3Igc2V0VmFsdWU6ICcgKyB0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBNb2R1bGUuc2V0VmFsdWUgPSBzZXRWYWx1ZTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogRHluYW1pY2FsbHkgZ2V0cyBhIHZhbHVlIGluIG1lbW9yeSBhdCBydW50aW1lLiBPbmx5IGRvZXMgKmFsaWduZWQqIHJlYWRzLiBUaGlzIGlzIGEgbG93ZXItbGV2ZWwgb3BlcmF0aW9uLlxuICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VmFsdWVcbiAgICAgICAgICogQG1lbWJlcm9mIExpYlRpTWlkaXR5XG4gICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgKiBAcGFyYW0gcHRyIFBvaW50ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIExMVk0gdHlwZSAoJ2k4JywgLCAnaTE2JywgJ2kzMicsICdpNjQnLCAnZmxvYXQnLCAnZG91YmxlJylcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdldFZhbHVlKHB0ciwgdHlwZSkge1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2k4JztcbiAgICAgICAgICAgIGlmICh0eXBlLmNoYXJBdCh0eXBlLmxlbmd0aCAtIDEpID09PSAnKicpIHR5cGUgPSAnaTMyJzsgLy8gcG9pbnRlcnMgYXJlIDMyLWJpdFxuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnaTEnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSEVBUDhbcHRyXTtcbiAgICAgICAgICAgICAgICBjYXNlICdpOCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBIRUFQOFtwdHJdO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2kxNic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBIRUFQMTZbcHRyID4+IDFdO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2kzMic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBIRUFQMzJbcHRyID4+IDJdO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2k2NCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBIRUFQMzJbcHRyID4+IDJdO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEhFQVBGMzJbcHRyID4+IDJdO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBIRUFQRjY0W3B0ciA+PiAzXTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBhYm9ydCgnaW52YWxpZCB0eXBlIGZvciBnZXRWYWx1ZTogJyArIHR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBNb2R1bGVbJ2dldFZhbHVlJ10gPSBnZXRWYWx1ZTtcblxuICAgICAgICBjb25zdCBBTExPQ19OT1JNQUwgPSAwOyAvLyBUcmllcyB0byB1c2UgX21hbGxvYygpXG4gICAgICAgIGNvbnN0IEFMTE9DX1NUQUNLID0gMTsgLy8gTGl2ZXMgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY3VycmVudCBmdW5jdGlvbiBjYWxsXG4gICAgICAgIGNvbnN0IEFMTE9DX1NUQVRJQyA9IDI7IC8vIENhbm5vdCBiZSBmcmVlZFxuICAgICAgICBjb25zdCBBTExPQ19EWU5BTUlDID0gMzsgLy8gQ2Fubm90IGJlIGZyZWVkIGV4Y2VwdCB0aHJvdWdoIHNicmtcbiAgICAgICAgY29uc3QgQUxMT0NfTk9ORSA9IDQ7IC8vIERvIG5vdCBhbGxvY2F0ZVxuICAgICAgICBNb2R1bGVbJ0FMTE9DX05PUk1BTCddID0gQUxMT0NfTk9STUFMO1xuICAgICAgICBNb2R1bGVbJ0FMTE9DX1NUQUNLJ10gPSBBTExPQ19TVEFDSztcbiAgICAgICAgTW9kdWxlWydBTExPQ19TVEFUSUMnXSA9IEFMTE9DX1NUQVRJQztcbiAgICAgICAgTW9kdWxlWydBTExPQ19EWU5BTUlDJ10gPSBBTExPQ19EWU5BTUlDO1xuICAgICAgICBNb2R1bGVbJ0FMTE9DX05PTkUnXSA9IEFMTE9DX05PTkU7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgaXMgZm9yIGludGVybmFsIHVzZS4gT3B0aW1pemVkIGZvciBtdWx0aXBsZSBzeW50YXhlcyB0byBzYXZlIHNwYWNlIGluIGdlbmVyYXRlZCBjb2RlLiBZb3Ugc2hvdWxkIGFsbG9jYXRlIG1lbW9yeSB1c2luZyBfbWFsbG9jKCksIGluaXRpYWxpemUgaXQgd2l0aCBzZXRWYWx1ZSgpLCBhbmQgc28gZm9ydGguXG4gICAgICAgICAqIEBmdW5jdGlvbiBhbGxvY2F0ZVxuICAgICAgICAgKiBAbWVtYmVyb2YgTGliVGlNaWRpdHlcbiAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAqIEBwYXJhbSBzbGFiIEFuIGFycmF5IG9mIGRhdGEgb3IgYSBudW1iZXIuIElmIGEgbnVtYmVyLCB0aGVuIHRoZSBzaXplIG9mIHRoZSBibG9jayB0byBhbGxvY2F0ZSBpbiAqYnl0ZXMqIChub3RlIHRoYXQgdGhpcyBpcyBzb21ldGltZXMgY29uZnVzaW5nOiB0aGUgbmV4dCBwYXJhbWV0ZXIgZG9lcyBub3QgYWZmZWN0IHRoaXMpLlxuICAgICAgICAgKiBAcGFyYW0gdHlwZXMgRWl0aGVyIGFuIGFycmF5IG9mIHR5cGVzLCBvbmUgZm9yIGVhY2ggYnl0ZSAob3IgMCBpZiBubyB0eXBlIGF0IHRoYXQgcG9zaXRpb24pLCBvciBhIHNpbmdsZSB0eXBlIHdoaWNoIGlzIHVzZWQgZm9yIHRoZSBlbnRpcmUgYmxvY2suIFRoaXMgb25seSBtYXR0ZXJzIGlmIHRoZXJlIGlzIGluaXRpYWwgZGF0YS4gSWYgc2xhYiBpcyBhIG51bWJlciwgdGhlbiB0aGlzIGRvZXMgbm90IG1hdHRlciBhdCBhbGwgYW5kIGlzIGlnbm9yZWQuXG4gICAgICAgICAqIEBwYXJhbSBhbGxvY2F0b3IgSG93IHRvIGFsbG9jYXRlIG1lbW9yeSwgc2VlIEFMTE9DXypcbiAgICAgICAgICovXG5cbiAgICAgICAgZnVuY3Rpb24gYWxsb2NhdGUoc2xhYiwgdHlwZXMsIGFsbG9jYXRvciwgcHRyKSB7XG4gICAgICAgICAgICBsZXQgemVyb2luaXQsIHNpemU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNsYWIgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgemVyb2luaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNpemUgPSBzbGFiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB6ZXJvaW5pdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNpemUgPSBzbGFiLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNpbmdsZVR5cGUgPSB0eXBlb2YgdHlwZXMgPT09ICdzdHJpbmcnID8gdHlwZXMgOiBudWxsO1xuICAgICAgICAgICAgbGV0IHJldDtcbiAgICAgICAgICAgIGlmIChhbGxvY2F0b3IgPT0gQUxMT0NfTk9ORSkge1xuICAgICAgICAgICAgICAgIHJldCA9IHB0cjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0ID0gW1xuICAgICAgICAgICAgICAgICAgICBfbWFsbG9jLFxuICAgICAgICAgICAgICAgICAgICBSdW50aW1lLnN0YWNrQWxsb2MsXG4gICAgICAgICAgICAgICAgICAgIFJ1bnRpbWUuc3RhdGljQWxsb2MsXG4gICAgICAgICAgICAgICAgICAgIFJ1bnRpbWUuZHluYW1pY0FsbG9jXG4gICAgICAgICAgICAgICAgXVthbGxvY2F0b3IgPT09IHVuZGVmaW5lZCA/IEFMTE9DX1NUQVRJQyA6IGFsbG9jYXRvcl0oXG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KHNpemUsIHNpbmdsZVR5cGUgPyAxIDogdHlwZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoemVyb2luaXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgcHRyID0gcmV0LFxuICAgICAgICAgICAgICAgICAgICBzdG9wO1xuICAgICAgICAgICAgICAgIGFzc2VydCgocmV0ICYgMykgPT0gMCk7XG4gICAgICAgICAgICAgICAgc3RvcCA9IHJldCArIChzaXplICYgfjMpO1xuICAgICAgICAgICAgICAgIGZvciAoOyBwdHIgPCBzdG9wOyBwdHIgKz0gNCkge1xuICAgICAgICAgICAgICAgICAgICBIRUFQMzJbcHRyID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RvcCA9IHJldCArIHNpemU7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHB0ciA8IHN0b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgSEVBUDhbcHRyKysgfCAwXSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2luZ2xlVHlwZSA9PT0gJ2k4Jykge1xuICAgICAgICAgICAgICAgIGlmIChzbGFiLnN1YmFycmF5IHx8IHNsYWIuc2xpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgSEVBUFU4LnNldChzbGFiLCByZXQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIEhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoc2xhYiksIHJldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaSA9IDAsXG4gICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICB0eXBlU2l6ZSxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1R5cGU7XG4gICAgICAgICAgICB3aGlsZSAoaSA8IHNpemUpIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VyciA9IHNsYWJbaV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnIgPSBSdW50aW1lLmdldEZ1bmN0aW9uSW5kZXgoY3Vycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHR5cGUgPSBzaW5nbGVUeXBlIHx8IHR5cGVzW2ldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09ICdpNjQnKSB0eXBlID0gJ2kzMic7IC8vIHNwZWNpYWwgY2FzZTogd2UgaGF2ZSBvbmUgaTMyIGhlcmUsIGFuZCBvbmUgaTMyIGxhdGVyXG4gICAgICAgICAgICAgICAgc2V0VmFsdWUocmV0ICsgaSwgY3VyciwgdHlwZSk7XG4gICAgICAgICAgICAgICAgLy8gbm8gbmVlZCB0byBsb29rIHVwIHNpemUgdW5sZXNzIHR5cGUgY2hhbmdlcywgc28gY2FjaGUgaXRcbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNUeXBlICE9PSB0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGVTaXplID0gUnVudGltZS5nZXROYXRpdmVUeXBlU2l6ZSh0eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNUeXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaSArPSB0eXBlU2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cblxuICAgICAgICBNb2R1bGVbJ2FsbG9jYXRlJ10gPSBhbGxvY2F0ZTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGZ1bmN0aW9uIFBvaW50ZXJfc3RyaW5naWZ5XG4gICAgICAgICAqIEBtZW1iZXJvZiBMaWJUaU1pZGl0eVxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHBhcmFtIHB0ciBQb2ludGVyLlxuICAgICAgICAgKiBAcGFyYW0geyp9IFtsZW5ndGhdXG4gICAgICAgICAqL1xuXG4gICAgICAgIGZ1bmN0aW9uIFBvaW50ZXJfc3RyaW5naWZ5KHB0ciwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiB1c2UgVGV4dERlY29kZXJcbiAgICAgICAgICAgIC8vIEZpbmQgdGhlIGxlbmd0aCwgYW5kIGNoZWNrIGZvciBVVEYgd2hpbGUgZG9pbmcgc29cbiAgICAgICAgICAgIGxldCBoYXNVdGYgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCB0O1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICB0ID0gSEVBUFU4WyhwdHIgKyBpKSB8IDBdO1xuICAgICAgICAgICAgICAgIGlmICh0ID49IDEyOCkgaGFzVXRmID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0ID09IDAgJiYgIWxlbmd0aCkgYnJlYWs7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggJiYgaSA9PSBsZW5ndGgpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFsZW5ndGgpIGxlbmd0aCA9IGk7XG4gICAgICAgICAgICBsZXQgcmV0ID0gJyc7XG4gICAgICAgICAgICBpZiAoIWhhc1V0Zikge1xuICAgICAgICAgICAgICAgIGNvbnN0IE1BWF9DSFVOSyA9IDEwMjQ7IC8vIHNwbGl0IHVwIGludG8gY2h1bmtzLCBiZWNhdXNlIC5hcHBseSBvbiBhIGh1Z2Ugc3RyaW5nIGNhbiBvdmVyZmxvdyB0aGUgc3RhY2tcbiAgICAgICAgICAgICAgICBsZXQgY3VycjtcbiAgICAgICAgICAgICAgICB3aGlsZSAobGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyID0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIEhFQVBVOC5zdWJhcnJheShwdHIsIHB0ciArIE1hdGgubWluKGxlbmd0aCwgTUFYX0NIVU5LKSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0ID0gcmV0ID8gcmV0ICsgY3VyciA6IGN1cnI7XG4gICAgICAgICAgICAgICAgICAgIHB0ciArPSBNQVhfQ0hVTks7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCAtPSBNQVhfQ0hVTks7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB1dGY4ID0gbmV3IFJ1bnRpbWUuVVRGOFByb2Nlc3NvcigpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IEhFQVBVOFsocHRyICsgaSkgfCAwXTtcbiAgICAgICAgICAgICAgICByZXQgKz0gdXRmOC5wcm9jZXNzQ0NoYXIodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG5cbiAgICAgICAgTW9kdWxlWydQb2ludGVyX3N0cmluZ2lmeSddID0gUG9pbnRlcl9zdHJpbmdpZnk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBmdW5jdGlvbiBVVEYxNlRvU3RyaW5nXG4gICAgICAgICAqIEBtZW1iZXJvZiBMaWJUaU1pZGl0eVxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHBhcmFtIHB0ciBQb2ludGVyIHRvIGEgbnVsbC10ZXJtaW5hdGVkIFVURjE2TEUtZW5jb2RlZCBzdHJpbmcgaW4gdGhlIGVtc2NyaXB0ZW4gSEVBUC5cbiAgICAgICAgICovXG5cbiAgICAgICAgZnVuY3Rpb24gVVRGMTZUb1N0cmluZyhwdHIpIHtcbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIGxldCBzdHIgPSAnJztcbiAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29kZVVuaXQgPSBIRUFQMTZbKHB0ciArIGkgKiAyKSA+PiAxXTtcbiAgICAgICAgICAgICAgICBpZiAoY29kZVVuaXQgPT0gMCkgcmV0dXJuIHN0cjtcbiAgICAgICAgICAgICAgICArK2k7XG4gICAgICAgICAgICAgICAgLy8gZnJvbUNoYXJDb2RlIGNvbnN0cnVjdHMgYSBjaGFyYWN0ZXIgZnJvbSBhIFVURi0xNiBjb2RlIHVuaXQsIHNvIHdlIGNhbiBwYXNzIHRoZSBVVEYxNiBzdHJpbmcgcmlnaHQgdGhyb3VnaC5cbiAgICAgICAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlVW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBNb2R1bGVbJ1VURjE2VG9TdHJpbmcnXSA9IFVURjE2VG9TdHJpbmc7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvcGllcyBhIEphdmFTY3JpcHQgc3RyaW5nIHRvIHRoZSBlbXNjcmlwdGVuIEhFQVAuIFRoZSBjb3B5IGlzIG51bGwtdGVybWluYXRlZCBhbmQgZW5jb2RlZCBpbiBVVEYxNkxFIGZvcm0uIFRoZSBjb3B5IHdpbGwgcmVxdWlyZSBhdCBtb3N0IChzdHIubGVuZ3RoKjIrMSkqMiBieXRlcyBvZiBzcGFjZSBpbiB0aGUgSEVBUC5cbiAgICAgICAgICogQGZ1bmN0aW9uIHN0cmluZ1RvVVRGMTZcbiAgICAgICAgICogQG1lbWJlcm9mIExpYlRpTWlkaXR5XG4gICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyIEphdmFTY3JpcHQgc3RyaW5nLlxuICAgICAgICAgKiBAcGFyYW0gb3V0UHRyIEhFQVAgYWRkcmVzcyAocG9pbnRlcikuXG4gICAgICAgICAqL1xuXG4gICAgICAgIGZ1bmN0aW9uIHN0cmluZ1RvVVRGMTYoc3RyLCBvdXRQdHIpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgLy8gY2hhckNvZGVBdCByZXR1cm5zIGEgVVRGLTE2IGVuY29kZWQgY29kZSB1bml0LCBzbyBpdCBjYW4gYmUgZGlyZWN0bHkgd3JpdHRlbiB0byB0aGUgSEVBUC5cbiAgICAgICAgICAgICAgICBjb25zdCBjb2RlVW5pdCA9IHN0ci5jaGFyQ29kZUF0KGkpOyAvLyBwb3NzaWJseSBhIGxlYWQgc3Vycm9nYXRlXG4gICAgICAgICAgICAgICAgSEVBUDE2WyhvdXRQdHIgKyBpICogMikgPj4gMV0gPSBjb2RlVW5pdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE51bGwtdGVybWluYXRlIHRoZSBwb2ludGVyIHRvIHRoZSBIRUFQLlxuICAgICAgICAgICAgSEVBUDE2WyhvdXRQdHIgKyBzdHIubGVuZ3RoICogMikgPj4gMV0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgTW9kdWxlWydzdHJpbmdUb1VURjE2J10gPSBzdHJpbmdUb1VURjE2O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZnVuY3Rpb24gVVRGMzJUb1N0cmluZ1xuICAgICAgICAgKiBAbWVtYmVyb2YgTGliVGlNaWRpdHlcbiAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAqIEBwYXJhbSBwdHIgUG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZCBVVEYzMkxFLWVuY29kZWQgc3RyaW5nIGluIHRoZSBlbXNjcmlwdGVuIEhFQVAuXG4gICAgICAgICAqIEByZXR1cm5cbiAgICAgICAgICovXG5cbiAgICAgICAgZnVuY3Rpb24gVVRGMzJUb1N0cmluZyhwdHIpIHtcbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIGxldCBzdHIgPSAnJztcbiAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXRmMzIgPSBIRUFQMzJbKHB0ciArIGkgKiA0KSA+PiAyXTtcbiAgICAgICAgICAgICAgICBpZiAodXRmMzIgPT0gMCkgcmV0dXJuIHN0cjtcbiAgICAgICAgICAgICAgICArK2k7XG4gICAgICAgICAgICAgICAgLy8gR290Y2hhOiBmcm9tQ2hhckNvZGUgY29uc3RydWN0cyBhIGNoYXJhY3RlciBmcm9tIGEgVVRGLTE2IGVuY29kZWQgY29kZSAocGFpciksIG5vdCBmcm9tIGEgVW5pY29kZSBjb2RlIHBvaW50ISBTbyBlbmNvZGUgdGhlIGNvZGUgcG9pbnQgdG8gVVRGLTE2IGZvciBjb25zdHJ1Y3RpbmcuXG4gICAgICAgICAgICAgICAgaWYgKHV0ZjMyID49IDB4MTAwMDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2ggPSB1dGYzMiAtIDB4MTAwMDA7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuICAgICAgICAgICAgICAgICAgICAgICAgMHhkODAwIHwgKGNoID4+IDEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDB4ZGMwMCB8IChjaCAmIDB4M2ZmKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHV0ZjMyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBNb2R1bGVbJ1VURjMyVG9TdHJpbmcnXSA9IFVURjMyVG9TdHJpbmc7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvcGllcyBhIEphdmFTY3JpcHQgc3RyaW5nIHRvIHRoZSBlbXNjcmlwdGVuIEhFQVAuIFRoZSBjb3B5IGlzIG51bGwtdGVybWluYXRlZCBhbmQgZW5jb2RlZCBpbiBVVEYzMkxFIGZvcm0uIFRoZSBjb3B5IHdpbGwgcmVxdWlyZSBhdCBtb3N0IChzdHIubGVuZ3RoKzEpKjQgYnl0ZXMgb2Ygc3BhY2UgaW4gdGhlIEhFQVAuXG4gICAgICAgICAqIEBmdW5jdGlvbiBzdHJpbmdUb1VURjMyXG4gICAgICAgICAqIEBtZW1iZXJvZiBMaWJUaU1pZGl0eVxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0ciBKYXZhU2NyaXB0IHN0cmluZy5cbiAgICAgICAgICogQHBhcmFtIG91dFB0ciBIRUFQIGFkZHJlc3MgKHBvaW50ZXIpLlxuICAgICAgICAgKi9cblxuICAgICAgICBmdW5jdGlvbiBzdHJpbmdUb1VURjMyKHN0ciwgb3V0UHRyKSB7XG4gICAgICAgICAgICBsZXQgaUNoYXIgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaUNvZGVVbml0ID0gMDsgaUNvZGVVbml0IDwgc3RyLmxlbmd0aDsgKytpQ29kZVVuaXQpIHtcbiAgICAgICAgICAgICAgICAvLyBHb3RjaGE6IGNoYXJDb2RlQXQgcmV0dXJucyBhIDE2LWJpdCB3b3JkIHRoYXQgaXMgYSBVVEYtMTYgZW5jb2RlZCBjb2RlIHVuaXQsIG5vdCBhIFVuaWNvZGUgY29kZSBwb2ludCBvZiB0aGUgY2hhcmFjdGVyISBXZSBtdXN0IGRlY29kZSB0aGUgc3RyaW5nIHRvIFVURi0zMiB0byB0aGUgaGVhcC5cbiAgICAgICAgICAgICAgICBsZXQgY29kZVVuaXQgPSBzdHIuY2hhckNvZGVBdChpQ29kZVVuaXQpOyAvLyBwb3NzaWJseSBhIGxlYWQgc3Vycm9nYXRlXG4gICAgICAgICAgICAgICAgaWYgKGNvZGVVbml0ID49IDB4ZDgwMCAmJiBjb2RlVW5pdCA8PSAweGRmZmYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhaWxTdXJyb2dhdGUgPSBzdHIuY2hhckNvZGVBdCgrK2lDb2RlVW5pdCk7XG4gICAgICAgICAgICAgICAgICAgIGNvZGVVbml0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMDAwICsgKChjb2RlVW5pdCAmIDB4M2ZmKSA8PCAxMCkpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0cmFpbFN1cnJvZ2F0ZSAmIDB4M2ZmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgSEVBUDMyWyhvdXRQdHIgKyBpQ2hhciAqIDQpID4+IDJdID0gY29kZVVuaXQ7XG4gICAgICAgICAgICAgICAgKytpQ2hhcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE51bGwtdGVybWluYXRlIHRoZSBwb2ludGVyIHRvIHRoZSBIRUFQLlxuICAgICAgICAgICAgSEVBUDMyWyhvdXRQdHIgKyBpQ2hhciAqIDQpID4+IDJdID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIE1vZHVsZVsnc3RyaW5nVG9VVEYzMiddID0gc3RyaW5nVG9VVEYzMjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGZ1bmN0aW9uIGNhbGxSdW50aW1lQ2FsbGJhY2tzXG4gICAgICAgICAqIEBtZW1iZXJvZiBMaWJUaU1pZGl0eVxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHBhcmFtIGNhbGxiYWNrc1xuICAgICAgICAgKi9cblxuICAgICAgICBmdW5jdGlvbiBjYWxsUnVudGltZUNhbGxiYWNrcyhjYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHdoaWxlIChjYWxsYmFja3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gY2FsbGJhY2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmdW5jID0gY2FsbGJhY2suZnVuYztcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjay5hcmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZS5keW5DYWxsKCd2JywgZnVuYyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lLmR5bkNhbGwoJ3ZpJywgZnVuYywgW2NhbGxiYWNrLmFyZ10pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuYyhjYWxsYmFjay5hcmcgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjay5hcmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfX0FUUFJFUlVOX18gPSBbXTsgLy8gZnVuY3Rpb25zIGNhbGxlZCBiZWZvcmUgdGhlIHJ1bnRpbWUgaXMgaW5pdGlhbGl6ZWRcbiAgICAgICAgY29uc3QgX19BVElOSVRfXyA9IFtdOyAvLyBmdW5jdGlvbnMgY2FsbGVkIGR1cmluZyBzdGFydHVwXG4gICAgICAgIGNvbnN0IF9fQVRNQUlOX18gPSBbXTsgLy8gZnVuY3Rpb25zIGNhbGxlZCB3aGVuIG1haW4oKSBpcyB0byBiZSBydW5cbiAgICAgICAgdmFyIF9fQVRFWElUX18gPSBbXTsgLy8gZnVuY3Rpb25zIGNhbGxlZCBkdXJpbmcgc2h1dGRvd25cbiAgICAgICAgdmFyIF9fQVRQT1NUUlVOX18gPSBbXTsgLy8gZnVuY3Rpb25zIGNhbGxlZCBhZnRlciB0aGUgcnVudGltZSBoYXMgZXhpdGVkXG4gICAgICAgIGxldCBydW50aW1lSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgICAgICBmdW5jdGlvbiBwcmVSdW4oKSB7XG4gICAgICAgICAgICAvLyBjb21wYXRpYmlsaXR5IC0gbWVyZ2UgaW4gYW55dGhpbmcgZnJvbSBNb2R1bGVbJ3ByZVJ1biddIGF0IHRoaXMgdGltZVxuICAgICAgICAgICAgaWYgKE1vZHVsZVsncHJlUnVuJ10pIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIE1vZHVsZVsncHJlUnVuJ10gPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgICAgICAgICAgTW9kdWxlWydwcmVSdW4nXSA9IFtNb2R1bGVbJ3ByZVJ1biddXTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoTW9kdWxlWydwcmVSdW4nXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkT25QcmVSdW4oTW9kdWxlWydwcmVSdW4nXS5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUFJFUlVOX18pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZW5zdXJlSW5pdFJ1bnRpbWUoKSB7XG4gICAgICAgICAgICBpZiAocnVudGltZUluaXRpYWxpemVkKSByZXR1cm47XG4gICAgICAgICAgICBydW50aW1lSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVElOSVRfXyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwcmVNYWluKCkge1xuICAgICAgICAgICAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVE1BSU5fXyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBleGl0UnVudGltZSgpIHtcbiAgICAgICAgICAgIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRFWElUX18pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcG9zdFJ1bigpIHtcbiAgICAgICAgICAgIC8vIGNvbXBhdGliaWxpdHkgLSBtZXJnZSBpbiBhbnl0aGluZyBmcm9tIE1vZHVsZVsncG9zdFJ1biddIGF0IHRoaXMgdGltZVxuICAgICAgICAgICAgaWYgKE1vZHVsZVsncG9zdFJ1biddKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBNb2R1bGVbJ3Bvc3RSdW4nXSA9PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgICAgICAgICBNb2R1bGVbJ3Bvc3RSdW4nXSA9IFtNb2R1bGVbJ3Bvc3RSdW4nXV07XG4gICAgICAgICAgICAgICAgd2hpbGUgKE1vZHVsZVsncG9zdFJ1biddLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRPblBvc3RSdW4oTW9kdWxlWydwb3N0UnVuJ10uc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBPU1RSVU5fXyk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQGZ1bmN0aW9uIGFkZE9uUHJlUnVuXG4gICAgICAgICAqIEBtZW1iZXJvZiBMaWJUaU1pZGl0eVxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHBhcmFtIGNiIENhbGxiYWNrLlxuICAgICAgICAgKi9cblxuICAgICAgICBmdW5jdGlvbiBhZGRPblByZVJ1bihjYikge1xuICAgICAgICAgICAgX19BVFBSRVJVTl9fLnVuc2hpZnQoY2IpO1xuICAgICAgICB9XG5cbiAgICAgICAgTW9kdWxlWydhZGRPblByZVJ1biddID0gTW9kdWxlLmFkZE9uUHJlUnVuID0gYWRkT25QcmVSdW47XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBmdW5jdGlvbiBhZGRPbkluaXRcbiAgICAgICAgICogQG1lbWJlcm9mIExpYlRpTWlkaXR5XG4gICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgKiBAcGFyYW0gY2IgQ2FsbGJhY2suXG4gICAgICAgICAqL1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZE9uSW5pdChjYikge1xuICAgICAgICAgICAgX19BVElOSVRfXy51bnNoaWZ0KGNiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIE1vZHVsZVsnYWRkT25Jbml0J10gPSBhZGRPbkluaXQ7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBmdW5jdGlvbiBhZGRPblByZU1haW5cbiAgICAgICAgICogQG1lbWJlcm9mIExpYlRpTWlkaXR5XG4gICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgKiBAcGFyYW0gY2IgQ2FsbGJhY2suXG4gICAgICAgICAqL1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZE9uUHJlTWFpbihjYikge1xuICAgICAgICAgICAgX19BVE1BSU5fXy51bnNoaWZ0KGNiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIE1vZHVsZVsnYWRkT25QcmVNYWluJ10gPSBhZGRPblByZU1haW47XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBmdW5jdGlvbiBhZGRPbkV4aXRcbiAgICAgICAgICogQG1lbWJlcm9mIExpYlRpTWlkaXR5XG4gICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgKiBAcGFyYW0gY2IgQ2FsbGJhY2suXG4gICAgICAgICAqL1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZE9uRXhpdChjYikge1xuICAgICAgICAgICAgX19BVEVYSVRfXy51bnNoaWZ0KGNiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIE1vZHVsZVsnYWRkT25FeGl0J10gPSBhZGRPbkV4aXQ7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBmdW5jdGlvbiBhZGRPblBvc3RSdW5cbiAgICAgICAgICogQG1lbWJlcm9mIExpYlRpTWlkaXR5XG4gICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgKiBAcGFyYW0gY2IgQ2FsbGJhY2suXG4gICAgICAgICAqL1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZE9uUG9zdFJ1bihjYikge1xuICAgICAgICAgICAgX19BVFBPU1RSVU5fXy51bnNoaWZ0KGNiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIE1vZHVsZVsnYWRkT25Qb3N0UnVuJ10gPSBhZGRPblBvc3RSdW47XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBmdW5jdGlvbiBpbnRBcnJheUZyb21TdHJpbmdcbiAgICAgICAgICogQG1lbWJlcm9mIExpYlRpTWlkaXR5XG4gICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgKiBAcGFyYW0gc3RyaW5neVxuICAgICAgICAgKiBAcGFyYW0gZG9udEFkZE51bGxcbiAgICAgICAgICogQHBhcmFtIGxlbmd0aFxuICAgICAgICAgKi9cblxuICAgICAgICAvLyBUb29sc1xuICAgICAgICAvLyBUaGlzIHByb2Nlc3NlcyBhIEpTIHN0cmluZyBpbnRvIGEgQy1saW5lIGFycmF5IG9mIG51bWJlcnMsIDAtdGVybWluYXRlZC5cbiAgICAgICAgLy8gRm9yIExMVk0tb3JpZ2luYXRpbmcgc3RyaW5ncywgc2VlIHBhcnNlci5qczpwYXJzZUxMVk1TdHJpbmcgZnVuY3Rpb25cbiAgICAgICAgZnVuY3Rpb24gaW50QXJyYXlGcm9tU3RyaW5nKFxuICAgICAgICAgICAgc3RyaW5neSxcbiAgICAgICAgICAgIGRvbnRBZGROdWxsLFxuICAgICAgICAgICAgbGVuZ3RoIC8qIG9wdGlvbmFsICovXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gbmV3IFJ1bnRpbWUuVVRGOFByb2Nlc3NvcigpLnByb2Nlc3NKU1N0cmluZyhzdHJpbmd5KTtcbiAgICAgICAgICAgIGlmIChsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXQubGVuZ3RoID0gbGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFkb250QWRkTnVsbCkge1xuICAgICAgICAgICAgICAgIHJldC5wdXNoKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuXG4gICAgICAgIE1vZHVsZVsnaW50QXJyYXlGcm9tU3RyaW5nJ10gPSBpbnRBcnJheUZyb21TdHJpbmc7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBmdW5jdGlvbiBpbnRBcnJheVRvU3RyaW5nXG4gICAgICAgICAqIEBtZW1iZXJvZiBMaWJUaU1pZGl0eVxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHBhcmFtIGFycmF5XG4gICAgICAgICAqL1xuXG4gICAgICAgIGZ1bmN0aW9uIGludEFycmF5VG9TdHJpbmcoYXJyYXkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBjaHIgPSBhcnJheVtpXTtcbiAgICAgICAgICAgICAgICBpZiAoY2hyID4gMHhmZikge1xuICAgICAgICAgICAgICAgICAgICBjaHIgJj0gMHhmZjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaHIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXQuam9pbignJyk7XG4gICAgICAgIH1cblxuICAgICAgICBNb2R1bGVbJ2ludEFycmF5VG9TdHJpbmcnXSA9IGludEFycmF5VG9TdHJpbmc7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBmdW5jdGlvbiB3cml0ZVN0cmluZ1RvTWVtb3J5XG4gICAgICAgICAqIEBtZW1iZXJvZiBMaWJUaU1pZGl0eVxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHBhcmFtIHN0cmluZ1xuICAgICAgICAgKiBAcGFyYW0gYnVmZmVyXG4gICAgICAgICAqIEBwYXJhbSBkb250QWRkTnVsbFxuICAgICAgICAgKi9cblxuICAgICAgICAvLyBXcml0ZSBhIEphdmFzY3JpcHQgYXJyYXkgdG8gc29tZXdoZXJlIGluIHRoZSBoZWFwXG4gICAgICAgIGZ1bmN0aW9uIHdyaXRlU3RyaW5nVG9NZW1vcnkoc3RyaW5nLCBidWZmZXIsIGRvbnRBZGROdWxsKSB7XG4gICAgICAgICAgICBjb25zdCBhcnJheSA9IGludEFycmF5RnJvbVN0cmluZyhzdHJpbmcsIGRvbnRBZGROdWxsKTtcbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIHdoaWxlIChpIDwgYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hyID0gYXJyYXlbaV07XG4gICAgICAgICAgICAgICAgSEVBUDhbKGJ1ZmZlciArIGkpIHwgMF0gPSBjaHI7XG4gICAgICAgICAgICAgICAgaSA9IGkgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgTW9kdWxlWyd3cml0ZVN0cmluZ1RvTWVtb3J5J10gPSB3cml0ZVN0cmluZ1RvTWVtb3J5O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZnVuY3Rpb24gd3JpdGVBcnJheVRvTWVtb3J5XG4gICAgICAgICAqIEBtZW1iZXJvZiBMaWJUaU1pZGl0eVxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHBhcmFtIGFycmF5XG4gICAgICAgICAqIEBwYXJhbSBidWZmZXJcbiAgICAgICAgICovXG5cbiAgICAgICAgZnVuY3Rpb24gd3JpdGVBcnJheVRvTWVtb3J5KGFycmF5LCBidWZmZXIpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBIRUFQOFsoYnVmZmVyICsgaSkgfCAwXSA9IGFycmF5W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgTW9kdWxlWyd3cml0ZUFycmF5VG9NZW1vcnknXSA9IHdyaXRlQXJyYXlUb01lbW9yeTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGZ1bmN0aW9uIHdyaXRlQXNjaWlUb01lbW9yeVxuICAgICAgICAgKiBAbWVtYmVyb2YgTGliVGlNaWRpdHlcbiAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAqIEBwYXJhbSBzdHJcbiAgICAgICAgICogQHBhcmFtIGJ1ZmZlclxuICAgICAgICAgKiBAcGFyYW0gZG9udEFkZE51bGxcbiAgICAgICAgICovXG5cbiAgICAgICAgZnVuY3Rpb24gd3JpdGVBc2NpaVRvTWVtb3J5KHN0ciwgYnVmZmVyLCBkb250QWRkTnVsbCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBIRUFQOFsoYnVmZmVyICsgaSkgfCAwXSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFkb250QWRkTnVsbCkgSEVBUDhbKGJ1ZmZlciArIHN0ci5sZW5ndGgpIHwgMF0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgTW9kdWxlWyd3cml0ZUFzY2lpVG9NZW1vcnknXSA9IHdyaXRlQXNjaWlUb01lbW9yeTtcblxuICAgICAgICBmdW5jdGlvbiB1blNpZ24odmFsdWUsIGJpdHMsIGlnbm9yZSwgc2lnKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPj0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBiaXRzIDw9IDMyXG4gICAgICAgICAgICAgICAgPyAyICogTWF0aC5hYnMoMSA8PCAoYml0cyAtIDEpKSArIHZhbHVlIC8vIE5lZWQgc29tZSB0cmlja2VyeSwgc2luY2UgaWYgYml0cyA9PSAzMiwgd2UgYXJlIHJpZ2h0IGF0IHRoZSBsaW1pdCBvZiB0aGUgYml0cyBKUyB1c2VzIGluIGJpdHNoaWZ0c1xuICAgICAgICAgICAgICAgIDogTWF0aC5wb3coMiwgYml0cykgKyB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlU2lnbih2YWx1ZSwgYml0cykge1xuICAgICAgICAgICAgaWYgKHZhbHVlIDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoYWxmID1cbiAgICAgICAgICAgICAgICBiaXRzIDw9IDMyXG4gICAgICAgICAgICAgICAgICAgID8gTWF0aC5hYnMoMSA8PCAoYml0cyAtIDEpKSAvLyBhYnMgaXMgbmVlZGVkIGlmIGJpdHMgPT0gMzJcbiAgICAgICAgICAgICAgICAgICAgOiBNYXRoLnBvdygyLCBiaXRzIC0gMSk7XG4gICAgICAgICAgICBpZiAodmFsdWUgPj0gaGFsZiAmJiAoYml0cyA8PSAzMiB8fCB2YWx1ZSA+IGhhbGYpKSB7XG4gICAgICAgICAgICAgICAgLy8gZm9yIGh1Z2UgdmFsdWVzLCB3ZSBjYW4gaGl0IHRoZSBwcmVjaXNpb24gbGltaXQgYW5kIGFsd2F5cyBnZXQgdHJ1ZSBoZXJlLiBzbyBkb24ndCBkbyB0aGF0XG4gICAgICAgICAgICAgICAgLy8gYnV0LCBpbiBnZW5lcmFsIHRoZXJlIGlzIG5vIHBlcmZlY3Qgc29sdXRpb24gaGVyZS4gV2l0aCA2NC1iaXQgaW50cywgd2UgZ2V0IHJvdW5kaW5nIGFuZCBlcnJvcnNcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBJbiBpNjQgbW9kZSAxLCByZXNpZ24gdGhlIHR3byBwYXJ0cyBzZXBhcmF0ZWx5IGFuZCBzYWZlbHlcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IC0yICogaGFsZiArIHZhbHVlOyAvLyBDYW5ub3QgYml0c2hpZnQgaGFsZiwgYXMgaXQgbWF5IGJlIGF0IHRoZSBsaW1pdCBvZiB0aGUgYml0cyBKUyB1c2VzIGluIGJpdHNoaWZ0c1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFNYXRoWydpbXVsJ10pXG4gICAgICAgICAgICBNYXRoWydpbXVsJ10gPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWggPSBhID4+PiAxNjtcbiAgICAgICAgICAgICAgICBjb25zdCBhbCA9IGEgJiAweGZmZmY7XG4gICAgICAgICAgICAgICAgY29uc3QgYmggPSBiID4+PiAxNjtcbiAgICAgICAgICAgICAgICBjb25zdCBibCA9IGIgJiAweGZmZmY7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChhbCAqIGJsICsgKChhaCAqIGJsICsgYWwgKiBiaCkgPDwgMTYpKSB8IDA7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgIE1hdGguaW11bCA9IE1hdGhbJ2ltdWwnXTtcblxuICAgICAgICB2YXIgTWF0aF9hYnMgPSBNYXRoLmFicztcbiAgICAgICAgY29uc3QgTWF0aF9zaW4gPSBNYXRoLnNpbjtcbiAgICAgICAgdmFyIE1hdGhfY2VpbCA9IE1hdGguY2VpbDtcbiAgICAgICAgdmFyIE1hdGhfZmxvb3IgPSBNYXRoLmZsb29yO1xuICAgICAgICBjb25zdCBNYXRoX3BvdyA9IE1hdGgucG93O1xuICAgICAgICB2YXIgTWF0aF9taW4gPSBNYXRoLm1pbjtcblxuICAgICAgICAvLyBBIGNvdW50ZXIgb2YgZGVwZW5kZW5jaWVzIGZvciBjYWxsaW5nIHJ1bigpLiBJZiB3ZSBuZWVkIHRvXG4gICAgICAgIC8vIGRvIGFzeW5jaHJvbm91cyB3b3JrIGJlZm9yZSBydW5uaW5nLCBpbmNyZW1lbnQgdGhpcyBhbmRcbiAgICAgICAgLy8gZGVjcmVtZW50IGl0LiBJbmNyZW1lbnRpbmcgbXVzdCBoYXBwZW4gaW4gYSBwbGFjZSBsaWtlXG4gICAgICAgIC8vIFBSRV9SVU5fQURESVRJT05TICh1c2VkIGJ5IGVtY2MgdG8gYWRkIGZpbGUgcHJlbG9hZGluZykuXG4gICAgICAgIC8vIE5vdGUgdGhhdCB5b3UgY2FuIGFkZCBkZXBlbmRlbmNpZXMgaW4gcHJlUnVuLCBldmVuIHRob3VnaFxuICAgICAgICAvLyBpdCBoYXBwZW5zIHJpZ2h0IGJlZm9yZSBydW4gLSBydW4gd2lsbCBiZSBwb3N0cG9uZWQgdW50aWxcbiAgICAgICAgLy8gdGhlIGRlcGVuZGVuY2llcyBhcmUgbWV0LlxuICAgICAgICBsZXQgcnVuRGVwZW5kZW5jaWVzID0gMDtcbiAgICAgICAgY29uc3QgcnVuRGVwZW5kZW5jeVRyYWNraW5nID0ge307XG4gICAgICAgIGxldCBydW5EZXBlbmRlbmN5V2F0Y2hlciA9IG51bGw7XG4gICAgICAgIGxldCBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBudWxsOyAvLyBvdmVycmlkZGVuIHRvIHRha2UgZGlmZmVyZW50IGFjdGlvbnMgd2hlbiBhbGwgcnVuIGRlcGVuZGVuY2llcyBhcmUgZnVsZmlsbGVkXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBmdW5jdGlvbiBhZGRSdW5EZXBlbmRlbmN5XG4gICAgICAgICAqIEBtZW1iZXJvZiBMaWJUaU1pZGl0eVxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHBhcmFtIGlkXG4gICAgICAgICAqL1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZFJ1bkRlcGVuZGVuY3koaWQpIHtcbiAgICAgICAgICAgIHJ1bkRlcGVuZGVuY2llcysrO1xuICAgICAgICAgICAgaWYgKE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKSB7XG4gICAgICAgICAgICAgICAgTW9kdWxlWydtb25pdG9yUnVuRGVwZW5kZW5jaWVzJ10ocnVuRGVwZW5kZW5jaWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydCghcnVuRGVwZW5kZW5jeVRyYWNraW5nW2lkXSk7XG4gICAgICAgICAgICAgICAgcnVuRGVwZW5kZW5jeVRyYWNraW5nW2lkXSA9IDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybignd2FybmluZzogcnVuIGRlcGVuZGVuY3kgYWRkZWQgd2l0aG91dCBJRCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgTW9kdWxlWydhZGRSdW5EZXBlbmRlbmN5J10gPSBhZGRSdW5EZXBlbmRlbmN5O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZnVuY3Rpb24gcmVtb3ZlUnVuRGVwZW5kZW5jeVxuICAgICAgICAgKiBAbWVtYmVyb2YgTGliVGlNaWRpdHlcbiAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAqIEBwYXJhbSBpZFxuICAgICAgICAgKi9cblxuICAgICAgICBmdW5jdGlvbiByZW1vdmVSdW5EZXBlbmRlbmN5KGlkKSB7XG4gICAgICAgICAgICBydW5EZXBlbmRlbmNpZXMtLTtcbiAgICAgICAgICAgIGlmIChNb2R1bGVbJ21vbml0b3JSdW5EZXBlbmRlbmNpZXMnXSkge1xuICAgICAgICAgICAgICAgIE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKHJ1bkRlcGVuZGVuY2llcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQocnVuRGVwZW5kZW5jeVRyYWNraW5nW2lkXSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHJ1bkRlcGVuZGVuY3lUcmFja2luZ1tpZF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybignd2FybmluZzogcnVuIGRlcGVuZGVuY3kgcmVtb3ZlZCB3aXRob3V0IElEJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocnVuRGVwZW5kZW5jaWVzID09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAocnVuRGVwZW5kZW5jeVdhdGNoZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChydW5EZXBlbmRlbmN5V2F0Y2hlcik7XG4gICAgICAgICAgICAgICAgICAgIHJ1bkRlcGVuZGVuY3lXYXRjaGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRlcGVuZGVuY2llc0Z1bGZpbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGRlcGVuZGVuY2llc0Z1bGZpbGxlZDtcbiAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsgLy8gY2FuIGFkZCBhbm90aGVyIGRlcGVuZGVuY2llc0Z1bGZpbGxlZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIE1vZHVsZVsncmVtb3ZlUnVuRGVwZW5kZW5jeSddID0gcmVtb3ZlUnVuRGVwZW5kZW5jeTtcblxuICAgICAgICBjb25zdCBtZW1vcnlJbml0aWFsaXplciA9IG51bGw7XG4gICAgICAgIC8vID09PSBCb2R5ID09PVxuICAgICAgICBTVEFUSUNfQkFTRSA9IDg7XG4gICAgICAgIFNUQVRJQ1RPUCA9IFNUQVRJQ19CQVNFICsgODQ0ODtcbiAgICAgICAgLyogZ2xvYmFsIGluaXRpYWxpemVycyAqLyBfX0FUSU5JVF9fLnB1c2goe1xuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcnVuUG9zdFNldHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBfc3RkZXJyO1xuICAgICAgICB2YXIgX3N0ZGVyciA9IChfc3RkZXJyID0gYWxsb2NhdGUoXG4gICAgICAgICAgICBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sXG4gICAgICAgICAgICAnaTgnLFxuICAgICAgICAgICAgQUxMT0NfU1RBVElDXG4gICAgICAgICkpO1xuICAgICAgICAvKiBtZW1vcnkgaW5pdGlhbGl6ZXIgKi9cbiAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgIGFsbG9jYXRlKFswLDAsMCwwLDAsMCwxNDQsNjMsNzUsMTkxLDUzLDY1LDkwLDEzNiwxNDQsNjMsMjQxLDQ2LDE4OSwxMzAsNjIsMjEsMTQ1LDYzLDI0OSwxOTgsNTEsMTE1LDIxMSwxNjYsMTQ1LDYzLDE5NCwxMDksMjIxLDEwLDY1LDYxLDE0Niw2Myw2MSwxOTQsMTU3LDE1MCwxNzYsMjE2LDE0Niw2MywyMzIsMjM0LDc4LDE5NSw3NiwxMjEsMTQ3LDYzLDIwNCw2LDEyMSwxNjksNjUsMzEsMTQ4LDYzLDE3MiwxMTksMTA5LDIxNywxODgsMjAyLDE0OCw2MywxMzYsODgsMjAxLDEwMywyMzcsMTIzLDE0OSw2MywxNTQsMTQzLDk4LDI1MCwzLDUxLDE1MCw2Myw4OSw4LDE2MywyMTMsNTAsMjQwLDE1MCw2Myw2OSwxOTIsODUsMjM0LDE3MywxNzksMTUxLDYzLDk4LDExMiwyMzMsMjI3LDE3MCwxMjUsMTUyLDYzLDI0MiwxODksNDQsNTUsOTcsNzgsMTUzLDYzLDE4OSwyNTMsMTM1LDQ5LDEwLDM4LDE1NCw2Myw4NCwxODQsMTg0LDgsMjI1LDQsMTU1LDYzLDIzMiw2NCwxOSwyMzUsMzQsMjM1LDE1NSw2MywxMDEsMjEzLDc4LDE2LDE1LDIxNywxNTYsNjMsODIsMjI4LDIyNCwyMDIsMjMwLDIwNiwxNTcsNjMsMTEwLDYwLDIzNiwxNTMsMjM3LDIwNCwxNTgsNjMsMTQ5LDE4LDIwMSw1OSwxMDUsMjExLDE1OSw2MywzOSwxMjIsMTQ5LDIyNCw4MCwxMTMsMTYwLDYzLDEyOSwyNDQsMTE2LDIwOCwxMTIsMjUzLDE2MCw2MywzOSwyNCw1OCwyMzAsNTgsMTQyLDE2MSw2Myw3NCwyOSwxMTksMjI2LDIxNCwzNSwxNjIsNjMsNTAsODQsMTMxLDIxNiwxMDksMTkwLDE2Miw2MywxMzcsMzksMTk0LDU3LDQyLDk0LDE2Myw2MywxOTUsNTcsNzQsMjI1LDU1LDMsMTY0LDYzLDIyNSwyMDgsMjM5LDMxLDE5NiwxNzMsMTY0LDYzLDE0MSwyMjIsMTgxLDIwMCwyNTMsOTMsMTY1LDYzLDYyLDE1LDE2OSw2MSwyMSwyMCwxNjYsNjMsMjIzLDEwMyw0MCwxMjUsNjAsMjA4LDE2Niw2MywxNTUsMjMsMTU5LDQ3LDE2NywxNDYsMTY3LDYzLDE0OCw2NiwxNzksMTgxLDEzOCw5MSwxNjgsNjMsODAsMTcwLDIzNyw1NCwzMCw0MywxNjksNjMsMjM3LDU3LDIyMiwxNzYsMTU0LDEsMTcwLDYzLDEwNCwxNTgsMTkzLDYsNTksMjIzLDE3MCw2MywxODIsNTQsMTcyLDE3LDYwLDE5NiwxNzEsNjMsMjQ4LDIwMyw2MiwxNzcsMjIwLDE3NiwxNzIsNjMsNDksMTY4LDIzMywyMjAsOTMsMTY1LDE3Myw2MywxMTUsMjAwLDE5NCwxODEsMiwxNjIsMTc0LDYzLDEwOCwxNiwyNDQsMTUyLDE2LDE2NywxNzUsNjMsNzgsNzEsOTksMTUzLDEwMyw5MCwxNzYsNjMsMjEzLDUsNDAsNzMsMTk2LDIyOSwxNzYsNjMsMTcsMzgsMjI4LDE1OCwxOTYsMTE3LDE3Nyw2MywxODUsMjA0LDE5NywzNSwxNDQsMTAsMTc4LDYzLDEyOCw0MywyMzIsMTc3LDc5LDE2NCwxNzgsNjMsMTUyLDIwNCwxMzgsMTI3LDQ1LDY3LDE3OSw2MywxMjEsMTE1LDE2OCw0Miw4NSwyMzEsMTc5LDYzLDEyOSwxOTMsMjQwLDE5NiwyNDMsMTQ0LDE4MCw2MywxOSwyMzIsMzksMjI0LDU1LDY0LDE4MSw2MywyNDIsMjA1LDIzOSwxNTQsODEsMjQ1LDE4MSw2MywxMjEsNDIsMjU0LDE3MywxMTQsMTc2LDE4Miw2Myw2Miw1NSwxOTUsMTIxLDIwNiwxMTMsMTgzLDYzLDE1MCwxODMsMTMyLDIwLDE1NCw1NywxODQsNjMsMTI0LDUzLDI0MSw4OCwxMiw4LDE4NSw2Myw0MCwxMTYsNDcsMjQ1LDkzLDIyMSwxODUsNjMsMjM0LDU4LDExMCwxMjIsMjAxLDE4NSwxODYsNjMsMCwxOTAsMjQ4LDEwOCwxMzksMTU3LDE4Nyw2MywxODUsMTUsMjEyLDg0LDIyNiwxMzYsMTg4LDYzLDExOSw0MSwyMzQsMjA2LDE0LDEyNCwxODksNjMsOTAsNjcsMTk5LDE1OCw4MywxMTksMTkwLDYzLDExMyw4OSwyMzgsMTkyLDI0NSwxMjIsMTkxLDYzLDkwLDI0MywyMjgsNjIsMTU4LDY3LDE5Miw2MywxMzQsNCwxNTksMTkwLDU2LDIwNiwxOTIsNjMsMjUwLDE4MiwxMTIsMTA5LDExMiw5MywxOTMsNjMsMTM0LDc0LDExMywxNTcsMTA4LDI0MSwxOTMsNjMsMTU4LDE0NiwyMDcsMjM5LDg1LDEzOCwxOTQsNjMsMjQxLDE2MCwyNDksOTUsODYsNDAsMTk1LDYzLDUzLDEyOCwzNSw3OSwxNTMsMjAzLDE5NSw2Myw4LDQxLDQ4LDE0NCw3NSwxMTYsMTk2LDYzLDUyLDI0NiwyNTUsMTE1LDE1NSwzNCwxOTcsNjMsNjAsMjQ5LDM5LDIxNCwxODQsMjE0LDE5Nyw2MywyMzEsMTcyLDIxLDQyLDIxMywxNDQsMTk4LDYzLDEwMywxNjEsMTYyLDEzNiwzNSw4MSwxOTksNjMsNjQsMjIwLDI3LDE5MCwyMTYsMjMsMjAwLDYzLDI1MywxOTcsMTkyLDg4LDQzLDIyOSwyMDAsNjMsMTY5LDE2MCwxODksMTgzLDgzLDE4NSwyMDEsNjMsMTUxLDE2MywxNjUsMjYsMTQwLDE0OCwyMDIsNjMsMTEyLDI1MiwxMTIsMTc3LDE2LDExOSwyMDMsNjMsMTMyLDI1LDMsMTczLDMxLDk3LDIwNCw2MywxOTYsMTk4LDYxLDgwLDI0OSw4MiwyMDUsNjMsMTI5LDIwNSwxNjUsMSwyMjQsNzYsMjA2LDYzLDEyLDIzOSwxNTcsOTMsMjQsNzksMjA3LDYzLDE3OSwxNTcsMTU4LDE2NCwyNDQsNDQsMjA4LDYzLDI0LDI0OCwyMjYsMiwyMDYsMTgyLDIwOCw2MywyMjEsMjcsOTcsMzQsNjIsNjksMjA5LDYzLDI0MSwzOCwxMDIsMzAsMTA4LDIxNiwyMDksNjMsMTg0LDIyMywxMzEsOTUsMTI4LDExMiwyMTAsNjMsMTQzLDIxMiwxNjgsMTY2LDE2NCwxMywyMTEsNjMsMjQ2LDYsMTUxLDI0LDQsMTc2LDIxMSw2MywyNSw3MiwxODgsNzMsMjAzLDg3LDIxMiw2MywzOCwxMzUsMTExLDc0LDQwLDUsMjEzLDYzLDIzNCwxMDksMTUwLDE3OSw3NCwxODQsMjEzLDYzLDk0LDE5NiwxODIsMTc5LDk5LDExMywyMTQsNjMsMTkxLDQ5LDExOSwyOCwxNjYsNDgsMjE1LDYzLDY0LDE2LDE0NywxMTIsNzAsMjQ2LDIxNSw2MywyNDUsMzksNjksMjQyLDEyMiwxOTQsMjE2LDYzLDY4LDcwLDQ1LDE3OCwxMjMsMTQ5LDIxNyw2MywyMzQsMjAwLDE4MCwxNTgsMTMwLDExMSwyMTgsNjMsMTAwLDg2LDI0NiwxNDcsMjAzLDgwLDIxOSw2MywyMDQsMzMsNDUsMTA4LDE0OCw1NywyMjAsNjMsMTcsNjEsMTc2LDE2LDI5LDQyLDIyMSw2Myw1OSwxNjMsMTI2LDEzOSwxNjcsMzQsMjIyLDYzLDEzLDIwNCw5NiwyNSwxMjAsMzUsMjIzLDYzLDE2MSw5Nyw4MiwxNTgsMTA2LDIyLDIyNCw2Myw0MiwyNDQsNjAsMjMyLDEzMSwxNTksMjI0LDYzLDE2MiwyMTEsMTIwLDE0Miw0NSw0NSwyMjUsNjMsMzgsODQsMjEzLDExNywxNDIsMTkxLDIyNSw2MywxODcsMTcsMTUwLDIwNiwyMDYsODYsMjI2LDYzLDg0LDE1NCwxMjMsMzEsMjQsMjQzLDIyNiw2MywyMTgsMzEsNDIsODEsMTQ5LDE0OCwyMjcsNjMsODksODMsMjQxLDE4NSwxMTQsNTksMjI4LDYzLDExMSwxNjUsMjQ4LDQxLDIyMiwyMzEsMjI4LDYzLDE0NSw2NywyMTEsMjQ3LDYsMTU0LDIyOSw2MywzMiw3MCwxMjcsMTMsMzAsODIsMjMwLDYzLDIxNiwxNjAsMjExLDI0NSw4NSwxNiwyMzEsNjMsMTM3LDEzMyw5NiwyMzQsMjI2LDIxMiwyMzEsNjMsNzYsOCwxOTgsMjI1LDI1MCwxNTksMjMyLDYzLDI3LDI0NSwxMzIsMTU4LDIxMywxMTMsMjMzLDYzLDksMjMyLDc3LDE5MCwxNzIsNzQsMjM0LDYzLDQ0LDIyMCwyMTAsMjAxLDE4Nyw0MiwyMzUsNjMsMjU0LDEzNiwzMSw2OSw2NCwxOCwyMzYsNjMsMTEsMTEsMTI1LDE5MiwxMjEsMSwyMzcsNjMsMjQ0LDEyMiwyMjksMjMzLDE2OSwyNDgsMjM3LDYzLDEzMCw2MSwxMiwxNTksMjAsMjQ4LDIzOCw2MywwLDAsMCwwLDAsMCwyNDAsNjMsMCwwLDEyOCw2MywwLDAsMCwwLDAsMCwyMjAsNjcsMCwwLDAsMCwxNjgsMjUsMCwwLDAsMCwwLDAsMjQwLDMxLDAsMCwyMTQsMzMsMCwwLDIxNywzNSwwLDAsMjUxLDM3LDAsMCw2MSw0MCwwLDAsMTYxLDQyLDAsMCw0Miw0NSwwLDAsMjE4LDQ3LDAsMCwxNzgsNTAsMCwwLDE4Miw1MywwLDAsMjMyLDU2LDAsMCw3NCw2MCwwLDAsMjI0LDYzLDAsMCwxNzIsNjcsMCwwLDE3OCw3MSwwLDAsMjQ1LDc1LDAsMCwxMjIsODAsMCwwLDY3LDg1LDAsMCw4NSw5MCwwLDAsMTgwLDk1LDAsMCwxMDEsMTAxLDAsMCwxMDgsMTA3LDAsMCwyMDcsMTEzLDAsMCwxNDgsMTIwLDAsMCwxOTEsMTI3LDAsMCw4OCwxMzUsMCwwLDEwMCwxNDMsMCwwLDIzNSwxNTEsMCwwLDI0MywxNjAsMCwwLDEzNCwxNzAsMCwwLDE2OSwxODAsMCwwLDEwMywxOTEsMCwwLDIwMSwyMDIsMCwwLDIxNiwyMTQsMCwwLDE1OCwyMjcsMCwwLDM5LDI0MSwwLDAsMTI2LDI1NSwwLDAsMTc2LDE0LDEsMCwyMDAsMzAsMSwwLDIxNCw0NywxLDAsMjMxLDY1LDEsMCwxMSw4NSwxLDAsODMsMTA1LDEsMCwyMDcsMTI2LDEsMCwxNDYsMTQ5LDEsMCwxNzYsMTczLDEsMCw2MSwxOTksMSwwLDc5LDIyNiwxLDAsMjUzLDI1NCwxLDAsOTUsMjksMiwwLDE0NCw2MSwyLDAsMTcxLDk1LDIsMCwyMDYsMTMxLDIsMCwyMiwxNzAsMiwwLDE2NSwyMTAsMiwwLDE1OCwyNTMsMiwwLDM2LDQzLDMsMCw5Niw5MSwzLDAsMTIyLDE0MiwzLDAsMTU4LDE5NiwzLDAsMjUwLDI1MywzLDAsMTkxLDU4LDQsMCwzMywxMjMsNCwwLDg3LDE5MSw0LDAsMTU2LDcsNSwwLDQ0LDg0LDUsMCw3NCwxNjUsNSwwLDU5LDI1MSw1LDAsNzMsODYsNiwwLDE5MiwxODIsNiwwLDI0NCwyOCw3LDAsNTksMTM3LDcsMCwyNDMsMjUxLDcsMCwxMjUsMTE3LDgsMCw2NiwyNDYsOCwwLDE3NCwxMjYsOSwwLDU1LDE1LDEwLDAsODgsMTY4LDEwLDAsMTQ5LDc0LDExLDAsMTE5LDI0NiwxMSwwLDE0NSwxNzIsMTIsMCwxMjgsMTA5LDEzLDAsMjMyLDU3LDE0LDAsMTE5LDE4LDE1LDAsMjMwLDI0NywxNSwwLDI1MSwyMzQsMTYsMCwxMzEsMjM2LDE3LDAsOTIsMjUzLDE4LDAsMTEwLDMwLDIwLDAsMTc3LDgwLDIxLDAsNDIsMTQ5LDIyLDAsMjM4LDIzNiwyMywwLDM1LDg5LDI1LDAsMCwyMTksMjYsMCwyMDcsMTE1LDI4LDAsMjM3LDM2LDMwLDAsMjA1LDIzOSwzMSwwLDI0NSwyMTMsMzMsMCw2LDIxNywzNSwwLDE4NCwyNTAsMzcsMCwyMjAsNjAsNDAsMCw5OCwxNjEsNDIsMCw4Myw0Miw0NSwwLDIxOSwyMTcsNDcsMCw3MCwxNzgsNTAsMCwwLDE4Miw1MywwLDE1OCwyMzEsNTYsMCwyMTgsNzMsNjAsMCwxNTMsMjIzLDYzLDAsMjM0LDE3MSw2NywwLDEyLDE3OCw3MSwwLDExMiwyNDUsNzUsMCwxODUsMTIxLDgwLDAsMTk2LDY2LDg1LDAsMTY3LDg0LDkwLDAsMTgzLDE3OSw5NSwwLDEzOSwxMDAsMTAxLDAsMCwxMDgsMTA3LDAsNjAsMjA3LDExMywwLDE4MSwxNDcsMTIwLDAsNTAsMTkxLDEyNywwLDIxMiw4NywxMzUsMCwyNSwxMDAsMTQzLDAsMjIzLDIzNCwxNTEsMCwxMTQsMjQzLDE2MCwwLDEzNSwxMzMsMTcwLDAsNzgsMTY5LDE4MCwwLDExMCwxMDMsMTkxLDAsMzIsMTYxLDcsMCwwLDAsMCwwLDAsMCwxMjgsNjMsMCwwLDEyOCw2MywwLDAsMTI4LDYzLDAsMCwxMjgsNjMsMCwwLDEyOCw2MywwLDAsMTI4LDYzLDAsMCwxMjgsNjMsMCwwLDEyOCw2MywwLDAsMTI4LDYzLDAsMCwxMjgsNjMsMCwwLDEyOCw2MywwLDAsMTI4LDYzLDAsMCwxMjgsNjMsMCwwLDEyOCw2MywwLDAsMTI4LDYzLDAsMCwxMjgsNjMsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDAsMCwwLDAsMCwwLDI0MCw2MywxMTMsOTMsMjQ1LDE1OCwyMzYsMCwyNDAsNjMsODQsMTgsMTUwLDc1LDIxNywxLDI0MCw2MywyMDcsMjMyLDIyNiw1LDE5OCwyLDI0MCw2MywyMSwxNzEsMjIwLDIwNSwxNzgsMywyNDAsNjMsMTAyLDM1LDEzMiwxNjMsMTU5LDQsMjQwLDYzLDEwLDI4LDIxOCwxMzQsMTQwLDUsMjQwLDYzLDg4LDk1LDIyMywxMTksMTIxLDYsMjQwLDYzLDE3NywxODMsMTQ4LDExOCwxMDIsNywyNDAsNjMsMTMxLDIzOSwyNTAsMTMwLDgzLDgsMjQwLDYzLDcwLDIwOSwxOCwxNTcsNjQsOSwyNDAsNjMsMTI3LDM5LDIyMSwxOTYsNDUsMTAsMjQwLDYzLDE5MSwxODgsOTAsMjUwLDI2LDExLDI0MCw2MywxNjAsOTEsMTQwLDYxLDgsMTIsMjQwLDYzLDIwNCwyMDYsMTE0LDE0MiwyNDUsMTIsMjQwLDYzLDI0NSwyMjQsMTQsMjM3LDIyNiwxMywyNDAsNjMsMjE4LDkyLDk3LDg5LDIwOCwxNCwyNDAsNjMsNzEsMTMsMTA3LDIxMSwxODksMTUsMjQwLDYzLDE3LDE4OSw0NCw5MSwxNzEsMTYsMjQwLDYzLDI4LDU1LDE2NywyNDAsMTUyLDE3LDI0MCw2Myw4NSw3MCwyMTksMTQ3LDEzNCwxOCwyNDAsNjMsMTgxLDE4MSwyMDEsNjgsMTE2LDE5LDI0MCw2Myw2Niw4MCwxMTUsMyw5OCwyMCwyNDAsNjMsMTQsMjI1LDIxNiwyMDcsNzksMjEsMjQwLDYzLDUzLDUxLDI1MSwxNjksNjEsMjIsMjQwLDYzLDIyNCwxNywyMTksMTQ1LDQzLDIzLDI0MCw2Myw2OCw3MiwxMjEsMTM1LDI1LDI0LDI0MCw2MywxNTksMTYxLDIxNCwxMzgsNywyNSwyNDAsNjMsNjMsMjMzLDI0MywxNTUsMjQ1LDI1LDI0MCw2MywxMjIsMjM0LDIwOSwxODYsMjI3LDI2LDI0MCw2MywxODAsMTEyLDExMywyMzEsMjA5LDI3LDI0MCw2Myw5Myw3MSwyMTEsMzMsMTkyLDI4LDI0MCw2MywyMzgsNTcsMjQ4LDEwNSwxNzQsMjksMjQwLDYzLDIzOSwxOSwyMjUsMTkxLDE1NiwzMCwyNDAsNjMsMjQyLDE2MCwxNDIsMzUsMTM5LDMxLDI0MCw2MywxNDgsMTcyLDEsMTQ5LDEyMSwzMiwyNDAsNjMsMTI5LDIsNTksMjAsMTA0LDMzLDI0MCw2MywxMDksMTEwLDU5LDE2MSw4NiwzNCwyNDAsNjMsMjYsMTg4LDMsNjAsNjksMzUsMjQwLDYzLDg1LDE4MywxNDgsMjI4LDUxLDM2LDI0MCw2MywyNDcsNDMsMjM5LDE1NCwzNCwzNywyNDAsNjMsMjI4LDIyOSwxOSw5NSwxNywzOCwyNDAsNjMsMTQsMTc3LDMsNDksMCwzOSwyNDAsNjMsMTEyLDg5LDE5MSwxNiwyMzksMzksMjQwLDYzLDE5LDE3MSw3MSwyNTQsMjIxLDQwLDI0MCw2MywxMCwxMTQsMTU3LDI0OSwyMDQsNDEsMjQwLDYzLDExNywxMjIsMTkzLDIsMTg4LDQyLDI0MCw2MywxMjgsMTQ0LDE4MCwyNSwxNzEsNDMsMjQwLDYzLDk3LDEyOCwxMTksNjIsMTU0LDQ0LDI0MCw2Myw5MiwyMiwxMSwxMTMsMTM3LDQ1LDI0MCw2MywxOTEsMzAsMTEyLDE3NywxMjAsNDYsMjQwLDYzLDIzMCwxMDEsMTY3LDI1NSwxMDMsNDcsMjQwLDYzLDU0LDE4NCwxNzcsOTEsODcsNDgsMjQwLDYzLDM0LDIyNiwxNDMsMTk3LDcwLDQ5LDI0MCw2MywzOSwxNzYsNjYsNjEsNTQsNTAsMjQwLDYzLDIwOSwyMzgsMjAyLDE5NCwzNyw1MSwyNDAsNjMsMTgwLDEwNiw0MSw4NiwyMSw1MiwyNDAsNjMsMTEzLDI0MCw5NCwyNDcsNCw1MywyNDAsNjMsMTgzLDc2LDEwOCwxNjYsMjQ0LDUzLDI0MCw2Myw2Myw3Niw4Miw5OSwyMjgsNTQsMjQwLDYzLDIwNCwxODcsMTcsNDYsMjEyLDU1LDI0MCw2Myw0OSwxMDQsMTcxLDYsMTk2LDU2LDI0MCw2Myw3MywzMCwzMiwyMzcsMTc5LDU3LDI0MCw2MywyNTQsMTcwLDExMiwyMjUsMTYzLDU4LDI0MCw2Myw2NywyMTksMTU3LDIyNywxNDcsNTksMjQwLDYzLDI0LDEyNCwxNjgsMjQzLDEzMSw2MCwyNDAsNjMsMTM4LDkwLDE0NSwxNywxMTYsNjEsMjQwLDYzLDE3Nyw2Nyw4OSw2MSwxMDAsNjIsMjQwLDYzLDE3Niw0LDEsMTE5LDg0LDYzLDI0MCw2MywxODIsMTA2LDEzNywxOTAsNjgsNjQsMjQwLDYzLDAsNjcsMjQzLDE5LDUzLDY1LDI0MCw2MywyMTIsOTAsNjMsMTE5LDM3LDY2LDI0MCw2MywxMzMsMTI3LDExMCwyMzIsMjEsNjcsMjQwLDYzLDExNCwxMjYsMTI5LDEwMyw2LDY4LDI0MCw2Myw3LDM3LDEyMSwyNDQsMjQ2LDY4LDI0MCw2MywxODUsNjQsODYsMTQzLDIzMSw2OSwyNDAsNjMsMTIsMTU5LDI1LDU2LDIxNiw3MCwyNDAsNjMsMTQxLDEzLDE5NiwyMzgsMjAwLDcxLDI0MCw2MywyMTYsODksODYsMTc5LDE4NSw3MiwyNDAsNjMsMTQ2LDgxLDIwOSwxMzMsMTcwLDczLDI0MCw2MywxMDksMTk0LDUzLDEwMiwxNTUsNzQsMjQwLDYzLDQwLDEyMiwxMzIsODQsMTQwLDc1LDI0MCw2MywxNDAsNzAsMTkwLDgwLDEyNSw3NiwyNDAsNjMsMTEwLDI0NSwyMjcsOTAsMTEwLDc3LDI0MCw2MywxNzcsODQsMjQ2LDExNCw5NSw3OCwyNDAsNjMsNjYsNTAsMjQ2LDE1Miw4MCw3OSwyNDAsNjMsMjYsOTIsMjI4LDIwNCw2NSw4MCwyNDAsNjMsNjMsMTYwLDE5MywxNCw1MSw4MSwyNDAsNjMsMTk0LDIwNCwxNDIsOTQsMzYsODIsMjQwLDYzLDE5MiwxNzUsNzYsMTg4LDIxLDgzLDI0MCw2Myw5OCwyMywyNTIsMzksNyw4NCwyNDAsNjMsMjIwLDIwOSwxNTcsMTYxLDI0OCw4NCwyNDAsNjMsMTEyLDE3Myw1MCw0MSwyMzQsODUsMjQwLDYzLDEwNywxMjAsMTg3LDE5MCwyMTksODYsMjQwLDYzLDM3LDEsNTcsOTgsMjA1LDg3LDI0MCw2MywyLDIyLDE3MiwxOSwxOTEsODgsMjQwLDYzLDExNiwxMzMsMjEsMjExLDE3Niw4OSwyNDAsNjMsMjQ3LDI5LDExOCwxNjAsMTYyLDkwLDI0MCw2MywxOCwxNzQsMjA2LDEyMywxNDgsOTEsMjQwLDYzLDkxLDQsMzIsMTAxLDEzNCw5MiwyNDAsNjMsMTEzLDIzOSwxMDYsOTIsMTIwLDkzLDI0MCw2MywxLDYyLDE3Niw5NywxMDYsOTQsMjQwLDYzLDE5NCwxOTAsMjQwLDExNiw5Miw5NSwyNDAsNjMsMTIyLDY0LDQ1LDE1MCw3OCw5NiwyNDAsNjMsMjQ3LDE0NSwxMDIsMTk3LDY0LDk3LDI0MCw2MywyMiwxMzAsMTU3LDIsNTEsOTgsMjQwLDYzLDE5MSwyMjMsMjEwLDc3LDM3LDk5LDI0MCw2MywyMjksMTIxLDcsMTY3LDIzLDEwMCwyNDAsNjMsMTM3LDMxLDYwLDE0LDEwLDEwMSwyNDAsNjMsMTgxLDE1OSwxMTMsMTMxLDI1MiwxMDEsMjQwLDYzLDEzMCwyMDEsMTY4LDYsMjM5LDEwMiwyNDAsNjMsMjAsMTA4LDIyNiwxNTEsMjI1LDEwMywyNDAsNjMsMTU0LDg2LDMxLDU1LDIxMiwxMDQsMjQwLDYzLDc5LDg4LDk2LDIyOCwxOTgsMTA1LDI0MCw2MywxMjQsNjQsMTY2LDE1OSwxODUsMTA2LDI0MCw2MywxMTUsMjIyLDI0MSwxMDQsMTcyLDEwNywyNDAsNjMsMTQ5LDEsNjgsNjQsMTU5LDEwOCwyNDAsNjMsNzcsMTIxLDE1NywzNywxNDYsMTA5LDI0MCw2MywxOCwyMSwyNTUsMjQsMTMzLDExMCwyNDAsNjMsMTA0LDE2NCwxMDUsMjYsMTIwLDExMSwyNDAsNjMsMjIyLDI0NiwyMjEsNDEsMTA3LDExMiwyNDAsNjMsMTYsMjIwLDkyLDcxLDk0LDExMywyNDAsNjMsMTY1LDM1LDIzMSwxMTQsODEsMTE0LDI0MCw2Myw4MSwxNTcsMTI1LDE3Miw2OCwxMTUsMjQwLDYzLDIxMSwyNCwzMywyNDQsNTUsMTE2LDI0MCw2MywyNDYsMTAxLDIxMCw3Myw0MywxMTcsMjQwLDYzLDE0Nyw4NCwxNDYsMTczLDMwLDExOCwyNDAsNjMsMTQwLDE4MCw5NywzMSwxOCwxMTksMjQwLDYzLDIwOSw4NSw2NSwxNTksNSwxMjAsMjQwLDYzLDkzLDgsNTAsNDUsMjQ5LDEyMCwyNDAsNjMsNTcsMTU2LDUyLDIwMSwyMzYsMTIxLDI0MCw2MywxMTgsMjI1LDczLDExNSwyMjQsMTIyLDI0MCw2Myw1NCwxNjgsMTE0LDQzLDIxMiwxMjMsMjQwLDYzLDE2MywxOTIsMTc1LDI0MSwxOTksMTI0LDI0MCw2MywyNDYsMjUwLDEsMTk4LDE4NywxMjUsMjQwLDYzLDExMywzOSwxMDYsMTY4LDE3NSwxMjYsMjQwLDYzLDEwMSwyMiwyMzMsMTUyLDE2MywxMjcsMjQwLDYzLDQ0LDE1MiwxMjcsMTUxLDE1MSwxMjgsMjQwLDYzLDQ4LDEyNSw0NiwxNjQsMTM5LDEyOSwyNDAsNjMsMjI2LDE0OSwyNDYsMTkwLDEyNywxMzAsMjQwLDYzLDE5NywxNzgsMjE2LDIzMSwxMTUsMTMxLDI0MCw2Myw5OCwxNjQsMjEzLDMwLDEwNCwxMzIsMjQwLDYzLDgyLDU5LDIzOCw5OSw5MiwxMzMsMjQwLDYzLDU4LDcyLDM1LDE4Myw4MCwxMzQsMjQwLDYzLDIwMCwxNTUsMTE3LDI0LDY5LDEzNSwyNDAsNjMsMTg1LDYsMjMwLDEzNSw1NywxMzYsMjQwLDYzLDIxNCw4OSwxMTcsNSw0NiwxMzcsMjQwLDYzLDI0MiwxMDEsMzYsMTQ1LDM0LDEzOCwyNDAsNjMsMjM3LDI1MSwyNDMsNDIsMjMsMTM5LDI0MCw2MywxODAsMjM2LDIyOCwyMTAsMTEsMTQwLDI0MCw2Myw2Myw5LDI0OCwxMzYsMCwxNDEsMjQwLDYzLDE0NywzNCw0Niw3NywyNDUsMTQxLDI0MCw2MywxOTIsOSwxMzYsMzEsMjM0LDE0MiwyNDAsNjMsMjI2LDE0Myw2LDAsMjIzLDE0MywyNDAsNjMsMzUsMTM0LDE3MCwyMzgsMjExLDE0NCwyNDAsNjMsMTg0LDE4OSwxMTYsMjM1LDIwMCwxNDUsMjQwLDYzLDIyNCw3LDEwMiwyNDYsMTg5LDE0NiwyNDAsNjMsMjMzLDUzLDEyNywxNSwxNzksMTQ3LDI0MCw2Myw0NCwyNSwxOTMsNTQsMTY4LDE0OCwyNDAsNjMsMTMsMTMxLDQ0LDEwOCwxNTcsMTQ5LDI0MCw2MywwLDY5LDE5NCwxNzUsMTQ2LDE1MCwyNDAsNjMsMTI3LDQ4LDEzMSwxLDEzNiwxNTEsMjQwLDYzLDIyLDIzLDExMiw5NywxMjUsMTUyLDI0MCw2Myw4OSwyMDIsMTM3LDIwNywxMTQsMTUzLDI0MCw2MywyMzQsMjcsMjA5LDc1LDEwNCwxNTQsMjQwLDYzLDExOSwyMjEsNzAsMjE0LDkzLDE1NSwyNDAsNjMsMTg1LDIyNCwyMzUsMTEwLDgzLDE1NiwyNDAsNjMsMTE5LDI0NywxOTIsMjEsNzMsMTU3LDI0MCw2MywxMzEsMjQzLDE5OCwyMDIsNjIsMTU4LDI0MCw2MywxODcsMTY2LDI1NCwxNDEsNTIsMTU5LDI0MCw2Myw5LDIyNywxMDQsOTUsNDIsMTYwLDI0MCw2Myw5OSwxMjIsNiw2MywzMiwxNjEsMjQwLDYzLDIwNSw2MiwyMTYsNDQsMjIsMTYyLDI0MCw2Myw4NSwyLDIyMyw0MCwxMiwxNjMsMjQwLDYzLDIxLDE1MSwyNyw1MSwyLDE2NCwyNDAsNjMsNTMsMjA3LDE0Miw3NSwyNDgsMTY0LDI0MCw2MywyMzMsMTI0LDU3LDExNCwyMzgsMTY1LDI0MCw2MywxMTAsMTE0LDI4LDE2NywyMjgsMTY2LDI0MCw2MywxNywxMzAsNTYsMjM0LDIxOCwxNjcsMjQwLDYzLDQwLDEyNiwxNDIsNTksMjA5LDE2OCwyNDAsNjMsMjUsNTcsMzEsMTU1LDE5OSwxNjksMjQwLDYzLDgzLDEzMywyMzUsOCwxOTAsMTcwLDI0MCw2Myw4MSw1MywyNDQsMTMyLDE4MCwxNzEsMjQwLDYzLDE1NiwyNyw1OCwxNSwxNzEsMTcyLDI0MCw2MywyMDAsMTAsMTkwLDE2NywxNjEsMTczLDI0MCw2MywxMTgsMjEzLDEyOCw3OCwxNTIsMTc0LDI0MCw2Myw4Miw3OCwxMzEsMywxNDMsMTc1LDI0MCw2MywyMiw3MiwxOTgsMTk4LDEzMywxNzYsMjQwLDYzLDEzNCwxNDksNzQsMTUyLDEyNCwxNzcsMjQwLDYzLDExNiw5LDE3LDEyMCwxMTUsMTc4LDI0MCw2MywxODgsMTE4LDI2LDEwMiwxMDYsMTc5LDI0MCw2Myw3MywxNzYsMTAzLDk4LDk3LDE4MCwyNDAsNjMsMTUsMTM3LDI0OSwxMDgsODgsMTgxLDI0MCw2MywxOCwyMTIsMjA4LDEzMyw3OSwxODIsMjQwLDYzLDk1LDEwMCwyMzgsMTcyLDcwLDE4MywyNDAsNjMsMTcsMTMsODMsMjI2LDYxLDE4NCwyNDAsNjMsNzgsMTYxLDI1NSwzNyw1MywxODUsMjQwLDYzLDcyLDI0NCwyNDQsMTE5LDQ0LDE4NiwyNDAsNjMsNjMsMjE3LDUxLDIxNiwzNSwxODcsMjQwLDYzLDEyNSwzNSwxODksNzAsMjcsMTg4LDI0MCw2Myw5MSwxNjYsMTQ1LDE5NSwxOCwxODksMjQwLDYzLDU5LDUzLDE3OCw3OCwxMCwxOTAsMjQwLDYzLDE0MiwxNjMsMzEsMjMyLDEsMTkxLDI0MCw2MywyMDYsMTk2LDIxOCwxNDMsMjQ5LDE5MSwyNDAsNjMsMTMzLDEwOCwyMjgsNjksMjQxLDE5MiwyNDAsNjMsNzEsMTEwLDYxLDEwLDIzMywxOTMsMjQwLDYzLDE4MCwxNTcsMjMwLDIyMCwyMjQsMTk0LDI0MCw2MywxMjIsMjA2LDIyNCwxODksMjE2LDE5NSwyNDAsNjMsODAsMjEyLDQ0LDE3MywyMDgsMTk2LDI0MCw2MywyNTMsMTMwLDIwMywxNzAsMjAwLDE5NywyNDAsNjMsODMsMTc0LDE4OSwxODIsMTkyLDE5OCwyNDAsNjMsNDYsNDIsNCwyMDksMTg0LDE5OSwyNDAsNjMsMTIxLDIwMiwxNTksMjQ5LDE3NiwyMDAsMjQwLDYzLDQyLDk5LDE0NSw0OCwxNjksMjAxLDI0MCw2Myw2NywyMDAsMjE3LDExNywxNjEsMjAyLDI0MCw2MywyMTIsMjA1LDEyMSwyMDEsMTUzLDIwMywyNDAsNjMsMjQ3LDcxLDExNCw0MywxNDYsMjA0LDI0MCw2MywyMTIsMTAsMTk2LDE1NSwxMzgsMjA1LDI0MCw2MywxNTgsMjM0LDExMSwyNiwxMzEsMjA2LDI0MCw2MywxNDgsMTg3LDExOCwxNjcsMTIzLDIwNywyNDAsNjMsMyw4MiwyMTcsNjYsMTE2LDIwOCwyNDAsNjMsNjgsMTMwLDE1MiwyMzYsMTA4LDIwOSwyNDAsNjMsMTg2LDMyLDE4MSwxNjQsMTAxLDIxMCwyNDAsNjMsMjE0LDEsNDgsMTA3LDk0LDIxMSwyNDAsNjMsMjIsMjUwLDksNjQsODcsMjEyLDI0MCw2MywyLDIyMiw2NywzNSw4MCwyMTMsMjQwLDYzLDUwLDEzMCwyMjIsMjAsNzMsMjE0LDI0MCw2Myw2OSwxODcsMjE4LDIwLDY2LDIxNSwyNDAsNjMsMjM2LDkzLDU3LDM1LDU5LDIxNiwyNDAsNjMsMjIzLDYyLDI1MSw2Myw1MiwyMTcsMjQwLDYzLDIzMCw1MCwzMywxMDcsNDUsMjE4LDI0MCw2MywyMTMsMTQsMTcyLDE2NCwzOCwyMTksMjQwLDYzLDEzNywxNjcsMTU2LDIzNiwzMSwyMjAsMjQwLDYzLDI0MCwyMDksMjQzLDY2LDI1LDIyMSwyNDAsNjMsMCw5OSwxNzgsMTY3LDE4LDIyMiwyNDAsNjMsMTkxLDQ3LDIxNywyNiwxMiwyMjMsMjQwLDYzLDYxLDEzLDEwNSwxNTYsNSwyMjQsMjQwLDYzLDE1MCwyMDgsOTgsNDQsMjU1LDIyNCwyNDAsNjMsMjQ1LDc4LDE5OSwyMDIsMjQ4LDIyNSwyNDAsNjMsMTQxLDkzLDE1MSwxMTksMjQyLDIyNiwyNDAsNjMsMTYyLDIwOSwyMTEsNTAsMjM2LDIyNywyNDAsNjMsMTI5LDEyOCwxMjUsMjUyLDIyOSwyMjgsMjQwLDYzLDEzMyw2MywxNDksMjEyLDIyMywyMjksMjQwLDYzLDIxLDIyOCwyNywxODcsMjE3LDIzMCwyNDAsNjMsMTYzLDY3LDE4LDE3NiwyMTEsMjMxLDI0MCw2MywxNzYsNTEsMTIxLDE3OSwyMDUsMjMyLDI0MCw2MywxOTgsMTM3LDgxLDE5NywxOTksMjMzLDI0MCw2MywxMjcsMjcsMTU2LDIyOSwxOTMsMjM0LDI0MCw2MywxMjYsMTkwLDg5LDIwLDE4OCwyMzUsMjQwLDYzLDExNiw3MiwxMzksODEsMTgyLDIzNiwyNDAsNjMsMzEsMTQzLDQ5LDE1NywxNzYsMjM3LDI0MCw2Myw3MiwxMDQsNzcsMjQ3LDE3MCwyMzgsMjQwLDYzLDE5NywxNjksMjIzLDk1LDE2NSwyMzksMjQwLDYzLDExOSw0MSwyMzMsMjE0LDE1OSwyNDAsMjQwLDYzLDc5LDE4OSwxMDYsOTIsMTU0LDI0MSwyNDAsNjMsNjksNTksMTAxLDI0MCwxNDgsMjQyLDI0MCw2MywwLDAsMCwwLDAsMCwyNDAsNjMsOTksMTIxLDIxNywxNDYsMTQzLDI0MywyNDAsNjMsMTkyLDIxNCwxOTksMTk1LDE1NCwyNDUsMjQxLDYzLDIxLDE4Myw0OSwxMCwyNTQsNiwyNDMsNjMsMTM5LDExNCwxNDEsMjQ5LDE2Miw0MCwyNDQsNjMsOTQsMjM2LDI0MCw4LDEyOSw5MSwyNDUsNjMsMjA1LDU5LDEyNywxMDIsMTU4LDE2MCwyNDYsNjMsMTc2LDIwNywxMDQsMjE1LDE2LDI0OSwyNDcsNjMsNjAsMTEwLDYxLDE2NSwyNTQsMTAxLDI0OSw2MywxNzMsMjExLDkwLDE1MywxNTksMjMyLDI1MCw2Myw0MSwxOTMsNzgsNyw2MiwxMzAsMjUyLDYzLDY3LDE5LDE2LDIzMSw1NSw1MiwyNTQsNjMsMCwwLDAsMCwwLDAsMCw2NCw5OSwxMjEsMjE3LDE0NiwxNDMsMjQzLDAsNjQsMTkyLDIxNCwxOTksMTk1LDE1NCwyNDUsMSw2NCwyMSwxODMsNDksMTAsMjU0LDYsMyw2NCwxMzksMTE0LDE0MSwyNDksMTYyLDQwLDQsNjQsOTQsMjM2LDI0MCw4LDEyOSw5MSw1LDY0LDIwNSw1OSwxMjcsMTAyLDE1OCwxNjAsNiw2NCwxNzYsMjA3LDEwNCwyMTUsMTYsMjQ5LDcsNjQsNjEsMTEwLDYxLDE2NSwyNTQsMTAxLDksNjQsMTczLDIxMSw5MCwxNTMsMTU5LDIzMiwxMCw2NCw0MSwxOTMsNzgsNyw2MiwxMzAsMTIsNjQsNjgsMTksMTYsMjMxLDU1LDUyLDE0LDY0LDAsMCwwLDAsMCwwLDE2LDY0LDk5LDEyMSwyMTcsMTQ2LDE0MywyNDMsMTYsNjQsMTkxLDIxNCwxOTksMTk1LDE1NCwyNDUsMTcsNjQsMjEsMTgzLDQ5LDEwLDI1NCw2LDE5LDY0LDEzOSwxMTQsMTQxLDI0OSwxNjIsNDAsMjAsNjQsOTMsMjM2LDI0MCw4LDEyOSw5MSwyMSw2NCwyMDUsNTksMTI3LDEwMiwxNTgsMTYwLDIyLDY0LDE3NywyMDcsMTA0LDIxNSwxNiwyNDksMjMsNjQsNjAsMTEwLDYxLDE2NSwyNTQsMTAxLDI1LDY0LDE3MywyMTEsOTAsMTUzLDE1OSwyMzIsMjYsNjQsNDIsMTkzLDc4LDcsNjIsMTMwLDI4LDY0LDY3LDE5LDE2LDIzMSw1NSw1MiwzMCw2NCwwLDAsMCwwLDAsMCwzMiw2NCw5OSwxMjEsMjE3LDE0NiwxNDMsMjQzLDMyLDY0LDE5MSwyMTQsMTk5LDE5NSwxNTQsMjQ1LDMzLDY0LDIxLDE4Myw0OSwxMCwyNTQsNiwzNSw2NCwxMzksMTE0LDE0MSwyNDksMTYyLDQwLDM2LDY0LDkzLDIzNiwyNDAsOCwxMjksOTEsMzcsNjQsMjA1LDU5LDEyNywxMDIsMTU4LDE2MCwzOCw2NCwxNzcsMjA3LDEwNCwyMTUsMTYsMjQ5LDM5LDY0LDYwLDExMCw2MSwxNjUsMjU0LDEwMSw0MSw2NCwxNzMsMjExLDkwLDE1MywxNTksMjMyLDQyLDY0LDQyLDE5Myw3OCw3LDYyLDEzMCw0NCw2NCw2NywxOSwxNiwyMzEsNTUsNTIsNDYsNjQsMCwwLDAsMCwwLDAsNDgsNjQsOTgsMTIxLDIxNywxNDYsMTQzLDI0Myw0OCw2NCwxOTMsMjE0LDE5OSwxOTUsMTU0LDI0NSw0OSw2NCwyMSwxODMsNDksMTAsMjU0LDYsNTEsNjQsMTM4LDExNCwxNDEsMjQ5LDE2Miw0MCw1Miw2NCw5NSwyMzYsMjQwLDgsMTI5LDkxLDUzLDY0LDIwNSw1OSwxMjcsMTAyLDE1OCwxNjAsNTQsNjQsMTc1LDIwNywxMDQsMjE1LDE2LDI0OSw1NSw2NCw2MiwxMTAsNjEsMTY1LDI1NCwxMDEsNTcsNjQsMTczLDIxMSw5MCwxNTMsMTU5LDIzMiw1OCw2NCw0MCwxOTMsNzgsNyw2MiwxMzAsNjAsNjQsNjksMTksMTYsMjMxLDU1LDUyLDYyLDY0LDAsMCwwLDAsMCwwLDY0LDY0LDk4LDEyMSwyMTcsMTQ2LDE0MywyNDMsNjQsNjQsMTkzLDIxNCwxOTksMTk1LDE1NCwyNDUsNjUsNjQsMjEsMTgzLDQ5LDEwLDI1NCw2LDY3LDY0LDEzOCwxMTQsMTQxLDI0OSwxNjIsNDAsNjgsNjQsOTUsMjM2LDI0MCw4LDEyOSw5MSw2OSw2NCwyMDUsNTksMTI3LDEwMiwxNTgsMTYwLDcwLDY0LDE3NSwyMDcsMTA0LDIxNSwxNiwyNDksNzEsNjQsNjIsMTEwLDYxLDE2NSwyNTQsMTAxLDczLDY0LDE3MywyMTEsOTAsMTUzLDE1OSwyMzIsNzQsNjQsNDAsMTkzLDc4LDcsNjIsMTMwLDc2LDY0LDY5LDE5LDE2LDIzMSw1NSw1Miw3OCw2NCwwLDAsMCwwLDAsMCw4MCw2NCw5OCwxMjEsMjE3LDE0NiwxNDMsMjQzLDgwLDY0LDE5MywyMTQsMTk5LDE5NSwxNTQsMjQ1LDgxLDY0LDIxLDE4Myw0OSwxMCwyNTQsNiw4Myw2NCwxMzgsMTE0LDE0MSwyNDksMTYyLDQwLDg0LDY0LDk1LDIzNiwyNDAsOCwxMjksOTEsODUsNjQsMjA1LDU5LDEyNywxMDIsMTU4LDE2MCw4Niw2NCwxNzUsMjA3LDEwNCwyMTUsMTYsMjQ5LDg3LDY0LDYyLDExMCw2MSwxNjUsMjU0LDEwMSw4OSw2NCwxNzMsMjExLDkwLDE1MywxNTksMjMyLDkwLDY0LDQwLDE5Myw3OCw3LDYyLDEzMCw5Miw2NCw2OSwxOSwxNiwyMzEsNTUsNTIsOTQsNjQsMCwwLDAsMCwwLDAsOTYsNjQsOTgsMTIxLDIxNywxNDYsMTQzLDI0Myw5Niw2NCwxOTMsMjE0LDE5OSwxOTUsMTU0LDI0NSw5Nyw2NCwyMSwxODMsNDksMTAsMjU0LDYsOTksNjQsMTM4LDExNCwxNDEsMjQ5LDE2Miw0MCwxMDAsNjQsOTUsMjM2LDI0MCw4LDEyOSw5MSwxMDEsNjQsMjA1LDU5LDEyNywxMDIsMTU4LDE2MCwxMDIsNjQsMTc1LDIwNywxMDQsMjE1LDE2LDI0OSwxMDMsNjQsNjIsMTEwLDYxLDE2NSwyNTQsMTAxLDEwNSw2NCwxNzMsMjExLDkwLDE1MywxNTksMjMyLDEwNiw2NCw0MCwxOTMsNzgsNyw2MiwxMzAsMTA4LDY0LDY5LDE5LDE2LDIzMSw1NSw1MiwxMTAsNjQsMCwwLDAsMCwwLDAsMTEyLDY0LDEwMSwxMjEsMjE3LDE0NiwxNDMsMjQzLDExMiw2NCwxOTAsMjE0LDE5OSwxOTUsMTU0LDI0NSwxMTMsNjQsMjEsMTgzLDQ5LDEwLDI1NCw2LDExNSw2NCwxNDEsMTE0LDE0MSwyNDksMTYyLDQwLDExNiw2NCw5MiwyMzYsMjQwLDgsMTI5LDkxLDExNyw2NCwyMDUsNTksMTI3LDEwMiwxNTgsMTYwLDExOCw2NCwxNzksMjA3LDEwNCwyMTUsMTYsMjQ5LDExOSw2NCw1OCwxMTAsNjEsMTY1LDI1NCwxMDEsMTIxLDY0LDE3MywyMTEsOTAsMTUzLDE1OSwyMzIsMTIyLDY0LDQ1LDE5Myw3OCw3LDYyLDEzMCwxMjQsNjQsNjQsMTksMTYsMjMxLDU1LDUyLDEyNiw2NCwwLDAsMCwwLDAsMCwxMjgsNjQsMTAxLDEyMSwyMTcsMTQ2LDE0MywyNDMsMTI4LDY0LDE5MCwyMTQsMTk5LDE5NSwxNTQsMjQ1LDEyOSw2NCwyMSwxODMsNDksMTAsMjU0LDYsMTMxLDY0LDE0MSwxMTQsMTQxLDI0OSwxNjIsNDAsMTMyLDY0LDkyLDIzNiwyNDAsOCwxMjksOTEsMTMzLDY0LDIwNSw1OSwxMjcsMTAyLDE1OCwxNjAsMTM0LDY0LDE3OSwyMDcsMTA0LDIxNSwxNiwyNDksMTM1LDY0LDU4LDExMCw2MSwxNjUsMjU0LDEwMSwxMzcsNjQsMTczLDIxMSw5MCwxNTMsMTU5LDIzMiwxMzgsNjQsNDUsMTkzLDc4LDcsNjIsMTMwLDE0MCw2NCw2NCwxOSwxNiwyMzEsNTUsNTIsMTQyLDY0LDAsMCwwLDAsMCwwLDE0NCw2NCwxMDEsMTIxLDIxNywxNDYsMTQzLDI0MywxNDQsNjQsMTkwLDIxNCwxOTksMTk1LDE1NCwyNDUsMTQ1LDY0LDIxLDE4Myw0OSwxMCwyNTQsNiwxNDcsNjQsMTQxLDExNCwxNDEsMjQ5LDE2Miw0MCwxNDgsNjQsOTIsMjM2LDI0MCw4LDEyOSw5MSwxNDksNjQsMjA1LDU5LDEyNywxMDIsMTU4LDE2MCwxNTAsNjQsMTc5LDIwNywxMDQsMjE1LDE2LDI0OSwxNTEsNjQsNzcsODQsMTA0LDEwMCwwLDAsMCwwLDg2LDEwMSwxMDgsMTExLDk5LDEwNSwxMTYsMTIxLDMyLDM3LDEwMCwzMiwzNywxMDAsMTAsMCw3MCw4NCw4MCwxMTIsMTE0LDExMSwxMjAsMTIxLDAsMCwwLDAsMCwwLDAsMCw3Miw4NCw4NCw4MCwxMTIsMTE0LDExMSwxMjAsMTIxLDAsMCwwLDAsMCwwLDAsOTksMTExLDEwOSwxMDksMCwwLDAsMCwzNSwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwwLDAsMCwwLDAsMCw3OCwxMTcsMTA5LDMyLDc3LDEwNSwxMTUsMTE1LDEwNSwxMTAsMTAzLDMyLDExMiw5NywxMTYsOTksMTA0LDEwMSwxMTUsNTgsMzIsMzcsMTAwLDEwLDAsMCwwLDAsMCwwLDAsMCwzNywxMTUsNTgsMzIsMTA4LDEwNSwxMTAsMTAxLDMyLDM3LDEwMCw1OCwzMiwxMTUsMTE2LDExNCwxMDUsMTEyLDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsMTAxLDExMCwxMTgsNDQsMzIsMTA4LDExMSwxMTEsMTEyLDQ0LDMyLDExMSwxMTQsMzIsMTE2LDk3LDEwNSwxMDgsMTAsMCwwLDExNiw5NywxMDUsMTA4LDAsMCwwLDAsMTE1LDExNiwxMTQsMTA1LDExMiwwLDAsMCwzNywxMTUsNTgsMzIsMTA4LDEwNSwxMTAsMTAxLDMyLDM3LDEwMCw1OCwzMiwxMDcsMTAxLDEwMSwxMTIsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk4LDEwMSwzMiwxMDEsMTEwLDExOCwzMiwxMTEsMTE0LDMyLDEwOCwxMTEsMTExLDExMiwxMCwwLDAsMTA4LDExMSwxMTEsMTEyLDAsMCwwLDAsMTAxLDExMCwxMTgsMCwwLDAsMCwwLDEwNywxMDEsMTAxLDExMiwwLDAsMCwwLDM3LDExNSw1OCwzMiwxMDgsMTA1LDExMCwxMDEsMzIsMzcsMTAwLDU4LDMyLDExMiw5NywxMTAsMTEwLDEwNSwxMTAsMTAzLDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsMTA4LDEwMSwxMDIsMTE2LDQ0LDMyLDExNCwxMDUsMTAzLDEwNCwxMTYsNDQsMzIsOTksMTAxLDExMCwxMTYsMTAxLDExNCw0NCwzMiwxMTEsMTE0LDMyLDk4LDEwMSwxMTYsMTE5LDEwMSwxMDEsMTEwLDMyLDQ1LDQ5LDQ4LDQ4LDMyLDk3LDExMCwxMDAsMzIsNDksNDgsNDgsMTAsMCwwLDAsMCwwLDAsMzIsOSwxNjAsMCwwLDAsMCwwLDExNCwxMDUsMTAzLDEwNCwxMTYsMCwwLDAsMTA4LDEwMSwxMDIsMTE2LDAsMCwwLDAsNzcsMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsMTEyLDk3LDExNiw5OSwxMDQsNTgsMzIsMzcsMTE1LDEwLDAsMCwwLDAsMCwwLDk5LDEwMSwxMTAsMTE2LDEwMSwxMTQsMCwwLDExMiw5NywxMTAsMCwwLDAsMCwwLDM3LDExNSw1OCwzMiwxMDgsMTA1LDExMCwxMDEsMzIsMzcsMTAwLDU4LDMyLDExMCwxMTEsMTE2LDEwMSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDk4LDEwMSwxMTYsMTE5LDEwMSwxMDEsMTEwLDMyLDQ4LDMyLDk3LDExMCwxMDAsMzIsNDksNTAsNTUsMTAsMCwwLDAsMCwxMTAsMTExLDExNiwxMDEsMCwwLDAsMCwzNywxMTUsNTgsMzIsMTA4LDEwNSwxMTAsMTAxLDMyLDM3LDEwMCw1OCwzMiw5NywxMDksMTEyLDEwOCwxMDUsMTAyLDEwNSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk4LDEwMSwzMiw5OCwxMDEsMTE2LDExOSwxMDEsMTAxLDExMCwzMiw0OCwzMiw5NywxMTAsMTAwLDMyLDM3LDEwMCwxMCwwLDAsMCwwLDk3LDEwOSwxMTIsMCwwLDAsMCwwLDM3LDExNSw1OCwzMiwxMDgsMTA1LDExMCwxMDEsMzIsMzcsMTAwLDU4LDMyLDk4LDk3LDEwMCwzMiwxMTIsOTcsMTE2LDk5LDEwNCwzMiwxMTEsMTEyLDExNiwxMDUsMTExLDExMCwzMiwzNywxMTUsMTAsMCwwLDAsMCwwLDAsMCwzNywxMTUsNTgsMzIsMTA4LDEwNSwxMTAsMTAxLDMyLDM3LDEwMCw1OCwzMiw3NywxMTcsMTE1LDExNiwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEyMSwzMiwxMTYsMTExLDExMCwxMDEsMzIsOTgsOTcsMTEwLDEwNywzMiwxMTEsMTE0LDMyLDEwMCwxMTQsMTE3LDEwOSwzMiwxMTUsMTAxLDExNiwzMiw5OCwxMDEsMTAyLDExMSwxMTQsMTAxLDMyLDk3LDExNSwxMTUsMTA1LDEwMywxMTAsMTA5LDEwMSwxMTAsMTE2LDEwLDAsMCwwLDAsMCwwLDY3LDExMSwxMTAsMTAyLDEwNSwxMDMsMTE3LDExNCw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDM3LDExNSwzMiwxMTAsMTExLDExNiwzMiwxMDIsMTExLDExNywxMTAsMTAwLDEwLDAsMCwwLDAsMCwwLDAsMCwzNywxMTUsNTgsMzIsMTA4LDEwNSwxMTAsMTAxLDMyLDM3LDEwMCw1OCwzMiw4MCwxMTQsMTExLDEwMywxMTQsOTcsMTA5LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsOTgsMTAxLDExNiwxMTksMTAxLDEwMSwxMTAsMzIsNDgsMzIsOTcsMTEwLDEwMCwzMiw0OSw1MCw1NSwxMCwwLDM3LDExNSw1OCwzMiwxMDgsMTA1LDExMCwxMDEsMzIsMzcsMTAwLDU4LDMyLDExNSwxMjEsMTEwLDExNiw5NywxMjAsMzIsMTAxLDExNCwxMTQsMTExLDExNCwxMCwwLDAsMCwwLDAsMCw2Myw2Myw2Myw2Myw2Myw2MywwLDAsMzcsMTE1LDU4LDMyLDEwOCwxMDUsMTEwLDEwMSwzMiwzNywxMDAsNTgsMzIsODQsMTExLDExMCwxMDEsMzIsOTgsOTcsMTEwLDEwNywzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDk4LDEwMSwxMTYsMTE5LDEwMSwxMDEsMTEwLDMyLDQ4LDMyLDk3LDExMCwxMDAsMzIsNDksNTAsNTUsMTAsMCwwLDAsMCwwLDAsMCwzNywxMTUsNTgsMzIsMTA4LDEwNSwxMTAsMTAxLDMyLDM3LDEwMCw1OCwzMiw3OCwxMTEsMzIsOTgsOTcsMTEwLDEwNywzMiwxMTAsMTE3LDEwOSw5OCwxMDEsMTE0LDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsMTAsMCwwLDAsMCwwLDAsOTgsOTcsMTEwLDEwNywwLDAsMCwwLDM3LDExNSw1OCwzMiwxMDgsMTA1LDExMCwxMDEsMzIsMzcsMTAwLDU4LDMyLDY4LDExNCwxMTcsMTA5LDMyLDExNSwxMDEsMTE2LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsOTgsMTAxLDExNiwxMTksMTAxLDEwMSwxMTAsMzIsNDgsMzIsOTcsMTEwLDEwMCwzMiw0OSw1MCw1NSwxMCwwLDAsMCwwLDAsMCwwLDAsMzcsMTE1LDU4LDMyLDEwOCwxMDUsMTEwLDEwMSwzMiwzNywxMDAsNTgsMzIsNzgsMTExLDMyLDEwMCwxMTQsMTE3LDEwOSwzMiwxMTUsMTAxLDExNiwzMiwxMTAsMTE3LDEwOSw5OCwxMDEsMTE0LDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsMTAsMCwwLDEwMCwxMTQsMTE3LDEwOSwxMTUsMTAxLDExNiwwLDM3LDExNSw1OCwzMiwxMDgsMTA1LDExMCwxMDEsMzIsMzcsMTAwLDU4LDMyLDc3LDExNywxMTUsMTE2LDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTIxLDMyLDEwMSwxMjAsOTcsOTksMTE2LDEwOCwxMjEsMzIsMTExLDExMCwxMDEsMzIsMTEyLDk3LDExNiw5OSwxMDQsMzIsMTEwLDk3LDEwOSwxMDEsMTAsMCwwLDAsMCwwLDAsMCwxMDAsMTAxLDEwMiw5NywxMTcsMTA4LDExNiwwLDgwLDExNCwxMTEsOTgsOTcsOTgsMTA4LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDEwOCwxMTEsMTExLDExMiwzMiwxMDUsMTEwLDMyLDk5LDExMSwxMTAsMTAyLDEwNSwxMDMsMTE3LDExNCw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTAyLDEwNSwxMDgsMTAxLDExNSwxMCwwLDAsMCwwLDM3LDExNSw1OCwzMiwxMDgsMTA1LDExMCwxMDEsMzIsMzcsMTAwLDU4LDMyLDc4LDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTAzLDEwNSwxMTgsMTAxLDExMCwxMCwwLDAsMCwwLDAsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwwLDAsNzEsNzAsNDksODAsNjUsODQsNjcsNzIsNDksNDgsNDgsMCw3Myw2OCwzNSw0OCw0OCw0OCw0OCw0OCw1MCwwLDAsMCwzNywxMTUsNTgsMzIsMTA4LDEwNSwxMTAsMTAxLDMyLDM3LDEwMCw1OCwzMiw3OCwxMTEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSwzMiwxMDMsMTA1LDExOCwxMDEsMTEwLDEwLDAsMCwwLDAsMCwwLDAsMCwxMDAsMTA1LDExNCwwLDAsMCwwLDAsNzAsNzMsODgsNzcsNjksNTgsMzIsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwzNCwxMDksOTcsMTEyLDM0LDMyLDEwNSwxMTAsMzIsODQsMTA1LDc3LDEwNSwxMDAsMTA1LDExNiwxMjEsMzIsOTksMTExLDExMCwxMDIsMTA1LDEwMyw0NiwxMCwwLDAsMCwwLDAsMTA5LDk3LDExMiwwLDAsMCwwLDAsNzAsNzMsODgsNzcsNjksNTgsMzIsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwzNCwxMTIsMTE0LDExMSwxMDMsOTgsOTcsMTE1LDEwMSwzNCwzMiwxMDUsMTEwLDMyLDg0LDEwNSw3NywxMDUsMTAwLDEwNSwxMTYsMTIxLDMyLDk5LDExMSwxMTAsMTAyLDEwNSwxMDMsNDYsMTAsMCwwLDAsMCwwLDAsMCwwLDExMiwxMTQsMTExLDEwMyw5OCw5NywxMTUsMTAxLDAsMCwwLDAsMCwwLDAsMCw3MCw3Myw4OCw3Nyw2OSw1OCwzMiw3MywxMDksMTEyLDEwOCwxMDksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwzNCwzNywxMTUsMzQsMzIsMTA1LDExMCwzMiw4NCwxMDUsNzcsMTA1LDEwMCwxMDUsMTE2LDEyMSwzMiw5OSwxMTEsMTEwLDEwMiwxMDUsMTAzLDQ2LDEwLDAsMCwwLDAsMCwxMDIsMTExLDExMCwxMTYsMCwwLDAsMCw4NSwxMTAsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMzIsOTcsMTE3LDEwMCwxMDUsMTExLDMyLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTAsMCwwLDAsMCwwLDAsMCwxMTUsMTExLDExNywxMTAsMTAwLDEwMiwxMTEsMTEwLDExNiwwLDAsMCwwLDAsMCwwLDcwLDczLDg4LDc3LDY5LDU4LDMyLDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMzIsMzQsOTcsMTA4LDExNiw5NywxMTUsMTE1LDEwNSwxMDMsMTEwLDM0LDMyLDEwNSwxMTAsMzIsODQsMTA1LDc3LDEwNSwxMDAsMTA1LDExNiwxMjEsMzIsOTksMTExLDExMCwxMDIsMTA1LDEwMyw0NiwxMCwwLDAsMCwwLDAsMCwwLDcxLDcwLDQ5LDgwLDY1LDg0LDY3LDcyLDQ5LDQ5LDQ4LDAsNzMsNjgsMzUsNDgsNDgsNDgsNDgsNDgsNTAsMCwwLDAsNzcsODQsMTE0LDEwNywwLDAsMCwwLDk3LDEwOCwxMTYsOTcsMTE1LDExNSwxMDUsMTAzLDExMCwwLDAsMCwwLDAsMCwwLDcwLDczLDg4LDc3LDY5LDU4LDMyLDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMzIsMzQsMTE3LDExMCwxMDAsMTAxLDEwMiwzNCwzMiwxMDUsMTEwLDMyLDg0LDEwNSw3NywxMDUsMTAwLDEwNSwxMTYsMTIxLDMyLDk5LDExMSwxMTAsMTAyLDEwNSwxMDMsNDYsMTAsMCwwLDAsMTE3LDExMCwxMDAsMTAxLDEwMiwwLDAsMCw3MCw3Myw4OCw3Nyw2OSw1OCwzMiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDM0LDM3LDExNSwzNCwzMiwxMDUsMTEwLDMyLDg0LDEwNSw3NywxMDUsMTAwLDEwNSwxMTYsMTIxLDMyLDk5LDExMSwxMTAsMTAyLDEwNSwxMDMsNDYsMTAsMCwwLDAsMCwwLDAsOTksMTExLDExMiwxMjEsOTgsOTcsMTEwLDEwNywwLDAsMCwwLDAsMCwwLDAsOTksMTExLDExMiwxMjEsMTAwLDExNCwxMTcsMTA5LDExNSwxMDEsMTE2LDAsMCwwLDAsMCw3MCw3Myw4OCw3Nyw2OSw1OCwzMiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDM0LDExNiwxMDUsMTA5LDEwMSwxMTEsMTE3LDExNiwzNCwzMiwxMDUsMTEwLDMyLDg0LDEwNSw3NywxMDUsMTAwLDEwNSwxMTYsMTIxLDMyLDk5LDExMSwxMTAsMTAyLDEwNSwxMDMsNDYsMTAsMCw5NywxMDAsMTAwLDMyLDExNiwxMTEsMzIsMTEyLDk3LDExNiwxMDQsMTA4LDEwNSwxMTUsMTE2LDU4LDMyLDM3LDExNSwxMCwwLDAsMCwwLDExNiwxMDUsMTA5LDEwMSwxMTEsMTE3LDExNiwwLDQ2LDAsMCwwLDAsMCwwLDAsMTE2LDEwNSwxMDksMTA1LDEwMCwxMDUsMTE2LDEyMSw0Niw5OSwxMDIsMTAzLDAsMCwwLDAsMTExLDExMiwxMTYsMCwwLDAsMCwwLDExNCw5OCwwLDAsMCwwLDAsMCwxMDksOTcsMTA1LDEwOCw5NywxMDAsMTAwLDExNCwwLDAsMCwwLDAsMCwwLDAsNDYsMTEyLDk3LDExNiwwLDAsMCwwLDExNCw5OCwwLDAsMCwwLDAsMF0sIFwiaThcIiwgQUxMT0NfTk9ORSwgUnVudGltZS5HTE9CQUxfQkFTRSlcbiAgICAgICAgY29uc3QgdGVtcERvdWJsZVB0ciA9IFJ1bnRpbWUuYWxpZ25NZW1vcnkoXG4gICAgICAgICAgICBhbGxvY2F0ZSgxMiwgJ2k4JywgQUxMT0NfU1RBVElDKSxcbiAgICAgICAgICAgIDhcbiAgICAgICAgKTtcbiAgICAgICAgYXNzZXJ0KHRlbXBEb3VibGVQdHIgJSA4ID09IDApO1xuXG4gICAgICAgIGxldCBfX19lcnJub19zdGF0ZSA9IDA7XG4gICAgICAgIGZ1bmN0aW9uIF9fX3NldEVyck5vKHZhbHVlKSB7XG4gICAgICAgICAgICAvLyBGb3IgY29udmVuaWVudCBzZXR0aW5nIGFuZCByZXR1cm5pbmcgb2YgZXJybm8uXG4gICAgICAgICAgICBIRUFQMzJbX19fZXJybm9fc3RhdGUgPj4gMl0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFBBVEggPSB7XG4gICAgICAgICAgICBzcGxpdFBhdGg6IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BsaXRQYXRoUmUgPSAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbiAgICAgICAgICAgICAgICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm9ybWFsaXplQXJyYXk6IGZ1bmN0aW9uKHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gICAgICAgICAgICAgICAgbGV0IHVwID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdCA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdCA9PT0gJy4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXArKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXAtLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gICAgICAgICAgICAgICAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFydHM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm9ybWFsaXplOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLycsXG4gICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nU2xhc2ggPSBwYXRoLnN1YnN0cigtMSkgPT09ICcvJztcbiAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgICAgICAgICAgICAgICBwYXRoID0gUEFUSC5ub3JtYWxpemVBcnJheShcbiAgICAgICAgICAgICAgICAgICAgcGF0aC5zcGxpdCgnLycpLmZpbHRlcihmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFwO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgIWlzQWJzb2x1dGVcbiAgICAgICAgICAgICAgICApLmpvaW4oJy8nKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9ICcuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoICs9ICcvJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkaXJuYW1lOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFBBVEguc3BsaXRQYXRoKHBhdGgpLFxuICAgICAgICAgICAgICAgICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgICAgICAgICAgICAgICBkaXIgPSByZXN1bHRbMV07XG4gICAgICAgICAgICAgICAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnLic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSXQgaGFzIGEgZGlybmFtZSwgc3RyaXAgdHJhaWxpbmcgc2xhc2hcbiAgICAgICAgICAgICAgICAgICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByb290ICsgZGlyO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJhc2VuYW1lOiBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgICAgICAgICAgICAgICAvLyBFTVNDUklQVEVOIHJldHVybiAnLycnIGZvciAnLycsIG5vdCBhbiBlbXB0eSBzdHJpbmdcbiAgICAgICAgICAgICAgICBpZiAocGF0aCA9PT0gJy8nKSByZXR1cm4gJy8nO1xuICAgICAgICAgICAgICAgIGxldCBmID0gUEFUSC5zcGxpdFBhdGgocGF0aClbMl07XG4gICAgICAgICAgICAgICAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZiA9IGYuc3Vic3RyKDAsIGYubGVuZ3RoIC0gZXh0Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4dG5hbWU6IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUEFUSC5zcGxpdFBhdGgocGF0aClbM107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgam9pbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBQQVRILm5vcm1hbGl6ZShcbiAgICAgICAgICAgICAgICAgICAgcGF0aHNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcvJylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc29sdmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCByZXNvbHZlZFBhdGggPSAnJyxcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGkgPj0gLTEgJiYgIXJlc29sdmVkQWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgIGktLVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gaSA+PSAwID8gYXJndW1lbnRzW2ldIDogRlMuY3dkKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncydcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkQWJzb2x1dGUgPSBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0IGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuICAgICAgICAgICAgICAgIHJlc29sdmVkUGF0aCA9IFBBVEgubm9ybWFsaXplQXJyYXkoXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkUGF0aC5zcGxpdCgnLycpLmZpbHRlcihmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFwO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgIXJlc29sdmVkQWJzb2x1dGVcbiAgICAgICAgICAgICAgICApLmpvaW4oJy8nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGggfHwgJy4nO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbGF0aXZlOiBmdW5jdGlvbihmcm9tLCB0bykge1xuICAgICAgICAgICAgICAgIGZyb20gPSBQQVRILnJlc29sdmUoZnJvbSkuc3Vic3RyKDEpO1xuICAgICAgICAgICAgICAgIHRvID0gUEFUSC5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0YXJ0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyLnNsaWNlKHN0YXJ0LCBlbmQgLSBzdGFydCArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG4gICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBsZXQgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBvdXRwdXRQYXJ0cyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBzYW1lUGFydHNMZW5ndGg7IGkgPCBmcm9tUGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0cHV0UGFydHMgPSBvdXRwdXRQYXJ0cy5jb25jYXQoXG4gICAgICAgICAgICAgICAgICAgIHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgVFRZID0ge1xuICAgICAgICAgICAgdHR5czogW10sXG4gICAgICAgICAgICBpbml0OiBmdW5jdGlvbigpIHt9LFxuICAgICAgICAgICAgc2h1dGRvd246IGZ1bmN0aW9uKCkge30sXG4gICAgICAgICAgICByZWdpc3RlcjogZnVuY3Rpb24oZGV2LCBvcHMpIHtcbiAgICAgICAgICAgICAgICBUVFkudHR5c1tkZXZdID0geyBpbnB1dDogW10sIG91dHB1dDogW10sIG9wczogb3BzIH07XG4gICAgICAgICAgICAgICAgRlMucmVnaXN0ZXJEZXZpY2UoZGV2LCBUVFkuc3RyZWFtX29wcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RyZWFtX29wczoge1xuICAgICAgICAgICAgICAgIG9wZW46IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0dHkgPSBUVFkudHR5c1tzdHJlYW0ubm9kZS5yZGV2XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0dHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT0RFVik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnR0eSA9IHR0eTtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNlZWthYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbG9zZTogZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZsdXNoIGFueSBwZW5kaW5nIGxpbmUgZGF0YVxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLnR0eS5vdXRwdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0udHR5Lm9wcy5wdXRfY2hhcihzdHJlYW0udHR5LCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlYWQ6IGZ1bmN0aW9uKHN0cmVhbSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmVhbS50dHkgfHwgIXN0cmVhbS50dHkub3BzLmdldF9jaGFyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTlhJTyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ5dGVzUmVhZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0cmVhbS50dHkub3BzLmdldF9jaGFyKHN0cmVhbS50dHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQgJiYgYnl0ZXNSZWFkID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUFHQUlOKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNSZWFkKys7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0ICsgaV0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVzUmVhZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm5vZGUudGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnl0ZXNSZWFkO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKHN0cmVhbSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3RyZWFtLnR0eSB8fCAhc3RyZWFtLnR0eS5vcHMucHV0X2NoYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOWElPKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS50dHkub3BzLnB1dF9jaGFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0udHR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0ICsgaV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm5vZGUudGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdF90dHlfb3BzOiB7XG4gICAgICAgICAgICAgICAgZ2V0X2NoYXI6IGZ1bmN0aW9uKHR0eSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXR0eS5pbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gd2luZG93LnByb21wdCgnSW5wdXQ6ICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHR0eS5pbnB1dCA9IGludEFycmF5RnJvbVN0cmluZyhyZXN1bHQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0dHkuaW5wdXQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHB1dF9jaGFyOiBmdW5jdGlvbih0dHksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHR0eS5vdXRwdXQuam9pbignJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHR5Lm91dHB1dCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHR5Lm91dHB1dC5wdXNoKFRUWS51dGY4LnByb2Nlc3NDQ2hhcih2YWwpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0X3R0eTFfb3BzOiB7XG4gICAgICAgICAgICAgICAgcHV0X2NoYXI6IGZ1bmN0aW9uKHR0eSwgdmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSAxMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKHR0eS5vdXRwdXQuam9pbignJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHR5Lm91dHB1dCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHR5Lm91dHB1dC5wdXNoKFRUWS51dGY4LnByb2Nlc3NDQ2hhcih2YWwpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgTUVNRlMgPSB7XG4gICAgICAgICAgICBDT05URU5UX09XTklORzogMSxcbiAgICAgICAgICAgIENPTlRFTlRfRkxFWElCTEU6IDIsXG4gICAgICAgICAgICBDT05URU5UX0ZJWEVEOiAzLFxuICAgICAgICAgICAgbW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBNRU1GUy5jcmVhdGVOb2RlKG51bGwsICcvJywgMTYzODQgfCAwbzc3NywgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3JlYXRlTm9kZTogZnVuY3Rpb24ocGFyZW50LCBuYW1lLCBtb2RlLCBkZXYpIHtcbiAgICAgICAgICAgICAgICBpZiAoRlMuaXNCbGtkZXYobW9kZSkgfHwgRlMuaXNGSUZPKG1vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gRlMuY3JlYXRlTm9kZShwYXJlbnQsIG5hbWUsIG1vZGUsIGRldik7XG4gICAgICAgICAgICAgICAgaWYgKEZTLmlzRGlyKG5vZGUubW9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5ub2RlX29wcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHI6IE1FTUZTLm5vZGVfb3BzLmdldGF0dHIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRhdHRyOiBNRU1GUy5ub2RlX29wcy5zZXRhdHRyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwOiBNRU1GUy5ub2RlX29wcy5sb29rdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICBta25vZDogTUVNRlMubm9kZV9vcHMubWtub2QsXG4gICAgICAgICAgICAgICAgICAgICAgICBta25vZDogTUVNRlMubm9kZV9vcHMubWtub2QsXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5hbWU6IE1FTUZTLm5vZGVfb3BzLnJlbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVubGluazogTUVNRlMubm9kZV9vcHMudW5saW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm1kaXI6IE1FTUZTLm5vZGVfb3BzLnJtZGlyLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGRpcjogTUVNRlMubm9kZV9vcHMucmVhZGRpcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbms6IE1FTUZTLm5vZGVfb3BzLnN5bWxpbmtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zdHJlYW1fb3BzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGxzZWVrOiBNRU1GUy5zdHJlYW1fb3BzLmxsc2Vla1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBub2RlLmNvbnRlbnRzID0ge307XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChGUy5pc0ZpbGUobm9kZS5tb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLm5vZGVfb3BzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cjogTUVNRlMubm9kZV9vcHMuZ2V0YXR0cixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldGF0dHI6IE1FTUZTLm5vZGVfb3BzLnNldGF0dHJcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zdHJlYW1fb3BzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGxzZWVrOiBNRU1GUy5zdHJlYW1fb3BzLmxsc2VlayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQ6IE1FTUZTLnN0cmVhbV9vcHMucmVhZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlOiBNRU1GUy5zdHJlYW1fb3BzLndyaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGU6IE1FTUZTLnN0cmVhbV9vcHMuYWxsb2NhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtbWFwOiBNRU1GUy5zdHJlYW1fb3BzLm1tYXBcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5jb250ZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBub2RlLmNvbnRlbnRNb2RlID0gTUVNRlMuQ09OVEVOVF9GTEVYSUJMRTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEZTLmlzTGluayhub2RlLm1vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUubm9kZV9vcHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyOiBNRU1GUy5ub2RlX29wcy5nZXRhdHRyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0YXR0cjogTUVNRlMubm9kZV9vcHMuc2V0YXR0cixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRsaW5rOiBNRU1GUy5ub2RlX29wcy5yZWFkbGlua1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBub2RlLnN0cmVhbV9vcHMgPSB7fTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEZTLmlzQ2hyZGV2KG5vZGUubW9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5ub2RlX29wcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHI6IE1FTUZTLm5vZGVfb3BzLmdldGF0dHIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRhdHRyOiBNRU1GUy5ub2RlX29wcy5zZXRhdHRyXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc3RyZWFtX29wcyA9IEZTLmNocmRldl9zdHJlYW1fb3BzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBub2RlLnRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBuZXcgbm9kZSB0byB0aGUgcGFyZW50XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuY29udGVudHNbbmFtZV0gPSBub2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbnN1cmVGbGV4aWJsZTogZnVuY3Rpb24obm9kZSkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmNvbnRlbnRNb2RlICE9PSBNRU1GUy5DT05URU5UX0ZMRVhJQkxFKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gbm9kZS5jb250ZW50cztcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5jb250ZW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGNvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5jb250ZW50TW9kZSA9IE1FTUZTLkNPTlRFTlRfRkxFWElCTEU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vZGVfb3BzOiB7XG4gICAgICAgICAgICAgICAgZ2V0YXR0cjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRyID0ge307XG4gICAgICAgICAgICAgICAgICAgIC8vIGRldmljZSBudW1iZXJzIHJldXNlIGlub2RlIG51bWJlcnMuXG4gICAgICAgICAgICAgICAgICAgIGF0dHIuZGV2ID0gRlMuaXNDaHJkZXYobm9kZS5tb2RlKSA/IG5vZGUuaWQgOiAxO1xuICAgICAgICAgICAgICAgICAgICBhdHRyLmlubyA9IG5vZGUuaWQ7XG4gICAgICAgICAgICAgICAgICAgIGF0dHIubW9kZSA9IG5vZGUubW9kZTtcbiAgICAgICAgICAgICAgICAgICAgYXR0ci5ubGluayA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGF0dHIudWlkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgYXR0ci5naWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICBhdHRyLnJkZXYgPSBub2RlLnJkZXY7XG4gICAgICAgICAgICAgICAgICAgIGlmIChGUy5pc0Rpcihub2RlLm1vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyLnNpemUgPSA0MDk2O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEZTLmlzRmlsZShub2RlLm1vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyLnNpemUgPSBub2RlLmNvbnRlbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChGUy5pc0xpbmsobm9kZS5tb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5zaXplID0gbm9kZS5saW5rLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuc2l6ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXR0ci5hdGltZSA9IG5ldyBEYXRlKG5vZGUudGltZXN0YW1wKTtcbiAgICAgICAgICAgICAgICAgICAgYXR0ci5tdGltZSA9IG5ldyBEYXRlKG5vZGUudGltZXN0YW1wKTtcbiAgICAgICAgICAgICAgICAgICAgYXR0ci5jdGltZSA9IG5ldyBEYXRlKG5vZGUudGltZXN0YW1wKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogSW4gb3VyIGltcGxlbWVudGF0aW9uLCBzdF9ibG9ja3MgPSBNYXRoLmNlaWwoc3Rfc2l6ZS9zdF9ibGtzaXplKSwgYnV0IHRoaXMgaXMgbm90IHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZC5cbiAgICAgICAgICAgICAgICAgICAgYXR0ci5ibGtzaXplID0gNDA5NjtcbiAgICAgICAgICAgICAgICAgICAgYXR0ci5ibG9ja3MgPSBNYXRoLmNlaWwoYXR0ci5zaXplIC8gYXR0ci5ibGtzaXplKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHI7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRhdHRyOiBmdW5jdGlvbihub2RlLCBhdHRyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyLm1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5tb2RlID0gYXR0ci5tb2RlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyLnRpbWVzdGFtcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRpbWVzdGFtcCA9IGF0dHIudGltZXN0YW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyLnNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgTUVNRlMuZW5zdXJlRmxleGlibGUobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50cyA9IG5vZGUuY29udGVudHM7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0ci5zaXplIDwgY29udGVudHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzLmxlbmd0aCA9IGF0dHIuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYXR0ci5zaXplID4gY29udGVudHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cy5wdXNoKDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb29rdXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9FTlQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWtub2Q6IGZ1bmN0aW9uKHBhcmVudCwgbmFtZSwgbW9kZSwgZGV2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNRU1GUy5jcmVhdGVOb2RlKHBhcmVudCwgbmFtZSwgbW9kZSwgZGV2KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlbmFtZTogZnVuY3Rpb24ob2xkX25vZGUsIG5ld19kaXIsIG5ld19uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIG92ZXJ3cml0aW5nIGEgZGlyZWN0b3J5IGF0IG5ld19uYW1lLCBtYWtlIHN1cmUgaXQncyBlbXB0eS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEZTLmlzRGlyKG9sZF9ub2RlLm1vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3X25vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19ub2RlID0gRlMubG9va3VwTm9kZShuZXdfZGlyLCBuZXdfbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld19ub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIG5ld19ub2RlLmNvbnRlbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT1RFTVBUWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGRvIHRoZSBpbnRlcm5hbCByZXdpcmluZ1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgb2xkX25vZGUucGFyZW50LmNvbnRlbnRzW29sZF9ub2RlLm5hbWVdO1xuICAgICAgICAgICAgICAgICAgICBvbGRfbm9kZS5uYW1lID0gbmV3X25hbWU7XG4gICAgICAgICAgICAgICAgICAgIG5ld19kaXIuY29udGVudHNbbmV3X25hbWVdID0gb2xkX25vZGU7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB1bmxpbms6IGZ1bmN0aW9uKHBhcmVudCwgbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFyZW50LmNvbnRlbnRzW25hbWVdO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcm1kaXI6IGZ1bmN0aW9uKHBhcmVudCwgbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gRlMubG9va3VwTm9kZShwYXJlbnQsIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGkgaW4gbm9kZS5jb250ZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PVEVNUFRZKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFyZW50LmNvbnRlbnRzW25hbWVdO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVhZGRpcjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gWycuJywgJy4uJ107XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5vZGUuY29udGVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5jb250ZW50cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cmllcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN5bWxpbms6IGZ1bmN0aW9uKHBhcmVudCwgbmV3bmFtZSwgb2xkcGF0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gTUVNRlMuY3JlYXRlTm9kZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAwbzc3NyB8IDQwOTYwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBub2RlLmxpbmsgPSBvbGRwYXRoO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlYWRsaW5rOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghRlMuaXNMaW5rKG5vZGUubW9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUubGluaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RyZWFtX29wczoge1xuICAgICAgICAgICAgICAgIHJlYWQ6IGZ1bmN0aW9uKHN0cmVhbSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBzdHJlYW0ubm9kZS5jb250ZW50cztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IGNvbnRlbnRzLmxlbmd0aCkgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemUgPSBNYXRoLm1pbihjb250ZW50cy5sZW5ndGggLSBwb3NpdGlvbiwgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHNpemUgPj0gMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXplID4gOCAmJiBjb250ZW50cy5zdWJhcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9uLXRyaXZpYWwgYW5kIHR5cGVkIGFycmF5XG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzLnN1YmFycmF5KHBvc2l0aW9uLCBwb3NpdGlvbiArIHNpemUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldCArIGldID0gY29udGVudHNbcG9zaXRpb24gKyBpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbihcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgY2FuT3duXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBzdHJlYW0ubm9kZTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS50aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudHMgPSBub2RlLmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5zdWJhcnJheVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgcmVwbGFjZSBpdCB3aXRoIHRoZSBuZXcgZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbk93biAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5idWZmZXIgPT09IEhFQVA4LmJ1ZmZlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb250ZW50cyA9IGJ1ZmZlcjsgLy8gdGhpcyBpcyBhIHN1YmFycmF5IG9mIHRoZSBoZWFwLCBhbmQgd2UgY2FuIG93biBpdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY29udGVudE1vZGUgPSBNRU1GUy5DT05URU5UX09XTklORztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb250ZW50cyA9IG5ldyBVaW50OEFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNvbnRlbnRNb2RlID0gTUVNRlMuQ09OVEVOVF9GSVhFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgTUVNRlMuZW5zdXJlRmxleGlibGUobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50cyA9IG5vZGUuY29udGVudHM7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjb250ZW50cy5sZW5ndGggPCBwb3NpdGlvbikgY29udGVudHMucHVzaCgwKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbcG9zaXRpb24gKyBpXSA9IGJ1ZmZlcltvZmZzZXQgKyBpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVuZ3RoO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbGxzZWVrOiBmdW5jdGlvbihzdHJlYW0sIG9mZnNldCwgd2hlbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NpdGlvbiA9IG9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdoZW5jZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU0VFS19DVVIuXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSBzdHJlYW0ucG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2hlbmNlID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTRUVLX0VORC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGUy5pc0ZpbGUoc3RyZWFtLm5vZGUubW9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSBzdHJlYW0ubm9kZS5jb250ZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdHJlYW0udW5nb3R0ZW4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFsbG9jYXRlOiBmdW5jdGlvbihzdHJlYW0sIG9mZnNldCwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIE1FTUZTLmVuc3VyZUZsZXhpYmxlKHN0cmVhbS5ub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBzdHJlYW0ubm9kZS5jb250ZW50cztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXQgPSBvZmZzZXQgKyBsZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChsaW1pdCA+IGNvbnRlbnRzLmxlbmd0aCkgY29udGVudHMucHVzaCgwKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1tYXA6IGZ1bmN0aW9uKHN0cmVhbSwgYnVmZmVyLCBsZW5ndGgsIHBvc2l0aW9uLCBmbGFncykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUZTLmlzRmlsZShzdHJlYW0ubm9kZS5tb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PREVWKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgcHRyO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYWxsb2NhdGVkO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudHMgPSBzdHJlYW0ubm9kZS5jb250ZW50cztcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSBtYWtlIGEgbmV3IGNvcHkgd2hlbiBNQVBfUFJJVkFURSBpcyBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICEoZmxhZ3MgJiAyKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRlbnRzLmJ1ZmZlciA9PT0gYnVmZmVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMuYnVmZmVyID09PSBidWZmZXIuYnVmZmVyKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGVtdWxhdGUgTUFQX1NIQVJFRCB3aGVuIHRoZSBmaWxlIGlzIG5vdCBiYWNrZWQgYnkgdGhlIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UncmUgbWFwcGluZyB0byAoZS5nLiB0aGUgSEVBUCBidWZmZXIpLlxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSBjb250ZW50cy5ieXRlT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGF2b2lkIHVubmVjZXNzYXJ5IHNsaWNlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArIGxlbmd0aCA8IGNvbnRlbnRzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRzLnN1YmFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gY29udGVudHMuc3ViYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICsgbGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArIGxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSBfbWFsbG9jKGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXB0cikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT01FTSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuc2V0KGNvbnRlbnRzLCBwdHIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHB0cjogcHRyLCBhbGxvY2F0ZWQ6IGFsbG9jYXRlZCB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgX3N0ZGluID0gYWxsb2NhdGUoMSwgJ2kzMionLCBBTExPQ19TVEFUSUMpO1xuICAgICAgICBjb25zdCBfc3Rkb3V0ID0gYWxsb2NhdGUoMSwgJ2kzMionLCBBTExPQ19TVEFUSUMpO1xuICAgICAgICB2YXIgX3N0ZGVyciA9IGFsbG9jYXRlKDEsICdpMzIqJywgQUxMT0NfU1RBVElDKTtcbiAgICAgICAgZnVuY3Rpb24gX2ZmbHVzaCgpIHtcbiAgICAgICAgICAgIC8vIGludCBmZmx1c2goRklMRSAqc3RyZWFtKTtcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDAwOTUzOTkvZnVuY3Rpb25zL2ZmbHVzaC5odG1sXG4gICAgICAgICAgICAvLyB3ZSBkb24ndCBjdXJyZW50bHkgcGVyZm9ybSBhbnkgdXNlci1zcGFjZSBidWZmZXJpbmcgb2YgZGF0YVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IEZTID0ge1xuICAgICAgICAgICAgcm9vdDogbnVsbCxcbiAgICAgICAgICAgIG1vdW50czogW10sXG4gICAgICAgICAgICBkZXZpY2VzOiBbbnVsbF0sXG4gICAgICAgICAgICBzdHJlYW1zOiBbbnVsbF0sXG4gICAgICAgICAgICBuZXh0SW5vZGU6IDEsXG4gICAgICAgICAgICBuYW1lVGFibGU6IG51bGwsXG4gICAgICAgICAgICBjdXJyZW50UGF0aDogJy8nLFxuICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaWdub3JlUGVybWlzc2lvbnM6IHRydWUsXG4gICAgICAgICAgICAvLyBlcnJvciBpbnN0YW5jZVxuICAgICAgICAgICAgRXJybm9FcnJvcjogZnVuY3Rpb24gRXJybm9FcnJvcihlcnJvck51bWJlciwgZGV0YWlscykge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JOdW1iZXIgPSBlcnJvck51bWJlcjtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBFUlJOT19DT0RFUykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoRVJSTk9fQ09ERVNba2V5XSA9PT0gZXJyb3JOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgcHJlZml4ICdFJ1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2RlID0ga2V5LnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IEVSUk5PX01FU1NBR0VTW2Vycm9yTnVtYmVyXTtcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzIHx8ICcnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhbmRsZUZTRXJyb3I6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGUgKyAnIDogJyArIG5ldyBFcnJvcigpLnN0YWNrO1xuICAgICAgICAgICAgICAgIHJldHVybiBfX19zZXRFcnJObyhlLmVycm5vKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb29rdXBQYXRoOiBmdW5jdGlvbihwYXRoLCBvcHRzKSB7XG4gICAgICAgICAgICAgICAgcGF0aCA9IFBBVEgucmVzb2x2ZShGUy5jd2QoKSwgcGF0aCk7XG4gICAgICAgICAgICAgICAgb3B0cyA9IG9wdHMgfHwgeyByZWN1cnNlX2NvdW50OiAwIH07XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMucmVjdXJzZV9jb3VudCA+IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbWF4IHJlY3Vyc2l2ZSBsb29rdXAgb2YgOFxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTE9PUCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwYXRoXG4gICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBQQVRILm5vcm1hbGl6ZUFycmF5KFxuICAgICAgICAgICAgICAgICAgICBwYXRoLnNwbGl0KCcvJykuZmlsdGVyKGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIXA7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgLy8gc3RhcnQgYXQgdGhlIHJvb3RcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IEZTLnJvb3Q7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRfcGF0aCA9ICcvJztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzbGFzdCA9IGkgPT09IHBhcnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc2xhc3QgJiYgb3B0cy5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3AgcmVzb2x2aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gRlMubG9va3VwTm9kZShjdXJyZW50LCBwYXJ0c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcGF0aCA9IFBBVEguam9pbihjdXJyZW50X3BhdGgsIHBhcnRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgLy8ganVtcCB0byB0aGUgbW91bnQncyByb290IG5vZGUgaWYgdGhpcyBpcyBhIG1vdW50cG9pbnRcbiAgICAgICAgICAgICAgICAgICAgaWYgKEZTLmlzTW91bnRwb2ludChjdXJyZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubW91bnQucm9vdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBmb2xsb3cgc3ltbGlua3NcbiAgICAgICAgICAgICAgICAgICAgLy8gYnkgZGVmYXVsdCwgbG9va3VwUGF0aCB3aWxsIG5vdCBmb2xsb3cgYSBzeW1saW5rIGlmIGl0IGlzIHRoZSBmaW5hbCBwYXRoIGNvbXBvbmVudC5cbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0dGluZyBvcHRzLmZvbGxvdyA9IHRydWUgd2lsbCBvdmVycmlkZSB0aGlzIGJlaGF2aW9yLlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzbGFzdCB8fCBvcHRzLmZvbGxvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChGUy5pc0xpbmsoY3VycmVudC5tb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBGUy5yZWFkbGluayhjdXJyZW50X3BhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcGF0aCA9IFBBVEgucmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUSC5kaXJuYW1lKGN1cnJlbnRfcGF0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgoY3VycmVudF9wYXRoLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2VfY291bnQ6IG9wdHMucmVjdXJzZV9jb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBsb29rdXAubm9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQrKyA+IDQwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbWl0IG1heCBjb25zZWN1dGl2ZSBzeW1saW5rcyB0byA0MCAoU1lNTE9PUF9NQVgpLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTE9PUCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHBhdGg6IGN1cnJlbnRfcGF0aCwgbm9kZTogY3VycmVudCB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldFBhdGg6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGF0aDtcbiAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoRlMuaXNSb290KG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUEFUSC5qb2luKG5vZGUubW91bnQubW91bnRwb2ludCwgcGF0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5vZGUubW91bnQubW91bnRwb2ludDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aCA/IFBBVEguam9pbihub2RlLm5hbWUsIHBhdGgpIDogbm9kZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhc2hOYW1lOiBmdW5jdGlvbihwYXJlbnRpZCwgbmFtZSkge1xuICAgICAgICAgICAgICAgIGxldCBoYXNoID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2ggKyBuYW1lLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgocGFyZW50aWQgKyBoYXNoKSA+Pj4gMCkgJSBGUy5uYW1lVGFibGUubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhc2hBZGROb2RlOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzaCA9IEZTLmhhc2hOYW1lKG5vZGUucGFyZW50LmlkLCBub2RlLm5hbWUpO1xuICAgICAgICAgICAgICAgIG5vZGUubmFtZV9uZXh0ID0gRlMubmFtZVRhYmxlW2hhc2hdO1xuICAgICAgICAgICAgICAgIEZTLm5hbWVUYWJsZVtoYXNoXSA9IG5vZGU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzaFJlbW92ZU5vZGU6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNoID0gRlMuaGFzaE5hbWUobm9kZS5wYXJlbnQuaWQsIG5vZGUubmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKEZTLm5hbWVUYWJsZVtoYXNoXSA9PT0gbm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBGUy5uYW1lVGFibGVbaGFzaF0gPSBub2RlLm5hbWVfbmV4dDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IEZTLm5hbWVUYWJsZVtoYXNoXTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Lm5hbWVfbmV4dCA9PT0gbm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQubmFtZV9uZXh0ID0gbm9kZS5uYW1lX25leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uYW1lX25leHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9va3VwTm9kZTogZnVuY3Rpb24ocGFyZW50LCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyID0gRlMubWF5TG9va3VwKHBhcmVudCk7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihlcnIsIG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNoID0gRlMuaGFzaE5hbWUocGFyZW50LmlkLCBuYW1lKTtcbiAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IEZTLm5hbWVUYWJsZVtoYXNoXTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUubmFtZV9uZXh0XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVOYW1lID0gbm9kZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5wYXJlbnQuaWQgPT09IHBhcmVudC5pZCAmJiBub2RlTmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgZmFpbGVkIHRvIGZpbmQgaXQgaW4gdGhlIGNhY2hlLCBjYWxsIGludG8gdGhlIFZGU1xuICAgICAgICAgICAgICAgIHJldHVybiBGUy5sb29rdXAocGFyZW50LCBuYW1lKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjcmVhdGVOb2RlOiBmdW5jdGlvbihwYXJlbnQsIG5hbWUsIG1vZGUsIHJkZXYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogRlMubmV4dElub2RlKyssXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IG1vZGUsXG4gICAgICAgICAgICAgICAgICAgIG5vZGVfb3BzOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtX29wczoge30sXG4gICAgICAgICAgICAgICAgICAgIHJkZXY6IHJkZXYsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbW91bnQ6IG51bGxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IG5vZGU7IC8vIHJvb3Qgbm9kZSBzZXRzIHBhcmVudCB0byBpdHNlbGZcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICAgICAgbm9kZS5tb3VudCA9IHBhcmVudC5tb3VudDtcbiAgICAgICAgICAgICAgICAvLyBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgY29uc3QgcmVhZE1vZGUgPSAyOTIgfCA3MztcbiAgICAgICAgICAgICAgICBjb25zdCB3cml0ZU1vZGUgPSAxNDY7XG4gICAgICAgICAgICAgICAgLy8gTk9URSB3ZSBtdXN0IHVzZSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyBpbnN0ZWFkIG9mIGluZGl2aWR1YWwgY2FsbHMgdG9cbiAgICAgICAgICAgICAgICAvLyBPYmplY3QuZGVmaW5lUHJvcGVydHkgaW4gb3JkZXIgdG8gbWFrZSBjbG9zdXJlIGNvbXBpbGVyIGhhcHB5XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobm9kZSwge1xuICAgICAgICAgICAgICAgICAgICByZWFkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobm9kZS5tb2RlICYgcmVhZE1vZGUpID09PSByZWFkTW9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChub2RlLm1vZGUgfD0gcmVhZE1vZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKG5vZGUubW9kZSAmPSB+cmVhZE1vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB3cml0ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5vZGUubW9kZSAmIHdyaXRlTW9kZSkgPT09IHdyaXRlTW9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChub2RlLm1vZGUgfD0gd3JpdGVNb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChub2RlLm1vZGUgJj0gfndyaXRlTW9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGlzRm9sZGVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGUy5pc0Rpcihub2RlLm1vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBpc0RldmljZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRlMuaXNDaHJkZXYobm9kZS5tb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIEZTLmhhc2hBZGROb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlc3Ryb3lOb2RlOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICAgICAgRlMuaGFzaFJlbW92ZU5vZGUobm9kZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNSb290OiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUgPT09IG5vZGUucGFyZW50O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzTW91bnRwb2ludDogZnVuY3Rpb24obm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLm1vdW50ZWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNGaWxlOiBmdW5jdGlvbihtb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChtb2RlICYgNjE0NDApID09PSAzMjc2ODtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0RpcjogZnVuY3Rpb24obW9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAobW9kZSAmIDYxNDQwKSA9PT0gMTYzODQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNMaW5rOiBmdW5jdGlvbihtb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChtb2RlICYgNjE0NDApID09PSA0MDk2MDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0NocmRldjogZnVuY3Rpb24obW9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAobW9kZSAmIDYxNDQwKSA9PT0gODE5MjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0Jsa2RldjogZnVuY3Rpb24obW9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAobW9kZSAmIDYxNDQwKSA9PT0gMjQ1NzY7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNGSUZPOiBmdW5jdGlvbihtb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChtb2RlICYgNjE0NDApID09PSA0MDk2O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU29ja2V0OiBmdW5jdGlvbihtb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChtb2RlICYgNDkxNTIpID09PSA0OTE1MjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmbGFnTW9kZXM6IHtcbiAgICAgICAgICAgICAgICByOiAwLFxuICAgICAgICAgICAgICAgIHJzOiAxMDUyNjcyLFxuICAgICAgICAgICAgICAgICdyKyc6IDIsXG4gICAgICAgICAgICAgICAgdzogNTc3LFxuICAgICAgICAgICAgICAgIHd4OiA3MDUsXG4gICAgICAgICAgICAgICAgeHc6IDcwNSxcbiAgICAgICAgICAgICAgICAndysnOiA1NzgsXG4gICAgICAgICAgICAgICAgJ3d4Kyc6IDcwNixcbiAgICAgICAgICAgICAgICAneHcrJzogNzA2LFxuICAgICAgICAgICAgICAgIGE6IDEwODksXG4gICAgICAgICAgICAgICAgYXg6IDEyMTcsXG4gICAgICAgICAgICAgICAgeGE6IDEyMTcsXG4gICAgICAgICAgICAgICAgJ2ErJzogMTA5MCxcbiAgICAgICAgICAgICAgICAnYXgrJzogMTIxOCxcbiAgICAgICAgICAgICAgICAneGErJzogMTIxOFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1vZGVTdHJpbmdUb0ZsYWdzOiBmdW5jdGlvbihzdHIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmbGFncyA9IEZTLmZsYWdNb2Rlc1tzdHJdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmxhZ3MgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBmaWxlIG9wZW4gbW9kZTogJyArIHN0cik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmbGFncztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmbGFnc1RvUGVybWlzc2lvblN0cmluZzogZnVuY3Rpb24oZmxhZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjY21vZGUgPSBmbGFnICYgMjA5NzE1NTtcbiAgICAgICAgICAgICAgICBsZXQgcGVybXMgPSBbJ3InLCAndycsICdydyddW2FjY21vZGVdO1xuICAgICAgICAgICAgICAgIGlmIChmbGFnICYgNTEyKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlcm1zICs9ICd3JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBlcm1zO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vZGVQZXJtaXNzaW9uczogZnVuY3Rpb24obm9kZSwgcGVybXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoRlMuaWdub3JlUGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHJldHVybiAwIGlmIGFueSB1c2VyLCBncm91cCBvciBvd25lciBiaXRzIGFyZSBzZXQuXG4gICAgICAgICAgICAgICAgaWYgKHBlcm1zLmluZGV4T2YoJ3InKSAhPT0gLTEgJiYgIShub2RlLm1vZGUgJiAyOTIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJOT19DT0RFUy5FQUNDRVM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtcy5pbmRleE9mKCd3JykgIT09IC0xICYmICEobm9kZS5tb2RlICYgMTQ2KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJSTk9fQ09ERVMuRUFDQ0VTO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybXMuaW5kZXhPZigneCcpICE9PSAtMSAmJiAhKG5vZGUubW9kZSAmIDczKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJSTk9fQ09ERVMuRUFDQ0VTO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXlMb29rdXA6IGZ1bmN0aW9uKGRpcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBGUy5ub2RlUGVybWlzc2lvbnMoZGlyLCAneCcpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heUNyZWF0ZTogZnVuY3Rpb24oZGlyLCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgRlMubG9va3VwTm9kZShkaXIsIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJSTk9fQ09ERVMuRUVYSVNUO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZTLm5vZGVQZXJtaXNzaW9ucyhkaXIsICd3eCcpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heURlbGV0ZTogZnVuY3Rpb24oZGlyLCBuYW1lLCBpc2Rpcikge1xuICAgICAgICAgICAgICAgIGxldCBub2RlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBGUy5sb29rdXBOb2RlKGRpciwgbmFtZSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5lcnJubztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyID0gRlMubm9kZVBlcm1pc3Npb25zKGRpciwgJ3d4Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNkaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFGUy5pc0Rpcihub2RlLm1vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJSTk9fQ09ERVMuRU5PVERJUjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoRlMuaXNSb290KG5vZGUpIHx8IEZTLmdldFBhdGgobm9kZSkgPT09IEZTLmN3ZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJSTk9fQ09ERVMuRUJVU1k7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoRlMuaXNEaXIobm9kZS5tb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk5PX0NPREVTLkVJU0RJUjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXlPcGVuOiBmdW5jdGlvbihub2RlLCBmbGFncykge1xuICAgICAgICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJSTk9fQ09ERVMuRU5PRU5UO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoRlMuaXNMaW5rKG5vZGUubW9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk5PX0NPREVTLkVMT09QO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoRlMuaXNEaXIobm9kZS5tb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MgJiAyMDk3MTU1KSAhPT0gMCB8fCAvLyBvcGVuaW5nIGZvciB3cml0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgJiA1MTJcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJSTk9fQ09ERVMuRUlTRElSO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBGUy5ub2RlUGVybWlzc2lvbnMoXG4gICAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICAgIEZTLmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKGZsYWdzKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTUFYX09QRU5fRkRTOiA0MDk2LFxuICAgICAgICAgICAgbmV4dGZkOiBmdW5jdGlvbihmZF9zdGFydCwgZmRfZW5kKSB7XG4gICAgICAgICAgICAgICAgZmRfc3RhcnQgPSBmZF9zdGFydCB8fCAxO1xuICAgICAgICAgICAgICAgIGZkX2VuZCA9IGZkX2VuZCB8fCBGUy5NQVhfT1BFTl9GRFM7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZmQgPSBmZF9zdGFydDsgZmQgPD0gZmRfZW5kOyBmZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghRlMuc3RyZWFtc1tmZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTUZJTEUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldFN0cmVhbTogZnVuY3Rpb24oZmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRlMuc3RyZWFtc1tmZF07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3JlYXRlU3RyZWFtOiBmdW5jdGlvbihzdHJlYW0sIGZkX3N0YXJ0LCBmZF9lbmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZCA9IEZTLm5leHRmZChmZF9zdGFydCwgZmRfZW5kKTtcbiAgICAgICAgICAgICAgICBzdHJlYW0uZmQgPSBmZDtcbiAgICAgICAgICAgICAgICAvLyBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyZWFtLCB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtLm5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ubm9kZSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaXNSZWFkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoc3RyZWFtLmZsYWdzICYgMjA5NzE1NSkgIT09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGlzV3JpdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChzdHJlYW0uZmxhZ3MgJiAyMDk3MTU1KSAhPT0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaXNBcHBlbmQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5mbGFncyAmIDEwMjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBGUy5zdHJlYW1zW2ZkXSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsb3NlU3RyZWFtOiBmdW5jdGlvbihmZCkge1xuICAgICAgICAgICAgICAgIEZTLnN0cmVhbXNbZmRdID0gbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjaHJkZXZfc3RyZWFtX29wczoge1xuICAgICAgICAgICAgICAgIG9wZW46IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXZpY2UgPSBGUy5nZXREZXZpY2Uoc3RyZWFtLm5vZGUucmRldik7XG4gICAgICAgICAgICAgICAgICAgIC8vIG92ZXJyaWRlIG5vZGUncyBzdHJlYW0gb3BzIHdpdGggdGhlIGRldmljZSdzXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbS5zdHJlYW1fb3BzID0gZGV2aWNlLnN0cmVhbV9vcHM7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcndhcmQgdGhlIG9wZW4gY2FsbFxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLnN0cmVhbV9vcHMub3Blbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnN0cmVhbV9vcHMub3BlbihzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsbHNlZWs6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FU1BJUEUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYWpvcjogZnVuY3Rpb24oZGV2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRldiA+PiA4O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1pbm9yOiBmdW5jdGlvbihkZXYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGV2ICYgMHhmZjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYWtlZGV2OiBmdW5jdGlvbihtYSwgbWkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKG1hIDw8IDgpIHwgbWk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVnaXN0ZXJEZXZpY2U6IGZ1bmN0aW9uKGRldiwgb3BzKSB7XG4gICAgICAgICAgICAgICAgRlMuZGV2aWNlc1tkZXZdID0geyBzdHJlYW1fb3BzOiBvcHMgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXREZXZpY2U6IGZ1bmN0aW9uKGRldikge1xuICAgICAgICAgICAgICAgIHJldHVybiBGUy5kZXZpY2VzW2Rldl07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3luY2ZzOiBmdW5jdGlvbihwb3B1bGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBvcHVsYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcG9wdWxhdGU7XG4gICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gRlMubW91bnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBkb25lID0gZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgrK2NvbXBsZXRlZCA+PSB0b3RhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8vIHN5bmMgYWxsIG1vdW50c1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgRlMubW91bnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vdW50ID0gRlMubW91bnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW1vdW50LnR5cGUuc3luY2ZzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbW91bnQudHlwZS5zeW5jZnMobW91bnQsIHBvcHVsYXRlLCBkb25lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbW91bnQ6IGZ1bmN0aW9uKHR5cGUsIG9wdHMsIG1vdW50cG9pbnQpIHtcbiAgICAgICAgICAgICAgICBsZXQgbG9va3VwO1xuICAgICAgICAgICAgICAgIGlmIChtb3VudHBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgobW91bnRwb2ludCwgeyBmb2xsb3c6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgICAgICBtb3VudHBvaW50ID0gbG9va3VwLnBhdGg7IC8vIHVzZSB0aGUgYWJzb2x1dGUgcGF0aFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtb3VudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgb3B0czogb3B0cyxcbiAgICAgICAgICAgICAgICAgICAgbW91bnRwb2ludDogbW91bnRwb2ludCxcbiAgICAgICAgICAgICAgICAgICAgcm9vdDogbnVsbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgcm9vdCBub2RlIGZvciB0aGUgZnNcbiAgICAgICAgICAgICAgICB2YXIgcm9vdCA9IHR5cGUubW91bnQobW91bnQpO1xuICAgICAgICAgICAgICAgIHJvb3QubW91bnQgPSBtb3VudDtcbiAgICAgICAgICAgICAgICBtb3VudC5yb290ID0gcm9vdDtcbiAgICAgICAgICAgICAgICAvLyBhc3NpZ24gdGhlIG1vdW50IGluZm8gdG8gdGhlIG1vdW50cG9pbnQncyBub2RlXG4gICAgICAgICAgICAgICAgaWYgKGxvb2t1cCkge1xuICAgICAgICAgICAgICAgICAgICBsb29rdXAubm9kZS5tb3VudCA9IG1vdW50O1xuICAgICAgICAgICAgICAgICAgICBsb29rdXAubm9kZS5tb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tcGF0aWJpbGl0eSB1cGRhdGUgRlMucm9vdCBpZiB3ZSBtb3VudCB0byAvXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb3VudHBvaW50ID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEZTLnJvb3QgPSBtb3VudC5yb290O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGFkZCB0byBvdXIgY2FjaGVkIGxpc3Qgb2YgbW91bnRzXG4gICAgICAgICAgICAgICAgRlMubW91bnRzLnB1c2gobW91bnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiByb290O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxvb2t1cDogZnVuY3Rpb24ocGFyZW50LCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5ub2RlX29wcy5sb29rdXAocGFyZW50LCBuYW1lKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBta25vZDogZnVuY3Rpb24ocGF0aCwgbW9kZSwgZGV2LCB0aHJvd0Vycm9yID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgocGF0aCwgeyBwYXJlbnQ6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gbG9va3VwLm5vZGU7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IFBBVEguYmFzZW5hbWUocGF0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBGUy5tYXlDcmVhdGUocGFyZW50LCBuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRocm93RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKGVycm9yLCBwYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcGFyZW50Lm5vZGVfb3BzLm1rbm9kKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSwgcGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50Lm5vZGVfb3BzLm1rbm9kKHBhcmVudCwgbmFtZSwgbW9kZSwgZGV2KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKHBhdGgsIG1vZGUsIHRocm93RXJyb3IgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgbW9kZSA9IG1vZGUgIT09IHVuZGVmaW5lZCA/IG1vZGUgOiAwbzY2NjtcbiAgICAgICAgICAgICAgICBtb2RlICY9IDQwOTU7XG4gICAgICAgICAgICAgICAgbW9kZSB8PSAzMjc2ODtcbiAgICAgICAgICAgICAgICByZXR1cm4gRlMubWtub2QocGF0aCwgbW9kZSwgMCwgdGhyb3dFcnJvcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWtkaXI6IGZ1bmN0aW9uKHBhdGgsIG1vZGUsIHRocm93RXJyb3IgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgbW9kZSA9IG1vZGUgIT09IHVuZGVmaW5lZCA/IG1vZGUgOiAwbzc3NztcbiAgICAgICAgICAgICAgICBtb2RlICY9IDUxMSB8IDUxMjtcbiAgICAgICAgICAgICAgICBtb2RlIHw9IDE2Mzg0O1xuICAgICAgICAgICAgICAgIHJldHVybiBGUy5ta25vZChwYXRoLCBtb2RlLCAwLCB0aHJvd0Vycm9yKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBta2RldjogZnVuY3Rpb24ocGF0aCwgbW9kZSwgZGV2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXYgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRldiA9IG1vZGU7XG4gICAgICAgICAgICAgICAgICAgIG1vZGUgPSAwbzY2NjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbW9kZSB8PSA4MTkyO1xuICAgICAgICAgICAgICAgIHJldHVybiBGUy5ta25vZChwYXRoLCBtb2RlLCBkZXYpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN5bWxpbms6IGZ1bmN0aW9uKG9sZHBhdGgsIG5ld3BhdGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb29rdXAgPSBGUy5sb29rdXBQYXRoKG5ld3BhdGgsIHsgcGFyZW50OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBsb29rdXAubm9kZTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXduYW1lID0gUEFUSC5iYXNlbmFtZShuZXdwYXRoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBGUy5tYXlDcmVhdGUocGFyZW50LCBuZXduYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcGFyZW50Lm5vZGVfb3BzLnN5bWxpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50Lm5vZGVfb3BzLnN5bWxpbmsocGFyZW50LCBuZXduYW1lLCBvbGRwYXRoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW5hbWU6IGZ1bmN0aW9uKG9sZF9wYXRoLCBuZXdfcGF0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZF9kaXJuYW1lID0gUEFUSC5kaXJuYW1lKG9sZF9wYXRoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdfZGlybmFtZSA9IFBBVEguZGlybmFtZShuZXdfcGF0aCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2xkX25hbWUgPSBQQVRILmJhc2VuYW1lKG9sZF9wYXRoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdfbmFtZSA9IFBBVEguYmFzZW5hbWUobmV3X3BhdGgpO1xuICAgICAgICAgICAgICAgIC8vIHBhcmVudHMgbXVzdCBleGlzdFxuICAgICAgICAgICAgICAgIGxldCBsb29rdXAsIG9sZF9kaXIsIG5ld19kaXI7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbG9va3VwID0gRlMubG9va3VwUGF0aChvbGRfcGF0aCwgeyBwYXJlbnQ6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIG9sZF9kaXIgPSBsb29rdXAubm9kZTtcbiAgICAgICAgICAgICAgICAgICAgbG9va3VwID0gRlMubG9va3VwUGF0aChuZXdfcGF0aCwgeyBwYXJlbnQ6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIG5ld19kaXIgPSBsb29rdXAubm9kZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCVVNZKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbmVlZCB0byBiZSBwYXJ0IG9mIHRoZSBzYW1lIG1vdW50XG4gICAgICAgICAgICAgICAgaWYgKG9sZF9kaXIubW91bnQgIT09IG5ld19kaXIubW91bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVhERVYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzb3VyY2UgbXVzdCBleGlzdFxuICAgICAgICAgICAgICAgIGNvbnN0IG9sZF9ub2RlID0gRlMubG9va3VwTm9kZShvbGRfZGlyLCBvbGRfbmFtZSk7XG4gICAgICAgICAgICAgICAgLy8gb2xkIHBhdGggc2hvdWxkIG5vdCBiZSBhbiBhbmNlc3RvciBvZiB0aGUgbmV3IHBhdGhcbiAgICAgICAgICAgICAgICBsZXQgcmVsYXRpdmUgPSBQQVRILnJlbGF0aXZlKG9sZF9wYXRoLCBuZXdfZGlybmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlbGF0aXZlLmNoYXJBdCgwKSAhPT0gJy4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG5ldyBwYXRoIHNob3VsZCBub3QgYmUgYW4gYW5jZXN0b3Igb2YgdGhlIG9sZCBwYXRoXG4gICAgICAgICAgICAgICAgcmVsYXRpdmUgPSBQQVRILnJlbGF0aXZlKG5ld19wYXRoLCBvbGRfZGlybmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlbGF0aXZlLmNoYXJBdCgwKSAhPT0gJy4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT1RFTVBUWSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHNlZSBpZiB0aGUgbmV3IHBhdGggYWxyZWFkeSBleGlzdHNcbiAgICAgICAgICAgICAgICBsZXQgbmV3X25vZGU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbmV3X25vZGUgPSBGUy5sb29rdXBOb2RlKG5ld19kaXIsIG5ld19uYW1lKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vdCBmYXRhbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlYXJseSBvdXQgaWYgbm90aGluZyBuZWVkcyB0byBjaGFuZ2VcbiAgICAgICAgICAgICAgICBpZiAob2xkX25vZGUgPT09IG5ld19ub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gd2UnbGwgbmVlZCB0byBkZWxldGUgdGhlIG9sZCBlbnRyeVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzZGlyID0gRlMuaXNEaXIob2xkX25vZGUubW9kZSk7XG4gICAgICAgICAgICAgICAgbGV0IGVyciA9IEZTLm1heURlbGV0ZShvbGRfZGlyLCBvbGRfbmFtZSwgaXNkaXIpO1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbmVlZCBkZWxldGUgcGVybWlzc2lvbnMgaWYgd2UnbGwgYmUgb3ZlcndyaXRpbmcuXG4gICAgICAgICAgICAgICAgLy8gbmVlZCBjcmVhdGUgcGVybWlzc2lvbnMgaWYgbmV3IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC5cbiAgICAgICAgICAgICAgICBlcnIgPSBuZXdfbm9kZVxuICAgICAgICAgICAgICAgICAgICA/IEZTLm1heURlbGV0ZShuZXdfZGlyLCBuZXdfbmFtZSwgaXNkaXIpXG4gICAgICAgICAgICAgICAgICAgIDogRlMubWF5Q3JlYXRlKG5ld19kaXIsIG5ld19uYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghb2xkX2Rpci5ub2RlX29wcy5yZW5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIEZTLmlzTW91bnRwb2ludChvbGRfbm9kZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKG5ld19ub2RlICYmIEZTLmlzTW91bnRwb2ludChuZXdfbm9kZSkpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCVVNZKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgYXJlIGdvaW5nIHRvIGNoYW5nZSB0aGUgcGFyZW50LCBjaGVjayB3cml0ZSBwZXJtaXNzaW9uc1xuICAgICAgICAgICAgICAgIGlmIChuZXdfZGlyICE9PSBvbGRfZGlyKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyciA9IEZTLm5vZGVQZXJtaXNzaW9ucyhvbGRfZGlyLCAndycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgbm9kZSBmcm9tIHRoZSBsb29rdXAgaGFzaFxuICAgICAgICAgICAgICAgIEZTLmhhc2hSZW1vdmVOb2RlKG9sZF9ub2RlKTtcbiAgICAgICAgICAgICAgICAvLyBkbyB0aGUgdW5kZXJseWluZyBmcyByZW5hbWVcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbGRfZGlyLm5vZGVfb3BzLnJlbmFtZShvbGRfbm9kZSwgbmV3X2RpciwgbmV3X25hbWUpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIG5vZGUgYmFjayB0byB0aGUgaGFzaCAoaW4gY2FzZSBub2RlX29wcy5yZW5hbWVcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlZCBpdHMgbmFtZSlcbiAgICAgICAgICAgICAgICAgICAgRlMuaGFzaEFkZE5vZGUob2xkX25vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBybWRpcjogZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgocGF0aCwgeyBwYXJlbnQ6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGxvb2t1cC5ub2RlO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBQQVRILmJhc2VuYW1lKHBhdGgpO1xuICAgICAgICAgICAgICAgIHZhciBub2RlID0gRlMubG9va3VwTm9kZShwYXJlbnQsIG5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IEZTLm1heURlbGV0ZShwYXJlbnQsIG5hbWUsIHRydWUpO1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJlbnQubm9kZV9vcHMucm1kaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoRlMuaXNNb3VudHBvaW50KG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCVVNZKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFyZW50Lm5vZGVfb3BzLnJtZGlyKHBhcmVudCwgbmFtZSk7XG4gICAgICAgICAgICAgICAgRlMuZGVzdHJveU5vZGUobm9kZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVhZGRpcjogZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgocGF0aCwgeyBmb2xsb3c6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGxvb2t1cC5ub2RlO1xuICAgICAgICAgICAgICAgIGlmICghbm9kZS5ub2RlX29wcy5yZWFkZGlyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT1RESVIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5ub2RlX29wcy5yZWFkZGlyKG5vZGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVubGluazogZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgocGF0aCwgeyBwYXJlbnQ6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGxvb2t1cC5ub2RlO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBQQVRILmJhc2VuYW1lKHBhdGgpO1xuICAgICAgICAgICAgICAgIHZhciBub2RlID0gRlMubG9va3VwTm9kZShwYXJlbnQsIG5hbWUpO1xuICAgICAgICAgICAgICAgIGxldCBlcnIgPSBGUy5tYXlEZWxldGUocGFyZW50LCBuYW1lLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAvLyBQT1NJWCBzYXlzIHVubGluayBzaG91bGQgc2V0IEVQRVJNLCBub3QgRUlTRElSXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPT09IEVSUk5PX0NPREVTLkVJU0RJUikgZXJyID0gRVJSTk9fQ09ERVMuRVBFUk07XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcGFyZW50Lm5vZGVfb3BzLnVubGluaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChGUy5pc01vdW50cG9pbnQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJVU1kpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJlbnQubm9kZV9vcHMudW5saW5rKHBhcmVudCwgbmFtZSk7XG4gICAgICAgICAgICAgICAgRlMuZGVzdHJveU5vZGUobm9kZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVhZGxpbms6IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb29rdXAgPSBGUy5sb29rdXBQYXRoKHBhdGgsIHsgZm9sbG93OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rID0gbG9va3VwLm5vZGU7XG4gICAgICAgICAgICAgICAgaWYgKCFsaW5rLm5vZGVfb3BzLnJlYWRsaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBsaW5rLm5vZGVfb3BzLnJlYWRsaW5rKGxpbmspO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXQ6IGZ1bmN0aW9uKHBhdGgsIGRvbnRGb2xsb3cpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb29rdXAgPSBGUy5sb29rdXBQYXRoKHBhdGgsIHsgZm9sbG93OiAhZG9udEZvbGxvdyB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gbG9va3VwLm5vZGU7XG4gICAgICAgICAgICAgICAgaWYgKCFub2RlLm5vZGVfb3BzLmdldGF0dHIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5ub2RlX29wcy5nZXRhdHRyKG5vZGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxzdGF0OiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZTLnN0YXQocGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2htb2Q6IGZ1bmN0aW9uKHBhdGgsIG1vZGUsIGRvbnRGb2xsb3cpIHtcbiAgICAgICAgICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgocGF0aCwgeyBmb2xsb3c6ICFkb250Rm9sbG93IH0pO1xuICAgICAgICAgICAgICAgICAgICBub2RlID0gbG9va3VwLm5vZGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHBhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghbm9kZS5ub2RlX29wcy5zZXRhdHRyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbm9kZS5ub2RlX29wcy5zZXRhdHRyKG5vZGUsIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogKG1vZGUgJiA0MDk1KSB8IChub2RlLm1vZGUgJiB+NDA5NSksXG4gICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxjaG1vZDogZnVuY3Rpb24ocGF0aCwgbW9kZSkge1xuICAgICAgICAgICAgICAgIEZTLmNobW9kKHBhdGgsIG1vZGUsIHRydWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZjaG1vZDogZnVuY3Rpb24oZmQsIG1vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBGUy5nZXRTdHJlYW0oZmQpO1xuICAgICAgICAgICAgICAgIGlmICghc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCQURGKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgRlMuY2htb2Qoc3RyZWFtLm5vZGUsIG1vZGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNob3duOiBmdW5jdGlvbihwYXRoLCB1aWQsIGdpZCwgZG9udEZvbGxvdykge1xuICAgICAgICAgICAgICAgIGxldCBub2RlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9va3VwID0gRlMubG9va3VwUGF0aChwYXRoLCB7IGZvbGxvdzogIWRvbnRGb2xsb3cgfSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBsb29rdXAubm9kZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub2RlID0gcGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFub2RlLm5vZGVfb3BzLnNldGF0dHIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBub2RlLm5vZGVfb3BzLnNldGF0dHIobm9kZSwge1xuICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KClcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgaWdub3JlIHRoZSB1aWQgLyBnaWQgZm9yIG5vd1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxjaG93bjogZnVuY3Rpb24ocGF0aCwgdWlkLCBnaWQpIHtcbiAgICAgICAgICAgICAgICBGUy5jaG93bihwYXRoLCB1aWQsIGdpZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmNob3duOiBmdW5jdGlvbihmZCwgdWlkLCBnaWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBGUy5nZXRTdHJlYW0oZmQpO1xuICAgICAgICAgICAgICAgIGlmICghc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCQURGKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgRlMuY2hvd24oc3RyZWFtLm5vZGUsIHVpZCwgZ2lkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0cnVuY2F0ZTogZnVuY3Rpb24ocGF0aCwgbGVuKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxlbiA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb29rdXAgPSBGUy5sb29rdXBQYXRoKHBhdGgsIHsgZm9sbG93OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICBub2RlID0gbG9va3VwLm5vZGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHBhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghbm9kZS5ub2RlX29wcy5zZXRhdHRyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKEZTLmlzRGlyKG5vZGUubW9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlTRElSKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFGUy5pc0ZpbGUobm9kZS5tb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBGUy5ub2RlUGVybWlzc2lvbnMobm9kZSwgJ3cnKTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5vZGUubm9kZV9vcHMuc2V0YXR0cihub2RlLCB7XG4gICAgICAgICAgICAgICAgICAgIHNpemU6IGxlbixcbiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnRydW5jYXRlOiBmdW5jdGlvbihmZCwgbGVuKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtID0gRlMuZ2V0U3RyZWFtKGZkKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FQkFERik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoc3RyZWFtLmZsYWdzICYgMjA5NzE1NSkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgRlMudHJ1bmNhdGUoc3RyZWFtLm5vZGUsIGxlbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXRpbWU6IGZ1bmN0aW9uKHBhdGgsIGF0aW1lLCBtdGltZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgocGF0aCwgeyBmb2xsb3c6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGxvb2t1cC5ub2RlO1xuICAgICAgICAgICAgICAgIG5vZGUubm9kZV9vcHMuc2V0YXR0cihub2RlLCB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogTWF0aC5tYXgoYXRpbWUsIG10aW1lKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9wZW46IGZ1bmN0aW9uKHBhdGgsIGZsYWdzLCBtb2RlLCBmZF9zdGFydCwgZmRfZW5kKSB7XG4gICAgICAgICAgICAgICAgcGF0aCA9IFBBVEgubm9ybWFsaXplKHBhdGgpO1xuICAgICAgICAgICAgICAgIGZsYWdzID1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBGUy5tb2RlU3RyaW5nVG9GbGFncyhmbGFncylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZmxhZ3M7XG4gICAgICAgICAgICAgICAgbW9kZSA9IHR5cGVvZiBtb2RlID09PSAndW5kZWZpbmVkJyA/IDBvNjY2IDogbW9kZTtcbiAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiA2NCkge1xuICAgICAgICAgICAgICAgICAgICBtb2RlID0gKG1vZGUgJiA0MDk1KSB8IDMyNzY4O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGUgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb29rdXAgPSBGUy5sb29rdXBQYXRoKHBhdGgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvdzogIShmbGFncyAmIDEzMTA3MilcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBsb29rdXAubm9kZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBwZXJoYXBzIHdlIG5lZWQgdG8gY3JlYXRlIHRoZSBub2RlXG4gICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgNjQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIE9fQ1JFQVQgYW5kIE9fRVhDTCBhcmUgc2V0LCBlcnJvciBvdXQgaWYgdGhlIG5vZGUgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIDEyOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVFWElTVCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub2RlIGRvZXNuJ3QgZXhpc3QsIHRyeSB0byBjcmVhdGUgaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBGUy5ta25vZChwYXRoLCBtb2RlLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PRU5UKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY2FuJ3QgdHJ1bmNhdGUgYSBkZXZpY2VcbiAgICAgICAgICAgICAgICBpZiAoRlMuaXNDaHJkZXYobm9kZS5tb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBmbGFncyAmPSB+NTEyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBwZXJtaXNzaW9uc1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IEZTLm1heU9wZW4obm9kZSwgZmxhZ3MpO1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZG8gdHJ1bmNhdGlvbiBpZiBuZWNlc3NhcnlcbiAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiA1MTIpIHtcbiAgICAgICAgICAgICAgICAgICAgRlMudHJ1bmNhdGUobm9kZSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGVzZSwgZG9uJ3QgcGFzcyBkb3duIHRvIHRoZSB1bmRlcmx5aW5nIHZmc1xuICAgICAgICAgICAgICAgIGZsYWdzICY9IH4oMTI4IHwgNTEyKTtcbiAgICAgICAgICAgICAgICAvLyByZWdpc3RlciB0aGUgc3RyZWFtIHdpdGggdGhlIGZpbGVzeXN0ZW1cbiAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBGUy5jcmVhdGVTdHJlYW0oXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBGUy5nZXRQYXRoKG5vZGUpLCAvLyB3ZSB3YW50IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBub2RlXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVrYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtX29wczogbm9kZS5zdHJlYW1fb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlZCBieSB0aGUgZmlsZSBmYW1pbHkgbGliYyBjYWxscyAoZm9wZW4sIGZ3cml0ZSwgZmVycm9yLCBldGMuKVxuICAgICAgICAgICAgICAgICAgICAgICAgdW5nb3R0ZW46IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZkX3N0YXJ0LFxuICAgICAgICAgICAgICAgICAgICBmZF9lbmRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgdGhlIG5ldyBzdHJlYW0ncyBvcGVuIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5zdHJlYW1fb3BzLm9wZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnN0cmVhbV9vcHMub3BlbihzdHJlYW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoTW9kdWxlWydsb2dSZWFkRmlsZXMnXSAmJiAhKGZsYWdzICYgMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFGUy5yZWFkRmlsZXMpIEZTLnJlYWRGaWxlcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShwYXRoIGluIEZTLnJlYWRGaWxlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEZTLnJlYWRGaWxlc1twYXRoXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ3JlYWQgZmlsZTogJyArIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYW07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uc3RyZWFtX29wcy5jbG9zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnN0cmVhbV9vcHMuY2xvc2Uoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBGUy5jbG9zZVN0cmVhbShzdHJlYW0uZmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsbHNlZWs6IGZ1bmN0aW9uKHN0cmVhbSwgb2Zmc2V0LCB3aGVuY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXN0cmVhbS5zZWVrYWJsZSB8fCAhc3RyZWFtLnN0cmVhbV9vcHMubGxzZWVrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVTUElQRSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYW0uc3RyZWFtX29wcy5sbHNlZWsoc3RyZWFtLCBvZmZzZXQsIHdoZW5jZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24oc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPCAwIHx8IHBvc2l0aW9uIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKHN0cmVhbS5mbGFncyAmIDIwOTcxNTUpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCQURGKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKEZTLmlzRGlyKHN0cmVhbS5ub2RlLm1vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJU0RJUik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghc3RyZWFtLnN0cmVhbV9vcHMucmVhZCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgc2Vla2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwb3NpdGlvbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBzdHJlYW0ucG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNlZWtpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJlYW0uc2Vla2FibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVNQSVBFKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXNSZWFkID0gc3RyZWFtLnN0cmVhbV9vcHMucmVhZChcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWVraW5nKSBzdHJlYW0ucG9zaXRpb24gKz0gYnl0ZXNSZWFkO1xuICAgICAgICAgICAgICAgIHJldHVybiBieXRlc1JlYWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKHN0cmVhbSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbk93bikge1xuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPCAwIHx8IHBvc2l0aW9uIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKHN0cmVhbS5mbGFncyAmIDIwOTcxNTUpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCQURGKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKEZTLmlzRGlyKHN0cmVhbS5ub2RlLm1vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJU0RJUik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghc3RyZWFtLnN0cmVhbV9vcHMud3JpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHNlZWtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcG9zaXRpb24gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gc3RyZWFtLnBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzZWVraW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyZWFtLnNlZWthYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVTUElQRSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uZmxhZ3MgJiAxMDI0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNlZWsgdG8gdGhlIGVuZCBiZWZvcmUgd3JpdGluZyBpbiBhcHBlbmQgbW9kZVxuICAgICAgICAgICAgICAgICAgICBGUy5sbHNlZWsoc3RyZWFtLCAwLCAyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXNXcml0dGVuID0gc3RyZWFtLnN0cmVhbV9vcHMud3JpdGUoXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGNhbk93blxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWVraW5nKSBzdHJlYW0ucG9zaXRpb24gKz0gYnl0ZXNXcml0dGVuO1xuICAgICAgICAgICAgICAgIHJldHVybiBieXRlc1dyaXR0ZW47XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWxsb2NhdGU6IGZ1bmN0aW9uKHN0cmVhbSwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBsZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKHN0cmVhbS5mbGFncyAmIDIwOTcxNTUpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCQURGKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFGUy5pc0ZpbGUoc3RyZWFtLm5vZGUubW9kZSkgJiYgIUZTLmlzRGlyKG5vZGUubW9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PREVWKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFzdHJlYW0uc3RyZWFtX29wcy5hbGxvY2F0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FT1BOT1RTVVBQKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyZWFtLnN0cmVhbV9vcHMuYWxsb2NhdGUoc3RyZWFtLCBvZmZzZXQsIGxlbmd0aCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbW1hcDogZnVuY3Rpb24oXG4gICAgICAgICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgICAgICAgbGVuZ3RoLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgICAgICAgIHByb3QsXG4gICAgICAgICAgICAgICAgZmxhZ3NcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gaWYgUFJPVCBpcyBQUk9UX1dSSVRFLCBtYWtlIHN1cmUgd2UgaGF2ZSB3cml0ZSBhY2Nlc3NcbiAgICAgICAgICAgICAgICBpZiAoKHN0cmVhbS5mbGFncyAmIDIwOTcxNTUpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVBQ0NFUyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghc3RyZWFtLnN0cmVhbV9vcHMubW1hcCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuZXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9ERVYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtLnN0cmVhbV9vcHMubW1hcChcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgcHJvdCxcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3NcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlvY3RsOiBmdW5jdGlvbihzdHJlYW0sIGNtZCwgYXJnKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzdHJlYW0uc3RyZWFtX29wcy5pb2N0bCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9UVFkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtLnN0cmVhbV9vcHMuaW9jdGwoc3RyZWFtLCBjbWQsIGFyZyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVhZEZpbGU6IGZ1bmN0aW9uKHBhdGgsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgICAgICAgICAgICBvcHRzLmZsYWdzID0gb3B0cy5mbGFncyB8fCAncic7XG4gICAgICAgICAgICAgICAgb3B0cy5lbmNvZGluZyA9IG9wdHMuZW5jb2RpbmcgfHwgJ2JpbmFyeSc7XG4gICAgICAgICAgICAgICAgbGV0IHJldDtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBGUy5vcGVuKHBhdGgsIG9wdHMuZmxhZ3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXQgPSBGUy5zdGF0KHBhdGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHN0YXQuc2l6ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgICAgICAgICAgICAgIEZTLnJlYWQoc3RyZWFtLCBidWYsIDAsIGxlbmd0aCwgMCk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMuZW5jb2RpbmcgPT09ICd1dGY4Jykge1xuICAgICAgICAgICAgICAgICAgICByZXQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXRmOCA9IG5ldyBSdW50aW1lLlVURjhQcm9jZXNzb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IHV0ZjgucHJvY2Vzc0NDaGFyKGJ1ZltpXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdHMuZW5jb2RpbmcgPT09ICdiaW5hcnknKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldCA9IGJ1ZjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAnSW52YWxpZCBlbmNvZGluZyB0eXBlIFwiJyArIG9wdHMuZW5jb2RpbmcgKyAnXCInXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEZTLmNsb3NlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3cml0ZUZpbGU6IGZ1bmN0aW9uKHBhdGgsIGRhdGEsIG9wdHMpIHtcbiAgICAgICAgICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgICAgICAgICAgICBvcHRzLmZsYWdzID0gb3B0cy5mbGFncyB8fCAndyc7XG4gICAgICAgICAgICAgICAgb3B0cy5lbmNvZGluZyA9IG9wdHMuZW5jb2RpbmcgfHwgJ3V0ZjgnO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IEZTLm9wZW4ocGF0aCwgb3B0cy5mbGFncywgb3B0cy5tb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAob3B0cy5lbmNvZGluZyA9PT0gJ3V0ZjgnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHV0ZjggPSBuZXcgUnVudGltZS5VVEY4UHJvY2Vzc29yKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KHV0ZjgucHJvY2Vzc0pTU3RyaW5nKGRhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgRlMud3JpdGUoc3RyZWFtLCBidWYsIDAsIGJ1Zi5sZW5ndGgsIDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0cy5lbmNvZGluZyA9PT0gJ2JpbmFyeScpIHtcbiAgICAgICAgICAgICAgICAgICAgRlMud3JpdGUoc3RyZWFtLCBkYXRhLCAwLCBkYXRhLmxlbmd0aCwgMCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0ludmFsaWQgZW5jb2RpbmcgdHlwZSBcIicgKyBvcHRzLmVuY29kaW5nICsgJ1wiJ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBGUy5jbG9zZShzdHJlYW0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGN3ZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZTLmN1cnJlbnRQYXRoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNoZGlyOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9va3VwID0gRlMubG9va3VwUGF0aChwYXRoLCB7IGZvbGxvdzogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIUZTLmlzRGlyKGxvb2t1cC5ub2RlLm1vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT1RESVIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBGUy5ub2RlUGVybWlzc2lvbnMobG9va3VwLm5vZGUsICd4Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBGUy5jdXJyZW50UGF0aCA9IGxvb2t1cC5wYXRoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNyZWF0ZURlZmF1bHREaXJlY3RvcmllczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgRlMubWtkaXIoJy90bXAnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjcmVhdGVEZWZhdWx0RGV2aWNlczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIC9kZXZcbiAgICAgICAgICAgICAgICBGUy5ta2RpcignL2RldicpO1xuICAgICAgICAgICAgICAgIC8vIHNldHVwIC9kZXYvbnVsbFxuICAgICAgICAgICAgICAgIEZTLnJlZ2lzdGVyRGV2aWNlKEZTLm1ha2VkZXYoMSwgMyksIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBGUy5ta2RldignL2Rldi9udWxsJywgRlMubWFrZWRldigxLCAzKSk7XG4gICAgICAgICAgICAgICAgLy8gc2V0dXAgL2Rldi90dHkgYW5kIC9kZXYvdHR5MVxuICAgICAgICAgICAgICAgIC8vIHN0ZGVyciBuZWVkcyB0byBwcmludCBvdXRwdXQgdXNpbmcgY29uc29sZS53YXJuXG4gICAgICAgICAgICAgICAgLy8gc28gd2UgcmVnaXN0ZXIgYSBzZWNvbmQgdHR5IGp1c3QgZm9yIGl0LlxuICAgICAgICAgICAgICAgIFRUWS5yZWdpc3RlcihGUy5tYWtlZGV2KDUsIDApLCBUVFkuZGVmYXVsdF90dHlfb3BzKTtcbiAgICAgICAgICAgICAgICBUVFkucmVnaXN0ZXIoRlMubWFrZWRldig2LCAwKSwgVFRZLmRlZmF1bHRfdHR5MV9vcHMpO1xuICAgICAgICAgICAgICAgIEZTLm1rZGV2KCcvZGV2L3R0eScsIEZTLm1ha2VkZXYoNSwgMCkpO1xuICAgICAgICAgICAgICAgIEZTLm1rZGV2KCcvZGV2L3R0eTEnLCBGUy5tYWtlZGV2KDYsIDApKTtcbiAgICAgICAgICAgICAgICAvLyB3ZSdyZSBub3QgZ29pbmcgdG8gZW11bGF0ZSB0aGUgYWN0dWFsIHNobSBkZXZpY2UsXG4gICAgICAgICAgICAgICAgLy8ganVzdCBjcmVhdGUgdGhlIHRtcCBkaXJzIHRoYXQgcmVzaWRlIGluIGl0IGNvbW1vbmx5XG4gICAgICAgICAgICAgICAgRlMubWtkaXIoJy9kZXYvc2htJyk7XG4gICAgICAgICAgICAgICAgRlMubWtkaXIoJy9kZXYvc2htL3RtcCcpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNyZWF0ZVN0YW5kYXJkU3RyZWFtczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyBkZXByZWNhdGUgdGhlIG9sZCBmdW5jdGlvbmFsaXR5IG9mIGEgc2luZ2xlXG4gICAgICAgICAgICAgICAgLy8gaW5wdXQgLyBvdXRwdXQgY2FsbGJhY2sgYW5kIHRoYXQgdXRpbGl6ZXMgRlMuY3JlYXRlRGV2aWNlXG4gICAgICAgICAgICAgICAgLy8gYW5kIGluc3RlYWQgcmVxdWlyZSBhIHVuaXF1ZSBzZXQgb2Ygc3RyZWFtIG9wc1xuICAgICAgICAgICAgICAgIC8vIGJ5IGRlZmF1bHQsIHdlIHN5bWxpbmsgdGhlIHN0YW5kYXJkIHN0cmVhbXMgdG8gdGhlXG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0dHkgZGV2aWNlcy4gaG93ZXZlciwgaWYgdGhlIHN0YW5kYXJkIHN0cmVhbXNcbiAgICAgICAgICAgICAgICAvLyBoYXZlIGJlZW4gb3ZlcndyaXR0ZW4gd2UgY3JlYXRlIGEgdW5pcXVlIGRldmljZSBmb3JcbiAgICAgICAgICAgICAgICAvLyB0aGVtIGluc3RlYWQuXG4gICAgICAgICAgICAgICAgaWYgKE1vZHVsZVsnc3RkaW4nXSkge1xuICAgICAgICAgICAgICAgICAgICBGUy5jcmVhdGVEZXZpY2UoJy9kZXYnLCAnc3RkaW4nLCBNb2R1bGVbJ3N0ZGluJ10pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIEZTLnN5bWxpbmsoJy9kZXYvdHR5JywgJy9kZXYvc3RkaW4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKE1vZHVsZVsnc3Rkb3V0J10pIHtcbiAgICAgICAgICAgICAgICAgICAgRlMuY3JlYXRlRGV2aWNlKCcvZGV2JywgJ3N0ZG91dCcsIG51bGwsIE1vZHVsZVsnc3Rkb3V0J10pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIEZTLnN5bWxpbmsoJy9kZXYvdHR5JywgJy9kZXYvc3Rkb3V0Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChNb2R1bGVbJ3N0ZGVyciddKSB7XG4gICAgICAgICAgICAgICAgICAgIEZTLmNyZWF0ZURldmljZSgnL2RldicsICdzdGRlcnInLCBudWxsLCBNb2R1bGVbJ3N0ZGVyciddKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBGUy5zeW1saW5rKCcvZGV2L3R0eTEnLCAnL2Rldi9zdGRlcnInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gb3BlbiBkZWZhdWx0IHN0cmVhbXMgZm9yIHRoZSBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgZGV2aWNlc1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0ZGluID0gRlMub3BlbignL2Rldi9zdGRpbicsICdyJyk7XG4gICAgICAgICAgICAgICAgSEVBUDMyW19zdGRpbiA+PiAyXSA9IHN0ZGluLmZkO1xuICAgICAgICAgICAgICAgIGFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgc3RkaW4uZmQgPT09IDEsXG4gICAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGhhbmRsZSBmb3Igc3RkaW4gKCcgKyBzdGRpbi5mZCArICcpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3Rkb3V0ID0gRlMub3BlbignL2Rldi9zdGRvdXQnLCAndycpO1xuICAgICAgICAgICAgICAgIEhFQVAzMltfc3Rkb3V0ID4+IDJdID0gc3Rkb3V0LmZkO1xuICAgICAgICAgICAgICAgIGFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LmZkID09PSAyLFxuICAgICAgICAgICAgICAgICAgICAnaW52YWxpZCBoYW5kbGUgZm9yIHN0ZG91dCAoJyArIHN0ZG91dC5mZCArICcpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RkZXJyID0gRlMub3BlbignL2Rldi9zdGRlcnInLCAndycpO1xuICAgICAgICAgICAgICAgIEhFQVAzMltfc3RkZXJyID4+IDJdID0gc3RkZXJyLmZkO1xuICAgICAgICAgICAgICAgIGFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgc3RkZXJyLmZkID09PSAzLFxuICAgICAgICAgICAgICAgICAgICAnaW52YWxpZCBoYW5kbGUgZm9yIHN0ZGVyciAoJyArIHN0ZGVyci5mZCArICcpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdGljSW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgRlMubmFtZVRhYmxlID0gbmV3IEFycmF5KDQwOTYpO1xuICAgICAgICAgICAgICAgIEZTLnJvb3QgPSBGUy5jcmVhdGVOb2RlKG51bGwsICcvJywgMTYzODQgfCAwbzc3NywgMCk7XG4gICAgICAgICAgICAgICAgRlMubW91bnQoTUVNRlMsIHt9LCAnLycpO1xuICAgICAgICAgICAgICAgIEZTLmNyZWF0ZURlZmF1bHREaXJlY3RvcmllcygpO1xuICAgICAgICAgICAgICAgIEZTLmNyZWF0ZURlZmF1bHREZXZpY2VzKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oaW5wdXQsIG91dHB1dCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICFGUy5pbml0LmluaXRpYWxpemVkLFxuICAgICAgICAgICAgICAgICAgICAnRlMuaW5pdCB3YXMgcHJldmlvdXNseSBjYWxsZWQuIElmIHlvdSB3YW50IHRvIGluaXRpYWxpemUgbGF0ZXIgd2l0aCBjdXN0b20gcGFyYW1ldGVycywgcmVtb3ZlIGFueSBlYXJsaWVyIGNhbGxzIChub3RlIHRoYXQgb25lIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIGdlbmVyYXRlZCBjb2RlKSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIEZTLmluaXQuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vIEFsbG93IE1vZHVsZS5zdGRpbiBldGMuIHRvIHByb3ZpZGUgZGVmYXVsdHMsIGlmIG5vbmUgZXhwbGljaXRseSBwYXNzZWQgdG8gdXMgaGVyZVxuICAgICAgICAgICAgICAgIE1vZHVsZVsnc3RkaW4nXSA9IGlucHV0IHx8IE1vZHVsZVsnc3RkaW4nXTtcbiAgICAgICAgICAgICAgICBNb2R1bGVbJ3N0ZG91dCddID0gb3V0cHV0IHx8IE1vZHVsZVsnc3Rkb3V0J107XG4gICAgICAgICAgICAgICAgTW9kdWxlWydzdGRlcnInXSA9IGVycm9yIHx8IE1vZHVsZVsnc3RkZXJyJ107XG4gICAgICAgICAgICAgICAgRlMuY3JlYXRlU3RhbmRhcmRTdHJlYW1zKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcXVpdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgRlMuaW5pdC5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgRlMuc3RyZWFtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBGUy5zdHJlYW1zW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgRlMuY2xvc2Uoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0TW9kZTogZnVuY3Rpb24oY2FuUmVhZCwgY2FuV3JpdGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgbW9kZSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGNhblJlYWQpIG1vZGUgfD0gMjkyIHwgNzM7XG4gICAgICAgICAgICAgICAgaWYgKGNhbldyaXRlKSBtb2RlIHw9IDE0NjtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBqb2luUGF0aDogZnVuY3Rpb24ocGFydHMsIGZvcmNlUmVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IFBBVEguam9pbi5hcHBseShudWxsLCBwYXJ0cyk7XG4gICAgICAgICAgICAgICAgaWYgKGZvcmNlUmVsYXRpdmUgJiYgcGF0aFswXSA9PSAnLycpIHBhdGggPSBwYXRoLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhYnNvbHV0ZVBhdGg6IGZ1bmN0aW9uKHJlbGF0aXZlLCBiYXNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFBBVEgucmVzb2x2ZShiYXNlLCByZWxhdGl2ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhbmRhcmRpemVQYXRoOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFBBVEgubm9ybWFsaXplKHBhdGgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpbmRPYmplY3Q6IGZ1bmN0aW9uKHBhdGgsIGRvbnRSZXNvbHZlTGFzdExpbmspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXQgPSBGUy5hbmFseXplUGF0aChwYXRoLCBkb250UmVzb2x2ZUxhc3RMaW5rKTtcbiAgICAgICAgICAgICAgICBpZiAocmV0LmV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Lm9iamVjdDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfX19zZXRFcnJObyhyZXQuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYW5hbHl6ZVBhdGg6IGZ1bmN0aW9uKHBhdGgsIGRvbnRSZXNvbHZlTGFzdExpbmspIHtcbiAgICAgICAgICAgICAgICAvLyBvcGVyYXRlIGZyb20gd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBzeW1saW5rJ3MgdGFyZ2V0XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgocGF0aCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93OiAhZG9udFJlc29sdmVMYXN0TGlua1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IGxvb2t1cC5wYXRoO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgY29uc3QgcmV0ID0ge1xuICAgICAgICAgICAgICAgICAgICBpc1Jvb3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBleGlzdHM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogMCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRFeGlzdHM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3Q6IG51bGxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsb29rdXAgPSBGUy5sb29rdXBQYXRoKHBhdGgsIHsgcGFyZW50OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXQucGFyZW50RXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0LnBhcmVudFBhdGggPSBsb29rdXAucGF0aDtcbiAgICAgICAgICAgICAgICAgICAgcmV0LnBhcmVudE9iamVjdCA9IGxvb2t1cC5ub2RlO1xuICAgICAgICAgICAgICAgICAgICByZXQubmFtZSA9IFBBVEguYmFzZW5hbWUocGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgocGF0aCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93OiAhZG9udFJlc29sdmVMYXN0TGlua1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0LmV4aXN0cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldC5wYXRoID0gbG9va3VwLnBhdGg7XG4gICAgICAgICAgICAgICAgICAgIHJldC5vYmplY3QgPSBsb29rdXAubm9kZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0Lm5hbWUgPSBsb29rdXAubm9kZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICByZXQuaXNSb290ID0gbG9va3VwLnBhdGggPT09ICcvJztcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldC5lcnJvciA9IGUuZXJybm87XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3JlYXRlRm9sZGVyOiBmdW5jdGlvbihwYXJlbnQsIG5hbWUsIGNhblJlYWQsIGNhbldyaXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBBVEguam9pbihcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBhcmVudCA9PT0gJ3N0cmluZycgPyBwYXJlbnQgOiBGUy5nZXRQYXRoKHBhcmVudCksXG4gICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGUgPSBGUy5nZXRNb2RlKGNhblJlYWQsIGNhbldyaXRlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gRlMubWtkaXIocGF0aCwgbW9kZSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENyZWF0ZXMgYSBkaXJlY3RvcnkuXG4gICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlUGF0aFxuICAgICAgICAgICAgICogQG1lbWJlcm9mIExpYlRpTWlkaXR5XG4gICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnQgVGhlIHBhcmVudCBmb2xkZXIuXG4gICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjcmVhdGUuXG4gICAgICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0aHJvd0Vycm9yID0gdHJ1ZV0gSWYgZGlyZWN0b3J5IGNyZWF0aW9uIGZhaWxlZCwgdGhyb3cgYW4gZXJyb3IuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNyZWF0ZVBhdGg6IGZ1bmN0aW9uKHBhcmVudCwgcGF0aCwgdGhyb3dFcnJvciA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy8nKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFydHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IFBBVEguam9pbihwYXJlbnQsIHBhcnQpO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgRlMubWtkaXIoY3VycmVudCwgdW5kZWZpbmVkLCB0aHJvd0Vycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gY3VycmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENyZWF0ZXMgYSBmaWxlLlxuICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZUZpbGVcbiAgICAgICAgICAgICAqIEBtZW1iZXJvZiBMaWJUaU1pZGl0eVxuICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50IFRoZSBwYXJlbnQgZm9sZGVyLlxuICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIHBhdGggdG8gY3JlYXRlLlxuICAgICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBjYW5SZWFkXG4gICAgICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNhbldyaXRlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNyZWF0ZUZpbGU6IGZ1bmN0aW9uKHBhcmVudCwgbmFtZSwgY2FuUmVhZCwgY2FuV3JpdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gUEFUSC5qb2luKFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcGFyZW50ID09PSAnc3RyaW5nJyA/IHBhcmVudCA6IEZTLmdldFBhdGgocGFyZW50KSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZSA9IEZTLmdldE1vZGUoY2FuUmVhZCwgY2FuV3JpdGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBGUy5jcmVhdGUocGF0aCwgbW9kZSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENyZWF0ZXMgYSBkYXRhIGZpbGUgYW5kIHdyaXRlcyBkYXRhIHRvIGl0LlxuICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZURhdGFGaWxlXG4gICAgICAgICAgICAgKiBAbWVtYmVyb2YgTGliVGlNaWRpdHlcbiAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudFxuICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgICAgICAgICAqIEBwYXJhbSB7YXJyYXl9IGRhdGFcbiAgICAgICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2FuUmVhZFxuICAgICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBjYW5Xcml0ZVxuICAgICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbY2FuT3duXVxuICAgICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbdGhyb3dFcnJvciA9IHRydWVdIElmIGZpbGUgY3JlYXRpb24gZmFpbGVkLCB0aHJvdyBhbiBlcnJvci5cbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBjcmVhdGVEYXRhRmlsZTogZnVuY3Rpb24oXG4gICAgICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICBjYW5SZWFkLFxuICAgICAgICAgICAgICAgIGNhbldyaXRlLFxuICAgICAgICAgICAgICAgIGNhbk93bixcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yID0gdHJ1ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IG5hbWVcbiAgICAgICAgICAgICAgICAgICAgPyBQQVRILmpvaW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwYXJlbnQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHBhcmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBGUy5nZXRQYXRoKHBhcmVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogcGFyZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGUgPSBGUy5nZXRNb2RlKGNhblJlYWQsIGNhbldyaXRlKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIEZTLmNyZWF0ZShwYXRoLCBtb2RlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgRlMuY3JlYXRlKHBhdGgsIG1vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyciA9IG5ldyBBcnJheShkYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZGF0YS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycltpXSA9IGRhdGEuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBhcnI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UgY2FuIHdyaXRlIHRvIHRoZSBmaWxlXG4gICAgICAgICAgICAgICAgICAgIEZTLmNobW9kKHBhdGgsIG1vZGUgfCAxNDYpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBGUy5vcGVuKHBhdGgsICd3Jyk7XG4gICAgICAgICAgICAgICAgICAgIEZTLndyaXRlKHN0cmVhbSwgZGF0YSwgMCwgZGF0YS5sZW5ndGgsIDAsIGNhbk93bik7XG4gICAgICAgICAgICAgICAgICAgIEZTLmNsb3NlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgIEZTLmNobW9kKHBhdGgsIG1vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQ3JlYXRlcyBhIGZpbGUgaW4gdGhlIHBhdGNoIGRpcmVjdG9yeSBhbmQgd3JpdGVzIHRoZSBpbnN0cnVtZW50IGRhdGEgdG8gaXQuXG4gICAgICAgICAgICAgKiBAZnVuY3Rpb24gbG9hZFBhdGNoRnJvbVVybFxuICAgICAgICAgICAgICogQG1lbWJlcm9mIExpYlRpTWlkaXR5XG4gICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVXJsIFRoZSBwdWJsaWMgVVJMIHdoZXJlIGFsbCBwYXRjaGVzIGNhbiBiZSBmb3VuZCBhcyBhIGdyb3VwLlxuICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIFRoZSBuYW1lIG9mIHRoZSBpbnN0cnVtZW50IHBhdGNoIHRvIGxvYWQgKGluY2x1ZGluZyBzdWJmb2xkZXIgZm9yIGRydW1zKS5cbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBsb2FkUGF0Y2hGcm9tVXJsOiBhc3luYyBmdW5jdGlvbihiYXNlVXJsLCBmaWxlbmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YmFzZVVybH0ke2ZpbGVuYW1lfWApO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gbmV3IEludDhBcnJheShhcnJheUJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZSA9IEZTLmdldE1vZGUodHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBBVEguam9pbihMSUJUSU1JRElUWV9QQVRDSF9ESVJFQ1RPUlksIGZpbGVuYW1lKTtcblxuICAgICAgICAgICAgICAgIEZTLmNyZWF0ZShwYXRoLCBtb2RlKTtcbiAgICAgICAgICAgICAgICBGUy5jaG1vZChwYXRoLCBtb2RlIHwgMTQ2KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBGUy5vcGVuKHBhdGgsICd3Jyk7XG4gICAgICAgICAgICAgICAgRlMud3JpdGUoc3RyZWFtLCBkYXRhLCAwLCBkYXRhLmxlbmd0aCwgMCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICBGUy5jbG9zZShzdHJlYW0pO1xuICAgICAgICAgICAgICAgIEZTLmNobW9kKHBhdGgsIG1vZGUpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgY3JlYXRlRGV2aWNlOiBmdW5jdGlvbihwYXJlbnQsIG5hbWUsIGlucHV0LCBvdXRwdXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gUEFUSC5qb2luKFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcGFyZW50ID09PSAnc3RyaW5nJyA/IHBhcmVudCA6IEZTLmdldFBhdGgocGFyZW50KSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZSA9IEZTLmdldE1vZGUoISFpbnB1dCwgISFvdXRwdXQpO1xuICAgICAgICAgICAgICAgIGlmICghRlMuY3JlYXRlRGV2aWNlLm1ham9yKSBGUy5jcmVhdGVEZXZpY2UubWFqb3IgPSA2NDtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXYgPSBGUy5tYWtlZGV2KEZTLmNyZWF0ZURldmljZS5tYWpvcisrLCAwKTtcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBmYWtlIGRldmljZSB0aGF0IGEgc2V0IG9mIHN0cmVhbSBvcHMgdG8gZW11bGF0ZSBoZSBvbGQgYmVoYXZpb3IuXG4gICAgICAgICAgICAgICAgRlMucmVnaXN0ZXJEZXZpY2UoZGV2LCB7XG4gICAgICAgICAgICAgICAgICAgIG9wZW46IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNlZWthYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsdXNoIGFueSBwZW5kaW5nIGxpbmUgZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG91dHB1dCAmJiBvdXRwdXQuYnVmZmVyICYmIG91dHB1dC5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0KDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24oc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnl0ZXNSZWFkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlucHV0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQgJiYgYnl0ZXNSZWFkID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVBR0FJTik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzUmVhZCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChieXRlc1JlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ubm9kZS50aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGVzUmVhZDtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKHN0cmVhbSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dChidWZmZXJbb2Zmc2V0ICsgaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlPKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm5vZGUudGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZTLm1rZGV2KHBhdGgsIG1vZGUsIGRldik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3JlYXRlTGluazogZnVuY3Rpb24ocGFyZW50LCBuYW1lLCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gUEFUSC5qb2luKFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcGFyZW50ID09PSAnc3RyaW5nJyA/IHBhcmVudCA6IEZTLmdldFBhdGgocGFyZW50KSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZTLnN5bWxpbmsodGFyZ2V0LCBwYXRoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjcmVhdGVQcmVsb2FkZWRGaWxlOiBmdW5jdGlvbihcbiAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgY2FuUmVhZCxcbiAgICAgICAgICAgICAgICBjYW5Xcml0ZSxcbiAgICAgICAgICAgICAgICBvbmxvYWQsXG4gICAgICAgICAgICAgICAgZG9udENyZWF0ZUZpbGUsXG4gICAgICAgICAgICAgICAgY2FuT3duXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPIHdlIHNob3VsZCBhbGxvdyBwZW9wbGUgdG8ganVzdCBwYXNzIGluIGEgY29tcGxldGUgZmlsZW5hbWUgaW5zdGVhZCBvZiBwYXJlbnQgYW5kIG5hbWUgYmVpbmcgdGhhdCB3ZSBqdXN0IGpvaW4gdGhlbSBhbnl3YXlzXG4gICAgICAgICAgICAgICAgY29uc3QgZnVsbG5hbWUgPSBuYW1lXG4gICAgICAgICAgICAgICAgICAgID8gUEFUSC5yZXNvbHZlKFBBVEguam9pbihwYXJlbnQsIG5hbWUpKVxuICAgICAgICAgICAgICAgICAgICA6IHBhcmVudDtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcm9jZXNzRGF0YShieXRlQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZmluaXNoKGJ5dGVBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkb250Q3JlYXRlRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTLmNyZWF0ZURhdGFGaWxlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuUmVhZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuV3JpdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbk93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob25sb2FkKSBvbmxvYWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJ1bkRlcGVuZGVuY3koJ2NwICcgKyBmdWxsbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluaXNoKGJ5dGVBcnJheSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFJ1bkRlcGVuZGVuY3koJ2NwICcgKyBmdWxsbmFtZSk7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0RhdGEodXJsKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmRleGVkREI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5pbmRleGVkREIgfHxcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lm1vekluZGV4ZWREQiB8fFxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5tc0luZGV4ZWREQlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgREJfTkFNRTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdFTV9GU18nICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIERCX1ZFUlNJT046IDIwLFxuICAgICAgICAgICAgREJfU1RPUkVfTkFNRTogJ0ZJTEVfREFUQScsXG4gICAgICAgICAgICBzYXZlRmlsZXNUb0RCOiBmdW5jdGlvbihwYXRocywgb25sb2FkLCBvbmVycm9yKSB7XG4gICAgICAgICAgICAgICAgb25sb2FkID0gb25sb2FkIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICAgICAgb25lcnJvciA9IG9uZXJyb3IgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleGVkREIgPSBGUy5pbmRleGVkREIoKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihcbiAgICAgICAgICAgICAgICAgICAgICAgIEZTLkRCX05BTUUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEZTLkRCX1ZFUlNJT05cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvbmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGIgPSBvcGVuUmVxdWVzdC5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKEZTLkRCX1NUT1JFX05BTUUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRiID0gb3BlblJlcXVlc3QucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgW0ZTLkRCX1NUT1JFX05BTUVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYWR3cml0ZSdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZXMgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShGUy5EQl9TVE9SRV9OQU1FKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9rID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwgPSBwYXRocy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWlsID09IDApIG9ubG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBvbmVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGF0aHMuZm9yRWFjaChmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwdXRSZXF1ZXN0ID0gZmlsZXMucHV0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTLmFuYWx5emVQYXRoKHBhdGgpLm9iamVjdC5jb250ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHV0UmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvayArIGZhaWwgPT0gdG90YWwpIGZpbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2sgKyBmYWlsID09IHRvdGFsKSBmaW5pc2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmVycm9yID0gb25lcnJvcjtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG9wZW5SZXF1ZXN0Lm9uZXJyb3IgPSBvbmVycm9yO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxvYWRGaWxlc0Zyb21EQjogZnVuY3Rpb24ocGF0aHMsIG9ubG9hZCwgb25lcnJvcikge1xuICAgICAgICAgICAgICAgIG9ubG9hZCA9IG9ubG9hZCB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgICAgIG9uZXJyb3IgPSBvbmVycm9yIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXhlZERCID0gRlMuaW5kZXhlZERCKCk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICBGUy5EQl9OQU1FKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBGUy5EQl9WRVJTSU9OXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25lcnJvcihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gb25lcnJvcjsgLy8gbm8gZGF0YWJhc2UgdG8gbG9hZCBmcm9tXG4gICAgICAgICAgICAgICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRiID0gb3BlblJlcXVlc3QucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW0ZTLkRCX1NUT1JFX05BTUVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWFkb25seSdcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZXMgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShGUy5EQl9TVE9SRV9OQU1FKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9rID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwgPSBwYXRocy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWlsID09IDApIG9ubG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBvbmVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGF0aHMuZm9yRWFjaChmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRSZXF1ZXN0ID0gZmlsZXMuZ2V0KHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRlMuYW5hbHl6ZVBhdGgocGF0aCkuZXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTLnVubGluayhwYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlMuY3JlYXRlRGF0YUZpbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEguZGlybmFtZShwYXRoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUSC5iYXNlbmFtZShwYXRoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UmVxdWVzdC5yZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9rICsgZmFpbCA9PSB0b3RhbCkgZmluaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvayArIGZhaWwgPT0gdG90YWwpIGZpbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uZXJyb3IgPSBvbmVycm9yO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgb3BlblJlcXVlc3Qub25lcnJvciA9IG9uZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGZ1bmN0aW9uIF9vcGVuKHBhdGgsIG9mbGFnLCB2YXJhcmdzKSB7XG4gICAgICAgICAgICAvLyBpbnQgb3Blbihjb25zdCBjaGFyICpwYXRoLCBpbnQgb2ZsYWcsIC4uLik7XG4gICAgICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9vcGVuLmh0bWxcbiAgICAgICAgICAgIGNvbnN0IG1vZGUgPSBIRUFQMzJbdmFyYXJncyA+PiAyXTtcbiAgICAgICAgICAgIHBhdGggPSBQb2ludGVyX3N0cmluZ2lmeShwYXRoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtID0gRlMub3BlbihwYXRoLCBvZmxhZywgbW9kZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5mZDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBGUy5oYW5kbGVGU0Vycm9yKGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfZm9wZW4oZmlsZW5hbWUsIG1vZGUpIHtcbiAgICAgICAgICAgIC8vIEZJTEUgKmZvcGVuKGNvbnN0IGNoYXIgKnJlc3RyaWN0IGZpbGVuYW1lLCBjb25zdCBjaGFyICpyZXN0cmljdCBtb2RlKTtcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDAwOTUzOTkvZnVuY3Rpb25zL2ZvcGVuLmh0bWxcbiAgICAgICAgICAgIGxldCBmbGFncztcbiAgICAgICAgICAgIG1vZGUgPSBQb2ludGVyX3N0cmluZ2lmeShtb2RlKTtcbiAgICAgICAgICAgIGlmIChtb2RlWzBdID09ICdyJykge1xuICAgICAgICAgICAgICAgIGlmIChtb2RlLmluZGV4T2YoJysnKSAhPSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBmbGFncyA9IDI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobW9kZVswXSA9PSAndycpIHtcbiAgICAgICAgICAgICAgICBpZiAobW9kZS5pbmRleE9mKCcrJykgIT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSAyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmxhZ3MgfD0gNjQ7XG4gICAgICAgICAgICAgICAgZmxhZ3MgfD0gNTEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RlWzBdID09ICdhJykge1xuICAgICAgICAgICAgICAgIGlmIChtb2RlLmluZGV4T2YoJysnKSAhPSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBmbGFncyA9IDI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmbGFncyB8PSA2NDtcbiAgICAgICAgICAgICAgICBmbGFncyB8PSAxMDI0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfX19zZXRFcnJObyhFUlJOT19DT0RFUy5FSU5WQUwpO1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmV0ID0gX29wZW4oXG4gICAgICAgICAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgICAgICAgICAgZmxhZ3MsXG4gICAgICAgICAgICAgICAgYWxsb2NhdGUoWzB4MWZmLCAwLCAwLCAwXSwgJ2kzMicsIEFMTE9DX1NUQUNLKVxuICAgICAgICAgICAgKTsgLy8gQWxsIGNyZWF0aW9uIHBlcm1pc3Npb25zLlxuICAgICAgICAgICAgcmV0dXJuIHJldCA9PSAtMSA/IDAgOiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgTW9kdWxlWydfc3RybGVuJ10gPSBfc3RybGVuO1xuICAgICAgICBNb2R1bGVbJ19zdHJjcHknXSA9IF9zdHJjcHk7XG4gICAgICAgIE1vZHVsZVsnX3N0cmNhdCddID0gX3N0cmNhdDtcbiAgICAgICAgY29uc3QgU09DS0ZTID0ge1xuICAgICAgICAgICAgbW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBGUy5jcmVhdGVOb2RlKG51bGwsICcvJywgMTYzODQgfCAwbzc3NywgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3JlYXRlU29ja2V0OiBmdW5jdGlvbihmYW1pbHksIHR5cGUsIHByb3RvY29sKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtaW5nID0gdHlwZSA9PSAxO1xuICAgICAgICAgICAgICAgIGlmIChwcm90b2NvbCkge1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtaW5nID09IChwcm90b2NvbCA9PSA2KSk7IC8vIGlmIFNPQ0tfU1RSRUFNLCBtdXN0IGJlIHRjcFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBjcmVhdGUgb3VyIGludGVybmFsIHNvY2tldCBzdHJ1Y3R1cmVcbiAgICAgICAgICAgICAgICBjb25zdCBzb2NrID0ge1xuICAgICAgICAgICAgICAgICAgICBmYW1pbHk6IGZhbWlseSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHBlZXJzOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZzogW10sXG4gICAgICAgICAgICAgICAgICAgIHJlY3ZfcXVldWU6IFtdLFxuICAgICAgICAgICAgICAgICAgICBzb2NrX29wczogU09DS0ZTLndlYnNvY2tldF9zb2NrX29wc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIHRoZSBmaWxlc3lzdGVtIG5vZGUgdG8gc3RvcmUgdGhlIHNvY2tldCBzdHJ1Y3R1cmVcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gU09DS0ZTLm5leHRuYW1lKCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IEZTLmNyZWF0ZU5vZGUoU09DS0ZTLnJvb3QsIG5hbWUsIDQ5MTUyLCAwKTtcbiAgICAgICAgICAgICAgICBub2RlLnNvY2sgPSBzb2NrO1xuICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgd3JhcHBpbmcgc3RyZWFtIHRoYXQgZW5hYmxlcyBsaWJyYXJ5IGZ1bmN0aW9ucyBzdWNoIGFzIHJlYWQgYW5kIHdyaXRlIHRvIGluZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCB0aGUgc29ja2V0XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtID0gRlMuY3JlYXRlU3RyZWFtKHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IEZTLm1vZGVTdHJpbmdUb0ZsYWdzKCdyKycpLFxuICAgICAgICAgICAgICAgICAgICBzZWVrYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbV9vcHM6IFNPQ0tGUy5zdHJlYW1fb3BzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gbWFwIHRoZSBuZXcgc3RyZWFtIHRvIHRoZSBzb2NrZXQgc3RydWN0dXJlIChzb2NrZXRzIGhhdmUgYSAxOjEgcmVsYXRpb25zaGlwIHdpdGggYSBzdHJlYW0pXG4gICAgICAgICAgICAgICAgc29jay5zdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNvY2s7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0U29ja2V0OiBmdW5jdGlvbihmZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IEZTLmdldFN0cmVhbShmZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFzdHJlYW0gfHwgIUZTLmlzU29ja2V0KHN0cmVhbS5ub2RlLm1vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtLm5vZGUuc29jaztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHJlYW1fb3BzOiB7XG4gICAgICAgICAgICAgICAgcG9sbDogZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvY2sgPSBzdHJlYW0ubm9kZS5zb2NrO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc29jay5zb2NrX29wcy5wb2xsKHNvY2spO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW9jdGw6IGZ1bmN0aW9uKHN0cmVhbSwgcmVxdWVzdCwgdmFyYXJncykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzb2NrID0gc3RyZWFtLm5vZGUuc29jaztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvY2suc29ja19vcHMuaW9jdGwoc29jaywgcmVxdWVzdCwgdmFyYXJncyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZWFkOiBmdW5jdGlvbihzdHJlYW0sIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc29jayA9IHN0cmVhbS5ub2RlLnNvY2s7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IHNvY2suc29ja19vcHMucmVjdm1zZyhzb2NrLCBsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc29ja2V0IGlzIGNsb3NlZFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnNldChtc2cuYnVmZmVyLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbXNnLmJ1ZmZlci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24oc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvY2sgPSBzdHJlYW0ubm9kZS5zb2NrO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc29jay5zb2NrX29wcy5zZW5kbXNnKHNvY2ssIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzb2NrID0gc3RyZWFtLm5vZGUuc29jaztcbiAgICAgICAgICAgICAgICAgICAgc29jay5zb2NrX29wcy5jbG9zZShzb2NrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dG5hbWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmICghU09DS0ZTLm5leHRuYW1lLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgU09DS0ZTLm5leHRuYW1lLmN1cnJlbnQgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NvY2tldFsnICsgU09DS0ZTLm5leHRuYW1lLmN1cnJlbnQrKyArICddJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3ZWJzb2NrZXRfc29ja19vcHM6IHtcbiAgICAgICAgICAgICAgICBjcmVhdGVQZWVyOiBmdW5jdGlvbihzb2NrLCBhZGRyLCBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB3cztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhZGRyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3MgPSBhZGRyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3J0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAod3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBzb2NrZXRzIHRoYXQndmUgYWxyZWFkeSBjb25uZWN0ZWQgKGUuZy4gd2UncmUgdGhlIHNlcnZlcikgd2UgY2FuIGluc3BlY3QgdGhlIF9zb2NrZXQgcHJvcGVydHkgZm9yIHRoZSBhZGRyZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod3MuX3NvY2tldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgPSB3cy5fc29ja2V0LnJlbW90ZUFkZHJlc3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IHdzLl9zb2NrZXQucmVtb3RlUG9ydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIGp1c3Qgbm93IGluaXRpYWxpemluZyBhIGNvbm5lY3Rpb24gdG8gdGhlIHJlbW90ZSwgaW5zcGVjdCB0aGUgdXJsIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSAvd3Nbc10/OlxcL1xcLyhbXjpdKyk6KFxcZCspLy5leGVjKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cy51cmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXZWJTb2NrZXQgVVJMIG11c3QgYmUgaW4gdGhlIGZvcm1hdCB3cyhzKTovL2FkZHJlc3M6cG9ydCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkciA9IHJlc3VsdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0ID0gcGFyc2VJbnQocmVzdWx0WzJdLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgdGhlIGFjdHVhbCB3ZWJzb2NrZXQgb2JqZWN0IGFuZCBjb25uZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSAnd3M6Ly8nICsgYWRkciArICc6JyArIHBvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5vZGUgd3MgbGlicmFyeSBBUEkgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IHRoYW4gdGhlIGJyb3dzZXInc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdHMgPSBbJ2JpbmFyeSddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzID0gbmV3IFdlYlNvY2tldCh1cmwsIG9wdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzLmJpbmFyeVR5cGUgPSAnYXJyYXlidWZmZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVIT1NUVU5SRUFDSCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZHI6IGFkZHIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3J0OiBwb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0OiB3cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRncmFtX3NlbmRfcXVldWU6IFtdXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIFNPQ0tGUy53ZWJzb2NrZXRfc29ja19vcHMuYWRkUGVlcihzb2NrLCBwZWVyKTtcbiAgICAgICAgICAgICAgICAgICAgU09DS0ZTLndlYnNvY2tldF9zb2NrX29wcy5oYW5kbGVQZWVyRXZlbnRzKHNvY2ssIHBlZXIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGEgYm91bmQgZGdyYW0gc29ja2V0LCBzZW5kIHRoZSBwb3J0IG51bWJlciBmaXJzdCB0byBhbGxvd1xuICAgICAgICAgICAgICAgICAgICAvLyB1cyB0byBvdmVycmlkZSB0aGUgZXBoZW1lcmFsIHBvcnQgcmVwb3J0ZWQgdG8gdXMgYnkgcmVtb3RlUG9ydCBvbiB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3RlIGVuZC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvY2sudHlwZSA9PT0gMiAmJiB0eXBlb2Ygc29jay5zcG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZXIuZGdyYW1fc2VuZF9xdWV1ZS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncCcuY2hhckNvZGVBdCgwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ28nLmNoYXJDb2RlQXQoMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyJy5jaGFyQ29kZUF0KDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndCcuY2hhckNvZGVBdCgwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvY2suc3BvcnQgJiAweGZmMDApID4+IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suc3BvcnQgJiAweGZmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXI7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRQZWVyOiBmdW5jdGlvbihzb2NrLCBhZGRyLCBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzb2NrLnBlZXJzW2FkZHIgKyAnOicgKyBwb3J0XTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFkZFBlZXI6IGZ1bmN0aW9uKHNvY2ssIHBlZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc29jay5wZWVyc1twZWVyLmFkZHIgKyAnOicgKyBwZWVyLnBvcnRdID0gcGVlcjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlbW92ZVBlZXI6IGZ1bmN0aW9uKHNvY2ssIHBlZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNvY2sucGVlcnNbcGVlci5hZGRyICsgJzonICsgcGVlci5wb3J0XTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhhbmRsZVBlZXJFdmVudHM6IGZ1bmN0aW9uKHNvY2ssIHBlZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlT3BlbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcXVldWVkID0gcGVlci5kZ3JhbV9zZW5kX3F1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHF1ZXVlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyLnNvY2tldC5zZW5kKHF1ZXVlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlZCA9IHBlZXIuZGdyYW1fc2VuZF9xdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgbXVjaCB3ZSBjYW4gZG8gaGVyZSBpbiB0aGUgd2F5IG9mIHByb3BlciBlcnJvciBoYW5kbGluZyBhcyB3ZSd2ZSBhbHJlYWR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGllZCBhbmQgc2FpZCB0aGlzIGRhdGEgd2FzIHNlbnQuIHNodXQgaXQgZG93bi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVNZXNzYWdlID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmJ5dGVMZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgKTsgLy8gbXVzdCByZWNlaXZlIGFuIEFycmF5QnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7IC8vIG1ha2UgYSB0eXBlZCBhcnJheSB2aWV3IG9uIHRoZSBhcnJheSBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgdGhlIHBvcnQgbWVzc2FnZSwgb3ZlcnJpZGUgdGhlIHBlZXIncyBwb3J0IHdpdGggaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhc2ZpcnN0ID0gZmlyc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc2ZpcnN0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5sZW5ndGggPT09IDEwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSA9PT0gMjU1ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSA9PT0gMjU1ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsyXSA9PT0gMjU1ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVszXSA9PT0gMjU1ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs0XSA9PT0gJ3AnLmNoYXJDb2RlQXQoMCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzVdID09PSAnbycuY2hhckNvZGVBdCgwKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbNl0gPT09ICdyJy5jaGFyQ29kZUF0KDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs3XSA9PT0gJ3QnLmNoYXJDb2RlQXQoMClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgcGVlcidzIHBvcnQgYW5kIGl0J3Mga2V5IGluIHRoZSBwZWVyIG1hcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3BvcnQgPSAoZGF0YVs4XSA8PCA4KSB8IGRhdGFbOV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU09DS0ZTLndlYnNvY2tldF9zb2NrX29wcy5yZW1vdmVQZWVyKHNvY2ssIHBlZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXIucG9ydCA9IG5ld3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU09DS0ZTLndlYnNvY2tldF9zb2NrX29wcy5hZGRQZWVyKHNvY2ssIHBlZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2sucmVjdl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyOiBwZWVyLmFkZHIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDogcGVlci5wb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBwZWVyLnNvY2tldC5vbm9wZW4gPSBoYW5kbGVPcGVuO1xuICAgICAgICAgICAgICAgICAgICBwZWVyLnNvY2tldC5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTWVzc2FnZShldmVudC5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBvbGw6IGZ1bmN0aW9uKHNvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvY2sudHlwZSA9PT0gMSAmJiBzb2NrLnNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGlzdGVuIHNvY2tldHMgc2hvdWxkIG9ubHkgc2F5IHRoZXkncmUgYXZhaWxhYmxlIGZvciByZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBhcmUgcGVuZGluZyBjbGllbnRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvY2sucGVuZGluZy5sZW5ndGggPyA2NCB8IDEgOiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBtYXNrID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBzb2NrLnR5cGUgPT09IDEgLy8gd2Ugb25seSBjYXJlIGFib3V0IHRoZSBzb2NrZXQgc3RhdGUgZm9yIGNvbm5lY3Rpb24tYmFzZWQgc29ja2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gU09DS0ZTLndlYnNvY2tldF9zb2NrX29wcy5nZXRQZWVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jay5kYWRkcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmRwb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBzb2NrLnJlY3ZfcXVldWUubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhZGVzdCB8fCAvLyBjb25uZWN0aW9uLWxlc3Mgc29ja2V0cyBhcmUgYWx3YXlzIHJlYWR5IHRvIHJlYWRcbiAgICAgICAgICAgICAgICAgICAgICAgIChkZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5zb2NrZXQucmVhZHlTdGF0ZSA9PT0gZGVzdC5zb2NrZXQuQ0xPU0lORykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChkZXN0ICYmIGRlc3Quc29ja2V0LnJlYWR5U3RhdGUgPT09IGRlc3Quc29ja2V0LkNMT1NFRClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgcmVjdiByZXR1cm4gMCBvbmNlIGNsb3NlZFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFzayB8PSA2NCB8IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgIWRlc3QgfHwgLy8gY29ubmVjdGlvbi1sZXNzIHNvY2tldHMgYXJlIGFsd2F5cyByZWFkeSB0byB3cml0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgKGRlc3QgJiYgZGVzdC5zb2NrZXQucmVhZHlTdGF0ZSA9PT0gZGVzdC5zb2NrZXQuT1BFTilcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrIHw9IDQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGRlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LnNvY2tldC5yZWFkeVN0YXRlID09PSBkZXN0LnNvY2tldC5DTE9TSU5HKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKGRlc3QgJiYgZGVzdC5zb2NrZXQucmVhZHlTdGF0ZSA9PT0gZGVzdC5zb2NrZXQuQ0xPU0VEKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgfD0gMTY7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hc2s7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpb2N0bDogZnVuY3Rpb24oc29jaywgcmVxdWVzdCwgYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMTUzMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnl0ZXMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb2NrLnJlY3ZfcXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzID0gc29jay5yZWN2X3F1ZXVlWzBdLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBIRUFQMzJbYXJnID4+IDJdID0gYnl0ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJOT19DT0RFUy5FSU5WQUw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbihzb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3ZlIHNwYXduZWQgYSBsaXN0ZW4gc2VydmVyLCBjbG9zZSBpdFxuICAgICAgICAgICAgICAgICAgICBpZiAoc29jay5zZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jay5zZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICBzb2NrLnNlcnZlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gY2xvc2UgYW55IHBlZXIgY29ubmVjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVlcnMgPSBPYmplY3Qua2V5cyhzb2NrLnBlZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVlciA9IHNvY2sucGVlcnNbcGVlcnNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgICAgIFNPQ0tGUy53ZWJzb2NrZXRfc29ja19vcHMucmVtb3ZlUGVlcihzb2NrLCBwZWVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJpbmQ6IGZ1bmN0aW9uKHNvY2ssIGFkZHIsIHBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHNvY2suc2FkZHIgIT09ICd1bmRlZmluZWQnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2Ygc29jay5zcG9ydCAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpOyAvLyBhbHJlYWR5IGJvdW5kXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc29jay5zYWRkciA9IGFkZHI7XG4gICAgICAgICAgICAgICAgICAgIHNvY2suc3BvcnQgPSBwb3J0IHx8IF9ta3BvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gb3JkZXIgdG8gZW11bGF0ZSBkZ3JhbSBzb2NrZXRzLCB3ZSBuZWVkIHRvIGxhdW5jaCBhIGxpc3RlbiBzZXJ2ZXIgd2hlbiBiaW5kaW5nIG9uIGEgY29ubmVjdGlvbi1sZXNzIHNvY2tldFxuICAgICAgICAgICAgICAgICAgICAvLyBub3RlOiB0aGlzIGlzIG9ubHkgcmVxdWlyZWQgb24gdGhlIHNlcnZlciBzaWRlXG4gICAgICAgICAgICAgICAgICAgIGlmIChzb2NrLnR5cGUgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBleGlzdGluZyBzZXJ2ZXIgaWYgaXQgZXhpc3RzXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc29jay5zZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLnNlcnZlci5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suc2VydmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN3YWxsb3cgZXJyb3Igb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZXJyb3IgdGhhdCBvY2N1cnMgd2hlbiBiaW5kaW5nIGluIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnJvd3NlciB3aGVyZSB0aGlzIGlzbid0IHN1cHBvcnRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLnNvY2tfb3BzLmxpc3Rlbihzb2NrLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuZXJybm8gIT09IEVSUk5PX0NPREVTLkVPUE5PVFNVUFApIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbm5lY3Q6IGZ1bmN0aW9uKHNvY2ssIGFkZHIsIHBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvY2suc2VydmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RTLkVPUE5PVFNVUFApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBzb2NrLmRhZGRyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHNvY2suZHBvcnQgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzdCA9IFNPQ0tGUy53ZWJzb2NrZXRfc29ja19vcHMuZ2V0UGVlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suZGFkZHIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jay5kcG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LnNvY2tldC5yZWFkeVN0YXRlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LnNvY2tldC5DT05ORUNUSU5HXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVBTFJFQURZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSVNDT05OKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBzb2NrZXQgdG8gb3VyIHBlZXIgbGlzdCBhbmQgc2V0IG91ciBkZXN0aW5hdGlvbiBhZGRyZXNzIC8gcG9ydCB0byBtYXRjaFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwZWVyID0gU09DS0ZTLndlYnNvY2tldF9zb2NrX29wcy5jcmVhdGVQZWVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgc29jayxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3J0XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHNvY2suZGFkZHIgPSBwZWVyLmFkZHI7XG4gICAgICAgICAgICAgICAgICAgIHNvY2suZHBvcnQgPSBwZWVyLnBvcnQ7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFsd2F5cyBcImZhaWxcIiBpbiBub24tYmxvY2tpbmcgbW9kZVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5QUk9HUkVTUyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsaXN0ZW46IGZ1bmN0aW9uKHNvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvY2suc2VydmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpOyAvLyBhbHJlYWR5IGxpc3RlbmluZ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlNvY2tldFNlcnZlciA9IHJlcXVpcmUoJ3dzJykuU2VydmVyO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBob3N0ID0gc29jay5zYWRkcjtcbiAgICAgICAgICAgICAgICAgICAgc29jay5zZXJ2ZXIgPSBuZXcgV2ViU29ja2V0U2VydmVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvc3Q6IGhvc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3J0OiBzb2NrLnNwb3J0XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzb2NrLnNlcnZlci5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uKHdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc29jay50eXBlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3c29jayA9IFNPQ0tGUy5jcmVhdGVTb2NrZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suZmFtaWx5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2sucHJvdG9jb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIHBlZXIgb24gdGhlIG5ldyBzb2NrZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwZWVyID0gU09DS0ZTLndlYnNvY2tldF9zb2NrX29wcy5jcmVhdGVQZWVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdzb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3c29jay5kYWRkciA9IHBlZXIuYWRkcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdzb2NrLmRwb3J0ID0gcGVlci5wb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHB1c2ggdG8gcXVldWUgZm9yIGFjY2VwdCB0byBwaWNrIHVwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jay5wZW5kaW5nLnB1c2gobmV3c29jayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIHBlZXIgb24gdGhlIGxpc3RlbiBzb2NrZXQgc28gY2FsbGluZyBzZW5kdG8gd2l0aCB0aGUgbGlzdGVuIHNvY2tldCBhbmQgYW4gYWRkcmVzcyB3aWxsIHJlc29sdmUgdG8gdGhlIGNvcnJlY3QgY2xpZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU09DS0ZTLndlYnNvY2tldF9zb2NrX29wcy5jcmVhdGVQZWVyKHNvY2ssIHdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNvY2suc2VydmVyLm9uKCdjbG9zZWQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suc2VydmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNvY2suc2VydmVyLm9uKCdlcnJvcicsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgdGhyb3dcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhY2NlcHQ6IGZ1bmN0aW9uKGxpc3RlbnNvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsaXN0ZW5zb2NrLnNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdzb2NrID0gbGlzdGVuc29jay5wZW5kaW5nLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIG5ld3NvY2suc3RyZWFtLmZsYWdzID0gbGlzdGVuc29jay5zdHJlYW0uZmxhZ3M7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdzb2NrO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0bmFtZTogZnVuY3Rpb24oc29jaywgcGVlcikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYWRkciwgcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmRhZGRyID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmRwb3J0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT1RDT05OKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgPSBzb2NrLmRhZGRyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IHNvY2suZHBvcnQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRyID0gc29jay5zYWRkciB8fCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IHNvY2suc3BvcnQgfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBhZGRyOiBhZGRyLCBwb3J0OiBwb3J0IH07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZW5kbXNnOiBmdW5jdGlvbihzb2NrLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBhZGRyLCBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb2NrLnR5cGUgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbm5lY3Rpb24tbGVzcyBzb2NrZXRzIHdpbGwgaG9ub3IgdGhlIG1lc3NhZ2UgYWRkcmVzcywgYW5kIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdGhlIGJvdW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyID09PSB1bmRlZmluZWQgfHwgcG9ydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkciA9IHNvY2suZGFkZHI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IHNvY2suZHBvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSB3YXMgbm8gYWRkcmVzcyB0byBmYWxsIGJhY2sgdG8sIGVycm9yIG91dFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHIgPT09IHVuZGVmaW5lZCB8fCBwb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FREVTVEFERFJSRVEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ubmVjdGlvbi1iYXNlZCBzb2NrZXRzIHdpbGwgb25seSB1c2UgdGhlIGJvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRyID0gc29jay5kYWRkcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBzb2NrLmRwb3J0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGZpbmQgdGhlIHBlZXIgZm9yIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZXN0ID0gU09DS0ZTLndlYnNvY2tldF9zb2NrX29wcy5nZXRQZWVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgc29jayxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3J0XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVhcmx5IG91dCBpZiBub3QgY29ubmVjdGVkIHdpdGggYSBjb25uZWN0aW9uLWJhc2VkIHNvY2tldFxuICAgICAgICAgICAgICAgICAgICBpZiAoc29jay50eXBlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlc3QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LnNvY2tldC5yZWFkeVN0YXRlID09PSBkZXN0LnNvY2tldC5DTE9TSU5HIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5zb2NrZXQucmVhZHlTdGF0ZSA9PT0gZGVzdC5zb2NrZXQuQ0xPU0VEXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9UQ09OTik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc29ja2V0LnJlYWR5U3RhdGUgPT09IGRlc3Quc29ja2V0LkNPTk5FQ1RJTkdcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVBR0FJTik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgY29weSBvZiB0aGUgaW5jb21pbmcgZGF0YSB0byBzZW5kLCBhcyB0aGUgV2ViU29ja2V0IEFQSSBkb2Vzbid0IHdvcmsgZW50aXJlbHkgd2l0aCBhbiBBcnJheUJ1ZmZlclZpZXcsIGl0J2xsIGp1c3Qgc2VuZCB0aGUgZW50aXJlIHVuZGVybHlpbmcgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgaW5zdGFuY2VvZiBBcnJheSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFycmF5QnVmZmVyVmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGJ1ZmZlci5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmJ5dGVPZmZzZXQgKyBvZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmJ5dGVPZmZzZXQgKyBvZmZzZXQgKyBsZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgZW11bGF0aW5nIGEgY29ubmVjdGlvbi1sZXNzIGRncmFtIHNvY2tldCBhbmQgZG9uJ3QgaGF2ZSBhIGNhY2hlZCBjb25uZWN0aW9uLCBxdWV1ZSB0aGUgYnVmZmVyIHRvIHNlbmQgdXBvbiBjb25uZWN0IGFuZCBsaWUsIHNheWluZyB0aGUgZGF0YSB3YXMgc2VudCBub3cuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzb2NrLnR5cGUgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVzdCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc29ja2V0LnJlYWR5U3RhdGUgIT09IGRlc3Quc29ja2V0Lk9QRU5cbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIG5vdCBjb25uZWN0ZWQsIG9wZW4gYSBuZXcgY29ubmVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlc3QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5zb2NrZXQucmVhZHlTdGF0ZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc29ja2V0LkNMT1NJTkcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5zb2NrZXQucmVhZHlTdGF0ZSA9PT0gZGVzdC5zb2NrZXQuQ0xPU0VEXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSBTT0NLRlMud2Vic29ja2V0X3NvY2tfb3BzLmNyZWF0ZVBlZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5kZ3JhbV9zZW5kX3F1ZXVlLnB1c2goZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VuZCB0aGUgYWN0dWFsIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc29ja2V0LnNlbmQoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZWN2bXNnOiBmdW5jdGlvbihzb2NrLCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzc5MDg3OTkveG5zL3JlY3Ztc2cuaHRtbFxuICAgICAgICAgICAgICAgICAgICBpZiAoc29jay50eXBlID09PSAxICYmIHNvY2suc2VydmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0Y3Agc2VydmVycyBzaG91bGQgbm90IGJlIHJlY3YoKSdpbmcgb24gdGhlIGxpc3RlbiBzb2NrZXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT1RDT05OKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWV1ZWQgPSBzb2NrLnJlY3ZfcXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWV1ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb2NrLnR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXN0ID0gU09DS0ZTLndlYnNvY2tldF9zb2NrX29wcy5nZXRQZWVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmRhZGRyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmRwb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIGRlc3RpbmF0aW9uIGFkZHJlc3MgYnV0IGFyZSBub3QgY29ubmVjdGVkLCBlcnJvciBvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PVENPTk4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc29ja2V0LnJlYWR5U3RhdGUgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LnNvY2tldC5DTE9TSU5HIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc29ja2V0LnJlYWR5U3RhdGUgPT09IGRlc3Quc29ja2V0LkNMT1NFRFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gbnVsbCBpZiB0aGUgc29ja2V0IGhhcyBjbG9zZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSwgb3VyIHNvY2tldCBpcyBpbiBhIHZhbGlkIHN0YXRlIGJ1dCB0cnVseSBoYXMgbm90aGluZyBhdmFpbGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUFHQUlOKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVBR0FJTik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gcXVldWVkLmRhdGEgd2lsbCBiZSBhbiBBcnJheUJ1ZmZlciBpZiBpdCdzIHVuYWR1bHRlcmF0ZWQsIGJ1dCBpZiBpdCdzIHJlcXVldWVkIFRDUCBkYXRhIGl0J2xsIGJlIGFuIEFycmF5QnVmZmVyVmlld1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWV1ZWRMZW5ndGggPVxuICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVkLmRhdGEuYnl0ZUxlbmd0aCB8fCBxdWV1ZWQuZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXVlZE9mZnNldCA9IHF1ZXVlZC5kYXRhLmJ5dGVPZmZzZXQgfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVldWVkQnVmZmVyID0gcXVldWVkLmRhdGEuYnVmZmVyIHx8IHF1ZXVlZC5kYXRhO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlc1JlYWQgPSBNYXRoLm1pbihsZW5ndGgsIHF1ZXVlZExlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjogbmV3IFVpbnQ4QXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVkQnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlZE9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc1JlYWRcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRyOiBxdWV1ZWQuYWRkcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ6IHF1ZXVlZC5wb3J0XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8vIHB1c2ggYmFjayBhbnkgdW5yZWFkIGRhdGEgZm9yIFRDUCBjb25uZWN0aW9uc1xuICAgICAgICAgICAgICAgICAgICBpZiAoc29jay50eXBlID09PSAxICYmIGJ5dGVzUmVhZCA8IHF1ZXVlZExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZXNSZW1haW5pbmcgPSBxdWV1ZWRMZW5ndGggLSBieXRlc1JlYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZWQuZGF0YSA9IG5ldyBVaW50OEFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlZEJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZWRPZmZzZXQgKyBieXRlc1JlYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNSZW1haW5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb2NrLnJlY3ZfcXVldWUudW5zaGlmdChxdWV1ZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiBfc2VuZChmZCwgYnVmLCBsZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHNvY2sgPSBTT0NLRlMuZ2V0U29ja2V0KGZkKTtcbiAgICAgICAgICAgIGlmICghc29jaykge1xuICAgICAgICAgICAgICAgIF9fX3NldEVyck5vKEVSUk5PX0NPREVTLkVCQURGKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX3dyaXRlKGZkLCBidWYsIGxlbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX3B3cml0ZShmaWxkZXMsIGJ1ZiwgbmJ5dGUsIG9mZnNldCkge1xuICAgICAgICAgICAgLy8gc3NpemVfdCBwd3JpdGUoaW50IGZpbGRlcywgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbmJ5dGUsIG9mZl90IG9mZnNldCk7XG4gICAgICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDAwMDk1Mzk5L2Z1bmN0aW9ucy93cml0ZS5odG1sXG4gICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBGUy5nZXRTdHJlYW0oZmlsZGVzKTtcbiAgICAgICAgICAgIGlmICghc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgX19fc2V0RXJyTm8oRVJSTk9fQ09ERVMuRUJBREYpO1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2xhYiA9IEhFQVA4O1xuICAgICAgICAgICAgICAgIHJldHVybiBGUy53cml0ZShzdHJlYW0sIHNsYWIsIGJ1ZiwgbmJ5dGUsIG9mZnNldCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgRlMuaGFuZGxlRlNFcnJvcihlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX3dyaXRlKGZpbGRlcywgYnVmLCBuYnl0ZSkge1xuICAgICAgICAgICAgLy8gc3NpemVfdCB3cml0ZShpbnQgZmlsZGVzLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBuYnl0ZSk7XG4gICAgICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDAwMDk1Mzk5L2Z1bmN0aW9ucy93cml0ZS5odG1sXG4gICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBGUy5nZXRTdHJlYW0oZmlsZGVzKTtcbiAgICAgICAgICAgIGlmICghc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgX19fc2V0RXJyTm8oRVJSTk9fQ09ERVMuRUJBREYpO1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2xhYiA9IEhFQVA4O1xuICAgICAgICAgICAgICAgIHJldHVybiBGUy53cml0ZShzdHJlYW0sIHNsYWIsIGJ1ZiwgbmJ5dGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIEZTLmhhbmRsZUZTRXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9md3JpdGUocHRyLCBzaXplLCBuaXRlbXMsIHN0cmVhbSkge1xuICAgICAgICAgICAgLy8gc2l6ZV90IGZ3cml0ZShjb25zdCB2b2lkICpyZXN0cmljdCBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbml0ZW1zLCBGSUxFICpyZXN0cmljdCBzdHJlYW0pO1xuICAgICAgICAgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwMDA5NTM5OS9mdW5jdGlvbnMvZndyaXRlLmh0bWxcbiAgICAgICAgICAgIGNvbnN0IGJ5dGVzVG9Xcml0ZSA9IG5pdGVtcyAqIHNpemU7XG4gICAgICAgICAgICBpZiAoYnl0ZXNUb1dyaXRlID09IDApIHJldHVybiAwO1xuICAgICAgICAgICAgY29uc3QgYnl0ZXNXcml0dGVuID0gX3dyaXRlKHN0cmVhbSwgcHRyLCBieXRlc1RvV3JpdGUpO1xuICAgICAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbU9iaiA9IEZTLmdldFN0cmVhbShzdHJlYW0pO1xuICAgICAgICAgICAgICAgIGlmIChzdHJlYW1PYmopIHN0cmVhbU9iai5lcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKGJ5dGVzV3JpdHRlbiAvIHNpemUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9fcmVhbGx5TmVnYXRpdmUoeCkge1xuICAgICAgICAgICAgcmV0dXJuIHggPCAwIHx8ICh4ID09PSAwICYmIDEgLyB4ID09PSAtSW5maW5pdHkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9fZm9ybWF0U3RyaW5nKGZvcm1hdCwgdmFyYXJncykge1xuICAgICAgICAgICAgbGV0IHRleHRJbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxldCBhcmdJbmRleCA9IDA7XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXROZXh0QXJnKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBFeHBsaWNpdGx5IGlnbm9yaW5nIHR5cGUgc2FmZXR5LiBPdGhlcndpc2UgdGhpcyBmYWlsczpcbiAgICAgICAgICAgICAgICAvLyAgICAgICBpbnQgeCA9IDQ7IHByaW50ZihcIiVjXFxuXCIsIChjaGFyKXgpO1xuICAgICAgICAgICAgICAgIGxldCByZXQ7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdkb3VibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldCA9IEhFQVBGNjRbKHZhcmFyZ3MgKyBhcmdJbmRleCkgPj4gM107XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09ICdpNjQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIEhFQVAzMlsodmFyYXJncyArIGFyZ0luZGV4KSA+PiAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEhFQVAzMlsodmFyYXJncyArIChhcmdJbmRleCArIDgpKSA+PiAyXVxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICBhcmdJbmRleCArPSA4OyAvLyBlYWNoIDMyLWJpdCBjaHVuayBpcyBpbiBhIDY0LWJpdCBibG9ja1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSAnaTMyJzsgLy8gdmFyYXJncyBhcmUgYWx3YXlzIGkzMiwgaTY0LCBvciBkb3VibGVcbiAgICAgICAgICAgICAgICAgICAgcmV0ID0gSEVBUDMyWyh2YXJhcmdzICsgYXJnSW5kZXgpID4+IDJdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhcmdJbmRleCArPSBNYXRoLm1heChcbiAgICAgICAgICAgICAgICAgICAgUnVudGltZS5nZXROYXRpdmVGaWVsZFNpemUodHlwZSksXG4gICAgICAgICAgICAgICAgICAgIFJ1bnRpbWUuZ2V0QWxpZ25TaXplKHR5cGUsIG51bGwsIHRydWUpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJldCA9IFtdO1xuICAgICAgICAgICAgdmFyIGN1cnIsIG5leHQsIGN1cnJBcmc7XG4gICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGV4dEluZGV4ID0gdGV4dEluZGV4O1xuICAgICAgICAgICAgICAgIGN1cnIgPSBIRUFQOFt0ZXh0SW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyID09PSAwKSBicmVhaztcbiAgICAgICAgICAgICAgICBuZXh0ID0gSEVBUDhbKHRleHRJbmRleCArIDEpIHwgMF07XG4gICAgICAgICAgICAgICAgaWYgKGN1cnIgPT0gMzcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGZsYWdzLlxuICAgICAgICAgICAgICAgICAgICBsZXQgZmxhZ0Fsd2F5c1NpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmxhZ0xlZnRBbGlnbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmxhZ0FsdGVybmF0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmbGFnWmVyb1BhZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmxhZ1BhZFNpZ24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3NMb29wOiB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ0Fsd2F5c1NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdMZWZ0QWxpZ24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnQWx0ZXJuYXRpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ1plcm9QYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGZsYWdzTG9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdaZXJvUGFkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ1BhZFNpZ24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBmbGFnc0xvb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0SW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBIRUFQOFsodGV4dEluZGV4ICsgMSkgfCAwXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgd2lkdGguXG4gICAgICAgICAgICAgICAgICAgIGxldCB3aWR0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09IDQyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGdldE5leHRBcmcoJ2kzMicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gSEVBUDhbKHRleHRJbmRleCArIDEpIHwgMF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV4dCA+PSA0OCAmJiBuZXh0IDw9IDU3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB3aWR0aCAqIDEwICsgKG5leHQgLSA0OCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IEhFQVA4Wyh0ZXh0SW5kZXggKyAxKSB8IDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBwcmVjaXNpb24uXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmVjaXNpb25TZXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gNDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVjaXNpb24gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uU2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IEhFQVA4Wyh0ZXh0SW5kZXggKyAxKSB8IDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gNDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSBnZXROZXh0QXJnKCdpMzInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0SW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlY2lzaW9uQ2hyID0gSEVBUDhbKHRleHRJbmRleCArIDEpIHwgMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVjaXNpb25DaHIgPCA0OCB8fCBwcmVjaXNpb25DaHIgPiA1NylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uICogMTAgKyAocHJlY2lzaW9uQ2hyIC0gNDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0SW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gSEVBUDhbKHRleHRJbmRleCArIDEpIHwgMF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlY2lzaW9uID0gNjsgLy8gU3RhbmRhcmQgZGVmYXVsdC5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgaW50ZWdlciBzaXplcy4gV0FSTklORzogVGhlc2UgYXNzdW1lIGEgMzItYml0IGFyY2hpdGVjdHVyZSFcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFyZ1NpemU7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nLmZyb21DaGFyQ29kZShuZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHROZXh0ID0gSEVBUDhbKHRleHRJbmRleCArIDIpIHwgMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHROZXh0ID09IDEwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0SW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnU2l6ZSA9IDE7IC8vIGNoYXIgKGFjdHVhbGx5IGkzMiBpbiB2YXJhcmdzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1NpemUgPSAyOyAvLyBzaG9ydCAoYWN0dWFsbHkgaTMyIGluIHZhcmFyZ3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHROZXh0ID0gSEVBUDhbKHRleHRJbmRleCArIDIpIHwgMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHROZXh0ID09IDEwOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0SW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnU2l6ZSA9IDg7IC8vIGxvbmcgbG9uZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1NpemUgPSA0OyAvLyBsb25nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTCc6IC8vIGxvbmcgbG9uZ1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncSc6IC8vIGludDY0X3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2onOiAvLyBpbnRtYXhfdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1NpemUgPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneic6IC8vIHNpemVfdFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6IC8vIHB0cmRpZmZfdFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSSc6IC8vIHNpZ25lZCBwdHJkaWZmX3Qgb3IgdW5zaWduZWQgc2l6ZV90XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnU2l6ZSA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1NpemUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdTaXplKSB0ZXh0SW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IEhFQVA4Wyh0ZXh0SW5kZXggKyAxKSB8IDBdO1xuICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdHlwZSBzcGVjaWZpZXIuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nLmZyb21DaGFyQ29kZShuZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCA9IG5leHQgPT0gMTAwIHx8IG5leHQgPT0gMTA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1NpemUgPSBhcmdTaXplIHx8IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJBcmcgPSBnZXROZXh0QXJnKCdpJyArIGFyZ1NpemUgKiA4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnQXJnID0gY3VyckFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJnVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGbGF0dGVuIGk2NC0xIFtsb3csIGhpZ2hdIGludG8gYSAoc2xpZ2h0bHkgcm91bmRlZCkgZG91YmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ1NpemUgPT0gOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyQXJnID0gUnVudGltZS5tYWtlQmlnSW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyckFyZ1swXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJBcmdbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID09IDExN1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnVuY2F0ZSB0byByZXF1ZXN0ZWQgc2l6ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnU2l6ZSA8PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0ID0gTWF0aC5wb3coMjU2LCBhcmdTaXplKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJBcmcgPSAoc2lnbmVkID8gcmVTaWduIDogdW5TaWduKShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJBcmcgJiBsaW1pdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1NpemUgKiA4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcm1hdCB0aGUgbnVtYmVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJBYnNBcmcgPSBNYXRoLmFicyhjdXJyQXJnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJlZml4ID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gMTAwIHx8IG5leHQgPT0gMTA1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdTaXplID09IDggJiYgaTY0TWF0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1RleHQgPSBpNjRNYXRoLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnQXJnWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdBcmdbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnVGV4dCA9IHJlU2lnbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyQXJnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggKiBhcmdTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkudG9TdHJpbmcoMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dCA9PSAxMTcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ1NpemUgPT0gOCAmJiBpNjRNYXRoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnVGV4dCA9IGk2NE1hdGguc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdBcmdbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ0FyZ1sxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdUZXh0ID0gdW5TaWduKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJBcmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAqIGFyZ1NpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS50b1N0cmluZygxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJBcmcgPSBNYXRoLmFicyhjdXJyQXJnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHQgPT0gMTExKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1RleHQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdBbHRlcm5hdGl2ZSA/ICcwJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyQWJzQXJnLnRvU3RyaW5nKDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dCA9PSAxMjAgfHwgbmV4dCA9PSA4OCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ0FsdGVybmF0aXZlICYmIGN1cnJBcmcgIT0gMCA/ICcweCcgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ1NpemUgPT0gOCAmJiBpNjRNYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ0FyZ1sxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1RleHQgPSAob3JpZ0FyZ1sxXSA+Pj4gMCkudG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbG93ZXIgPSAob3JpZ0FyZ1swXSA+Pj4gMCkudG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobG93ZXIubGVuZ3RoIDwgOClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ZXIgPSAnMCcgKyBsb3dlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdUZXh0ICs9IGxvd2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdUZXh0ID0gKG9yaWdBcmdbMF0gPj4+IDApLnRvU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyckFyZyA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcHJlc2VudCBuZWdhdGl2ZSBudW1iZXJzIGluIGhleCBhcyAyJ3MgY29tcGxlbWVudC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJBcmcgPSAtY3VyckFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1RleHQgPSAoY3VyckFic0FyZyAtIDEpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdUZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZiAtIHBhcnNlSW50KGFyZ1RleHRbaV0sIDE2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdUZXh0ID0gYnVmZmVyLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFyZ1RleHQubGVuZ3RoIDwgYXJnU2l6ZSAqIDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnVGV4dCA9ICdmJyArIGFyZ1RleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdUZXh0ID0gY3VyckFic0FyZy50b1N0cmluZygxNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gODgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHByZWZpeC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnVGV4dCA9IGFyZ1RleHQudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dCA9PSAxMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJBYnNBcmcgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1RleHQgPSAnKG5pbCknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gJzB4JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1RleHQgPSBjdXJyQWJzQXJnLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlY2lzaW9uU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChhcmdUZXh0Lmxlbmd0aCA8IHByZWNpc2lvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnVGV4dCA9ICcwJyArIGFyZ1RleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHNpZ24gaWYgbmVlZGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJBcmcgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ0Fsd2F5c1NpZ25lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gJysnICsgcHJlZml4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZsYWdQYWRTaWduKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSAnICcgKyBwcmVmaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW92ZSBzaWduIHRvIHByZWZpeCBzbyB3ZSB6ZXJvLXBhZCBhZnRlciB0aGUgc2lnblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdUZXh0LmNoYXJBdCgwKSA9PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gJy0nICsgcHJlZml4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdUZXh0ID0gYXJnVGV4dC5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwcmVmaXgubGVuZ3RoICsgYXJnVGV4dC5sZW5ndGggPCB3aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ0xlZnRBbGlnbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnVGV4dCArPSAnICc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ1plcm9QYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdUZXh0ID0gJzAnICsgYXJnVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gJyAnICsgcHJlZml4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgcmVzdWx0IGludG8gdGhlIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdUZXh0ID0gcHJlZml4ICsgYXJnVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdUZXh0LnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uKGNocikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaChjaHIuY2hhckNvZGVBdCgwKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0YnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdFJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2cnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRyc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGbG9hdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyckFyZyA9IGdldE5leHRBcmcoJ2RvdWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdUZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihjdXJyQXJnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdUZXh0ID0gJ25hbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdaZXJvUGFkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNGaW5pdGUoY3VyckFyZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnVGV4dCA9IChjdXJyQXJnIDwgMCA/ICctJyA6ICcnKSArICdpbmYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnWmVyb1BhZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0dlbmVyYWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVmZmVjdGl2ZVByZWNpc2lvbiA9IE1hdGgubWluKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCBnL0cgdG8gZi9GIG9yIGUvRSwgYXMgcGVyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvcHJpbnRmLmh0bWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gMTAzIHx8IG5leHQgPT0gNzEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24gfHwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cG9uZW50ID0gcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyckFyZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudG9FeHBvbmVudGlhbChlZmZlY3RpdmVQcmVjaXNpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnZScpWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA+IGV4cG9uZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQgPj0gLTRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSAobmV4dCA9PSAxMDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnZidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnRidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uIC09IGV4cG9uZW50ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IChuZXh0ID09IDEwM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdFJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24tLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVByZWNpc2lvbiA9IE1hdGgubWluKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PSAxMDEgfHwgbmV4dCA9PSA2OSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnVGV4dCA9IGN1cnJBcmcudG9FeHBvbmVudGlhbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVQcmVjaXNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGV4cG9uZW50IGhhcyBhdCBsZWFzdCAyIGRpZ2l0cy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvW2VFXVstK11cXGQkLy50ZXN0KGFyZ1RleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnVGV4dCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1RleHQuc2xpY2UoMCwgLTEpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnVGV4dC5zbGljZSgtMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dCA9PSAxMDIgfHwgbmV4dCA9PSA3MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnVGV4dCA9IGN1cnJBcmcudG9GaXhlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVQcmVjaXNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyckFyZyA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVhbGx5TmVnYXRpdmUoY3VyckFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1RleHQgPSAnLScgKyBhcmdUZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gYXJnVGV4dC5zcGxpdCgnZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNHZW5lcmFsICYmICFmbGFnQWx0ZXJuYXRpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpc2NhcmQgdHJhaWxpbmcgemVyb3MgYW5kIHBlcmlvZHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNbMF0ubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzWzBdLmluZGV4T2YoJy4nKSAhPSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0c1swXS5zbGljZSgtMSkgPT0gJzAnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzWzBdLnNsaWNlKC0xKSA9PSAnLicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c1swXSA9IHBhcnRzWzBdLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgcGVyaW9kIGluIGFsdGVybmF0aXZlIG1vZGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ0FsdGVybmF0aXZlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnVGV4dC5pbmRleE9mKCcuJykgPT0gLTFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c1swXSArPSAnLic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBaZXJvIHBhZCB1bnRpbCByZXF1aXJlZCBwcmVjaXNpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocHJlY2lzaW9uID4gZWZmZWN0aXZlUHJlY2lzaW9uKyspXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNbMF0gKz0gJzAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1RleHQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNbMF0gK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnRzLmxlbmd0aCA+IDEgPyAnZScgKyBwYXJ0c1sxXSA6ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FwaXRhbGl6ZSAnRScgaWYgbmVlZGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PSA2OSkgYXJnVGV4dCA9IGFyZ1RleHQudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHNpZ24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyQXJnID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFnQWx3YXlzU2lnbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnVGV4dCA9ICcrJyArIGFyZ1RleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZsYWdQYWRTaWduKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnVGV4dCA9ICcgJyArIGFyZ1RleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFyZ1RleHQubGVuZ3RoIDwgd2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdMZWZ0QWxpZ24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1RleHQgKz0gJyAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdaZXJvUGFkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZ1RleHRbMF0gPT0gJy0nIHx8IGFyZ1RleHRbMF0gPT0gJysnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnVGV4dCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ1RleHRbMF0gKyAnMCcgKyBhcmdUZXh0LnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdUZXh0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdaZXJvUGFkID8gJzAnIDogJyAnKSArIGFyZ1RleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGNhc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgPCA5NykgYXJnVGV4dCA9IGFyZ1RleHQudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHJlc3VsdCBpbnRvIHRoZSBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnVGV4dC5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbihjaHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goY2hyLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncyc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyZyA9IGdldE5leHRBcmcoJ2k4KicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcmdMZW5ndGggPSBhcmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfc3RybGVuKGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnKG51bGwpJy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWNpc2lvblNldClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnTGVuZ3RoID0gTWF0aC5taW4oYXJnTGVuZ3RoLCBwcmVjaXNpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmxhZ0xlZnRBbGlnbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYXJnTGVuZ3RoIDwgd2lkdGgtLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goMzIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goSEVBUFU4W2FyZysrIHwgMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcmV0LmNvbmNhdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludEFycmF5RnJvbVN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG51bGwpJy5zdWJzdHIoMCwgYXJnTGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFnTGVmdEFsaWduKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChhcmdMZW5ndGggPCB3aWR0aC0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCgzMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYXJhY3Rlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ0xlZnRBbGlnbikgcmV0LnB1c2goZ2V0TmV4dEFyZygnaTgnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKC0td2lkdGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKDMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmbGFnTGVmdEFsaWduKSByZXQucHVzaChnZXROZXh0QXJnKCdpOCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCB3cml0dGVuIHNvIGZhciB0byB0aGUgbmV4dCBwYXJhbWV0ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHRyID0gZ2V0TmV4dEFyZygnaTMyKicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhFQVAzMltwdHIgPj4gMl0gPSByZXQubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnJSc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaXRlcmFsIHBlcmNlbnQgc2lnbi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaChjdXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmtub3duIHNwZWNpZmllcnMgcmVtYWluIHVudG91Y2hlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHN0YXJ0VGV4dEluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpIDwgdGV4dEluZGV4ICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKEhFQVA4W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGV4dEluZGV4ICs9IDI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goY3Vycik7XG4gICAgICAgICAgICAgICAgICAgIHRleHRJbmRleCArPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2ZwcmludGYoc3RyZWFtLCBmb3JtYXQsIHZhcmFyZ3MpIHtcbiAgICAgICAgICAgIC8vIGludCBmcHJpbnRmKEZJTEUgKnJlc3RyaWN0IHN0cmVhbSwgY29uc3QgY2hhciAqcmVzdHJpY3QgZm9ybWF0LCAuLi4pO1xuICAgICAgICAgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwMDA5NTM5OS9mdW5jdGlvbnMvcHJpbnRmLmh0bWxcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IF9fZm9ybWF0U3RyaW5nKGZvcm1hdCwgdmFyYXJncyk7XG4gICAgICAgICAgICBjb25zdCBzdGFjayA9IFJ1bnRpbWUuc3RhY2tTYXZlKCk7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBfZndyaXRlKFxuICAgICAgICAgICAgICAgIGFsbG9jYXRlKHJlc3VsdCwgJ2k4JywgQUxMT0NfU1RBQ0spLFxuICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgcmVzdWx0Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICBzdHJlYW1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBSdW50aW1lLnN0YWNrUmVzdG9yZShzdGFjayk7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9yZWN2KGZkLCBidWYsIGxlbikge1xuICAgICAgICAgICAgY29uc3Qgc29jayA9IFNPQ0tGUy5nZXRTb2NrZXQoZmQpO1xuICAgICAgICAgICAgaWYgKCFzb2NrKSB7XG4gICAgICAgICAgICAgICAgX19fc2V0RXJyTm8oRVJSTk9fQ09ERVMuRUJBREYpO1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfcmVhZChmZCwgYnVmLCBsZW4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9wcmVhZChmaWxkZXMsIGJ1ZiwgbmJ5dGUsIG9mZnNldCkge1xuICAgICAgICAgICAgLy8gc3NpemVfdCBwcmVhZChpbnQgZmlsZGVzLCB2b2lkICpidWYsIHNpemVfdCBuYnl0ZSwgb2ZmX3Qgb2Zmc2V0KTtcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDAwOTUzOTkvZnVuY3Rpb25zL3JlYWQuaHRtbFxuICAgICAgICAgICAgY29uc3Qgc3RyZWFtID0gRlMuZ2V0U3RyZWFtKGZpbGRlcyk7XG4gICAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgICAgIF9fX3NldEVyck5vKEVSUk5PX0NPREVTLkVCQURGKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNsYWIgPSBIRUFQODtcbiAgICAgICAgICAgICAgICByZXR1cm4gRlMucmVhZChzdHJlYW0sIHNsYWIsIGJ1ZiwgbmJ5dGUsIG9mZnNldCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgRlMuaGFuZGxlRlNFcnJvcihlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX3JlYWQoZmlsZGVzLCBidWYsIG5ieXRlKSB7XG4gICAgICAgICAgICAvLyBzc2l6ZV90IHJlYWQoaW50IGZpbGRlcywgdm9pZCAqYnVmLCBzaXplX3QgbmJ5dGUpO1xuICAgICAgICAgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwMDA5NTM5OS9mdW5jdGlvbnMvcmVhZC5odG1sXG4gICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBGUy5nZXRTdHJlYW0oZmlsZGVzKTtcbiAgICAgICAgICAgIGlmICghc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgX19fc2V0RXJyTm8oRVJSTk9fQ09ERVMuRUJBREYpO1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2xhYiA9IEhFQVA4O1xuICAgICAgICAgICAgICAgIHJldHVybiBGUy5yZWFkKHN0cmVhbSwgc2xhYiwgYnVmLCBuYnl0ZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgRlMuaGFuZGxlRlNFcnJvcihlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2ZyZWFkKHB0ciwgc2l6ZSwgbml0ZW1zLCBzdHJlYW0pIHtcbiAgICAgICAgICAgIC8vIHNpemVfdCBmcmVhZCh2b2lkICpyZXN0cmljdCBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbml0ZW1zLCBGSUxFICpyZXN0cmljdCBzdHJlYW0pO1xuICAgICAgICAgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwMDA5NTM5OS9mdW5jdGlvbnMvZnJlYWQuaHRtbFxuICAgICAgICAgICAgbGV0IGJ5dGVzVG9SZWFkID0gbml0ZW1zICogc2l6ZTtcbiAgICAgICAgICAgIGlmIChieXRlc1RvUmVhZCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgYnl0ZXNSZWFkID0gMDtcbiAgICAgICAgICAgIGNvbnN0IHN0cmVhbU9iaiA9IEZTLmdldFN0cmVhbShzdHJlYW0pO1xuICAgICAgICAgICAgd2hpbGUgKHN0cmVhbU9iai51bmdvdHRlbi5sZW5ndGggJiYgYnl0ZXNUb1JlYWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgSEVBUDhbcHRyKysgfCAwXSA9IHN0cmVhbU9iai51bmdvdHRlbi5wb3AoKTtcbiAgICAgICAgICAgICAgICBieXRlc1RvUmVhZC0tO1xuICAgICAgICAgICAgICAgIGJ5dGVzUmVhZCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXJyID0gX3JlYWQoc3RyZWFtLCBwdHIsIGJ5dGVzVG9SZWFkKTtcbiAgICAgICAgICAgIGlmIChlcnIgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RyZWFtT2JqKSBzdHJlYW1PYmouZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnl0ZXNSZWFkICs9IGVycjtcbiAgICAgICAgICAgIGlmIChieXRlc1JlYWQgPCBieXRlc1RvUmVhZCkgc3RyZWFtT2JqLmVvZiA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihieXRlc1JlYWQgLyBzaXplKTtcbiAgICAgICAgfVxuICAgICAgICBNb2R1bGVbJ19tZW1jbXAnXSA9IF9tZW1jbXA7XG4gICAgICAgIGZ1bmN0aW9uIF9sc2VlayhmaWxkZXMsIG9mZnNldCwgd2hlbmNlKSB7XG4gICAgICAgICAgICAvLyBvZmZfdCBsc2VlayhpbnQgZmlsZGVzLCBvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpO1xuICAgICAgICAgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwMDA5NTM5OS9mdW5jdGlvbnMvbHNlZWsuaHRtbFxuICAgICAgICAgICAgY29uc3Qgc3RyZWFtID0gRlMuZ2V0U3RyZWFtKGZpbGRlcyk7XG4gICAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgICAgIF9fX3NldEVyck5vKEVSUk5PX0NPREVTLkVCQURGKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBGUy5sbHNlZWsoc3RyZWFtLCBvZmZzZXQsIHdoZW5jZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgRlMuaGFuZGxlRlNFcnJvcihlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2ZzZWVrKHN0cmVhbSwgb2Zmc2V0LCB3aGVuY2UpIHtcbiAgICAgICAgICAgIC8vIGludCBmc2VlayhGSUxFICpzdHJlYW0sIGxvbmcgb2Zmc2V0LCBpbnQgd2hlbmNlKTtcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDAwOTUzOTkvZnVuY3Rpb25zL2ZzZWVrLmh0bWxcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IF9sc2VlayhzdHJlYW0sIG9mZnNldCwgd2hlbmNlKTtcbiAgICAgICAgICAgIGlmIChyZXQgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHJlYW0gPSBGUy5nZXRTdHJlYW0oc3RyZWFtKTtcbiAgICAgICAgICAgIHN0cmVhbS5lb2YgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9jbG9zZShmaWxkZXMpIHtcbiAgICAgICAgICAgIC8vIGludCBjbG9zZShpbnQgZmlsZGVzKTtcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDAwOTUzOTkvZnVuY3Rpb25zL2Nsb3NlLmh0bWxcbiAgICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IEZTLmdldFN0cmVhbShmaWxkZXMpO1xuICAgICAgICAgICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICBfX19zZXRFcnJObyhFUlJOT19DT0RFUy5FQkFERik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBGUy5jbG9zZShzdHJlYW0pO1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIEZTLmhhbmRsZUZTRXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9mc3luYyhmaWxkZXMpIHtcbiAgICAgICAgICAgIC8vIGludCBmc3luYyhpbnQgZmlsZGVzKTtcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDAwOTUzOTkvZnVuY3Rpb25zL2ZzeW5jLmh0bWxcbiAgICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IEZTLmdldFN0cmVhbShmaWxkZXMpO1xuICAgICAgICAgICAgaWYgKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIC8vIFdlIHdyaXRlIGRpcmVjdGx5IHRvIHRoZSBmaWxlIHN5c3RlbSwgc28gdGhlcmUncyBub3RoaW5nIHRvIGRvIGhlcmUuXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9fX3NldEVyck5vKEVSUk5PX0NPREVTLkVCQURGKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2ZjbG9zZShzdHJlYW0pIHtcbiAgICAgICAgICAgIC8vIGludCBmY2xvc2UoRklMRSAqc3RyZWFtKTtcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDAwOTUzOTkvZnVuY3Rpb25zL2ZjbG9zZS5odG1sXG4gICAgICAgICAgICBfZnN5bmMoc3RyZWFtKTtcbiAgICAgICAgICAgIHJldHVybiBfY2xvc2Uoc3RyZWFtKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfcHJpbnRmKGZvcm1hdCwgdmFyYXJncykge1xuICAgICAgICAgICAgLy8gaW50IHByaW50Zihjb25zdCBjaGFyICpyZXN0cmljdCBmb3JtYXQsIC4uLik7XG4gICAgICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDAwMDk1Mzk5L2Z1bmN0aW9ucy9wcmludGYuaHRtbFxuICAgICAgICAgICAgY29uc3Qgc3Rkb3V0ID0gSEVBUDMyW19zdGRvdXQgPj4gMl07XG4gICAgICAgICAgICByZXR1cm4gX2ZwcmludGYoc3Rkb3V0LCBmb3JtYXQsIHZhcmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIE1vZHVsZVsnX21lbXNldCddID0gX21lbXNldDtcbiAgICAgICAgTW9kdWxlWydfbWVtY3B5J10gPSBfbWVtY3B5O1xuICAgICAgICBjb25zdCBfbGx2bV9wb3dfZjY0ID0gTWF0aF9wb3c7XG4gICAgICAgIGNvbnN0IF9zaW4gPSBNYXRoX3NpbjtcbiAgICAgICAgZnVuY3Rpb24gX3N0cnJjaHIocHRyLCBjaHIpIHtcbiAgICAgICAgICAgIGxldCBwdHIyID0gcHRyICsgX3N0cmxlbihwdHIpO1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmIChIRUFQOFtwdHIyXSA9PSBjaHIpIHJldHVybiBwdHIyO1xuICAgICAgICAgICAgICAgIHB0cjItLTtcbiAgICAgICAgICAgIH0gd2hpbGUgKHB0cjIgPj0gcHRyKTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGxldCBfX19zdHJ0b2tfc3RhdGUgPSAwO1xuICAgICAgICBmdW5jdGlvbiBfc3RydG9rX3IocywgZGVsaW0sIGxhc3RzKSB7XG4gICAgICAgICAgICBjb25zdCBza2lwX2xlYWRpbmdfZGVsaW0gPSAxO1xuICAgICAgICAgICAgbGV0IHNwYW5wO1xuICAgICAgICAgICAgbGV0IGMsIHNjO1xuICAgICAgICAgICAgbGV0IHRvaztcbiAgICAgICAgICAgIGlmIChzID09IDAgJiYgKHMgPSBnZXRWYWx1ZShsYXN0cywgJ2k4KicpKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250OiB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgIGMgPSBnZXRWYWx1ZShzKyssICdpOCcpO1xuICAgICAgICAgICAgICAgIGZvciAoc3BhbnAgPSBkZWxpbTsgKHNjID0gZ2V0VmFsdWUoc3BhbnArKywgJ2k4JykpICE9IDA7ICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSBzYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNraXBfbGVhZGluZ19kZWxpbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGNvbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKGxhc3RzLCBzLCAnaTgqJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUocyAtIDEsIDAsICdpOCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09IDApIHtcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZShsYXN0cywgMCwgJ2k4KicpO1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9rID0gcyAtIDE7XG4gICAgICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgICAgICAgYyA9IGdldFZhbHVlKHMrKywgJ2k4Jyk7XG4gICAgICAgICAgICAgICAgc3BhbnAgPSBkZWxpbTtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoc2MgPSBnZXRWYWx1ZShzcGFucCsrLCAnaTgnKSkgPT0gYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShzIC0gMSwgMCwgJ2k4Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShsYXN0cywgcywgJ2k4KicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKHNjICE9IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWJvcnQoJ3N0cnRva19yIGVycm9yIScpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9zdHJ0b2socywgZGVsaW0pIHtcbiAgICAgICAgICAgIHJldHVybiBfc3RydG9rX3IocywgZGVsaW0sIF9fX3N0cnRva19zdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX3N0cm5jbXAocHgsIHB5LCBuKSB7XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4ID0gSEVBUFU4WyhweCArIGkpIHwgMF07XG4gICAgICAgICAgICAgICAgY29uc3QgeSA9IEhFQVBVOFsocHkgKyBpKSB8IDBdO1xuICAgICAgICAgICAgICAgIGlmICh4ID09IHkgJiYgeCA9PSAwKSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICBpZiAoeCA9PSAwKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgaWYgKHkgPT0gMCkgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgaWYgKHggPT0geSkge1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4ID4geSA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfc3RyY21wKHB4LCBweSkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdHJuY21wKHB4LCBweSwgVE9UQUxfTUVNT1JZKTtcbiAgICAgICAgfVxuICAgICAgICBNb2R1bGVbJ19zdHJuY3B5J10gPSBfc3RybmNweTtcbiAgICAgICAgZnVuY3Rpb24gX2lzc3BhY2UoY2hyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hyID09IDMyIHx8IChjaHIgPj0gOSAmJiBjaHIgPD0gMTMpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9fcGFyc2VJbnQoc3RyLCBlbmRwdHIsIGJhc2UsIG1pbiwgbWF4LCBiaXRzLCB1bnNpZ24pIHtcbiAgICAgICAgICAgIC8vIFNraXAgc3BhY2UuXG4gICAgICAgICAgICB3aGlsZSAoX2lzc3BhY2UoSEVBUDhbc3RyXSkpIHN0cisrO1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGEgcGx1cy9taW51cyBzaWduLlxuICAgICAgICAgICAgbGV0IG11bHRpcGxpZXIgPSAxO1xuICAgICAgICAgICAgaWYgKEhFQVA4W3N0cl0gPT0gNDUpIHtcbiAgICAgICAgICAgICAgICBtdWx0aXBsaWVyID0gLTE7XG4gICAgICAgICAgICAgICAgc3RyKys7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEhFQVA4W3N0cl0gPT0gNDMpIHtcbiAgICAgICAgICAgICAgICBzdHIrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZpbmQgYmFzZS5cbiAgICAgICAgICAgIGxldCBmaW5hbEJhc2UgPSBiYXNlO1xuICAgICAgICAgICAgaWYgKCFmaW5hbEJhc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoSEVBUDhbc3RyXSA9PSA0OCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBIRUFQOFsoc3RyICsgMSkgfCAwXSA9PSAxMjAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIEhFQVA4WyhzdHIgKyAxKSB8IDBdID09IDg4XG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxCYXNlID0gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsQmFzZSA9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmluYWxCYXNlID09IDE2KSB7XG4gICAgICAgICAgICAgICAgaWYgKEhFQVA4W3N0cl0gPT0gNDgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgSEVBUDhbKHN0ciArIDEpIHwgMF0gPT0gMTIwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBIRUFQOFsoc3RyICsgMSkgfCAwXSA9PSA4OFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFmaW5hbEJhc2UpIGZpbmFsQmFzZSA9IDEwO1xuICAgICAgICAgICAgLy8gR2V0IGRpZ2l0cy5cbiAgICAgICAgICAgIGxldCBjaHI7XG4gICAgICAgICAgICBsZXQgcmV0ID0gMDtcbiAgICAgICAgICAgIHdoaWxlICgoY2hyID0gSEVBUDhbc3RyXSkgIT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpZ2l0ID0gcGFyc2VJbnQoU3RyaW5nLmZyb21DaGFyQ29kZShjaHIpLCBmaW5hbEJhc2UpO1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihkaWdpdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0ID0gcmV0ICogZmluYWxCYXNlICsgZGlnaXQ7XG4gICAgICAgICAgICAgICAgICAgIHN0cisrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFwcGx5IHNpZ24uXG4gICAgICAgICAgICByZXQgKj0gbXVsdGlwbGllcjtcbiAgICAgICAgICAgIC8vIFNldCBlbmQgcG9pbnRlci5cbiAgICAgICAgICAgIGlmIChlbmRwdHIpIHtcbiAgICAgICAgICAgICAgICBIRUFQMzJbZW5kcHRyID4+IDJdID0gc3RyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVW5zaWduIGlmIG5lZWRlZC5cbiAgICAgICAgICAgIGlmICh1bnNpZ24pIHtcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMocmV0KSA+IG1heCkge1xuICAgICAgICAgICAgICAgICAgICByZXQgPSBtYXg7XG4gICAgICAgICAgICAgICAgICAgIF9fX3NldEVyck5vKEVSUk5PX0NPREVTLkVSQU5HRSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0ID0gdW5TaWduKHJldCwgYml0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVmFsaWRhdGUgcmFuZ2UuXG4gICAgICAgICAgICBpZiAocmV0ID4gbWF4IHx8IHJldCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldCA9IHJldCA+IG1heCA/IG1heCA6IG1pbjtcbiAgICAgICAgICAgICAgICBfX19zZXRFcnJObyhFUlJOT19DT0RFUy5FUkFOR0UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJpdHMgPT0gNjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAoYXNtWydzZXRUZW1wUmV0MCddKFxuICAgICAgICAgICAgICAgICAgICAgICAgKCh0ZW1wRG91YmxlID0gcmV0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICtNYXRoX2Ficyh0ZW1wRG91YmxlKSA+PSArMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGVtcERvdWJsZSA+ICswXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKE1hdGhfbWluKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArTWF0aF9mbG9vcih0ZW1wRG91YmxlIC8gKzQyOTQ5NjcyOTYpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArNDI5NDk2NzI5NVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA+Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogfn4rTWF0aF9jZWlsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVtcERvdWJsZSAtICsofn50ZW1wRG91YmxlID4+PiAwKSkgL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKzQyOTQ5NjcyOTZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApID4+PiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICByZXQgPj4+IDApIHwgMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9zdHJ0b2woc3RyLCBlbmRwdHIsIGJhc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBfX3BhcnNlSW50KHN0ciwgZW5kcHRyLCBiYXNlLCAtMjE0NzQ4MzY0OCwgMjE0NzQ4MzY0NywgMzIpOyAvLyBMT05HX01JTiwgTE9OR19NQVguXG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2F0b2kocHRyKSB7XG4gICAgICAgICAgICByZXR1cm4gX3N0cnRvbChwdHIsIG51bGwsIDEwKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfc3RyY2hyKHB0ciwgY2hyKSB7XG4gICAgICAgICAgICBwdHItLTtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBwdHIrKztcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gSEVBUDhbcHRyXTtcbiAgICAgICAgICAgICAgICBpZiAodmFsID09IGNocikgcmV0dXJuIHB0cjtcbiAgICAgICAgICAgIH0gd2hpbGUgKHZhbCk7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfYWJvcnQoKSB7XG4gICAgICAgICAgICBNb2R1bGVbJ2Fib3J0J10oKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfX19lcnJub19sb2NhdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBfX19lcnJub19zdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfc2JyayhieXRlcykge1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBJbXBsZW1lbnQgYSBMaW51eC1saWtlICdtZW1vcnkgYXJlYScgZm9yIG91ciAncHJvY2VzcycuXG4gICAgICAgICAgICAgICAgQ2hhbmdlcyB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGFyZWEgYnkgfGJ5dGVzfC5cbiAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyB0b3AgKCdicmVhaycpIG9mIHRoZSBtZW1vcnkgYXJlYS5cbiAgICAgICAgICAgICAgICBXZSBjb250cm9sIHRoZSBcImR5bmFtaWNcIiBtZW1vcnkgLSBEWU5BTUlDX0JBU0UgdG8gRFlOQU1JQ1RPUC5cbiAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCBzZWxmID0gX3Nicms7XG4gICAgICAgICAgICBpZiAoIXNlbGYuY2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgRFlOQU1JQ1RPUCA9IGFsaWduTWVtb3J5UGFnZShEWU5BTUlDVE9QKTsgLy8gbWFrZSBzdXJlIHdlIHN0YXJ0IG91dCBhbGlnbmVkXG4gICAgICAgICAgICAgICAgc2VsZi5jYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGFzc2VydChSdW50aW1lLmR5bmFtaWNBbGxvYyk7XG4gICAgICAgICAgICAgICAgc2VsZi5hbGxvYyA9IFJ1bnRpbWUuZHluYW1pY0FsbG9jO1xuICAgICAgICAgICAgICAgIFJ1bnRpbWUuZHluYW1pY0FsbG9jID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCdjYW5ub3QgZHluYW1pY2FsbHkgYWxsb2NhdGUsIHNicmsgbm93IGhhcyBjb250cm9sJyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJldCA9IERZTkFNSUNUT1A7XG4gICAgICAgICAgICBpZiAoYnl0ZXMgIT0gMCkgc2VsZi5hbGxvYyhieXRlcyk7XG4gICAgICAgICAgICByZXR1cm4gcmV0OyAvLyBQcmV2aW91cyBicmVhayBsb2NhdGlvbi5cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfc3lzY29uZihuYW1lKSB7XG4gICAgICAgICAgICAvLyBsb25nIHN5c2NvbmYoaW50IG5hbWUpO1xuICAgICAgICAgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMvc3lzY29uZi5odG1sXG4gICAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEFHRV9TSVpFO1xuICAgICAgICAgICAgICAgIGNhc2UgMTMyOlxuICAgICAgICAgICAgICAgIGNhc2UgMTMzOlxuICAgICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgY2FzZSAxMzc6XG4gICAgICAgICAgICAgICAgY2FzZSAxMzg6XG4gICAgICAgICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgICAgICBjYXNlIDIzNTpcbiAgICAgICAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICAgICAgY2FzZSAxNDk6XG4gICAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgIGNhc2UgMjM2OlxuICAgICAgICAgICAgICAgIGNhc2UgMTUzOlxuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICAgICAgY2FzZSAxNTk6XG4gICAgICAgICAgICAgICAgY2FzZSAxNTQ6XG4gICAgICAgICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgICAgICBjYXNlIDc3OlxuICAgICAgICAgICAgICAgIGNhc2UgNzg6XG4gICAgICAgICAgICAgICAgY2FzZSAxMzk6XG4gICAgICAgICAgICAgICAgY2FzZSA4MDpcbiAgICAgICAgICAgICAgICBjYXNlIDgxOlxuICAgICAgICAgICAgICAgIGNhc2UgNzk6XG4gICAgICAgICAgICAgICAgY2FzZSA4MjpcbiAgICAgICAgICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgICAgICAgIGNhc2UgNjc6XG4gICAgICAgICAgICAgICAgY2FzZSAxNjQ6XG4gICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICAgICAgICBjYXNlIDk1OlxuICAgICAgICAgICAgICAgIGNhc2UgNTI6XG4gICAgICAgICAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjAwODA5O1xuICAgICAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgICAgY2FzZSAyNDY6XG4gICAgICAgICAgICAgICAgY2FzZSAxMjc6XG4gICAgICAgICAgICAgICAgY2FzZSAxMjg6XG4gICAgICAgICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgICAgIGNhc2UgMTYwOlxuICAgICAgICAgICAgICAgIGNhc2UgMTYxOlxuICAgICAgICAgICAgICAgIGNhc2UgMTgxOlxuICAgICAgICAgICAgICAgIGNhc2UgMTgyOlxuICAgICAgICAgICAgICAgIGNhc2UgMjQyOlxuICAgICAgICAgICAgICAgIGNhc2UgMTgzOlxuICAgICAgICAgICAgICAgIGNhc2UgMTg0OlxuICAgICAgICAgICAgICAgIGNhc2UgMjQzOlxuICAgICAgICAgICAgICAgIGNhc2UgMjQ0OlxuICAgICAgICAgICAgICAgIGNhc2UgMjQ1OlxuICAgICAgICAgICAgICAgIGNhc2UgMTY1OlxuICAgICAgICAgICAgICAgIGNhc2UgMTc4OlxuICAgICAgICAgICAgICAgIGNhc2UgMTc5OlxuICAgICAgICAgICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgICAgICAgY2FzZSA1MDpcbiAgICAgICAgICAgICAgICBjYXNlIDE2ODpcbiAgICAgICAgICAgICAgICBjYXNlIDE2OTpcbiAgICAgICAgICAgICAgICBjYXNlIDE3NTpcbiAgICAgICAgICAgICAgICBjYXNlIDE3MDpcbiAgICAgICAgICAgICAgICBjYXNlIDE3MTpcbiAgICAgICAgICAgICAgICBjYXNlIDE3MjpcbiAgICAgICAgICAgICAgICBjYXNlIDk3OlxuICAgICAgICAgICAgICAgIGNhc2UgNzY6XG4gICAgICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgICAgICBjYXNlIDE3MzpcbiAgICAgICAgICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgY2FzZSAxNzY6XG4gICAgICAgICAgICAgICAgY2FzZSAxNzc6XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgIGNhc2UgMTU1OlxuICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICBjYXNlIDE1NzpcbiAgICAgICAgICAgICAgICBjYXNlIDEyNTpcbiAgICAgICAgICAgICAgICBjYXNlIDEyNjpcbiAgICAgICAgICAgICAgICBjYXNlIDkyOlxuICAgICAgICAgICAgICAgIGNhc2UgOTM6XG4gICAgICAgICAgICAgICAgY2FzZSAxMjk6XG4gICAgICAgICAgICAgICAgY2FzZSAxMzA6XG4gICAgICAgICAgICAgICAgY2FzZSAxMzE6XG4gICAgICAgICAgICAgICAgY2FzZSA5NDpcbiAgICAgICAgICAgICAgICBjYXNlIDkxOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDc0OlxuICAgICAgICAgICAgICAgIGNhc2UgNjA6XG4gICAgICAgICAgICAgICAgY2FzZSA2OTpcbiAgICAgICAgICAgICAgICBjYXNlIDcwOlxuICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEwMjQ7XG4gICAgICAgICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgICAgIGNhc2UgNzI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAzMjtcbiAgICAgICAgICAgICAgICBjYXNlIDg3OlxuICAgICAgICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIxNDc0ODM2NDc7XG4gICAgICAgICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA0NzgzOTtcbiAgICAgICAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA5OTtcbiAgICAgICAgICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAyMDQ4O1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIwOTcxNTI7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gNjU1MzY7XG4gICAgICAgICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDMyNzY4O1xuICAgICAgICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAzMjc2NztcbiAgICAgICAgICAgICAgICBjYXNlIDc1OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTYzODQ7XG4gICAgICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEwMDA7XG4gICAgICAgICAgICAgICAgY2FzZSA4OTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDcwMDtcbiAgICAgICAgICAgICAgICBjYXNlIDcxOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjU2O1xuICAgICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAyNTU7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTAwO1xuICAgICAgICAgICAgICAgIGNhc2UgMTgwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gNjQ7XG4gICAgICAgICAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIwO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDY7XG4gICAgICAgICAgICAgICAgY2FzZSA3MzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQ7XG4gICAgICAgICAgICAgICAgY2FzZSA4NDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfX19zZXRFcnJObyhFUlJOT19DT0RFUy5FSU5WQUwpO1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF90aW1lKHB0cikge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gICAgICAgICAgICBpZiAocHRyKSB7XG4gICAgICAgICAgICAgICAgSEVBUDMyW3B0ciA+PiAyXSA9IHJldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cblxuICAgICAgICBGUy5zdGF0aWNJbml0KCk7XG4gICAgICAgIF9fQVRJTklUX18udW5zaGlmdCh7XG4gICAgICAgICAgICBmdW5jOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoIU1vZHVsZVsnbm9GU0luaXQnXSAmJiAhRlMuaW5pdC5pbml0aWFsaXplZCkgRlMuaW5pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgX19BVE1BSU5fXy5wdXNoKHtcbiAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIEZTLmlnbm9yZVBlcm1pc3Npb25zID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBfX0FURVhJVF9fLnB1c2goe1xuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgRlMucXVpdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBNb2R1bGVbJ0ZTX2NyZWF0ZUZvbGRlciddID0gRlMuY3JlYXRlRm9sZGVyO1xuICAgICAgICBNb2R1bGUuY3JlYXRlUGF0aCA9IEZTLmNyZWF0ZVBhdGg7XG4gICAgICAgIE1vZHVsZS5jcmVhdGVEYXRhRmlsZSA9IEZTLmNyZWF0ZURhdGFGaWxlO1xuICAgICAgICBNb2R1bGUubG9hZFBhdGNoRnJvbVVybCA9IEZTLmxvYWRQYXRjaEZyb21Vcmw7XG4gICAgICAgIE1vZHVsZVsnRlNfY3JlYXRlUHJlbG9hZGVkRmlsZSddID0gRlMuY3JlYXRlUHJlbG9hZGVkRmlsZTtcbiAgICAgICAgTW9kdWxlWydGU19jcmVhdGVMaW5rJ10gPSBGUy5jcmVhdGVMaW5rO1xuICAgICAgICBNb2R1bGVbJ0ZTX2NyZWF0ZURldmljZSddID0gRlMuY3JlYXRlRGV2aWNlO1xuXG4gICAgICAgIF9fX2Vycm5vX3N0YXRlID0gUnVudGltZS5zdGF0aWNBbGxvYyg0KTtcbiAgICAgICAgSEVBUDMyW19fX2Vycm5vX3N0YXRlID4+IDJdID0gMDtcbiAgICAgICAgX19BVElOSVRfXy51bnNoaWZ0KHtcbiAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIFRUWS5pbml0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBfX0FURVhJVF9fLnB1c2goe1xuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgVFRZLnNodXRkb3duKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBUVFkudXRmOCA9IG5ldyBSdW50aW1lLlVURjhQcm9jZXNzb3IoKTtcbiAgICAgICAgX19BVElOSVRfXy5wdXNoKHtcbiAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIFNPQ0tGUy5yb290ID0gRlMubW91bnQoU09DS0ZTLCB7fSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBfX19zdHJ0b2tfc3RhdGUgPSBSdW50aW1lLnN0YXRpY0FsbG9jKDQpO1xuICAgICAgICBTVEFDS19CQVNFID0gU1RBQ0tUT1AgPSBSdW50aW1lLmFsaWduTWVtb3J5KFNUQVRJQ1RPUCk7XG4gICAgICAgIFNUQUNLX01BWCA9IFNUQUNLX0JBU0UgKyA1MjQyODgwO1xuICAgICAgICBEWU5BTUlDX0JBU0UgPSBEWU5BTUlDVE9QID0gUnVudGltZS5hbGlnbk1lbW9yeShTVEFDS19NQVgpO1xuICAgICAgICBhc3NlcnQoRFlOQU1JQ19CQVNFIDwgVE9UQUxfTUVNT1JZKTsgLy8gU3RhY2sgbXVzdCBmaXQgaW4gVE9UQUxfTUVNT1JZOyBhbGxvY2F0aW9ucyBmcm9tIGhlcmUgb24gbWF5IGVubGFyZ2UgVE9UQUxfTUVNT1JZXG4gICAgICAgIHZhciBNYXRoX21pbiA9IE1hdGgubWluO1xuXG4gICAgICAgIGZ1bmN0aW9uIGludm9rZV9paShpbmRleCwgYTEpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1vZHVsZVsnZHluQ2FsbF9paSddKGluZGV4LCBhMSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9PSAnbnVtYmVyJyAmJiBlICE9PSAnbG9uZ2ptcCcpIHRocm93IGU7XG4gICAgICAgICAgICAgICAgYXNtWydzZXRUaHJldyddKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaW52b2tlX3ZpKGluZGV4LCBhMSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBNb2R1bGVbJ2R5bkNhbGxfdmknXShpbmRleCwgYTEpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZSAhPT0gJ251bWJlcicgJiYgZSAhPT0gJ2xvbmdqbXAnKSB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIGFzbVsnc2V0VGhyZXcnXSgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGludm9rZV9paWlpaShpbmRleCwgYTEsIGEyLCBhMywgYTQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1vZHVsZVsnZHluQ2FsbF9paWlpaSddKGluZGV4LCBhMSwgYTIsIGEzLCBhNCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9PSAnbnVtYmVyJyAmJiBlICE9PSAnbG9uZ2ptcCcpIHRocm93IGU7XG4gICAgICAgICAgICAgICAgYXNtWydzZXRUaHJldyddKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaW52b2tlX3ZpaWkoaW5kZXgsIGExLCBhMiwgYTMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgTW9kdWxlWydkeW5DYWxsX3ZpaWknXShpbmRleCwgYTEsIGEyLCBhMyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9PSAnbnVtYmVyJyAmJiBlICE9PSAnbG9uZ2ptcCcpIHRocm93IGU7XG4gICAgICAgICAgICAgICAgYXNtWydzZXRUaHJldyddKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaW52b2tlX3YoaW5kZXgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgTW9kdWxlWydkeW5DYWxsX3YnXShpbmRleCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9PSAnbnVtYmVyJyAmJiBlICE9PSAnbG9uZ2ptcCcpIHRocm93IGU7XG4gICAgICAgICAgICAgICAgYXNtWydzZXRUaHJldyddKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaW52b2tlX2lpaShpbmRleCwgYTEsIGEyKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBNb2R1bGVbJ2R5bkNhbGxfaWlpJ10oaW5kZXgsIGExLCBhMik7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9PSAnbnVtYmVyJyAmJiBlICE9PSAnbG9uZ2ptcCcpIHRocm93IGU7XG4gICAgICAgICAgICAgICAgYXNtWydzZXRUaHJldyddKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYXNtUHJpbnRJbnQoeCwgeSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2ludCAnICsgeCArICcsJyArIHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYXNtUHJpbnRGbG9hdCh4LCB5KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZmxvYXQgJyArIHggKyAnLCcgKyB5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVNU0NSSVBURU5fU1RBUlRfQVNNXG5cbiAgICAgICAgdmFyIGFzbSA9IChmdW5jdGlvbihnbG9iYWwsIGVudiwgYnVmZmVyKSB7XG4gICAgICAgICAgICAndXNlIGFzbSc7XG4gICAgICAgICAgICBsZXQgYSA9IG5ldyBnbG9iYWwuSW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgICAgICBsZXQgYiA9IG5ldyBnbG9iYWwuSW50MTZBcnJheShidWZmZXIpO1xuICAgICAgICAgICAgbGV0IGMgPSBuZXcgZ2xvYmFsLkludDMyQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IGdsb2JhbC5VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgICAgICBsZXQgZSA9IG5ldyBnbG9iYWwuVWludDE2QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgICAgIGxldCBmID0gbmV3IGdsb2JhbC5VaW50MzJBcnJheShidWZmZXIpO1xuICAgICAgICAgICAgbGV0IGcgPSBuZXcgZ2xvYmFsLkZsb2F0MzJBcnJheShidWZmZXIpO1xuICAgICAgICAgICAgbGV0IGggPSBuZXcgZ2xvYmFsLkZsb2F0NjRBcnJheShidWZmZXIpO1xuICAgICAgICAgICAgbGV0IGkgPSBlbnYuU1RBQ0tUT1AgfCAwO1xuICAgICAgICAgICAgbGV0IGogPSBlbnYuU1RBQ0tfTUFYIHwgMDtcbiAgICAgICAgICAgIGxldCBrID0gZW52LnRlbXBEb3VibGVQdHIgfCAwO1xuICAgICAgICAgICAgbGV0IGwgPSBlbnYuQUJPUlQgfCAwO1xuICAgICAgICAgICAgbGV0IG0gPSBlbnYuX3N0ZGVyciB8IDA7XG4gICAgICAgICAgICBsZXQgbiA9ICtlbnYuTmFOO1xuICAgICAgICAgICAgbGV0IG8gPSArZW52LkluZmluaXR5O1xuICAgICAgICAgICAgbGV0IHAgPSAwO1xuICAgICAgICAgICAgbGV0IHEgPSAwO1xuICAgICAgICAgICAgbGV0IHIgPSAwO1xuICAgICAgICAgICAgbGV0IHMgPSAwO1xuICAgICAgICAgICAgbGV0IHQgPSAwLFxuICAgICAgICAgICAgICAgIHUgPSAwLFxuICAgICAgICAgICAgICAgIHYgPSAwLFxuICAgICAgICAgICAgICAgIHcgPSAwLFxuICAgICAgICAgICAgICAgIHggPSAwLjAsXG4gICAgICAgICAgICAgICAgeSA9IDAsXG4gICAgICAgICAgICAgICAgeiA9IDAsXG4gICAgICAgICAgICAgICAgQSA9IDAsXG4gICAgICAgICAgICAgICAgQiA9IDAuMDtcbiAgICAgICAgICAgIGxldCBDID0gMDtcbiAgICAgICAgICAgIGxldCBEID0gMDtcbiAgICAgICAgICAgIGxldCBFID0gMDtcbiAgICAgICAgICAgIGxldCBGID0gMDtcbiAgICAgICAgICAgIGxldCBHID0gMDtcbiAgICAgICAgICAgIGxldCBIID0gMDtcbiAgICAgICAgICAgIGxldCBJID0gMDtcbiAgICAgICAgICAgIGxldCBKID0gMDtcbiAgICAgICAgICAgIGxldCBLID0gMDtcbiAgICAgICAgICAgIGxldCBMID0gMDtcbiAgICAgICAgICAgIGxldCBNID0gZ2xvYmFsLk1hdGguZmxvb3I7XG4gICAgICAgICAgICBsZXQgTiA9IGdsb2JhbC5NYXRoLmFicztcbiAgICAgICAgICAgIGxldCBPID0gZ2xvYmFsLk1hdGguc3FydDtcbiAgICAgICAgICAgIGxldCBQID0gZ2xvYmFsLk1hdGgucG93O1xuICAgICAgICAgICAgbGV0IFEgPSBnbG9iYWwuTWF0aC5jb3M7XG4gICAgICAgICAgICBsZXQgUiA9IGdsb2JhbC5NYXRoLnNpbjtcbiAgICAgICAgICAgIGxldCBTID0gZ2xvYmFsLk1hdGgudGFuO1xuICAgICAgICAgICAgbGV0IFQgPSBnbG9iYWwuTWF0aC5hY29zO1xuICAgICAgICAgICAgbGV0IFUgPSBnbG9iYWwuTWF0aC5hc2luO1xuICAgICAgICAgICAgbGV0IFYgPSBnbG9iYWwuTWF0aC5hdGFuO1xuICAgICAgICAgICAgbGV0IFcgPSBnbG9iYWwuTWF0aC5hdGFuMjtcbiAgICAgICAgICAgIGxldCBYID0gZ2xvYmFsLk1hdGguZXhwO1xuICAgICAgICAgICAgbGV0IFkgPSBnbG9iYWwuTWF0aC5sb2c7XG4gICAgICAgICAgICBsZXQgWiA9IGdsb2JhbC5NYXRoLmNlaWw7XG4gICAgICAgICAgICBsZXQgXyA9IGdsb2JhbC5NYXRoLmltdWw7XG4gICAgICAgICAgICBsZXQgJCA9IGVudi5hYm9ydDtcbiAgICAgICAgICAgIGxldCBhYSA9IGVudi5hc3NlcnQ7XG4gICAgICAgICAgICBsZXQgYWIgPSBlbnYuYXNtUHJpbnRJbnQ7XG4gICAgICAgICAgICBsZXQgYWMgPSBlbnYuYXNtUHJpbnRGbG9hdDtcbiAgICAgICAgICAgIGxldCBhZCA9IGVudi5taW47XG4gICAgICAgICAgICBsZXQgYWUgPSBlbnYuaW52b2tlX2lpO1xuICAgICAgICAgICAgbGV0IGFmID0gZW52Lmludm9rZV92aTtcbiAgICAgICAgICAgIGxldCBhZyA9IGVudi5pbnZva2VfaWlpaWk7XG4gICAgICAgICAgICBsZXQgYWggPSBlbnYuaW52b2tlX3ZpaWk7XG4gICAgICAgICAgICBsZXQgYWkgPSBlbnYuaW52b2tlX3Y7XG4gICAgICAgICAgICBsZXQgYWogPSBlbnYuaW52b2tlX2lpaTtcbiAgICAgICAgICAgIGxldCBhayA9IGVudi5fc3RybmNtcDtcbiAgICAgICAgICAgIGxldCBhbCA9IGVudi5fbHNlZWs7XG4gICAgICAgICAgICBjb25zdCBhbSA9IGVudi5fc3lzY29uZjtcbiAgICAgICAgICAgIGxldCBhbiA9IGVudi5fZnJlYWQ7XG4gICAgICAgICAgICBsZXQgYW8gPSBlbnYuX2ZjbG9zZTtcbiAgICAgICAgICAgIGxldCBhcCA9IGVudi5fc3RydG9rX3I7XG4gICAgICAgICAgICBjb25zdCBhcSA9IGVudi5fYWJvcnQ7XG4gICAgICAgICAgICBsZXQgYXIgPSBlbnYuX2ZwcmludGY7XG4gICAgICAgICAgICBsZXQgYXMgPSBlbnYuX2Nsb3NlO1xuICAgICAgICAgICAgbGV0IGF0ID0gZW52Ll9wcmVhZDtcbiAgICAgICAgICAgIGxldCBhdSA9IGVudi5fZmZsdXNoO1xuICAgICAgICAgICAgbGV0IGF2ID0gZW52Ll9mb3BlbjtcbiAgICAgICAgICAgIGxldCBhdyA9IGVudi5fb3BlbjtcbiAgICAgICAgICAgIGxldCBheCA9IGVudi5fc3RydG9sO1xuICAgICAgICAgICAgbGV0IGF5ID0gZW52Ll9zdHJ0b2s7XG4gICAgICAgICAgICBsZXQgYXogPSBlbnYuX19fc2V0RXJyTm87XG4gICAgICAgICAgICBsZXQgYUEgPSBlbnYuX19yZWFsbHlOZWdhdGl2ZTtcbiAgICAgICAgICAgIGxldCBhQiA9IGVudi5fZnNlZWs7XG4gICAgICAgICAgICBsZXQgYUMgPSBlbnYuX3NlbmQ7XG4gICAgICAgICAgICBsZXQgYUQgPSBlbnYuX3dyaXRlO1xuICAgICAgICAgICAgbGV0IGFFID0gZW52Ll9zdHJyY2hyO1xuICAgICAgICAgICAgbGV0IGFGID0gZW52Ll9zaW47XG4gICAgICAgICAgICBsZXQgYUcgPSBlbnYuX3ByaW50ZjtcbiAgICAgICAgICAgIGxldCBhSCA9IGVudi5fc3RyY2hyO1xuICAgICAgICAgICAgbGV0IGFJID0gZW52Ll9yZWFkO1xuICAgICAgICAgICAgY29uc3QgYUogPSBlbnYuX3RpbWU7XG4gICAgICAgICAgICBjb25zdCBhTCA9IGVudi5fYXRvaTtcbiAgICAgICAgICAgIGNvbnN0IGFRID0gZW52Ll9fX2Vycm5vX2xvY2F0aW9uO1xuICAgICAgICAgICAgY29uc3QgYVMgPSBlbnYuX3Nicms7XG4gICAgICAgICAgICBjb25zdCBhViA9IGVudi5fc3RyY21wO1xuXG4gICAgICAgICAgICAvLyBFTVNDUklQVEVOX1NUQVJUX0ZVTkNTXG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGEwKGEpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGIgPSAwO1xuICAgICAgICAgICAgICAgIGIgPSBpO1xuICAgICAgICAgICAgICAgIGkgPSAoaSArIGEpIHwgMDtcbiAgICAgICAgICAgICAgICBpID0gKGkgKyA3KSAmIC04O1xuICAgICAgICAgICAgICAgIHJldHVybiBiIHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGExKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpIHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGEyKGEpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgaSA9IGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBhMyhhLCBiKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBpZiAoKHAgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBhO1xuICAgICAgICAgICAgICAgICAgICBxID0gYjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBhNChiKSB7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGFba10gPSBhW2JdO1xuICAgICAgICAgICAgICAgIGFbKGsgKyAxKSB8IDBdID0gYVsoYiArIDEpIHwgMF07XG4gICAgICAgICAgICAgICAgYVsoayArIDIpIHwgMF0gPSBhWyhiICsgMikgfCAwXTtcbiAgICAgICAgICAgICAgICBhWyhrICsgMykgfCAwXSA9IGFbKGIgKyAzKSB8IDBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYTYoYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBDID0gYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGE3KGEpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgRCA9IGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBhOChhKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIEUgPSBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYTkoYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBGID0gYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJhKGEpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgRyA9IGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBiYihhKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIEggPSBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYmMoYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBJID0gYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJkKGEpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgSiA9IGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBiZShhKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIEsgPSBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYmYoYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBMID0gYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJnKCkge31cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJoKGIpIHtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSAwLFxuICAgICAgICAgICAgICAgICAgICBlID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGcgPSAwLFxuICAgICAgICAgICAgICAgICAgICBoID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGsgPSAwLFxuICAgICAgICAgICAgICAgICAgICBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG4gPSAwO1xuICAgICAgICAgICAgICAgIGQgPSBpO1xuICAgICAgICAgICAgICAgIGkgPSAoaSArIDEwMjQpIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZCB8IDA7XG4gICAgICAgICAgICAgICAgZiA9IGI7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGFbZl0gfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBiID0gYXYoZiB8IDAsIDY1NzYpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGFbZiB8IDBdIHwgMCkgIT0gNDcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IGNbMTY2NF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbZSB8IDBdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBjMShjW2IgPj4gMl0gfCAwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGwgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBjW2IgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyKG0gfCAwLCBuIHwgMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYVsoZSArIChsIC0gMSkpIHwgMF0gfCAwKSAhPSA0Nykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhWyhlICsgbCkgfCAwXSA9IDQ3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhWyhlICsgKGwgKyAxKSkgfCAwXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzMoZSB8IDAsIGYgfCAwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gYXYoZSB8IDAsIDY1NzYpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IGNbKGIgKyA0KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChrIHwgMCkgPT0gMTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaiA9IGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgIGggPSAwO1xuICAgICAgICAgICAgICAgIGogPSBoO1xuICAgICAgICAgICAgICAgIGkgPSBkO1xuICAgICAgICAgICAgICAgIHJldHVybiBqIHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJpKGEpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGIgPSAwO1xuICAgICAgICAgICAgICAgIGIgPSBjJChhKSB8IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGIgfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYmooYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgYiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGQgPSAwLFxuICAgICAgICAgICAgICAgICAgICBlID0gMDtcbiAgICAgICAgICAgICAgICBiID0gYTtcbiAgICAgICAgICAgICAgICBhID0gYmkoOCkgfCAwO1xuICAgICAgICAgICAgICAgIGlmICgoYSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjW2EgPj4gMl0gPSBiaSgoKGMxKGIgfCAwKSB8IDApICsgMSkgfCAwKSB8IDA7XG4gICAgICAgICAgICAgICAgaWYgKChjW2EgPj4gMl0gfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGMwKGEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZCA9IGNbYSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBiO1xuICAgICAgICAgICAgICAgICAgICBjMihkIHwgMCwgZSB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1soYSArIDQpID4+IDJdID0gY1sxNjY0XTtcbiAgICAgICAgICAgICAgICAgICAgY1sxNjY0XSA9IGE7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBiaygpIHtcbiAgICAgICAgICAgICAgICBsZXQgYSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGIgPSAwO1xuICAgICAgICAgICAgICAgIGEgPSBjWzE2NjRdIHwgMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGEgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBiID0gY1soYSArIDQpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgYzAoY1thID4+IDJdIHwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGMwKGEpO1xuICAgICAgICAgICAgICAgICAgICBhID0gYjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY1sxNjY0XSA9IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYmwoZiwgaCwgaiwgaywgbCwgbiwgbywgcCwgcSkge1xuICAgICAgICAgICAgICAgIGYgPSBmIHwgMDtcbiAgICAgICAgICAgICAgICBoID0gaCB8IDA7XG4gICAgICAgICAgICAgICAgaiA9IGogfCAwO1xuICAgICAgICAgICAgICAgIGsgPSBrIHwgMDtcbiAgICAgICAgICAgICAgICBsID0gbCB8IDA7XG4gICAgICAgICAgICAgICAgbiA9IG4gfCAwO1xuICAgICAgICAgICAgICAgIG8gPSBvIHwgMDtcbiAgICAgICAgICAgICAgICBwID0gcCB8IDA7XG4gICAgICAgICAgICAgICAgcSA9IHEgfCAwO1xuICAgICAgICAgICAgICAgIGxldCByID0gMCxcbiAgICAgICAgICAgICAgICAgICAgcyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHQgPSAwLFxuICAgICAgICAgICAgICAgICAgICB1ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgdiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHcgPSAwLFxuICAgICAgICAgICAgICAgICAgICB4ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgeSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHogPSAwLFxuICAgICAgICAgICAgICAgICAgICBBID0gMCxcbiAgICAgICAgICAgICAgICAgICAgQiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIEMgPSAwLFxuICAgICAgICAgICAgICAgICAgICBEID0gMCxcbiAgICAgICAgICAgICAgICAgICAgRSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIEYgPSAwLFxuICAgICAgICAgICAgICAgICAgICBHID0gMCxcbiAgICAgICAgICAgICAgICAgICAgSCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIEkgPSAwO1xuICAgICAgICAgICAgICAgIGogPSBpO1xuICAgICAgICAgICAgICAgIGkgPSAoaSArIDEwNTYpIHwgMDtcbiAgICAgICAgICAgICAgICByID0gaiB8IDA7XG4gICAgICAgICAgICAgICAgcyA9IChqICsgMTAyNCkgfCAwO1xuICAgICAgICAgICAgICAgIHQgPSAoaiArIDEwMzIpIHwgMDtcbiAgICAgICAgICAgICAgICB1ID0gKGogKyAxMDQwKSB8IDA7XG4gICAgICAgICAgICAgICAgdiA9IChqICsgMTA0OCkgfCAwO1xuICAgICAgICAgICAgICAgIHcgPSBmO1xuICAgICAgICAgICAgICAgIGYgPSBoO1xuICAgICAgICAgICAgICAgIGggPSBrO1xuICAgICAgICAgICAgICAgIGsgPSBsO1xuICAgICAgICAgICAgICAgIGwgPSBuO1xuICAgICAgICAgICAgICAgIG4gPSBvO1xuICAgICAgICAgICAgICAgIG8gPSBwO1xuICAgICAgICAgICAgICAgIHAgPSBxO1xuICAgICAgICAgICAgICAgIHEgPSAwO1xuICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHkgPSB4O1xuICAgICAgICAgICAgICAgICAgICBpID0gajtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHkgfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB6ID0gYmgoZikgfCAwO1xuICAgICAgICAgICAgICAgIEEgPSB6O1xuICAgICAgICAgICAgICAgIGlmICgoeiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgeiA9IGNbbSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIC8vIF9mcHJpbnRmO1xuICAgICAgICAgICAgICAgICAgICBhcihcbiAgICAgICAgICAgICAgICAgICAgICAgIDY1MTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAoKHogPSBpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpID0gKGkgKyAxKSB8IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGkgPSAoaSArIDcpICYgLTgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbeiA+PiAyXSA9IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeikgfCAwXG4gICAgICAgICAgICAgICAgICAgICkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpID0gejtcbiAgICAgICAgICAgICAgICAgICAgcSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIEIgPSAwO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjWygxMDQ4ICsgKEIgPDwgMikpID4+IDJdIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgeiA9IGMxKGYgfCAwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh6ICsgKGMxKGNbKDEwNDggKyAoQiA8PCAyKSkgPj4gMl0gfCAwKSB8IDApKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID4+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDI0XG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ID0gciB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IGY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIoeiB8IDAsIEMgfCAwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IHIgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHogPSBjWygxMDQ4ICsgKEIgPDwgMikpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMyhDIHwgMCwgeiB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ID0gYmgociB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gejtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHogfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgPSA0NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQiA9IChCICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgoRCB8IDApID09IDQ2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSByIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKHEgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHggPSAwO1xuICAgICAgICAgICAgICAgICAgICB5ID0geDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGo7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB5IHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoMjM5ID09IChhbihyIHwgMCwgMSwgMjM5LCBBIHwgMCkgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjNChyIHwgMCwgNjI0OCwgMjIpIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYzQociB8IDAsIDU4ODgsIDIyKSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYVsociArIDgyKSB8IDBdIHwgMCkgIT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGFbKHIgKyA4MikgfCAwXSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0geDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB5IHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGFbKHIgKyAxNTEpIHwgMF0gfCAwKSAhPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYVsociArIDE1MSkgfCAwXSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0geDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB5IHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBiaSg4KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjW3EgPj4gMl0gPSBhWyhyICsgMTk4KSB8IDBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbKHEgKyA0KSA+PiAyXSA9IGJpKCgoY1txID4+IDJdIHwgMCkgKiAxMTYpIHwgMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgQiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoQiB8IDApID49IChjW3EgPj4gMl0gfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEID0gMTYyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYUIoQSB8IDAsIDcsIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMSAhPSAoYW4ocyB8IDAsIDEsIDEsIEEgfCAwKSB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgPSA2NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAoKGNbKHEgKyA0KSA+PiAyXSB8IDApICsgKChCICogMTE2KSB8IDApKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEgIT0gKGFuKHQgfCAwLCA0LCAxLCBBIHwgMCkgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEID0gNzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgOCkgPj4gMl0gPSBjW3QgPj4gMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEgIT0gKGFuKHQgfCAwLCA0LCAxLCBBIHwgMCkgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEID0gNzU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW2YgPj4gMl0gPSBjW3QgPj4gMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEgIT0gKGFuKHQgfCAwLCA0LCAxLCBBIHwgMCkgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEID0gNzc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgNCkgPj4gMl0gPSBjW3QgPj4gMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEgIT0gKGFuKHUgfCAwLCAyLCAxLCBBIHwgMCkgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEID0gNzk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgMTIpID4+IDJdID0gZVt1ID4+IDFdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMSAhPSAoYW4odCB8IDAsIDQsIDEsIEEgfCAwKSB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgPSA4MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGYgKyAyNCkgPj4gMl0gPSBjW3QgPj4gMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEgIT0gKGFuKHQgfCAwLCA0LCAxLCBBIHwgMCkgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEID0gODM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgMjgpID4+IDJdID0gY1t0ID4+IDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgxICE9IChhbih0IHwgMCwgNCwgMSwgQSB8IDApIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRCA9IDg1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soZiArIDMyKSA+PiAyXSA9IGNbdCA+PiAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgMTYpID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgMjApID4+IDJdID0gMTI3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFCKEEgfCAwLCAyLCAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEgIT0gKGFuKHYgfCAwLCAxLCAxLCBBIHwgMCkgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEID0gODc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW3IgfCAwXSA9IGFbdl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaCB8IDApID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbKGYgKyAxMTEpIHwgMF0gPSAoKGFbciB8IDBdIDw8IDMpICsgNCkgJiAxMjc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVsoZiArIDExMSkgfCAwXSA9IGggJiAxMjc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgxOCAhPSAoYW4ociB8IDAsIDEsIDE4LCBBIHwgMCkgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEID0gOTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYVsociArIDEzKSB8IDBdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhWyhyICsgMTQpIHwgMF0gfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRCA9IDk1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soZiArIDkyKSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm0odywgYVsociArIDEyKSB8IDBdIHwgMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soZiArIDk2KSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm4odywgYVsociArIDEzKSB8IDBdIHwgMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVsoZiArIDEwOCkgfCAwXSA9IGFbKHIgKyAxNCkgfCAwXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEID0gOTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEQgfCAwKSA9PSA5NSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVsoZiArIDEwOCkgfCAwXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGYgKyA5NikgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgOTIpID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGFbKHIgKyAxNikgfCAwXSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYVsociArIDE3KSB8IDBdIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgPSA5OTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGYgKyAxMDQpID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibyh3LCBhWyhyICsgMTYpIHwgMF0gfCAwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgMTAwKSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbKHIgKyAxNSkgfCAwXSB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGYgKyAxMDQpID4+IDJdIHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVsoZiArIDEwOSkgfCAwXSA9IGFbKHIgKyAxNykgfCAwXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEID0gOTk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEQgfCAwKSA9PSA5OSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVsoZiArIDEwOSkgfCAwXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGYgKyAxMDQpID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soZiArIDEwMCkgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMSAhPSAoYW4odiB8IDAsIDEsIDEsIEEgfCAwKSB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgPSAxMDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhWyhmICsgMTEwKSB8IDBdID0gYVt2XSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYUIoQSB8IDAsIDQwLCAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsIHwgMCkgIT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVsoZiArIDExMikgfCAwXSA9IGwgJiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVsoZiArIDExMikgfCAwXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGFbKGYgKyAxMTApIHwgMF0gJiA0KSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeiA9IChmICsgMTEwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbel0gPSAoZFt6XSB8IDMyKSAmIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChhWyhmICsgMTEwKSB8IDBdICYgNjApIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeiA9IChmICsgMTEwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW3pdID0gZFt6XSAmIC02MSAmIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobyB8IDApID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhWyhmICsgMTEwKSB8IDBdICYgNjQpIHwgMCkgIT0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeiA9IChmICsgMTEwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbel0gPSBkW3pdICYgLTY1ICYgMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobyB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGFbKGYgKyAxMTApIHwgMF0gJiAyOCkgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGM0KHIgfCAwLCA1NTEyLCA2KSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVsociArIDExKSB8IDBdIHwgMCkgPj1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgPSAxMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhWyhmICsgMTEwKSB8IDBdICYgMzIpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ID0gKGYgKyAxMTApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW3pdID0gZFt6XSAmIC02NSAmIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgPSAxMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEQgfCAwKSA9PSAxMjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHogPSAoZiArIDExMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW3pdID0gZFt6XSAmIC02NSAmIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHogPSAoZiArIDExMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbel0gPSBkW3pdICYgLTk3ICYgMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoRSB8IDApID49IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGYgKyAzNiArIChFIDw8IDIpKSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicSh3LCBhWyhyICsgRSkgfCAwXSB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soZiArIDYwICsgKEUgPDwgMikpID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyKGFbKHIgKyAoRSArIDYpKSB8IDBdIHwgMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFID0gKEUgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGYgKyA4OCkgPj4gMl0gPSBiaShjWyhmICsgOCkgPj4gMl0gfCAwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGYgKyA4OCkgPj4gMl0gfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soZiArIDgpID4+IDJdIHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgPSAxMzI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChhWyhmICsgMTEwKSB8IDBdICYgMSkgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHogPSBjWyhmICsgOCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gY1soZiArIDg4KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYgPSBiaShjWyhmICsgOCkgPj4gMl0gPDwgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHID0gRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSCA9IEY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGID0gejtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHogPSAoRiAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoRiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYgPSBDO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IChGICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSSA9IEg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIID0gKEkgKyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiW0kgPj4gMV0gPSAoKGFbRl0gJiAyNTUpIDw8IDgpICYgNjU1MzU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IGNbKGYgKyA4OCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgODgpID4+IDJdID0gRztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzAoQyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEggPSAoZiArIDgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tIID4+IDJdID0gY1tIID4+IDJdIDw8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEggPSBmIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tIID4+IDJdID0gY1tIID4+IDJdIDw8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEggPSAoZiArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tIID4+IDJdID0gY1tIID4+IDJdIDw8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGFbKGYgKyAxMTApIHwgMF0gJiAyKSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSCA9ICgoY1soZiArIDgpID4+IDJdIHwgMCkgLyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHogPSBjWyhmICsgODgpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYgPSBIO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSCA9IChGIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChGIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRiA9IHo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ID0gKEYgKyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiW0YgPj4gMV0gPSAoYltGID4+IDFdIF4gMzI3NjgpICYgNjU1MzU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoYVsoZiArIDExMCkgfCAwXSAmIDE2KSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgODgpID4+IDJdIHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGYgKyA4KSA+PiAyXSB8IDApIC8gMikgfCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHogPSBjW2YgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW2YgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGYgKyA4KSA+PiAyXSB8IDApIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjWyhmICsgNCkgPj4gMl0gfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soZiArIDQpID4+IDJdID0gKGNbKGYgKyA4KSA+PiAyXSB8IDApIC0gejtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeiA9IChmICsgMTEwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbel0gPSBkW3pdICYgLTE3ICYgMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ID0gKGYgKyAxMTApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVt6XSA9IChkW3pdIHwgNCkgJiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoayB8IDApICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdbKGYgKyA4NCkgPj4gMl0gPSArKGsgfCAwKSAvIDEwMC4wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHogPSAoKGNbKGYgKyA4KSA+PiAyXSB8IDApIC8gMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IGNbKGYgKyA4OCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRyA9IHo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ID0gKEcgLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEcgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHID0gQztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgPSAoRyArIDIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYgPSBiW0cgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKEYgPDwgMTYpID4+IDE2KSB8IDApIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYgPSAtKChGIDw8IDE2KSA+PiAxNikgJiA2NTUzNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChGIDw8IDE2KSA+PiAxNikgfCAwKSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoSCA8PCAxNikgPj4gMTYpIHwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEggPSBGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdbKGYgKyA4NCkgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzI3NjguMCAvICsoKChIIDw8IDE2KSA+PiAxNikgfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IChmICsgOCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbQyA+PiAyXSA9ICgoY1tDID4+IDJdIHwgMCkgLyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IGYgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbQyA+PiAyXSA9ICgoY1tDID4+IDJdIHwgMCkgLyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IChmICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbQyA+PiAyXSA9ICgoY1tDID4+IDJdIHwgMCkgLyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IChmICsgOCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbQyA+PiAyXSA9IGNbQyA+PiAyXSA8PCAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gZiB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tDID4+IDJdID0gY1tDID4+IDJdIDw8IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgPSAoZiArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW0MgPj4gMl0gPSBjW0MgPj4gMl0gPDwgMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IGYgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbQyA+PiAyXSA9IGNbQyA+PiAyXSB8ICgoYVtzXSAmIDE1KSA8PCA4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gKGYgKyA0KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tDID4+IDJdID0gY1tDID4+IDJdIHwgKCgoZFtzXSA+PiA0KSAmIDE1KSA8PCA4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYVsoZiArIDExMikgfCAwXSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGFbKGYgKyAxMTApIHwgMF0gJiA0KSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNGKHcsIGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChwIHwgMCkgPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgOCkgPj4gMl0gPSBjWyhmICsgNCkgPj4gMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgPSAoQiArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoRCB8IDApICE9IDY2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoRCB8IDApICE9IDczKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEQgfCAwKSAhPSA3NSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoRCB8IDApICE9IDc3KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoRCB8IDApICE9IDc5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEQgfCAwKSAhPSA4MSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoRCB8IDApICE9IDgzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoRCB8IDApICE9IDg1KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEQgfCAwKSAhPSA4NylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoRCB8IDApICE9IDkyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEQgfCAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgRSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoRSB8IDApID49IChCIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhxICsgNCkgPj4gMl0gfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFICogMTE2KSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4OCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFID0gKEUgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjMChjWyhxICsgNCkgPj4gMl0gfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMwKHEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB5ID0geDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHkgfCAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgeCA9IDA7XG4gICAgICAgICAgICAgICAgeSA9IHg7XG4gICAgICAgICAgICAgICAgaSA9IGo7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHkgfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYm0oYSwgYikge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSAwLFxuICAgICAgICAgICAgICAgICAgICBlID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZiA9IDA7XG4gICAgICAgICAgICAgICAgZCA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGI7XG4gICAgICAgICAgICAgICAgaWYgKChhIDw8IDI0KSA+PiAyNCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGIgPSAoKChjWyhkICsgMTMwNjApID4+IDJdIHwgMCkgKiAzOCkgfCAwKSA8PCAxNjtcbiAgICAgICAgICAgICAgICAgICAgZSA9ICgoYiB8IDApIC8gKF8oY1soZCArIDQpID4+IDJdIHwgMCwgYSAmIDI1NSkgfCAwKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBmID0gZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYgfCAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICBmID0gZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYgfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJuKGEsIGIpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBkID0gMDtcbiAgICAgICAgICAgICAgICBkID0gYTtcbiAgICAgICAgICAgICAgICBhID0gKF8oY1soZCArIDEzMDYwKSA+PiAyXSA8PCAxMCwgYiAmIDI1NSkgfCAwKSA8PCA1O1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICgoYSB8IDApIC8gKCgoY1soZCArIDQpID4+IDJdIHwgMCkgKiAzOCkgfCAwIHwgMCkpIHwgMCB8IDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYm8oYSwgYikge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKCgoKGNbKGEgKyA0KSA+PiAyXSB8IDApICogMzgpIHwgMCB8IDApIC9cbiAgICAgICAgICAgICAgICAgICAgICAgICgoKChiICYgMjU1KSA8PCAxKSA8PCA1KSB8IDApKSB8XG4gICAgICAgICAgICAgICAgICAgIDAgfFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJwKGEsIGIsIGQpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGYgPSAwLFxuICAgICAgICAgICAgICAgICAgICBnID0gMDtcbiAgICAgICAgICAgICAgICBlID0gYjtcbiAgICAgICAgICAgICAgICBpZiAoKGUgPDwgMjQpID4+IDI0ICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZiA9IH5+KFxuICAgICAgICAgICAgICAgICAgICAgICAgKCsoZCB8IDApICogMzguMCAqIDY1NTM2LjApIC9cbiAgICAgICAgICAgICAgICAgICAgICAgICsoXyhjWyhhICsgNCkgPj4gMl0gfCAwLCBlICYgMjU1KSB8IDApXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGcgPSBmO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZyB8IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZiA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGcgPSBmO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZyB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYnEoYSwgYikge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSAwO1xuICAgICAgICAgICAgICAgIGQgPSBhO1xuICAgICAgICAgICAgICAgIGEgPSBiO1xuICAgICAgICAgICAgICAgIGIgPSAoMyAtICgoKGEgJiAyNTUpID4+IDYpICYgMykpIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gKGIgKiAzKSB8IDA7XG4gICAgICAgICAgICAgICAgYiA9IChhICYgNjMpIDw8IGI7XG4gICAgICAgICAgICAgICAgYiA9XG4gICAgICAgICAgICAgICAgICAgIF8oXG4gICAgICAgICAgICAgICAgICAgICAgICAoKChiICogNDQxMDApIHwgMCB8IDApIC8gKGNbKGQgKyA0KSA+PiAyXSB8IDApKSB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjWyhkICsgMTMwNjApID4+IDJdIHwgMFxuICAgICAgICAgICAgICAgICAgICApIHwgMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGIgPDwgMTApIHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJyKGEpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgoYSAmIDI1NSkgPDwgMjIpIHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJzKGEsIGMsIGQpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgYyA9IGMgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGYgPSAwO1xuICAgICAgICAgICAgICAgIGUgPSBhO1xuICAgICAgICAgICAgICAgIGEgPSBjO1xuICAgICAgICAgICAgICAgIGMgPSBkO1xuICAgICAgICAgICAgICAgIGQgPSAoZSArIChjIDw8IDEpKSB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IChlICsgKGEgPDwgMSkpIHwgMDtcbiAgICAgICAgICAgICAgICBjID0gKGMgLSBhKSB8IDA7XG4gICAgICAgICAgICAgICAgYyA9ICgoYyB8IDApIC8gMikgfCAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGEgPSBjO1xuICAgICAgICAgICAgICAgICAgICBjID0gKGEgLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoYSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGEgPSBiW2UgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBmID0gZTtcbiAgICAgICAgICAgICAgICAgICAgZSA9IChmICsgMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICBiW2YgPj4gMV0gPSBiW2QgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBmID0gZDtcbiAgICAgICAgICAgICAgICAgICAgZCA9IChmIC0gMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICBiW2YgPj4gMV0gPSBhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBtaWRfc29uZ19nZXRfbnVtX21pc3NpbmdfaW5zdHJ1bWVudHNcbiAgICAgICAgICAgIC8vIHRha2VzIGEgbnVtYmVyIChhKVxuICAgICAgICAgICAgLy8gcmV0dXJucyBhIG51bWJlclxuICAgICAgICAgICAgZnVuY3Rpb24gYnQoYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gY1soYSArIDEzMTM2KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1pZF9zb25nX2dldF9taXNzaW5nX2luc3RydW1lbnRcbiAgICAgICAgICAgIGZ1bmN0aW9uIGJ1KGEsIGIpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBkID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGYgPSAwO1xuICAgICAgICAgICAgICAgIGQgPSBhO1xuICAgICAgICAgICAgICAgIGEgPSBiO1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChhIHwgMCkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcHMgd2hlbiByZWFjaGVkIGxhc3QgaW5zdHJ1bWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhIHwgMCkgPj0gKGNbKGQgKyAxMzEzNikgPj4gMl0gfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGF0aCB0byBwYXRjaCBmaWxlXG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gY1soZCArIDEzMTQwICsgKGEgPDwgMikpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYgfCAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgZSA9IDA7XG4gICAgICAgICAgICAgICAgZiA9IGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGYgfCAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciBvZiBtaXNzaW5nIHBhdGNoZXNcbiAgICAgICAgICAgIGZ1bmN0aW9uIGJ2KGEpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGIgPSAwLFxuICAgICAgICAgICAgICAgICAgICBkID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZSA9IDA7XG4gICAgICAgICAgICAgICAgYiA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IDEyODtcbiAgICAgICAgICAgICAgICBkID0gMDtcbiAgICAgICAgICAgICAgICBjWyhiICsgMTMxMzYpID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gYTtcbiAgICAgICAgICAgICAgICAgICAgYSA9IChlIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGUgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBnZXQgbnVtYmVyIG9mIGluc3RydW1lbnQgcGF0Y2hlc1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGNbKGIgKyAyOCArIChhIDw8IDIpKSA+PiAyXSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSAoZCArIChidyhiLCAwLCBhKSB8IDApKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IG51bWJlciBvZiBkcnVtIHBhdGNoZXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKChjWyhiICsgNTQwICsgKGEgPDwgMikpID4+IDJdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZCA9IChkICsgKGJ3KGIsIDEsIGEpIHwgMCkpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZCB8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBidyhhLCBiLCBkKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gZCB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBqID0gMCxcbiAgICAgICAgICAgICAgICAgICAgayA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGwgPSAwLFxuICAgICAgICAgICAgICAgICAgICBuID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHAgPSAwLFxuICAgICAgICAgICAgICAgICAgICBxID0gMCxcbiAgICAgICAgICAgICAgICAgICAgciA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHMgPSAwLFxuICAgICAgICAgICAgICAgICAgICB0ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgdSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHYgPSAwLFxuICAgICAgICAgICAgICAgICAgICB3ID0gMDtcbiAgICAgICAgICAgICAgICBlID0gaTtcbiAgICAgICAgICAgICAgICBmID0gYTtcbiAgICAgICAgICAgICAgICBhID0gYjtcbiAgICAgICAgICAgICAgICBiID0gZDtcbiAgICAgICAgICAgICAgICBkID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoKGEgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGcgPSBjWyhmICsgNTQwICsgKGIgPDwgMikpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnID0gY1soZiArIDI4ICsgKGIgPDwgMikpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaCA9IGc7XG4gICAgICAgICAgICAgICAgaWYgKChoIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBqID0gMDtcbiAgICAgICAgICAgICAgICAgICAgayA9IGo7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gayB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGcgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZyB8IDApID49IDEyOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjWyhoICsgNCArIChnIDw8IDIpKSA+PiAyXSB8IDApID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soaCArIDQgKyAoZyA8PCAyKSkgPj4gMl0gPSBiQihmLCBhLCBiLCBnKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjWyhoICsgNCArIChnIDw8IDIpKSA+PiAyXSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbKChjW2ggPj4gMl0gfCAwKSArICgoZyAqIDI4KSB8IDApKSA+PiAyXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKChjW2ggPj4gMl0gfCAwKSArICgoZyAqIDI4KSB8IDApKSA+PiAyXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gKGEgfCAwKSAhPSAwID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbaCA+PiAyXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChnICogMjgpIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMikgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbaCA+PiAyXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChnICogMjgpIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW2ggPj4gMl0gfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZyAqIDI4KSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW2ggPj4gMl0gfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGcgKiAyOCkgfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbaCA+PiAyXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChnICogMjgpIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNikgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW2ggPj4gMl0gfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGcgKiAyOCkgfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNikgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAoYSB8IDApICE9IDAgPyAxIDogLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW2ggPj4gMl0gfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZyAqIDI4KSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjApID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1toID4+IDJdIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChnICogMjgpIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjApID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gKGEgfCAwKSAhPSAwID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1toID4+IDJdIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChnICogMjgpIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhoICsgNCArIChnIDw8IDIpKSA+PiAyXSA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBjW20gPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW2ggPj4gMl0gfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGcgKiAyOCkgfCAwKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByaW50cyAnTWlzc2luZyBwYXRjaDogYXJhY2huby04OC5wYXQnIG9yICdNaXNzaW5nIHBhdGNoOiBNVDMyRHJ1bXMvbXQzMmRydW0tNi5wYXQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MTIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodiA9IGkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpID0gKGkgKyA4KSB8IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjW3YgPj4gMl0gPSBxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2KSB8IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNbKGYgKyAxMzEzNikgPj4gMl0gfCAwKSA8IDI1Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBjW20gPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBjWyhmICsgMTMxMzYpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzE0MCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1soZiArIDEzMTM2KSA+PiAyXSA8PCAyKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1toID4+IDJdIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZyAqIDI4KSB8IDApKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gKGYgKyAxMzEzNikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbdiA+PiAyXSA9IChjW3YgPj4gMl0gfCAwKSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gKGQgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGIgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGEgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1soZiArIDU0MCkgPj4gMl0gfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGcgPDwgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1soZiArIDU0MCkgPj4gMl0gfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGcgPDwgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhmICsgMjgpID4+IDJdIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnIDw8IDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGYgKyAyOCkgPj4gMl0gfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGcgPDwgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGggKyA0ICsgKGcgPDwgMikpID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IChkICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gMjQ2O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gMjQ2O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh3IHwgMCkgPT0gMjQ2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBnID0gKGcgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGogPSBkO1xuICAgICAgICAgICAgICAgIGsgPSBqO1xuICAgICAgICAgICAgICAgIGkgPSBlO1xuICAgICAgICAgICAgICAgIHJldHVybiBrIHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJ4KGEpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGIgPSAwLFxuICAgICAgICAgICAgICAgICAgICBkID0gMDtcbiAgICAgICAgICAgICAgICBiID0gYTtcbiAgICAgICAgICAgICAgICBhID0gMTI4O1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGQgPSBhO1xuICAgICAgICAgICAgICAgICAgICBhID0gKGQgLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZCB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgoY1soYiArIDI4ICsgKGEgPDwgMikpID4+IDJdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnkoYiwgMCwgYSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKChjWyhiICsgNTQwICsgKGEgPDwgMikpID4+IDJdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnkoYiwgMSwgYSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYnkoYSwgYiwgZCkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgZCA9IGQgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBlID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZiA9IDA7XG4gICAgICAgICAgICAgICAgZSA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGQ7XG4gICAgICAgICAgICAgICAgaWYgKChiIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBmID0gY1soZSArIDU0MCArIChhIDw8IDIpKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZiA9IGNbKGUgKyAyOCArIChhIDw8IDIpKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGEgPSBmO1xuICAgICAgICAgICAgICAgIGYgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID49IDEyOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKChjWyhhICsgNCArIChmIDw8IDIpKSA+PiAyXSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1soYSArIDQgKyAoZiA8PCAyKSkgPj4gMl0gfCAwKSAhPSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJBKGNbKGEgKyA0ICsgKGYgPDwgMikpID4+IDJdIHwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjWyhhICsgNCArIChmIDw8IDIpKSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZiA9IChmICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBieihhLCBiKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBmID0gMDtcbiAgICAgICAgICAgICAgICBkID0gYTtcbiAgICAgICAgICAgICAgICBhID0gYmwoZCwgYiwgMCwgLTEsIC0xLCAtMSwgMCwgMCwgMCkgfCAwO1xuICAgICAgICAgICAgICAgIGlmICgoYSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY1soZCArIDEwNTIpID4+IDJdID0gYTtcbiAgICAgICAgICAgICAgICAgICAgY1soZCArIDEwNTYpID4+IDJdID0gLTE7XG4gICAgICAgICAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICBmID0gZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYgfCAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgZiA9IGU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBiQShhKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBiID0gMDtcbiAgICAgICAgICAgICAgICBiID0gYTtcbiAgICAgICAgICAgICAgICBpZiAoKGIgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYSA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChhIHwgMCkgPj0gKGNbYiA+PiAyXSB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjMChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbKChjWyhiICsgNCkgPj4gMl0gfCAwKSArICgoYSAqIDExNikgfCAwKSArIDg4KSA+PiAyXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBhID0gKGEgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGMwKGNbKGIgKyA0KSA+PiAyXSB8IDApO1xuICAgICAgICAgICAgICAgIGMwKGIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJCKGEsIGIsIGQsIGUpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSAwLFxuICAgICAgICAgICAgICAgICAgICBnID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGkgPSAwLFxuICAgICAgICAgICAgICAgICAgICBqID0gMDtcbiAgICAgICAgICAgICAgICBmID0gYTtcbiAgICAgICAgICAgICAgICBhID0gYjtcbiAgICAgICAgICAgICAgICBiID0gZDtcbiAgICAgICAgICAgICAgICBkID0gZTtcbiAgICAgICAgICAgICAgICBpZiAoKGNbKGYgKyAyNCkgPj4gMl0gfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGcgPSAwO1xuICAgICAgICAgICAgICAgICAgICBoID0gZztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGggfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhID0gKGEgfCAwKSAhPSAwID8gLTIxNDc0ODM2NDggOiAwO1xuICAgICAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgICAgIEwzNjg6IHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPj4+IDAgPj1cbiAgICAgICAgICAgICAgICAgICAgICAgIChjWygoY1soZiArIDI0KSA+PiAyXSB8IDApICsgNCkgPj4gMl0gfCAwKSA+Pj4gMFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgKChjWygoY1soZiArIDI0KSA+PiAyXSB8IDApICsgOCkgPj4gMl0gfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChlICogMjApIHwgMCkpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKChjWyhpICsgNCkgPj4gMl0gfCAwKSArIDQpID4+IDJdICZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTIxNDc0ODM2NDgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYSB8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKChjWygoY1soaSArIDQpID4+IDJdIHwgMCkgKyA0KSA+PiAyXSB8IDApID4+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCkgJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYiB8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjWygoY1soaSArIDQpID4+IDJdIHwgMCkgKyA4KSA+PiAyXSB8IDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkIHwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IDI5NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDM2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICBlID0gKGUgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChlIHwgMCkgPT0gKGNbKChjWyhmICsgMjQpID4+IDJdIHwgMCkgKyA0KSA+PiAyXSB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGIgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID4+PiAwID49XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjWygoY1soZiArIDI0KSA+PiAyXSB8IDApICsgNCkgPj4gMl0gfCAwKSA+Pj4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1soKGNbKGYgKyAyNCkgPj4gMl0gfCAwKSArIDgpID4+IDJdIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChlICogMjApIHwgMCkpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1soKGNbKGkgKyA0KSA+PiAyXSB8IDApICsgNCkgPj4gMl0gJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTIxNDc0ODM2NDgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhIHwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbKChjWyhpICsgNCkgPj4gMl0gfCAwKSArIDgpID4+IDJdIHwgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkIHwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gMzA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IChlICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgaWYgKChlIHwgMCkgPT0gKGNbKChjWyhmICsgMjQpID4+IDJdIHwgMCkgKyA0KSA+PiAyXSB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgIGcgPSAwO1xuICAgICAgICAgICAgICAgICAgICBoID0gZztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGggfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBqID0gYmkoOCkgfCAwO1xuICAgICAgICAgICAgICAgIGNbaiA+PiAyXSA9IGNbY1soaSArIDQpID4+IDJdID4+IDJdO1xuICAgICAgICAgICAgICAgIGNbKGogKyA0KSA+PiAyXSA9IGJpKCgoY1tqID4+IDJdIHwgMCkgKiAxMTYpIHwgMCkgfCAwO1xuICAgICAgICAgICAgICAgIGM1KGNbKGogKyA0KSA+PiAyXSB8IDAsIDAsICgoY1tqID4+IDJdIHwgMCkgKiAxMTYpIHwgMCB8IDApO1xuICAgICAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlID4+PiAwID49IChjW2NbKGkgKyA0KSA+PiAyXSA+PiAyXSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBiQyhmLCAoKGNbKGogKyA0KSA+PiAyXSB8IDApICsgKChlICogMTE2KSB8IDApKSB8IDAsIGksIGUpO1xuICAgICAgICAgICAgICAgICAgICBlID0gKGUgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGcgPSBqO1xuICAgICAgICAgICAgICAgIGggPSBnO1xuICAgICAgICAgICAgICAgIHJldHVybiBoIHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJDKGIsIGYsIGgsIGkpIHtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgZiA9IGYgfCAwO1xuICAgICAgICAgICAgICAgIGggPSBoIHwgMDtcbiAgICAgICAgICAgICAgICBpID0gaSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGogPSAwLFxuICAgICAgICAgICAgICAgICAgICBrID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG0gPSAwLFxuICAgICAgICAgICAgICAgICAgICBuID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHAgPSAwLFxuICAgICAgICAgICAgICAgICAgICBxID0gMCxcbiAgICAgICAgICAgICAgICAgICAgciA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHMgPSAwLFxuICAgICAgICAgICAgICAgICAgICB0ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgdSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHYgPSAwLFxuICAgICAgICAgICAgICAgICAgICB3ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgeCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHkgPSAwLFxuICAgICAgICAgICAgICAgICAgICB6ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgQSA9IDAuMCxcbiAgICAgICAgICAgICAgICAgICAgQiA9IDAuMCxcbiAgICAgICAgICAgICAgICAgICAgQyA9IDAuMCxcbiAgICAgICAgICAgICAgICAgICAgRCA9IDAuMDtcbiAgICAgICAgICAgICAgICBqID0gYjtcbiAgICAgICAgICAgICAgICBiID0gZjtcbiAgICAgICAgICAgICAgICBmID0gaDtcbiAgICAgICAgICAgICAgICBoID0gKChjWyhmICsgOCkgPj4gMl0gfCAwKSArICgoaSAqIDI0KSB8IDApKSB8IDA7XG4gICAgICAgICAgICAgICAgaSA9XG4gICAgICAgICAgICAgICAgICAgICgoY1soKGNbKGogKyAyNCkgPj4gMl0gfCAwKSArIDIwKSA+PiAyXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICgoKGNbKChjWyhoICsgNCkgPj4gMl0gfCAwKSArIDgpID4+IDJdIHwgMCkgKiAyMCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKSB8XG4gICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgayA9ICgxMDU2ICsgKChlW2NbaCA+PiAyXSA+PiAxXSB8IDApIDw8IDIpKSB8IDA7XG4gICAgICAgICAgICAgICAgY1soYiArIDI0KSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgIGRba10gfFxuICAgICAgICAgICAgICAgICAgICAoZFsoayArIDEpIHwgMF0gPDwgOCkgfFxuICAgICAgICAgICAgICAgICAgICAoZFsoayArIDIpIHwgMF0gPDwgMTYpIHxcbiAgICAgICAgICAgICAgICAgICAgKGRbKGsgKyAzKSB8IDBdIDw8IDI0KTtcbiAgICAgICAgICAgICAgICBrID0gKDEwNTYgKyAoKGVbKChjW2ggPj4gMl0gfCAwKSArIDIpID4+IDFdIHwgMCkgPDwgMikpIHwgMDtcbiAgICAgICAgICAgICAgICBjWyhiICsgMjgpID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgZFtrXSB8XG4gICAgICAgICAgICAgICAgICAgIChkWyhrICsgMSkgfCAwXSA8PCA4KSB8XG4gICAgICAgICAgICAgICAgICAgIChkWyhrICsgMikgfCAwXSA8PCAxNikgfFxuICAgICAgICAgICAgICAgICAgICAoZFsoayArIDMpIHwgMF0gPDwgMjQpO1xuICAgICAgICAgICAgICAgIGsgPVxuICAgICAgICAgICAgICAgICAgICAoMTA1NiArICgoZVsoKGNbKGggKyA4KSA+PiAyXSB8IDApICsgNCkgPj4gMV0gfCAwKSA8PCAyKSkgfFxuICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgIGNbKGIgKyAzMikgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICBkW2tdIHxcbiAgICAgICAgICAgICAgICAgICAgKGRbKGsgKyAxKSB8IDBdIDw8IDgpIHxcbiAgICAgICAgICAgICAgICAgICAgKGRbKGsgKyAyKSB8IDBdIDw8IDE2KSB8XG4gICAgICAgICAgICAgICAgICAgIChkWyhrICsgMykgfCAwXSA8PCAyNCk7XG4gICAgICAgICAgICAgICAgY1soYiArIDE2KSA+PiAyXSA9IGVbKChjW2ggPj4gMl0gfCAwKSArIDQpID4+IDFdIHwgMDtcbiAgICAgICAgICAgICAgICBjWyhiICsgMjApID4+IDJdID0gZVsoKGNbaCA+PiAyXSB8IDApICsgNikgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgIGFbKGIgKyAxMTApIHwgMF0gPSAxO1xuICAgICAgICAgICAgICAgIGNbKGIgKyAxMikgPj4gMl0gPSBjWygoY1tpID4+IDJdIHwgMCkgKyA0KSA+PiAyXTtcbiAgICAgICAgICAgICAgICBjWyhiICsgOCkgPj4gMl0gPSAoKChjWyhpICsgOCkgPj4gMl0gfCAwKSA+Pj4gMCkgLyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgY1soYiArIDg4KSA+PiAyXSA9IGJpKGNbKGkgKyA4KSA+PiAyXSB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICBrID0gY1soYiArIDg4KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgbCA9IGNbKGkgKyA0KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgbSA9IGNbKGkgKyA4KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgYzYoayB8IDAsIGwgfCAwLCBtKSB8IDA7XG4gICAgICAgICAgICAgICAgaWYgKChjWygoY1soaCArIDgpID4+IDJdIHwgMCkgKyAxNikgPj4gMl0gfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG0gPSAoYiArIDExMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBhW21dID0gKGRbbV0gfCAwIHwgMzYpICYgMjU1O1xuICAgICAgICAgICAgICAgICAgICBjW2IgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgKCgoY1soKGNbKGggKyAxMikgPj4gMl0gfCAwKSArIDgpID4+IDJdIHwgMCkgPj4+IDApIC9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICBjWyhiICsgNCkgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbYiA+PiAyXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICgoKChjWygoY1soaCArIDEyKSA+PiAyXSB8IDApICsgMTIpID4+IDJdIHwgMCkgPj4+IDApIC9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdbKGIgKyA4NCkgPj4gMl0gPSAxLjA7XG4gICAgICAgICAgICAgICAgaWYgKCgoYVsoYiArIDExMCkgfCAwXSAmIDMyKSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbiA9IGI7XG4gICAgICAgICAgICAgICAgICAgIG8gPSAobiArIDgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IGNbbyA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIHEgPSBwIDw8IDEyO1xuICAgICAgICAgICAgICAgICAgICBjW28gPj4gMl0gPSBxO1xuICAgICAgICAgICAgICAgICAgICByID0gYjtcbiAgICAgICAgICAgICAgICAgICAgcyA9IHIgfCAwO1xuICAgICAgICAgICAgICAgICAgICB0ID0gY1tzID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgdSA9IHQgPDwgMTI7XG4gICAgICAgICAgICAgICAgICAgIGNbcyA+PiAyXSA9IHU7XG4gICAgICAgICAgICAgICAgICAgIHYgPSBiO1xuICAgICAgICAgICAgICAgICAgICB3ID0gKHYgKyA0KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIHggPSBjW3cgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICB5ID0geCA8PCAxMjtcbiAgICAgICAgICAgICAgICAgICAgY1t3ID4+IDJdID0geTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtID0gMDtcbiAgICAgICAgICAgICAgICBsID0gMDtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoY1soZiArIDEyKSA+PiAyXSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1soKGNbKGYgKyAxMikgPj4gMl0gfCAwKSArIDQpID4+IDJdIHwgMCkgPj4+IDAgPD1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ID0gMzI2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjWyhmICsgMTYpID4+IDJdIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHogPSAzMjY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBtID0gY1soZiArIDEyKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gY1soZiArIDE2KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6ID0gMzI2O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgaWYgKCh6IHwgMCkgPT0gMzI2KSB7XG4gICAgICAgICAgICAgICAgICAgIG0gPSBjWyhoICsgMTYpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgbCA9IGNbKGggKyAyMCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoID0gYkQoY1sobSArIDQpID4+IDJdIHwgMCwgbCwgNTE4KSB8IDA7XG4gICAgICAgICAgICAgICAgQSA9ICtiRShoKTtcbiAgICAgICAgICAgICAgICBoID0gYkQoY1sobSArIDQpID4+IDJdIHwgMCwgbCwgNTI0KSB8IDA7XG4gICAgICAgICAgICAgICAgQiA9ICtiRShoKTtcbiAgICAgICAgICAgICAgICBoID0gYkQoY1sobSArIDQpID4+IDJdIHwgMCwgbCwgNTE5KSB8IDA7XG4gICAgICAgICAgICAgICAgQyA9ICtiRShoKTtcbiAgICAgICAgICAgICAgICBoID0gYkQoY1sobSArIDQpID4+IDJdIHwgMCwgbCwgNTIxKSB8IDA7XG4gICAgICAgICAgICAgICAgRCA9ICtiRShoKTtcbiAgICAgICAgICAgICAgICBoID0gYkQoY1sobSArIDQpID4+IDJdIHwgMCwgbCwgNTIyKSB8IDA7XG4gICAgICAgICAgICAgICAgeiA9IH5+KCgxLjAgLSArYkYoaCkpICogMjUwLjApO1xuICAgICAgICAgICAgICAgIGggPSBiRChjWyhtICsgNCkgPj4gMl0gfCAwLCBsLCA0KSB8IDA7XG4gICAgICAgICAgICAgICAgYVsoYiArIDExMSkgfCAwXSA9IH5+KCgrYkYoaCkgKyAwLjUpICogMTI3LjApICYgMjU1O1xuICAgICAgICAgICAgICAgIGNbKGIgKyA2MCkgPj4gMl0gPSBiRygyNTUpIHwgMDtcbiAgICAgICAgICAgICAgICBjWyhiICsgMzYpID4+IDJdID0gYkgoaiwgMjU1LCBjWyhiICsgMTIpID4+IDJdIHwgMCwgQSkgfCAwO1xuICAgICAgICAgICAgICAgIGNbKGIgKyA2NCkgPj4gMl0gPSBiRygyNTApIHwgMDtcbiAgICAgICAgICAgICAgICBjWyhiICsgNDApID4+IDJdID0gYkgoaiwgNSwgY1soYiArIDEyKSA+PiAyXSB8IDAsIEIpIHwgMDtcbiAgICAgICAgICAgICAgICBjWyhiICsgNjgpID4+IDJdID0gYkcoeikgfCAwO1xuICAgICAgICAgICAgICAgIGNbKGIgKyA0NCkgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICBiSChqLCAoMjU1IC0geikgfCAwLCBjWyhiICsgMTIpID4+IDJdIHwgMCwgQykgfCAwO1xuICAgICAgICAgICAgICAgIGNbKGIgKyA3MikgPj4gMl0gPSBiRygwKSB8IDA7XG4gICAgICAgICAgICAgICAgY1soYiArIDQ4KSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgIGJIKGosICh6ICsgNSkgfCAwLCBjWyhiICsgMTIpID4+IDJdIHwgMCwgRCkgfCAwO1xuICAgICAgICAgICAgICAgIGNbKGIgKyA3NikgPj4gMl0gPSBiRygwKSB8IDA7XG4gICAgICAgICAgICAgICAgY1soYiArIDUyKSA+PiAyXSA9IGJHKDEpIHwgMDtcbiAgICAgICAgICAgICAgICBjWyhiICsgODApID4+IDJdID0gYkcoMCkgfCAwO1xuICAgICAgICAgICAgICAgIGNbKGIgKyA1NikgPj4gMl0gPSBiRygxKSB8IDA7XG4gICAgICAgICAgICAgICAgeiA9IChiICsgMTEwKSB8IDA7XG4gICAgICAgICAgICAgICAgYVt6XSA9IChkW3pdIHwgMCB8IDY0KSAmIDI1NTtcbiAgICAgICAgICAgICAgICBuID0gYjtcbiAgICAgICAgICAgICAgICBvID0gKG4gKyA4KSB8IDA7XG4gICAgICAgICAgICAgICAgcCA9IGNbbyA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgcSA9IHAgPDwgMTI7XG4gICAgICAgICAgICAgICAgY1tvID4+IDJdID0gcTtcbiAgICAgICAgICAgICAgICByID0gYjtcbiAgICAgICAgICAgICAgICBzID0gciB8IDA7XG4gICAgICAgICAgICAgICAgdCA9IGNbcyA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgdSA9IHQgPDwgMTI7XG4gICAgICAgICAgICAgICAgY1tzID4+IDJdID0gdTtcbiAgICAgICAgICAgICAgICB2ID0gYjtcbiAgICAgICAgICAgICAgICB3ID0gKHYgKyA0KSB8IDA7XG4gICAgICAgICAgICAgICAgeCA9IGNbdyA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgeSA9IHggPDwgMTI7XG4gICAgICAgICAgICAgICAgY1t3ID4+IDJdID0geTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBiRChhLCBiLCBkKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gZCB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSAwLFxuICAgICAgICAgICAgICAgICAgICBnID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaCA9IDA7XG4gICAgICAgICAgICAgICAgZiA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGI7XG4gICAgICAgICAgICAgICAgYiA9IGQ7XG4gICAgICAgICAgICAgICAgZCA9IDA7XG4gICAgICAgICAgICAgICAgZyA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGcgPj4+IDAgPj0gZiA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaCA9IChhICsgKChnICogMTIpIHwgMCkpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChlWyhoICsgNCkgPj4gMV0gfCAwIHwgMCkgPT0gKChiICYgNjU1MzUpIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGVbaCA+PiAxXSB8IDAgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZVsoaCArIDIpID4+IDFdIHwgMCB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZVsoaCArIDYpID4+IDFdIHwgMCB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSAoZCArIChjWyhoICsgOCkgPj4gMl0gfCAwKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGcgPSAoZyArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQgfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYkUoYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgYiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGMgPSAwLjAsXG4gICAgICAgICAgICAgICAgICAgIGQgPSAwLjA7XG4gICAgICAgICAgICAgICAgYiA9IGE7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGIgfCAwKSAhPSAtMjE0NzQ4MzY0OCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgK1AoMi4wLCArKCsoKChiIHwgMCkgLyA2NTUzNikgfCAwIHwgMCkgLyAxMjAwLjApKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZTM7XG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiArZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgIGMgPSAwLjA7XG4gICAgICAgICAgICAgICAgZCA9IGM7XG4gICAgICAgICAgICAgICAgcmV0dXJuICtkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYkYoYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKygrKCgoYSB8IDApIC8gNjU1MzYpIHwgMCB8IDApIC8gMS4wZTMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYkcoYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGEgPDwgMjIpIHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJIKGEsIGIsIGQsIGUpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gK2U7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSAwLjA7XG4gICAgICAgICAgICAgICAgZCA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGI7XG4gICAgICAgICAgICAgICAgZiA9IGU7XG4gICAgICAgICAgICAgICAgaWYgKGYgPCA2LjApIHtcbiAgICAgICAgICAgICAgICAgICAgZiA9IDYuMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChhIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhID0gMjU1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhID0gYSA8PCAyMjtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICB+fihcbiAgICAgICAgICAgICAgICAgICAgICAgICgoKyhhIHwgMCkgLyArKGNbKGQgKyA0KSA+PiAyXSB8IDApKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyhjWyhkICsgMTMwNjApID4+IDJdIHwgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGUzKSAvXG4gICAgICAgICAgICAgICAgICAgICAgICBmXG4gICAgICAgICAgICAgICAgICAgICkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJJKGIsIGUpIHtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAgICAgICBmID0gYjtcbiAgICAgICAgICAgICAgICBiID0gZTtcbiAgICAgICAgICAgICAgICBlID0gY1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyAyMjApID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBpZiAoKGUgfCAwKSA+IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgYVsoZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkpIHwgMF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICBnID0gMTtcbiAgICAgICAgICAgICAgICAgICAgaCA9IGc7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAoKGFbXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGYgKyAxNzI0ICsgKChiICogMjM2KSB8IDApICsgNCkgPj4gMl0gfCAwKSArIDExMCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgXSAmXG4gICAgICAgICAgICAgICAgICAgICAgICA2NCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGRbKGYgKyAxNzI0ICsgKChiICogMjM2KSB8IDApKSB8IDBdIHwgMCB8IDApID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAzNjE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGYgKyAxNzI0ICsgKChiICogMjM2KSB8IDApKSB8IDBdIHwgMCB8IDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDM2MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkgfCAwKSA9PSAzNjEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGUgfCAwKSA8PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgMTcyNCArICgoYiAqIDIzNikgfCAwKSArIDMyKSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IGc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGggfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyAyMjApID4+IDJdID0gZSArIDE7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAoY1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyAyNCkgPj4gMl0gfCAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICgoY1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyA0KSA+PiAyXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUgPDwgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgIDApXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGcgPSBiSShmLCBiKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGggPSBnO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaCB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNbKGYgKyAxNzI0ICsgKChiICogMjM2KSB8IDApICsgMjgpID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICgoY1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyA0KSA+PiAyXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUgPDwgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNbKGYgKyAxNzI0ICsgKChiICogMjM2KSB8IDApICsgMzIpID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICgoY1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyA0KSA+PiAyXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUgPDwgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKGNbKGYgKyAxNzI0ICsgKChiICogMjM2KSB8IDApICsgMjgpID4+IDJdIHwgMCkgPFxuICAgICAgICAgICAgICAgICAgICAoY1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyAyNCkgPj4gMl0gfCAwKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjWyhmICsgMTcyNCArICgoYiAqIDIzNikgfCAwKSArIDMyKSA+PiAyXSA9IC0oXG4gICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgMTcyNCArICgoYiAqIDIzNikgfCAwKSArIDMyKSA+PiAyXSB8IDBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZyA9IDA7XG4gICAgICAgICAgICAgICAgaCA9IGc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGggfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYkooYiwgZSkge1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSAwLFxuICAgICAgICAgICAgICAgICAgICBpID0gMC4wLFxuICAgICAgICAgICAgICAgICAgICBqID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbCA9IDAuMDtcbiAgICAgICAgICAgICAgICBmID0gYjtcbiAgICAgICAgICAgICAgICBiID0gZTtcbiAgICAgICAgICAgICAgICBpID0gK2dbKGYgKyAxNzI0ICsgKChiICogMjM2KSB8IDApICsgNjgpID4+IDJdO1xuICAgICAgICAgICAgICAgIGlmICgoY1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyAyMzIpID4+IDJdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGNbKGYgKyAxNzI0ICsgKChiICogMjM2KSB8IDApICsgNDgpID4+IDJdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKiArZ1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyA3NikgPj4gMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgKChhW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyA0KSA+PiAyXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgIF0gJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyAyNCkgPj4gMl0gPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzKSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMykpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW2sgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkW2VdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyAxKSB8IDBdIDw8IDgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyAyKSB8IDBdIDw8IDE2KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhlICsgMykgfCAwXSA8PCAyNCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjWyhrICsgNCkgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWyhlICsgNCkgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhlICsgNSkgfCAwXSA8PCA4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhlICsgNikgfCAwXSA8PCAxNikgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZSArIDcpIHwgMF0gPDwgMjQpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAraFtrID4+IDNdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBqID0gfn4oaSAqIDQwOTYuMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoaiB8IDApID4gODE5MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaiA9IDgxOTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyA2MCkgPj4gMl0gPSBqO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGwgPSArZ1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyA3MikgPj4gMl07XG4gICAgICAgICAgICAgICAgaWYgKChjWyhmICsgMTcyNCArICgoYiAqIDIzNikgfCAwKSArIDQ4KSA+PiAyXSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGkgKiArZ1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyA3NikgPj4gMl07XG4gICAgICAgICAgICAgICAgICAgIGwgPSBsICogK2dbKGYgKyAxNzI0ICsgKChiICogMjM2KSB8IDApICsgNzYpID4+IDJdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICgoYVtcbiAgICAgICAgICAgICAgICAgICAgICAgICgoY1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyA0KSA+PiAyXSB8IDApICsgMTEwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICBdICZcbiAgICAgICAgICAgICAgICAgICAgICAgIDY0KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgKDggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyAyNCkgPj4gMl0gPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMpIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMpKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICBpID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgKChjW2sgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbZV0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhlICsgMSkgfCAwXSA8PCA4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyAyKSB8IDBdIDw8IDE2KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyAzKSB8IDBdIDw8IDI0KSksXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1soayArIDQpID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWyhlICsgNCkgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyA1KSB8IDBdIDw8IDgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZSArIDYpIHwgMF0gPDwgMTYpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZSArIDcpIHwgMF0gPDwgMjQpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICtoW2sgPj4gM10pO1xuICAgICAgICAgICAgICAgICAgICBlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICg4ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGYgKyAxNzI0ICsgKChiICogMjM2KSB8IDApICsgMjQpID4+IDJdID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzKSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzKSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgbCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBsICpcbiAgICAgICAgICAgICAgICAgICAgICAgICgoY1trID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkW2VdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZSArIDEpIHwgMF0gPDwgOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhlICsgMikgfCAwXSA8PCAxNikgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhlICsgMykgfCAwXSA8PCAyNCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGsgKyA0KSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsoZSArIDQpIHwgMF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhlICsgNSkgfCAwXSA8PCA4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyA2KSB8IDBdIDw8IDE2KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyA3KSB8IDBdIDw8IDI0KSksXG4gICAgICAgICAgICAgICAgICAgICAgICAraFtrID4+IDNdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaiA9IH5+KGkgKiA0MDk2LjApO1xuICAgICAgICAgICAgICAgIGlmICgoaiB8IDApID4gODE5MSkge1xuICAgICAgICAgICAgICAgICAgICBqID0gODE5MTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZSA9IH5+KGwgKiA0MDk2LjApO1xuICAgICAgICAgICAgICAgIGlmICgoZSB8IDApID4gODE5MSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gODE5MTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY1soZiArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyA2MCkgPj4gMl0gPSBqO1xuICAgICAgICAgICAgICAgIGNbKGYgKyAxNzI0ICsgKChiICogMjM2KSB8IDApICsgNjQpID4+IDJdID0gZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBiSyhiLCBlLCBmLCBnKSB7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGUgPSBlIHwgMDtcbiAgICAgICAgICAgICAgICBmID0gZiB8IDA7XG4gICAgICAgICAgICAgICAgZyA9IGcgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBoID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGsgPSAwLFxuICAgICAgICAgICAgICAgICAgICBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbSA9IDA7XG4gICAgICAgICAgICAgICAgaCA9IGk7XG4gICAgICAgICAgICAgICAgaSA9IChpICsgOCkgfCAwO1xuICAgICAgICAgICAgICAgIGogPSBoIHwgMDtcbiAgICAgICAgICAgICAgICBrID0gYjtcbiAgICAgICAgICAgICAgICBiID0gZTtcbiAgICAgICAgICAgICAgICBlID0gZjtcbiAgICAgICAgICAgICAgICBjW2ogPj4gMl0gPSBnO1xuICAgICAgICAgICAgICAgIGcgPSAoayArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkpIHwgMDtcbiAgICAgICAgICAgICAgICBpZiAoKGRbZyB8IDBdIHwgMCB8IDApID09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChjW2ogPj4gMl0gfCAwKSA+PSAyMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY1tqID4+IDJdID0gMjA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbCA9IGN5KGssIGUsIGopIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgYkwoaywgbCwgYiwgZSwgY1tqID4+IDJdIHwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGFbZyB8IDBdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGg7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbCA9IGN5KGssIGUsIGopIHwgMDtcbiAgICAgICAgICAgICAgICBpZiAoKChjWyhrICsgOCkgPj4gMl0gJiAxKSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjWyhnICsgMzIpID4+IDJdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSA0MDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1soZyArIDQ4KSA+PiAyXSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IDQwMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJOKGssIGwsIGIsIGUsIGNbaiA+PiAyXSB8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChtIHwgMCkgPT0gNDAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiTShrLCBsLCBiLCBlLCBjW2ogPj4gMl0gfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoY1soZyArIDIzMikgPj4gMl0gfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjWyhnICsgMzIpID4+IDJdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gNDA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1soZyArIDQ4KSA+PiAyXSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSA0MDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiUChrLCBsLCBiLCBlLCBjW2ogPj4gMl0gfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobSB8IDApID09IDQwOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJPKGssIGwsIGIsIGUsIGNbaiA+PiAyXSB8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjWyhnICsgMjMyKSA+PiAyXSB8IDApID09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1soZyArIDMyKSA+PiAyXSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSA0MTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNbKGcgKyA0OCkgPj4gMl0gfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IDQxNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJSKGssIGwsIGIsIGUsIGNbaiA+PiAyXSB8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtIHwgMCkgPT0gNDE0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJRKGssIGwsIGIsIGUsIGNbaiA+PiAyXSB8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjWyhnICsgMjMyKSA+PiAyXSB8IDApID09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChiICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1soZyArIDMyKSA+PiAyXSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSA0MjE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNbKGcgKyA0OCkgPj4gMl0gfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IDQyMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJUKGssIGwsIGIsIGUsIGNbaiA+PiAyXSB8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtIHwgMCkgPT0gNDIxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJTKGssIGwsIGIsIGUsIGNbaiA+PiAyXSB8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpID0gaDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBiTChhLCBkLCBlLCBmLCBnKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgZiA9IGYgfCAwO1xuICAgICAgICAgICAgICAgIGcgPSBnIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgaCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGkgPSAwLFxuICAgICAgICAgICAgICAgICAgICBqID0gMCxcbiAgICAgICAgICAgICAgICAgICAgayA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGwgPSAwLFxuICAgICAgICAgICAgICAgICAgICBtID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG8gPSAwO1xuICAgICAgICAgICAgICAgIGggPSBhO1xuICAgICAgICAgICAgICAgIGEgPSBkO1xuICAgICAgICAgICAgICAgIGQgPSBlO1xuICAgICAgICAgICAgICAgIGUgPSBmO1xuICAgICAgICAgICAgICAgIGYgPSBnO1xuICAgICAgICAgICAgICAgIGcgPSAwO1xuICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZiA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGkgPSBjWyhoICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSArIDYwKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgaiA9IC0oKChpIHwgMCkgLyAoZiB8IDApKSB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICBpZiAoKGogfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGogPSAtMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCgoY1soaCArIDgpID4+IDJdICYgMSkgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrID0gZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAoayAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoayB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gNDc0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IChpICsgaikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpIHwgMCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IDQ3MjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChrICsgMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGJbayA+PiAxXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBrID0gXyhpLCAoZyA8PCAxNikgPj4gMTYpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgZCA9IChtICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1ttID4+IDJdID0gKGNbbSA+PiAyXSB8IDApICsgaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGwgfCAwKSA9PSA0NzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgobCB8IDApID09IDQ3NCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoY1soaCArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyAyMzIpID4+IDJdIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBrID0gY1soaCArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyA2NCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBtID0gLSgoKGsgfCAwKSAvIChmIHwgMCkpIHwgMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGY7XG4gICAgICAgICAgICAgICAgICAgICAgICBmID0gKG4gLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gKGkgKyBqKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkgfCAwKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAoayArIG0pIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoayB8IDApIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBhID0gKG4gKyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBnID0gYltuID4+IDFdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBfKGksIChnIDw8IDE2KSA+PiAxNikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gKG8gKyA0KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjW28gPj4gMl0gPSAoY1tvID4+IDJdIHwgMCkgKyBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgbiA9IF8oaywgKGcgPDwgMTYpID4+IDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBvID0gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSAobyArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbbyA+PiAyXSA9IChjW28gPj4gMl0gfCAwKSArIG47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgMjMyKSA+PiAyXSB8IDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IGY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAoayAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChrIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IDQ1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAoaSArIGopIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpIHwgMCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChrICsgMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gYltrID4+IDFdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IF8oaSwgKGcgPDwgMTYpID4+IDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gKG0gKyA0KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbbSA+PiAyXSA9IChjW20gPj4gMl0gfCAwKSArIGs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBfKGksIChnIDw8IDE2KSA+PiAxNikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IChtICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW20gPj4gMl0gPSAoY1ttID4+IDJdIHwgMCkgKyBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGwgfCAwKSA9PSA0NTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaCArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyAyMzIpID4+IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gKGsgLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChrIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gNDU3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IChpICsgaikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaSB8IDApIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChrICsgMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBiW2sgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBfKGksIChnIDw8IDE2KSA+PiAxNikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSAobSArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW20gPj4gMl0gPSAoY1ttID4+IDJdIHwgMCkgKyBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSAoZCArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobCB8IDApID09IDQ1Nykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcyNCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChlICogMjM2KSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzIpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IChrIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChrIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSA0NjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gKGkgKyBqKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkgfCAwKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChrICsgMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGJbayA+PiAxXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gKGQgKyA0KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gXyhpLCAoZyA8PCAxNikgPj4gMTYpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IChtICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1ttID4+IDJdID0gKGNbbSA+PiAyXSB8IDApICsgaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGwgfCAwKSA9PSA0NjQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYk0oYSwgZCwgZSwgZiwgZykge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gZCB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGYgPSBmIHwgMDtcbiAgICAgICAgICAgICAgICBnID0gZyB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGsgPSAwLFxuICAgICAgICAgICAgICAgICAgICBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG4gPSAwO1xuICAgICAgICAgICAgICAgIGggPSBhO1xuICAgICAgICAgICAgICAgIGEgPSBkO1xuICAgICAgICAgICAgICAgIGQgPSBlO1xuICAgICAgICAgICAgICAgIGUgPSBmO1xuICAgICAgICAgICAgICAgIGYgPSBnO1xuICAgICAgICAgICAgICAgIGcgPSAoaCArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkpIHwgMDtcbiAgICAgICAgICAgICAgICBpID0gY1soZyArIDYwKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgaiA9IGNbKGcgKyAyMjQpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBrID0gajtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoaiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBjWyhoICsgMTMwNjApID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYlUoaCwgZSkgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGNbKGcgKyA2MCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbCA9IDUwMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgoayB8IDApID49IChmIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSA0OTU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmID0gKGYgLSBrKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBqID0gaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAoaiAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGogPSBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChqICsgMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGJbaiA+PiAxXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBqID0gXyhpLCAobSA8PCAxNikgPj4gMTYpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgZCA9IChuICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1tuID4+IDJdID0gKGNbbiA+PiAyXSB8IDApICsgajtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBrID0gY1soaCArIDEzMDYwKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoYlUoaCwgZSkgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gNDkzO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaSA9IGNbKGcgKyA2MCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKGwgfCAwKSA9PSA1MDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGwgfCAwKSA9PSA0OTMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGwgfCAwKSA9PSA0OTUpIHtcbiAgICAgICAgICAgICAgICAgICAgY1soZyArIDIyNCkgPj4gMl0gPSBrIC0gZjtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBmO1xuICAgICAgICAgICAgICAgICAgICAgICAgZiA9IChrIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChrIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgayA9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBhID0gKGsgKyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBtID0gYltrID4+IDFdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBfKGksIChtIDw8IDE2KSA+PiAxNikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gKGcgKyA0KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjW2cgPj4gMl0gPSAoY1tnID4+IDJdIHwgMCkgKyBrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBiTihhLCBkLCBlLCBmLCBnKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgZiA9IGYgfCAwO1xuICAgICAgICAgICAgICAgIGcgPSBnIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgaCA9IDA7XG4gICAgICAgICAgICAgICAgaCA9IGQ7XG4gICAgICAgICAgICAgICAgZCA9IGU7XG4gICAgICAgICAgICAgICAgZSA9IGc7XG4gICAgICAgICAgICAgICAgZyA9IGNbKGEgKyAxNzI0ICsgKChmICogMjM2KSB8IDApICsgNjApID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBmID0gZTtcbiAgICAgICAgICAgICAgICAgICAgZSA9IChmIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmID0gaDtcbiAgICAgICAgICAgICAgICAgICAgaCA9IChmICsgMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICBhID0gXyhnLCBiW2YgPj4gMV0gfCAwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGYgPSBkO1xuICAgICAgICAgICAgICAgICAgICBkID0gKGYgKyA0KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbZiA+PiAyXSA9IChjW2YgPj4gMl0gfCAwKSArIGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJPKGEsIGQsIGUsIGYsIGcpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgZCA9IGQgfCAwO1xuICAgICAgICAgICAgICAgIGUgPSBlIHwgMDtcbiAgICAgICAgICAgICAgICBmID0gZiB8IDA7XG4gICAgICAgICAgICAgICAgZyA9IGcgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBoID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGogPSAwLFxuICAgICAgICAgICAgICAgICAgICBrID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG0gPSAwLFxuICAgICAgICAgICAgICAgICAgICBuID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbyA9IDA7XG4gICAgICAgICAgICAgICAgaCA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGQ7XG4gICAgICAgICAgICAgICAgZCA9IGU7XG4gICAgICAgICAgICAgICAgZSA9IGY7XG4gICAgICAgICAgICAgICAgZiA9IGc7XG4gICAgICAgICAgICAgICAgZyA9IChoICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSkgfCAwO1xuICAgICAgICAgICAgICAgIGkgPSBjWyhnICsgNjApID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBqID0gY1soZyArIDY0KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgayA9IGNbKGcgKyAyMjQpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBsID0gaztcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoayB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBjWyhoICsgMTMwNjApID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYlUoaCwgZSkgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGNbKGcgKyA2MCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBjWyhnICsgNjQpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG0gPSA1MzA7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGwgfCAwKSA+PSAoZiB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtID0gNTIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZiA9IChmIC0gbCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgayA9IGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gKGsgLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGsgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBrID0gYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAoayArIDIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBiW2sgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgayA9IF8oaSwgKG4gPDwgMTYpID4+IDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBvID0gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSAobyArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbbyA+PiAyXSA9IChjW28gPj4gMl0gfCAwKSArIGs7XG4gICAgICAgICAgICAgICAgICAgICAgICBrID0gXyhqLCAobiA8PCAxNikgPj4gMTYpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgZCA9IChvICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1tvID4+IDJdID0gKGNbbyA+PiAyXSB8IDApICsgaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsID0gY1soaCArIDEzMDYwKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoYlUoaCwgZSkgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtID0gNTIwO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaSA9IGNbKGcgKyA2MCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBqID0gY1soZyArIDY0KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgobSB8IDApID09IDUyMikge1xuICAgICAgICAgICAgICAgICAgICBjWyhnICsgMjI0KSA+PiAyXSA9IGwgLSBmO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGY7XG4gICAgICAgICAgICAgICAgICAgICAgICBmID0gKGwgLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGwgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAobCArIDIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBiW2wgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbCA9IF8oaSwgKG4gPDwgMTYpID4+IDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBnID0gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSAoZyArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbZyA+PiAyXSA9IChjW2cgPj4gMl0gfCAwKSArIGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gXyhqLCAobiA8PCAxNikgPj4gMTYpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgZCA9IChnICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1tnID4+IDJdID0gKGNbZyA+PiAyXSB8IDApICsgbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgobSB8IDApID09IDUyMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgobSB8IDApID09IDUzMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYlAoYSwgZCwgZSwgZiwgZykge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gZCB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGYgPSBmIHwgMDtcbiAgICAgICAgICAgICAgICBnID0gZyB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaiA9IDA7XG4gICAgICAgICAgICAgICAgaCA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGQ7XG4gICAgICAgICAgICAgICAgZCA9IGU7XG4gICAgICAgICAgICAgICAgZSA9IGY7XG4gICAgICAgICAgICAgICAgZiA9IGc7XG4gICAgICAgICAgICAgICAgZyA9IGNbKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgNjApID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBpID0gY1soaCArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyA2NCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBmO1xuICAgICAgICAgICAgICAgICAgICBmID0gKGUgLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGUgPSBhO1xuICAgICAgICAgICAgICAgICAgICBhID0gKGUgKyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGggPSBiW2UgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBlID0gXyhnLCAoaCA8PCAxNikgPj4gMTYpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaiA9IGQ7XG4gICAgICAgICAgICAgICAgICAgIGQgPSAoaiArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1tqID4+IDJdID0gKGNbaiA+PiAyXSB8IDApICsgZTtcbiAgICAgICAgICAgICAgICAgICAgZSA9IF8oaSwgKGggPDwgMTYpID4+IDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGggPSBkO1xuICAgICAgICAgICAgICAgICAgICBkID0gKGggKyA0KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbaCA+PiAyXSA9IChjW2ggPj4gMl0gfCAwKSArIGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJRKGEsIGQsIGUsIGYsIGcpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgZCA9IGQgfCAwO1xuICAgICAgICAgICAgICAgIGUgPSBlIHwgMDtcbiAgICAgICAgICAgICAgICBmID0gZiB8IDA7XG4gICAgICAgICAgICAgICAgZyA9IGcgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBoID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGogPSAwLFxuICAgICAgICAgICAgICAgICAgICBrID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG0gPSAwLFxuICAgICAgICAgICAgICAgICAgICBuID0gMDtcbiAgICAgICAgICAgICAgICBoID0gYTtcbiAgICAgICAgICAgICAgICBhID0gZDtcbiAgICAgICAgICAgICAgICBkID0gZTtcbiAgICAgICAgICAgICAgICBlID0gZjtcbiAgICAgICAgICAgICAgICBmID0gZztcbiAgICAgICAgICAgICAgICBnID0gKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApKSB8IDA7XG4gICAgICAgICAgICAgICAgaSA9IGNbKGcgKyA2MCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIGogPSBjWyhnICsgMjI0KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgayA9IGo7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGogfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrID0gY1soaCArIDEzMDYwKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGJVKGgsIGUpIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBjWyhnICsgNjApID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGsgfCAwKSA+PSAoZiB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZiA9IChmIC0gaykgfCAwO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaiA9IGs7XG4gICAgICAgICAgICAgICAgICAgICAgICBrID0gKGogLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGogfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBqID0gYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAoaiArIDIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBiW2ogPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaiA9IF8oaSwgKG0gPDwgMTYpID4+IDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBuID0gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSAobiArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbbiA+PiAyXSA9IChjW24gPj4gMl0gfCAwKSArIGo7XG4gICAgICAgICAgICAgICAgICAgICAgICBqID0gXyhpLCAobSA8PCAxNikgPj4gMTYpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgZCA9IChuICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1tuID4+IDJdID0gKGNbbiA+PiAyXSB8IDApICsgajtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBrID0gY1soaCArIDEzMDYwKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoYlUoaCwgZSkgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gNTQ3O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaSA9IGNbKGcgKyA2MCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKGwgfCAwKSA9PSA1NDkpIHtcbiAgICAgICAgICAgICAgICAgICAgY1soZyArIDIyNCkgPj4gMl0gPSBrIC0gZjtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBmO1xuICAgICAgICAgICAgICAgICAgICAgICAgZiA9IChrIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChrIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgayA9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBhID0gKGsgKyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBtID0gYltrID4+IDFdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBfKGksIChtIDw8IDE2KSA+PiAxNikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gKGcgKyA0KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjW2cgPj4gMl0gPSAoY1tnID4+IDJdIHwgMCkgKyBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgayA9IF8oaSwgKG0gPDwgMTYpID4+IDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBnID0gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSAoZyArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbZyA+PiAyXSA9IChjW2cgPj4gMl0gfCAwKSArIGs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGwgfCAwKSA9PSA1NTYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGwgfCAwKSA9PSA1NDcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJSKGEsIGQsIGUsIGYsIGcpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgZCA9IGQgfCAwO1xuICAgICAgICAgICAgICAgIGUgPSBlIHwgMDtcbiAgICAgICAgICAgICAgICBmID0gZiB8IDA7XG4gICAgICAgICAgICAgICAgZyA9IGcgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBoID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgICAgICAgaCA9IGQ7XG4gICAgICAgICAgICAgICAgZCA9IGU7XG4gICAgICAgICAgICAgICAgZSA9IGc7XG4gICAgICAgICAgICAgICAgZyA9IGNbKGEgKyAxNzI0ICsgKChmICogMjM2KSB8IDApICsgNjApID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBmID0gZTtcbiAgICAgICAgICAgICAgICAgICAgZSA9IChmIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmID0gaDtcbiAgICAgICAgICAgICAgICAgICAgaCA9IChmICsgMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICBhID0gYltmID4+IDFdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgZiA9IF8oZywgKGEgPDwgMTYpID4+IDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBkO1xuICAgICAgICAgICAgICAgICAgICBkID0gKGkgKyA0KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbaSA+PiAyXSA9IChjW2kgPj4gMl0gfCAwKSArIGY7XG4gICAgICAgICAgICAgICAgICAgIGYgPSBfKGcsIChhIDw8IDE2KSA+PiAxNikgfCAwO1xuICAgICAgICAgICAgICAgICAgICBhID0gZDtcbiAgICAgICAgICAgICAgICAgICAgZCA9IChhICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBjW2EgPj4gMl0gPSAoY1thID4+IDJdIHwgMCkgKyBmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBiUyhhLCBkLCBlLCBmLCBnKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgZiA9IGYgfCAwO1xuICAgICAgICAgICAgICAgIGcgPSBnIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgaCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGkgPSAwLFxuICAgICAgICAgICAgICAgICAgICBqID0gMCxcbiAgICAgICAgICAgICAgICAgICAgayA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGwgPSAwLFxuICAgICAgICAgICAgICAgICAgICBtID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbiA9IDA7XG4gICAgICAgICAgICAgICAgaCA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGQ7XG4gICAgICAgICAgICAgICAgZCA9IGU7XG4gICAgICAgICAgICAgICAgZSA9IGY7XG4gICAgICAgICAgICAgICAgZiA9IGc7XG4gICAgICAgICAgICAgICAgZyA9IChoICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSkgfCAwO1xuICAgICAgICAgICAgICAgIGkgPSBjWyhnICsgNjApID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBqID0gY1soZyArIDIyNCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIGsgPSBqO1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChqIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgayA9IGNbKGggKyAxMzA2MCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiVShoLCBlKSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gY1soZyArIDYwKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gNTgyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKChrIHwgMCkgPj0gKGYgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbCA9IDU3NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGYgPSAoZiAtIGspIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGogPSBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgayA9IChqIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChqIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaiA9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBhID0gKGogKyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBtID0gYltqID4+IDFdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGogPSBfKGksIChtIDw8IDE2KSA+PiAxNikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gKG4gKyA0KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjW24gPj4gMl0gPSAoY1tuID4+IDJdIHwgMCkgKyBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgZCA9IChkICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGsgPSBjWyhoICsgMTMwNjApID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChiVShoLCBlKSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSA1NzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpID0gY1soZyArIDYwKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgobCB8IDApID09IDU4Mikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgobCB8IDApID09IDU3Nikge1xuICAgICAgICAgICAgICAgICAgICBjWyhnICsgMjI0KSA+PiAyXSA9IGsgLSBmO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgayA9IGY7XG4gICAgICAgICAgICAgICAgICAgICAgICBmID0gKGsgLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGsgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBrID0gYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAoayArIDIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBiW2sgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgayA9IF8oaSwgKG0gPDwgMTYpID4+IDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBnID0gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSAoZyArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbZyA+PiAyXSA9IChjW2cgPj4gMl0gfCAwKSArIGs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gKGQgKyA0KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGwgfCAwKSA9PSA1NzQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJUKGEsIGQsIGUsIGYsIGcpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgZCA9IGQgfCAwO1xuICAgICAgICAgICAgICAgIGUgPSBlIHwgMDtcbiAgICAgICAgICAgICAgICBmID0gZiB8IDA7XG4gICAgICAgICAgICAgICAgZyA9IGcgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBoID0gMDtcbiAgICAgICAgICAgICAgICBoID0gZDtcbiAgICAgICAgICAgICAgICBkID0gZTtcbiAgICAgICAgICAgICAgICBlID0gZztcbiAgICAgICAgICAgICAgICBnID0gY1soYSArIDE3MjQgKyAoKGYgKiAyMzYpIHwgMCkgKyA2MCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGYgPSBlO1xuICAgICAgICAgICAgICAgICAgICBlID0gKGYgLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGYgPSBoO1xuICAgICAgICAgICAgICAgICAgICBoID0gKGYgKyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGEgPSBfKGcsIGJbZiA+PiAxXSB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgZiA9IGQ7XG4gICAgICAgICAgICAgICAgICAgIGQgPSAoZiArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1tmID4+IDJdID0gKGNbZiA+PiAyXSB8IDApICsgYTtcbiAgICAgICAgICAgICAgICAgICAgZCA9IChkICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBiVShhLCBiKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBmID0gMDtcbiAgICAgICAgICAgICAgICBkID0gYTtcbiAgICAgICAgICAgICAgICBhID0gYjtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoY1soZCArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyAzMikgPj4gMl0gfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGJWKGQsIGEpIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBmID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgIGlmICgoY1soZCArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyA0OCkgPj4gMl0gfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJXKGQsIGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiSihkLCBhKTtcbiAgICAgICAgICAgICAgICBlID0gMDtcbiAgICAgICAgICAgICAgICBmID0gZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZiB8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBiVihhLCBiKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDA7XG4gICAgICAgICAgICAgICAgZCA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGI7XG4gICAgICAgICAgICAgICAgYiA9IChkICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDI0KSB8IDA7XG4gICAgICAgICAgICAgICAgY1tiID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgKGNbYiA+PiAyXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgKGNbKGQgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgMzIpID4+IDJdIHwgMCk7XG4gICAgICAgICAgICAgICAgaWYgKChjWyhkICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDMyKSA+PiAyXSB8IDApIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1soZCArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyAyNCkgPj4gMl0gfCAwKSA8PVxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGQgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgMjgpID4+IDJdIHwgMClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gNjAzO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IDYwMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSA2MDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChlIHwgMCkgPT0gNjAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGQgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgMzIpID4+IDJdIHwgMCkgPD1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1soZCArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyAyNCkgPj4gMl0gfCAwKSA+PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjWyhkICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDI4KSA+PiAyXSB8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gNjAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGUgfCAwKSA9PSA2MDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbKGQgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgMjQpID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhkICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDI4KSA+PiAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYkkoZCwgYSkgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBmO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGcgfCAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgZiA9IDA7XG4gICAgICAgICAgICAgICAgZyA9IGY7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGcgfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYlcoYSwgYikge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBmID0gMDtcbiAgICAgICAgICAgICAgICBlID0gYTtcbiAgICAgICAgICAgICAgICBhID0gYjtcbiAgICAgICAgICAgICAgICBiID1cbiAgICAgICAgICAgICAgICAgICAgKGRbXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGUgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgNCkgPj4gMl0gfCAwKSArIDEwOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAwKSA8PFxuICAgICAgICAgICAgICAgICAgICA3O1xuICAgICAgICAgICAgICAgIGlmICgoY1soZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyAzNikgPj4gMl0gfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGYgPSAoZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyA0MCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBjW2YgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbZiA+PiAyXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChjWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDM2KSA+PiAyXSB8IDApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1soZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyA0MCkgPj4gMl0gfCAwKSA+PVxuICAgICAgICAgICAgICAgICAgICAgICAgNjU1MzZcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDM2KSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDQwKSA+PiAyXSB8IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBiID4+IDE2O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGYgPSAoZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyA0NCkgfCAwO1xuICAgICAgICAgICAgICAgIGNbZiA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgIChjW2YgPj4gMl0gfCAwKSArXG4gICAgICAgICAgICAgICAgICAgIChjWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDQ4KSA+PiAyXSB8IDApO1xuICAgICAgICAgICAgICAgIGdbKGUgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgNzYpID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgMS4wIC1cbiAgICAgICAgICAgICAgICAgICAgKCtSKFxuICAgICAgICAgICAgICAgICAgICAgICAgKyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1soZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyA0NCkgPj4gMl0gPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgKiAwLjAwNjEzNTkyMzE1MTU0MjU2NVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgICAgICAgIDEuMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgKyhiIHwgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgMS4wICpcbiAgICAgICAgICAgICAgICAgICAgICAgIDc2MjkzOTQ1MzEyNS4wZS0xNztcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBiWChiLCBkLCBlKSB7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSAwLFxuICAgICAgICAgICAgICAgICAgICBnID0gMDtcbiAgICAgICAgICAgICAgICBmID0gZDtcbiAgICAgICAgICAgICAgICBkID0gZTtcbiAgICAgICAgICAgICAgICBlID0gYjtcbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBiID0gZDtcbiAgICAgICAgICAgICAgICAgICAgZCA9IChiIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGIgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBiID0gZjtcbiAgICAgICAgICAgICAgICAgICAgZiA9IChiICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBnID0gY1tiID4+IDJdID4+IDIxO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGcgfCAwKSA+IDEyNykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZyA9IDEyNztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZyB8IDApIDwgLTEyOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAtMTI4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGIgPSBlO1xuICAgICAgICAgICAgICAgICAgICBlID0gKGIgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGFbYl0gPSBnICYgMjU1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBiWShiLCBkLCBlKSB7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSAwLFxuICAgICAgICAgICAgICAgICAgICBnID0gMDtcbiAgICAgICAgICAgICAgICBmID0gZDtcbiAgICAgICAgICAgICAgICBkID0gZTtcbiAgICAgICAgICAgICAgICBlID0gYjtcbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBiID0gZDtcbiAgICAgICAgICAgICAgICAgICAgZCA9IChiIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGIgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBiID0gZjtcbiAgICAgICAgICAgICAgICAgICAgZiA9IChiICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBnID0gY1tiID4+IDJdID4+IDIxO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGcgfCAwKSA+IDEyNykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZyA9IDEyNztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZyB8IDApIDwgLTEyOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAtMTI4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGIgPSBlO1xuICAgICAgICAgICAgICAgICAgICBlID0gKGIgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGFbYl0gPSAoMTI4IF4gKGcgJiAyNTUpKSAmIDI1NTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYlooYSwgZCwgZSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gZCB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDA7XG4gICAgICAgICAgICAgICAgZiA9IGQ7XG4gICAgICAgICAgICAgICAgZCA9IGU7XG4gICAgICAgICAgICAgICAgZSA9IGE7XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgIGQgPSAoYSAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChhIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYSA9IGY7XG4gICAgICAgICAgICAgICAgICAgIGYgPSAoYSArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgZyA9IGNbYSA+PiAyXSA+PiAxMztcbiAgICAgICAgICAgICAgICAgICAgaWYgKChnIHwgMCkgPiAzMjc2Nykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZyA9IDMyNzY3O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChnIHwgMCkgPCAtMzI3NjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gLTMyNzY4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGEgPSBlO1xuICAgICAgICAgICAgICAgICAgICBlID0gKGEgKyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGJbYSA+PiAxXSA9IGcgJiA2NTUzNTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYl8oYSwgZCwgZSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gZCB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDA7XG4gICAgICAgICAgICAgICAgZiA9IGQ7XG4gICAgICAgICAgICAgICAgZCA9IGU7XG4gICAgICAgICAgICAgICAgZSA9IGE7XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgIGQgPSAoYSAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChhIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYSA9IGY7XG4gICAgICAgICAgICAgICAgICAgIGYgPSAoYSArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgZyA9IGNbYSA+PiAyXSA+PiAxMztcbiAgICAgICAgICAgICAgICAgICAgaWYgKChnIHwgMCkgPiAzMjc2Nykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZyA9IDMyNzY3O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChnIHwgMCkgPCAtMzI3NjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gLTMyNzY4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGEgPSBlO1xuICAgICAgICAgICAgICAgICAgICBlID0gKGEgKyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGJbYSA+PiAxXSA9ICgzMjc2OCBeIChnICYgNjU1MzUpKSAmIDY1NTM1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBiJChhLCBkLCBlKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSAwLFxuICAgICAgICAgICAgICAgICAgICBnID0gMDtcbiAgICAgICAgICAgICAgICBmID0gZDtcbiAgICAgICAgICAgICAgICBkID0gZTtcbiAgICAgICAgICAgICAgICBlID0gYTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBhID0gZDtcbiAgICAgICAgICAgICAgICAgICAgZCA9IChhIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGEgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhID0gZjtcbiAgICAgICAgICAgICAgICAgICAgZiA9IChhICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBnID0gY1thID4+IDJdID4+IDEzO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGcgfCAwKSA+IDMyNzY3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnID0gMzI3Njc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGcgfCAwKSA8IC0zMjc2OCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAtMzI3Njg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYSA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGUgPSAoYSArIDIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgYlthID4+IDFdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICgoKCgoKGcgJiA2NTUzNSkgPDwgMTYpID4+IDE2KSAmIDI1NSkgPDwgOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKCgoZyAmIDY1NTM1KSA8PCAxNikgPj4gMTYpID4+IDgpICYgMjU1KSkgJlxuICAgICAgICAgICAgICAgICAgICAgICAgNjU1MzU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGIwKGIsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgZCA9IGQgfCAwO1xuICAgICAgICAgICAgICAgIGUgPSBlIHwgMDtcbiAgICAgICAgICAgICAgICBmID0gZiB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGcgPSAwLFxuICAgICAgICAgICAgICAgICAgICBoID0gMDtcbiAgICAgICAgICAgICAgICBnID0gaTtcbiAgICAgICAgICAgICAgICBpID0gKGkgKyA4KSB8IDA7XG4gICAgICAgICAgICAgICAgaCA9IGcgfCAwO1xuICAgICAgICAgICAgICAgIGNbaCA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgYVsoaCArIDUpIHwgMF0gPSAxO1xuICAgICAgICAgICAgICAgIGFbKGggKyA0KSB8IDBdID0gZCAmIDI1NTtcbiAgICAgICAgICAgICAgICBhWyhoICsgNikgfCAwXSA9IGUgJiAyNTU7XG4gICAgICAgICAgICAgICAgYVsoaCArIDcpIHwgMF0gPSBmICYgMjU1O1xuICAgICAgICAgICAgICAgIGIxKGIsIGgpO1xuICAgICAgICAgICAgICAgIGkgPSBnO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGIxKGIsIGUpIHtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAgICAgICBmID0gYjtcbiAgICAgICAgICAgICAgICBiID0gZTtcbiAgICAgICAgICAgICAgICBlID0gY1soZiArIDEzMDUyKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgZyA9IC0xO1xuICAgICAgICAgICAgICAgIGggPSAyMTQ3NDgzNjQ3O1xuICAgICAgICAgICAgICAgIGlmICgwID09IChiIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGNbKGYgKyAxMzA4MCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBiID0gZTtcbiAgICAgICAgICAgICAgICAgICAgZSA9IChiIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGIgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGRbKGYgKyAxNzI0ICsgKChlICogMjM2KSB8IDApKSB8IDBdIHwgMCB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGYgKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgMSkgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhpICsgNCkgfCAwXSB8IDAgfCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZiArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyAyKSB8IDBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGkgKyA2KSB8IDBdIHwgMCB8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDg0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGRbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGYgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzI0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChlICogMjM2KSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaChmLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKGcgfCAwKSAhPSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjbihmLCBpLCBnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlID0gY1soZiArIDEzMDUyKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYiA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGUgPSAoYiAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChiIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhmICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSkgfCAwXSB8IDAgfCAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGYgKyAxNzI0ICsgKChlICogMjM2KSB8IDApKSB8IDBdIHwgMCB8IDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBjWyhmICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSArIDYwKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZiArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyAyMzIpID4+IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZiArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyA2NCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPD1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYiB8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSArIDY0KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiIHwgMCkgPCAoaCB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKGcgfCAwKSAhPSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gKGYgKyAxMzA2OCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBjW2UgPj4gMl0gPSAoY1tlID4+IDJdIHwgMCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICBhWyhmICsgMTcyNCArICgoZyAqIDIzNikgfCAwKSkgfCAwXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNuKGYsIGksIGcpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZyA9IChmICsgMTMwNjQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1tnID4+IDJdID0gKGNbZyA+PiAyXSB8IDApICsgMTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGIyKGIsIGUpIHtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwO1xuICAgICAgICAgICAgICAgIGYgPSBiO1xuICAgICAgICAgICAgICAgIGIgPSBlO1xuICAgICAgICAgICAgICAgIGUgPSBjWyhmICsgMTMwNTIpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBpZiAoMCA9PSAoYiB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgIGcgPSBjWyhmICsgMTMwODApID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnID0gYjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgTDg5MDogd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYiA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGUgPSAoYiAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChiIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaCA9IDcwOTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZiArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkpIHwgMF0gfCAwIHwgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhmICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSArIDEpIHwgMF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZyArIDQpIHwgMF0gfCAwIHwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGYgKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgMikgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhnICsgNikgfCAwXSB8IDAgfCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMODkwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoaCB8IDApID09IDcwOSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAoZiArIDEwODQgKyAoKChkWyhnICsgNCkgfCAwXSB8IDApICogNDApIHwgMCkgKyAxMikgPj4gMlxuICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgYVsoZiArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkpIHwgMF0gPSAyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNpKGYsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBiMyhhKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBiID0gMDtcbiAgICAgICAgICAgICAgICBiID0gYTtcbiAgICAgICAgICAgICAgICBjW2IgPj4gMl0gPSAxO1xuICAgICAgICAgICAgICAgIGI0KGIpO1xuICAgICAgICAgICAgICAgIGI1KGIsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGI0KGEpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGIgPSAwO1xuICAgICAgICAgICAgICAgIGIgPSBhO1xuICAgICAgICAgICAgICAgIGdbKGIgKyAxNikgPj4gMl0gPSArKGNbKGIgKyAyMCkgPj4gMl0gfCAwKSAvIDEwMC4wO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGI1KGEsIGIpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBkID0gMDtcbiAgICAgICAgICAgICAgICBkID0gYTtcbiAgICAgICAgICAgICAgICBhID0gYjtcbiAgICAgICAgICAgICAgICBpZiAoKGNbKGQgKyAxMzA4OCkgPj4gMl0gfCAwKSA+IChhIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY1soZCArIDEzMDg4KSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNrKGQpO1xuICAgICAgICAgICAgICAgIGNbKGQgKyAxMzA4MCkgPj4gMl0gPSBjWyhkICsgMTMwNzYpID4+IDJdO1xuICAgICAgICAgICAgICAgIGNbMzkyXSA9IDVlNTtcbiAgICAgICAgICAgICAgICBpZiAoKGEgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2woZCwgYSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYjYoYiwgZSwgZiwgaCkge1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgZiA9IGYgfCAwO1xuICAgICAgICAgICAgICAgIGggPSBoIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGsgPSAwLFxuICAgICAgICAgICAgICAgICAgICBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG4gPSAwLFxuICAgICAgICAgICAgICAgICAgICBvID0gMCxcbiAgICAgICAgICAgICAgICAgICAgcCA9IDA7XG4gICAgICAgICAgICAgICAgaiA9IGk7XG4gICAgICAgICAgICAgICAgaSA9IChpICsgOCkgfCAwO1xuICAgICAgICAgICAgICAgIGsgPSBqIHwgMDtcbiAgICAgICAgICAgICAgICBsID0gYjtcbiAgICAgICAgICAgICAgICBjW2sgPj4gMl0gPSBlO1xuICAgICAgICAgICAgICAgIGUgPSBoO1xuICAgICAgICAgICAgICAgIGlmICgoY1tsID4+IDJdIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBtID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbiA9IG07XG4gICAgICAgICAgICAgICAgICAgIGkgPSBqO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGggPSAoKGYgPj4+IDApIC8gKChjWyhsICsgMTIpID4+IDJdIHwgMCkgPj4+IDApKSB8IDA7XG4gICAgICAgICAgICAgICAgZiA9IGNbKGwgKyAxMzA4OCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIGIgPSAoKGNbKGwgKyAxMzA4OCkgPj4gMl0gfCAwKSArIGgpIHwgMDtcbiAgICAgICAgICAgICAgICBMOTIwOiB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGNbKGwgKyAxMzA4OCkgPj4gMl0gfCAwKSA+PSAoYiB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvID0gNzU4O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB+figrKGNbY1sobCArIDEzMDgwKSA+PiAyXSA+PiAyXSB8IDApIC8gK2dbMjU4XSkgPj4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjWyhsICsgMTMwODgpID4+IDJdIHwgMCkgPj4+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkWygoY1sobCArIDEzMDgwKSA+PiAyXSB8IDApICsgNSkgfCAwXSB8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09IChlIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSA3NTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMOTIwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDg0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChkW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGwgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDQpIHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMikgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPSBkWygoY1sobCArIDEzMDgwKSA+PiAyXSB8IDApICsgNikgfCAwXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhWygoY1sobCArIDEzMDgwKSA+PiAyXSB8IDApICsgNikgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYShsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI3KGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwODQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGRbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1sobCArIDEzMDgwKSA+PiAyXSB8IDApICsgNCkgfCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IGRbKChjWyhsICsgMTMwODApID4+IDJdIHwgMCkgKyA2KSB8IDBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDg0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChkW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGwgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDQpIHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNikgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPSAwLjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjKGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZChsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsoKGNbKGwgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDQpIHwgMF0gfCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhsICsgMTMwNTYpID4+IDJdICZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhsICsgMTMwODApID4+IDJdIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4NCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGRbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGwgKyAxMzA4MCkgPj4gMl0gfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbKChjWyhsICsgMTMwODApID4+IDJdIHwgMCkgKyA2KSB8IDBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwODQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChkW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhsICsgMTMwODApID4+IDJdIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsoKGNbKGwgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDYpIHwgMF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwODQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGRbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1sobCArIDEzMDgwKSA+PiAyXSB8IDApICsgNCkgfCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IGRbKChjWyhsICsgMTMwODApID4+IDJdIHwgMCkgKyA2KSB8IDBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwODQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGRbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1sobCArIDEzMDgwKSA+PiAyXSB8IDApICsgNCkgfCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IGRbKChjWyhsICsgMTMwODApID4+IDJdIHwgMCkgKyA2KSB8IDBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjkobCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbKChjWyhsICsgMTMwODApID4+IDJdIHwgMCkgKyA3KSB8IDBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIxKGwsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjIobCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDg0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChkW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGwgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDQpIHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IGRbKChjWyhsICsgMTMwODApID4+IDJdIHwgMCkgKyA2KSB8IDBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1szOTJdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWygoY1sobCArIDEzMDgwKSA+PiAyXSB8IDApICsgNCkgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKChjWyhsICsgMTMwODApID4+IDJdIHwgMCkgKyA3KSB8IDBdIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKChjWyhsICsgMTMwODApID4+IDJdIHwgMCkgKyA2KSB8IDBdIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4NCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhsICsgMTMwODApID4+IDJdIHwgMCkgKyA0KSB8IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjApID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWygoY1sobCArIDEzMDgwKSA+PiAyXSB8IDApICsgNikgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKChjWyhsICsgMTMwODApID4+IDJdIHwgMCkgKyA3KSB8IDBdIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4NCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhsICsgMTMwODApID4+IDJdIHwgMCkgKyA0KSB8IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gMC4wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOChsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwODQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGRbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1sobCArIDEzMDgwKSA+PiAyXSB8IDApICsgNCkgfCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gZFsoKGNbKGwgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDYpIHwgMF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOShsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMihsLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBwID0gKGwgKyAxMzA4MCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1twID4+IDJdID0gKGNbcCA+PiAyXSB8IDApICsgODtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB+figrKGNbY1sobCArIDEzMDgwKSA+PiAyXSA+PiAyXSB8IDApIC8gK2dbMjU4XSkgPj4+IDAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgYiA+Pj4gMFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlKGwsIGssIChiIC0gKGNbKGwgKyAxMzA4OCkgPj4gMl0gfCAwKSkgfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAofn4oKyhjW2NbKGwgKyAxMzA4MCkgPj4gMl0gPj4gMl0gfCAwKSAvICtnWzI1OF0pIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGwgKyAxMzA4OCkgPj4gMl0gfCAwKSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgobyB8IDApID09IDc1Mikge1xuICAgICAgICAgICAgICAgICAgICBjW2wgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICBtID1cbiAgICAgICAgICAgICAgICAgICAgICAgIF8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhsICsgMTMwODgpID4+IDJdIHwgMCkgLSBmKSB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sobCArIDEyKSA+PiAyXSB8IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBuID0gbTtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGo7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuIHwgMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChvIHwgMCkgPT0gNzU4KSB7XG4gICAgICAgICAgICAgICAgICAgIG0gPSBfKGgsIGNbKGwgKyAxMikgPj4gMl0gfCAwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIG4gPSBtO1xuICAgICAgICAgICAgICAgICAgICBpID0gajtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGI3KGIpIHtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwO1xuICAgICAgICAgICAgICAgIGUgPSBiO1xuICAgICAgICAgICAgICAgIGIgPSBjWyhlICsgMTMwODApID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBmID0gY1soZSArIDEzMDUyKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgTDk2Nzogd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZyA9IGY7XG4gICAgICAgICAgICAgICAgICAgIGYgPSAoZyAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChnIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaCA9IDc3MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZSArIDE3MjQgKyAoKGYgKiAyMzYpIHwgMCkpIHwgMF0gfCAwIHwgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhlICsgMTcyNCArICgoZiAqIDIzNikgfCAwKSArIDEpIHwgMF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoYiArIDQpIHwgMF0gfCAwIHwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyAxNzI0ICsgKChmICogMjM2KSB8IDApICsgMikgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhiICsgNikgfCAwXSB8IDAgfCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMOTY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoaCB8IDApID09IDc3Mikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFbKGUgKyAxNzI0ICsgKChmICogMjM2KSB8IDApICsgMykgfCAwXSA9IGFbKGIgKyA3KSB8IDBdIHwgMDtcbiAgICAgICAgICAgICAgICBjZihlLCBmKTtcbiAgICAgICAgICAgICAgICBiSihlLCBmKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBiOChhKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBiID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGYgPSAwO1xuICAgICAgICAgICAgICAgIGIgPSBhO1xuICAgICAgICAgICAgICAgIGEgPSBkWygoY1soYiArIDEzMDgwKSA+PiAyXSB8IDApICsgNCkgfCAwXSB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGNbKGIgKyAxMzA1MikgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGYgPSBlO1xuICAgICAgICAgICAgICAgICAgICBlID0gKGYgLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoYiArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkpIHwgMF0gfCAwIHwgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhiICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSArIDEpIHwgMF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYSB8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaihiLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGI5KGEpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGIgPSAwLFxuICAgICAgICAgICAgICAgICAgICBlID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZiA9IDA7XG4gICAgICAgICAgICAgICAgYiA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGRbKChjWyhiICsgMTMwODApID4+IDJdIHwgMCkgKyA0KSB8IDBdIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gY1soYiArIDEzMDUyKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZiA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGUgPSAoZiAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhiICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSArIDEpIHwgMF0gfCAwIHwgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYSB8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhiICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSkgfCAwXSB8IDAgfCAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhiICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSkgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZihiLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiSihiLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNhKGEpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGIgPSAwLFxuICAgICAgICAgICAgICAgICAgICBlID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZiA9IDA7XG4gICAgICAgICAgICAgICAgYiA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGNbKGIgKyAxMzA1MikgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIGUgPSBkWygoY1soYiArIDEzMDgwKSA+PiAyXSB8IDApICsgNCkgfCAwXSB8IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZiA9IGE7XG4gICAgICAgICAgICAgICAgICAgIGEgPSAoZiAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhiICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSkgfCAwXSB8IDAgfCAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGIgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgMSkgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlIHwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpKGIsIGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY2IoYSwgYikge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSAwO1xuICAgICAgICAgICAgICAgIGQgPSBhO1xuICAgICAgICAgICAgICAgIGEgPSBiO1xuICAgICAgICAgICAgICAgIGNbKGQgKyAxMDg0ICsgKChhICogNDApIHwgMCkgKyA4KSA+PiAyXSA9IDkwO1xuICAgICAgICAgICAgICAgIGNbKGQgKyAxMDg0ICsgKChhICogNDApIHwgMCkgKyAyNCkgPj4gMl0gPSAxMjc7XG4gICAgICAgICAgICAgICAgY1soZCArIDEwODQgKyAoKGEgKiA0MCkgfCAwKSArIDEyKSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgY1soZCArIDEwODQgKyAoKGEgKiA0MCkgfCAwKSArIDIwKSA+PiAyXSA9IDgxOTI7XG4gICAgICAgICAgICAgICAgZ1soZCArIDEwODQgKyAoKGEgKiA0MCkgfCAwKSArIDM2KSA+PiAyXSA9IDAuMDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjYyhiKSB7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBlID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGcgPSAwO1xuICAgICAgICAgICAgICAgIGUgPSBiO1xuICAgICAgICAgICAgICAgIGIgPSBjWyhlICsgMTMwNTIpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBmID0gZFsoKGNbKGUgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDQpIHwgMF0gfCAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGcgPSBiO1xuICAgICAgICAgICAgICAgICAgICBiID0gKGcgLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZyB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZSArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkpIHwgMF0gfCAwIHwgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhlICsgMTcyNCArICgoYiAqIDIzNikgfCAwKSArIDEpIHwgMF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZiB8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjWyhlICsgMTA4NCArICgoZiAqIDQwKSB8IDApICsgMTIpID4+IDJdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVsoZSArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkpIHwgMF0gPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpKGUsIGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNkKGEpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGIgPSAwLFxuICAgICAgICAgICAgICAgICAgICBlID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZiA9IDA7XG4gICAgICAgICAgICAgICAgYiA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGNbKGIgKyAxMzA1MikgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIGUgPSBkWygoY1soYiArIDEzMDgwKSA+PiAyXSB8IDApICsgNCkgfCAwXSB8IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZiA9IGE7XG4gICAgICAgICAgICAgICAgICAgIGEgPSAoZiAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhiICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDEpIHwgMF0gfCAwIHwgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZSB8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhiICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSkgfCAwXSB8IDAgfCAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhiICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSkgfCAwXSB8IDAgfCAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaChiLCBhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNlKGEsIGIsIGQpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGYgPSAwLFxuICAgICAgICAgICAgICAgICAgICBnID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGkgPSAwLFxuICAgICAgICAgICAgICAgICAgICBqID0gMDtcbiAgICAgICAgICAgICAgICBlID0gYTtcbiAgICAgICAgICAgICAgICBhID0gYjtcbiAgICAgICAgICAgICAgICBiID0gZDtcbiAgICAgICAgICAgICAgICBpZiAoKChjWyhlICsgOCkgPj4gMl0gJiAxKSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZiA9IDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZiA9IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoYiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGQgPSBiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGQgfCAwKSA+IChjWyhlICsgMTA2NCkgPj4gMl0gfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGNbKGUgKyAxMDY0KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2coZSwgZCk7XG4gICAgICAgICAgICAgICAgICAgIGcgPSBjWyhlICsgMTA2MCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBoID0gY1thID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGNbKGUgKyAxMDcyKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGogPSBfKGYsIGQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgYVpbZyAmIDE1XShoLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgaiA9IF8oY1soZSArIDEyKSA+PiAyXSB8IDAsIGQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGE7XG4gICAgICAgICAgICAgICAgICAgIGNbaSA+PiAyXSA9IChjW2kgPj4gMl0gfCAwKSArIGo7XG4gICAgICAgICAgICAgICAgICAgIGIgPSAoYiAtIGQpIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY2YoYSwgYikge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaCA9IDA7XG4gICAgICAgICAgICAgICAgZSA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGI7XG4gICAgICAgICAgICAgICAgYiA9XG4gICAgICAgICAgICAgICAgICAgIF8oXG4gICAgICAgICAgICAgICAgICAgICAgICBkWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDMpIHwgMF0gfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwODQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChkWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDEpIHwgMF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgXSB8IDBcbiAgICAgICAgICAgICAgICAgICAgKSB8IDA7XG4gICAgICAgICAgICAgICAgZiA9XG4gICAgICAgICAgICAgICAgICAgIF8oXG4gICAgICAgICAgICAgICAgICAgICAgICBiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwODQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChkWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDEpIHwgMF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0gfCAwXG4gICAgICAgICAgICAgICAgICAgICkgfCAwO1xuICAgICAgICAgICAgICAgIGlmICgoKGNbKGUgKyA4KSA+PiAyXSAmIDEpIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDIzMikgPj4gMl0gPSAzO1xuICAgICAgICAgICAgICAgICAgICBnWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDY4KSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICArKGYgfCAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICArZ1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGUgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgNCkgPj4gMl0gfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg0KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICBdICpcbiAgICAgICAgICAgICAgICAgICAgICAgICtnWyhlICsgMTYpID4+IDJdICpcbiAgICAgICAgICAgICAgICAgICAgICAgIDQuNzY4MzcxNTgyMDMxMjVlLTc7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGNbKGUgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgMjI4KSA+PiAyXSB8IDApID4gNjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1soZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyAyMjgpID4+IDJdIHwgMCkgPj1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA2OFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IDgyNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNbKGUgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgMjMyKSA+PiAyXSA9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICBnWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDY4KSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyhmIHwgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICtnW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGUgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgNCkgPj4gMl0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODQpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgK2dbKGUgKyAxNikgPj4gMl0gKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNzY4MzcxNTgyMDMxMjVlLTc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoID0gODI3O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgaWYgKChoIHwgMCkgPT0gODI3KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoY1soZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyAyMjgpID4+IDJdIHwgMCkgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDIzMikgPj4gMl0gPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ1soZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyA2OCkgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsoZiB8IDApICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArZ1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDQpID4+IDJdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg0KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICtnWyhlICsgMTYpID4+IDJdICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LjUzNjc0MzE2NDA2MjVlLTc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGUgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgMjI4KSA+PiAyXSB8IDApID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjNcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGUgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgMjMyKSA+PiAyXSA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ1soZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyA2OCkgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArKGYgfCAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICtnW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDQpID4+IDJdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODQpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK2dbKGUgKyAxNikgPj4gMl0gKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LjUzNjc0MzE2NDA2MjVlLTc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGUgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgMjMyKSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ1soZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyA2OCkgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArKGYgfCAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICtnW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDQpID4+IDJdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODQpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK2dbKGUgKyAxNikgPj4gMl0gKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LjQ1MDU4MDU5NjkyMzgyOGUtOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDcyKSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICtnWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDY4KSA+PiAyXSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDIyOCkgPj4gMl0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAoZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyA2OCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdbZiA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICtnW2YgPj4gMl0gKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEyNyAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3MjQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhICogMjM2KSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyOCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjZyhhLCBiKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGYgPSAwO1xuICAgICAgICAgICAgICAgIGUgPSBhO1xuICAgICAgICAgICAgICAgIGEgPSBiO1xuICAgICAgICAgICAgICAgIGlmICgoKGNbKGUgKyA4KSA+PiAyXSAmIDEpIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBmID0gYSA8PCAyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGYgPSBhIDw8IDM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGM1KGNbKGUgKyAxMDcyKSA+PiAyXSB8IDAsIDAsIGYgfCAwKTtcbiAgICAgICAgICAgICAgICBmID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSA+PSAoY1soZSArIDEzMDUyKSA+PiAyXSB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGRbKGUgKyAxNzI0ICsgKChmICogMjM2KSB8IDApKSB8IDBdIHwgMCB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJLKGUsIGNbKGUgKyAxMDcyKSA+PiAyXSB8IDAsIGYsIGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGYgPSAoZiArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZiA9IChlICsgMTMwODgpIHwgMDtcbiAgICAgICAgICAgICAgICBjW2YgPj4gMl0gPSAoY1tmID4+IDJdIHwgMCkgKyBhO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoKGIsIGMpIHtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgYyA9IGMgfCAwO1xuICAgICAgICAgICAgICAgIGFbKGIgKyAxNzI0ICsgKChjICogMjM2KSB8IDApKSB8IDBdID0gNDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjaShiLCBkKSB7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGYgPSAwO1xuICAgICAgICAgICAgICAgIGUgPSBiO1xuICAgICAgICAgICAgICAgIGIgPSBkO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKChhW1xuICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhlICsgMTcyNCArICgoYiAqIDIzNikgfCAwKSArIDQpID4+IDJdIHwgMCkgKyAxMTApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgIF0gJlxuICAgICAgICAgICAgICAgICAgICAgICAgNjQpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY1soZSArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkgKyAyMjApID4+IDJdID0gMztcbiAgICAgICAgICAgICAgICAgICAgYVsoZSArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkpIHwgMF0gPSAzO1xuICAgICAgICAgICAgICAgICAgICBkID0gZTtcbiAgICAgICAgICAgICAgICAgICAgZiA9IGI7XG4gICAgICAgICAgICAgICAgICAgIGJJKGQsIGYpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgYkooZSwgYik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhWyhlICsgMTcyNCArICgoYiAqIDIzNikgfCAwKSkgfCAwXSA9IDM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjaihhLCBiKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGYgPSAwLFxuICAgICAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGwgPSAwLFxuICAgICAgICAgICAgICAgICAgICBtID0gMC4wO1xuICAgICAgICAgICAgICAgIGUgPSBhO1xuICAgICAgICAgICAgICAgIGEgPSBiO1xuICAgICAgICAgICAgICAgIGIgPSAoKGNbKGUgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgMjApID4+IDJdIHwgMCkgPCAwKSB8IDA7XG4gICAgICAgICAgICAgICAgZiA9XG4gICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAoZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4NCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZFsoZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyAxKSB8IDBdIHwgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMjApID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICBdIHwgMDtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIChjW1xuICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDQpID4+IDJdIHwgMCkgKyAxMikgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoY1soZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyAyMTIpID4+IDJdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpID0gMzI7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBqID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAoaiAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgODAgKyAoaSA8PCAyKSkgPj4gMlxuICAgICAgICAgICAgICAgICAgICAgICAgXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSA9PSA4MTkyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gODY2O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IDg2NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID4gMTYzODMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gODY2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZiA9IChmIC0gODE5MikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICtnW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDg0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGRbKGUgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgMSkgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9PSAwLjBcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDg0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzI0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGEgKiAyMzYpIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gLWkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gKDE3MDQgKyAoKChpID4+IDUpICYgMjU1KSA8PCAzKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbayA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkW2pdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhqICsgMSkgfCAwXSA8PCA4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoaiArIDIpIHwgMF0gPDwgMTYpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhqICsgMykgfCAwXSA8PCAyNCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1soayArIDQpID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbKGogKyA0KSB8IDBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhqICsgNSkgfCAwXSA8PCA4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoaiArIDYpIHwgMF0gPDwgMTYpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhqICsgNykgfCAwXSA8PCAyNCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAraFtrID4+IDNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gKDM3NTIgKyAoKGkgPj4gMTMpIDw8IDMpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4NCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChkWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDEpIHwgMF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW2sgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFtqXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoaiArIDEpIHwgMF0gPDwgOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGogKyAyKSB8IDBdIDw8IDE2KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoaiArIDMpIHwgMF0gPDwgMjQpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGsgKyA0KSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWyhqICsgNCkgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoaiArIDUpIHwgMF0gPDwgOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGogKyA2KSB8IDBdIDw8IDE2KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoaiArIDcpIHwgMF0gPDwgMjQpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK2hbayA+PiAzXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDEyKSA+PiAyXSA9IH5+KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArZ1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDg0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChkW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyAxKSB8IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyhjWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDgpID4+IDJdIHwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDEyKSA+PiAyXSA9IH5+KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyA4KSA+PiAyXSB8IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICtnW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwODQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGRbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDEpIHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNikgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgaWYgKChsIHwgMCkgPT0gODY2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNbKGUgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgMTIpID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNbKGUgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgOCkgPj4gMl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG0gPVxuICAgICAgICAgICAgICAgICAgICAoKCsoXG4gICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1soZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyA0KSA+PiAyXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0gfCAwXG4gICAgICAgICAgICAgICAgICAgICkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgKyhjWyhlICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDEyKSA+PiAyXSB8IDApKSAvXG4gICAgICAgICAgICAgICAgICAgICAgICAoKyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGUgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgNCkgPj4gMl0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsoY1soZSArIDQpID4+IDJdIHwgMCkpKSAqXG4gICAgICAgICAgICAgICAgICAgIDQwOTYuMDtcbiAgICAgICAgICAgICAgICBpZiAoKGIgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG0gPSAtMC4wIC0gbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY1soZSArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyAyMCkgPj4gMl0gPSB+fm07XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY2soYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgYiA9IDA7XG4gICAgICAgICAgICAgICAgYiA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChhIHwgMCkgPj0gMTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNiKGIsIGEpO1xuICAgICAgICAgICAgICAgICAgICBjWyhiICsgMTA4NCArICgoYSAqIDQwKSB8IDApICsgNCkgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgY1soYiArIDEwNTYpID4+IDJdO1xuICAgICAgICAgICAgICAgICAgICBjWyhiICsgMTA4NCArICgoYSAqIDQwKSB8IDApICsgMTYpID4+IDJdID0gLTE7XG4gICAgICAgICAgICAgICAgICAgIGNbKGIgKyAxMDg0ICsgKChhICogNDApIHwgMCkgKyAzMikgPj4gMl0gPSAyO1xuICAgICAgICAgICAgICAgICAgICBjWyhiICsgMTA4NCArICgoYSAqIDQwKSB8IDApKSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGEgPSAoYSArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY20oYik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY2woYSwgYikge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBmID0gMDtcbiAgICAgICAgICAgICAgICBlID0gYTtcbiAgICAgICAgICAgICAgICBhID0gYjtcbiAgICAgICAgICAgICAgICBjbShlKTtcbiAgICAgICAgICAgICAgICBMMTEyMzogd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgKyhjW2NbKGUgKyAxMzA4MCkgPj4gMl0gPj4gMl0gfCAwKSAvICtnWzI1OF0gPj1cbiAgICAgICAgICAgICAgICAgICAgICAgICsoYSB8IDApXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkWygoY1soZSArIDEzMDgwKSA+PiAyXSB8IDApICsgNSkgfCAwXSB8IDAgfCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDg0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGRbKChjWyhlICsgMTMwODApID4+IDJdIHwgMCkgKyA0KSB8IDBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gZFsoKGNbKGUgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDYpIHwgMF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiKGUsIGRbKChjWyhlICsgMTMwODApID4+IDJdIHwgMCkgKyA0KSB8IDBdIHwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDg0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGRbKChjWyhlICsgMTMwODApID4+IDJdIHwgMCkgKyA0KSB8IDBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPSBkWygoY1soZSArIDEzMDgwKSA+PiAyXSB8IDApICsgNikgfCAwXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDExOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4NCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChkWygoY1soZSArIDEzMDgwKSA+PiAyXSB8IDApICsgNCkgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IGRbKChjWyhlICsgMTMwODApID4+IDJdIHwgMCkgKyA2KSB8IDBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDg0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGRbKChjWyhlICsgMTMwODApID4+IDJdIHwgMCkgKyA0KSB8IDBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNikgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gMC4wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSA5MDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDExMjM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1soZSArIDEzMDU2KSA+PiAyXSAmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGUgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDQpIHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDg0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChkW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGUgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDQpIHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IGRbKChjWyhlICsgMTMwODApID4+IDJdIHwgMCkgKyA2KSB8IDBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwODQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGRbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1soZSArIDEzMDgwKSA+PiAyXSB8IDApICsgNCkgfCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gZFsoKGNbKGUgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDYpIHwgMF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwODQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZFsoKGNbKGUgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDQpIHwgMF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoKGNbKGUgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDYpIHwgMF0gfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZFsoKGNbKGUgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDcpIHwgMF0gfCAwKSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4NCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChkWygoY1soZSArIDEzMDgwKSA+PiAyXSB8IDApICsgNCkgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IDAuMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDg0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGRbKChjWyhlICsgMTMwODApID4+IDJdIHwgMCkgKyA0KSB8IDBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gZFsoKGNbKGUgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDYpIHwgMF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMzkyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWygoY1soZSArIDEzMDgwKSA+PiAyXSB8IDApICsgNCkgfCAwXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChkWygoY1soZSArIDEzMDgwKSA+PiAyXSB8IDApICsgNykgfCAwXSB8IDApIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZFsoKGNbKGUgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDYpIHwgMF0gfCAwKSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4NCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChkWygoY1soZSArIDEzMDgwKSA+PiAyXSB8IDApICsgNCkgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IGRbKChjWyhlICsgMTMwODApID4+IDJdIHwgMCkgKyA2KSB8IDBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwODQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZFsoKGNbKGUgKyAxMzA4MCkgPj4gMl0gfCAwKSArIDQpIHwgMF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPSBkWygoY1soZSArIDEzMDgwKSA+PiAyXSB8IDApICsgNikgfCAwXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYiA9IChlICsgMTMwODApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1tiID4+IDJdID0gKGNbYiA+PiAyXSB8IDApICsgODtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgPT0gOTAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNbKGUgKyAxMzA4OCkgPj4gMl0gPSB+fihcbiAgICAgICAgICAgICAgICAgICAgICAgICsoY1tjWyhlICsgMTMwODApID4+IDJdID4+IDJdIHwgMCkgLyArZ1syNThdXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChjWyhlICsgMTMwODApID4+IDJdIHwgMCkgIT0gKGNbKGUgKyAxMzA3NikgPj4gMl0gfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICBmID0gKGUgKyAxMzA4MCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBjW2YgPj4gMl0gPSAoY1tmID4+IDJdIHwgMCkgLSA4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjWyhlICsgMTMwODgpID4+IDJdID0gYTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjbShiKSB7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBjID0gMDtcbiAgICAgICAgICAgICAgICBjID0gYjtcbiAgICAgICAgICAgICAgICBiID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGIgfCAwKSA+PSA0OCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYVsoYyArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkpIHwgMF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICBiID0gKGIgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNuKGIsIGUsIGYpIHtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGYgPSBmIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgaCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGkgPSAwLFxuICAgICAgICAgICAgICAgICAgICBqID0gMCxcbiAgICAgICAgICAgICAgICAgICAgayA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGwgPSAwLFxuICAgICAgICAgICAgICAgICAgICBtID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG8gPSAwLFxuICAgICAgICAgICAgICAgICAgICBwID0gMCxcbiAgICAgICAgICAgICAgICAgICAgcSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHIgPSAwLFxuICAgICAgICAgICAgICAgICAgICBzID0gMCxcbiAgICAgICAgICAgICAgICAgICAgdCA9IDA7XG4gICAgICAgICAgICAgICAgaCA9IGI7XG4gICAgICAgICAgICAgICAgYiA9IGU7XG4gICAgICAgICAgICAgICAgZSA9IGY7XG4gICAgICAgICAgICAgICAgaWYgKCgoY1soaCArIDEzMDU2KSA+PiAyXSAmICgxIDw8IGRbKGIgKyA0KSB8IDBdKSkgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGYgPVxuICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU0MCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwODQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChkWyhiICsgNCkgfCAwXSB8IDApICogNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhiICsgNikgfCAwXSA8PCAyKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBmO1xuICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGggKyA1NDApID4+IDJdIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhiICsgNikgfCAwXSA8PCAyKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaiB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgIChjW2kgPj4gMl0gfCAwKSAhPSAxO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGFbKChjWyhpICsgNCkgPj4gMl0gfCAwKSArIDExMikgfCAwXSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGYgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMDU2ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbKChjWyhpICsgNCkgPj4gMl0gfCAwKSArIDExMikgfCAwXSA8PCAyKSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjWyhoICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSArIDgpID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkW2ZdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZiArIDEpIHwgMF0gPDwgOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhmICsgMikgfCAwXSA8PCAxNikgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhmICsgMykgfCAwXSA8PCAyNCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmID0gKDEwNTYgKyAoKGFbKGIgKyA2KSB8IDBdICYgMTI3KSA8PCAyKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1soaCArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyA4KSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFtmXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGYgKyAxKSB8IDBdIDw8IDgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZiArIDIpIHwgMF0gPDwgMTYpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZiArIDMpIHwgMF0gPDwgMjQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNbKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgNCkgPj4gMl0gPSBjWyhpICsgNCkgPj4gMl07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC0xICE9IChjWygxNjQwICsgKGRbKGIgKyA0KSB8IDBdIDw8IDIpKSA+PiAyXSB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwODQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChkWyhiICsgNCkgfCAwXSB8IDApICogNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBqID0gY1soMTY0MCArIChkWyhiICsgNCkgfCAwXSA8PCAyKSkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT0gKGNbKGYgKyA0ICsgKGogPDwgMikpID4+IDJdIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gY1soKGNbZiA+PiAyXSB8IDApICsgKChqICogMjgpIHwgMCkpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gKGsgfCAwKSAhPSAwID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbZiA+PiAyXSB8IDApICsgKChqICogMjgpIHwgMCkgKyAxMikgPj4gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soKGNbZiA+PiAyXSB8IDApICsgKChqICogMjgpIHwgMCkgKyA4KSA+PiAyXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tmID4+IDJdIHwgMCkgKyAoKGogKiAyOCkgfCAwKSArIDQpID4+IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW2YgPj4gMl0gfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaiAqIDI4KSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChrIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IHI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbZiA+PiAyXSB8IDApICsgKChqICogMjgpIHwgMCkgKyAxNikgPj4gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbZiA+PiAyXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChqICogMjgpIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNikgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IChrIHwgMCkgIT0gMCA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tmID4+IDJdIHwgMCkgKyAoKGogKiAyOCkgfCAwKSArIDIwKSA+PiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tmID4+IDJdIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGogKiAyOCkgfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKGsgfCAwKSAhPSAwID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgNCArIChqIDw8IDIpKSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tmID4+IDJdIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGogKiAyOCkgfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBjWyhmICsgNCArIChqIDw8IDIpKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwODQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZFsoYiArIDQpIHwgMF0gfCAwKSAqIDQwKSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBjWyhoICsgMTA1MikgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4NCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZFsoYiArIDQpIHwgMF0gfCAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4NCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChkWyhiICsgNCkgfCAwXSB8IDApICogNDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1soaCArIDI4KSA+PiAyXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDg0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZFsoYiArIDQpIHwgMF0gfCAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgoYVsoKGNbKGkgKyA0KSA+PiAyXSB8IDApICsgMTEyKSB8IDBdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEwNTYgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVsoKGNbKGkgKyA0KSA+PiAyXSB8IDApICsgMTEyKSB8IDBdIDw8IDIpKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgOCkgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbal0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhqICsgMSkgfCAwXSA8PCA4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGogKyAyKSB8IDBdIDw8IDE2KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGogKyAzKSB8IDBdIDw8IDI0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGogPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMDU2ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKGRbKGIgKyA2KSB8IDBdIHwgMCkgKyAoY1sxNjYyXSB8IDApKSAmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjcpIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjWyhoICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSArIDgpID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkW2pdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoaiArIDEpIHwgMF0gPDwgOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhqICsgMikgfCAwXSA8PCAxNikgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhqICsgMykgfCAwXSA8PCAyNCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY1soaCArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyA4KSA+PiAyXSA9IH5+KFxuICAgICAgICAgICAgICAgICAgICAgICAgKCsoY1soaCArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyA4KSA+PiAyXSB8IDApICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArZ1syNjBdKSAvXG4gICAgICAgICAgICAgICAgICAgICAgICA0NDAuMFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjbyhoLCBlLCBpLCBkWyhiICsgNykgfCAwXSB8IDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhWyhoICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSkgfCAwXSA9IDE7XG4gICAgICAgICAgICAgICAgYVsoaCArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyAxKSB8IDBdID0gYVsoYiArIDQpIHwgMF0gfCAwO1xuICAgICAgICAgICAgICAgIGFbKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgMikgfCAwXSA9IGFbKGIgKyA2KSB8IDBdIHwgMDtcbiAgICAgICAgICAgICAgICBhWyhoICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSArIDMpIHwgMF0gPVxuICAgICAgICAgICAgICAgICAgICBjcChcbiAgICAgICAgICAgICAgICAgICAgICAgIGFbKGIgKyA3KSB8IDBdIHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICtnWygxNTc2ICsgKGRbKGIgKyA0KSB8IDBdIDw8IDIpKSA+PiAyXVxuICAgICAgICAgICAgICAgICAgICApIHwgMDtcbiAgICAgICAgICAgICAgICBjWyhoICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSArIDE2KSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgY1soaCArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyAyMCkgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgIGNbKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgNDQpID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICBjWyhoICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSArIDQ4KSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgNCkgPj4gMl0gfCAwKSArIDk2KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjWyhoICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSArIDM2KSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgNCkgPj4gMl0gfCAwKSArIDkyKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjWyhoICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSArIDQwKSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgY1soaCArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyA1MikgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhoICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSArIDQpID4+IDJdIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgY1soaCArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyA1NikgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgIGNbKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgMjEyKSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgNCkgPj4gMl0gfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA0KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjWyhoICsgMTcyNCArICgoZSAqIDIzNikgfCAwKSArIDIwOCkgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgIGNbKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgMjE2KSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChpIHwgMCkgPj0gMzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNbKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgODAgKyAoaSA8PCAyKSkgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICBpID0gKGkgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAoaCArIDEwODQgKyAoKChkWyhiICsgNCkgfCAwXSB8IDApICogNDApIHwgMCkgKyAxNikgPj4gMlxuICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNbKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgMjI4KSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4NCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGRbKGIgKyA0KSB8IDBdIHwgMCkgKiA0MCkgfCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNbKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgMjI4KSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBhW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1soaCArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyA0KSA+PiAyXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTExKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgIF0gfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaihoLCBlKTtcbiAgICAgICAgICAgICAgICBjZihoLCBlKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICgoYVtcbiAgICAgICAgICAgICAgICAgICAgICAgICgoY1soaCArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyA0KSA+PiAyXSB8IDApICsgMTEwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICBdICZcbiAgICAgICAgICAgICAgICAgICAgICAgIDY0KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNbKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgMjIwKSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbKGggKyAxNzI0ICsgKChlICogMjM2KSB8IDApICsgMjQpID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY1soaCArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyAyMjQpID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgYiA9IGg7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBlO1xuICAgICAgICAgICAgICAgICAgICBiSShiLCBpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGJKKGgsIGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY1soaCArIDE3MjQgKyAoKGUgKiAyMzYpIHwgMCkgKyAzMikgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICBiSihoLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNvKGEsIGIsIGQsIGUpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSAwLFxuICAgICAgICAgICAgICAgICAgICBnID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGkgPSAwLFxuICAgICAgICAgICAgICAgICAgICBqID0gMDtcbiAgICAgICAgICAgICAgICBmID0gYTtcbiAgICAgICAgICAgICAgICBhID0gYjtcbiAgICAgICAgICAgICAgICBiID0gZDtcbiAgICAgICAgICAgICAgICBkID0gZTtcbiAgICAgICAgICAgICAgICBlID0gY1tiID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBnID0gY1soYiArIDQpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBpZiAoKGUgfCAwKSA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNbKGYgKyAxNzI0ICsgKChhICogMjM2KSB8IDApICsgNCkgPj4gMl0gPSBnO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGggPSBjWyhmICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDgpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAgICAgICBMMTIzMjogd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChpIHwgMCkgPj0gKGUgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjWyhnICsgMTYpID4+IDJdIHwgMCkgPD0gKGQgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1soZyArIDIwKSA+PiAyXSB8IDApIDwgKGQgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjWyhnICsgMjQpID4+IDJdIHwgMCkgPiAoaCB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNbKGcgKyAyOCkgPj4gMl0gfCAwKSA+PSAoaCB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSA5Nzc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwxMjMyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgIGcgPSAoZyArIDExNikgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpID0gKGkgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoaiB8IDApID09IDk3Nykge1xuICAgICAgICAgICAgICAgICAgICBjWyhmICsgMTcyNCArICgoYSAqIDIzNikgfCAwKSArIDQpID4+IDJdID0gZztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBqID0gMjE0NzQ4MzY0NztcbiAgICAgICAgICAgICAgICBkID0gY1soYiArIDQpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBnID0gZDtcbiAgICAgICAgICAgICAgICBiID0gZDtcbiAgICAgICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGkgfCAwKSA+PSAoZSB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkID0gKChjWyhnICsgMzIpID4+IDJdIHwgMCkgLSBoKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZCB8IDApIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZCA9IC1kIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGQgfCAwKSA8IChqIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGogPSBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgYiA9IGc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZyA9IChnICsgMTE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGkgPSAoaSArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY1soZiArIDE3MjQgKyAoKGEgKiAyMzYpIHwgMCkgKyA0KSA+PiAyXSA9IGI7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY3AoYSwgYikge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gK2I7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSAwLFxuICAgICAgICAgICAgICAgICAgICBlID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZiA9IDAuMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBqID0gMCxcbiAgICAgICAgICAgICAgICAgICAgayA9IDA7XG4gICAgICAgICAgICAgICAgZCA9IGk7XG4gICAgICAgICAgICAgICAgZSA9IGE7XG4gICAgICAgICAgICAgICAgZiA9IGI7XG4gICAgICAgICAgICAgICAgaWYgKGYgPD0gMS4wKSB7XG4gICAgICAgICAgICAgICAgICAgIGcgPSB+figrKChlICYgMjU1KSB8IDApICogZik7XG4gICAgICAgICAgICAgICAgICAgIGggPSBnO1xuICAgICAgICAgICAgICAgICAgICBpID0gZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGggfCAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgICAgICAgICAgKChlICYgMjU1KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5+KCsoKDEyNyAtIChlICYgMjU1KSkgfCAwKSAqIChmIC0gMS4wKSkgJiAyNTUpKSAmXG4gICAgICAgICAgICAgICAgICAgICAgICAyNTU7XG4gICAgICAgICAgICAgICAgICAgIGogPSBlICYgMjU1O1xuICAgICAgICAgICAgICAgICAgICBlID0gYSAmIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgYUcoXG4gICAgICAgICAgICAgICAgICAgICAgICA0Nzg0LFxuICAgICAgICAgICAgICAgICAgICAgICAgKChrID0gaSksXG4gICAgICAgICAgICAgICAgICAgICAgICAoaSA9IChpICsgMTYpIHwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1trID4+IDJdID0gaiksXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1soayArIDgpID4+IDJdID0gZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBrKSB8IDBcbiAgICAgICAgICAgICAgICAgICAgKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBrO1xuICAgICAgICAgICAgICAgICAgICBnID0gYTtcbiAgICAgICAgICAgICAgICAgICAgaCA9IGc7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaCB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY3EoZCwgZSwgZiwgZykge1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgZiA9IGYgfCAwO1xuICAgICAgICAgICAgICAgIGcgPSBnIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgaCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGogPSAwLFxuICAgICAgICAgICAgICAgICAgICBrID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG0gPSAwLFxuICAgICAgICAgICAgICAgICAgICBuID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHAgPSAwLFxuICAgICAgICAgICAgICAgICAgICBxID0gMCxcbiAgICAgICAgICAgICAgICAgICAgciA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHMgPSAwLFxuICAgICAgICAgICAgICAgICAgICB0ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgdSA9IDA7XG4gICAgICAgICAgICAgICAgaCA9IGk7XG4gICAgICAgICAgICAgICAgaSA9IChpICsgNDApIHwgMDtcbiAgICAgICAgICAgICAgICBqID0gaCB8IDA7XG4gICAgICAgICAgICAgICAgayA9IChoICsgOCkgfCAwO1xuICAgICAgICAgICAgICAgIGwgPSAoaCArIDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgbSA9IChoICsgMjQpIHwgMDtcbiAgICAgICAgICAgICAgICBuID0gKGggKyAzMikgfCAwO1xuICAgICAgICAgICAgICAgIG8gPSBkO1xuICAgICAgICAgICAgICAgIGQgPSBlO1xuICAgICAgICAgICAgICAgIGUgPSBmO1xuICAgICAgICAgICAgICAgIGYgPSBnO1xuICAgICAgICAgICAgICAgIGNbKGQgKyAxMzA5MikgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgIGNbKGQgKyAxMzA5NikgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgIGNbKGQgKyAxMzA4NCkgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChjUChvLCBuIHwgMCwgMSwgNCkgfCAwKSA9PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNQKG8sIGosIDQsIDEpIHwgMCkgIT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY1tqID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbaiA+PiAyXSAmIDI1NSkgPDwgMjQpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbaiA+PiAyXSAmIDY1MjgwKSA8PCA4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW2ogPj4gMl0gJiAxNjcxMTY4MCkgPj4gOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tqID4+IDJdID4+IDI0KSAmIDI1NSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjNChuIHwgMCwgNDc3NiwgNCkgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1tqID4+IDJdIHwgMCkgPCA2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNQKGcsIHAsIDIsIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IG87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjUChwLCBnLCAyLCAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1AoZywgcCwgMiwgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiW2sgPj4gMV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoYltrID4+IDFdICYgMjU1KSA8PCA4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChiW2sgPj4gMV0gPj4gOCkgJiAyNTUpKSAmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NTUzNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYltsID4+IDFdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGJbbCA+PiAxXSAmIDI1NSkgPDwgOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYltsID4+IDFdID4+IDgpICYgMjU1KSkgJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjU1MzU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJbbSA+PiAxXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChiW20gPj4gMV0gJiAyNTUpIDw8IDgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGJbbSA+PiAxXSA+PiA4KSAmIDI1NSkpICZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1NTM1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGJbbSA+PiAxXSB8IDApIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSgoKGJbbSA+PiAxXSB8IDApIC8gMjU2KSB8IDApIHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlttID4+IDFdICYgMjU1XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gYlttID4+IDFdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNbaiA+PiAyXSB8IDApID4gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1EobywgKChjW2ogPj4gMl0gfCAwKSAtIDYpIHwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiW2sgPj4gMV0gfCAwKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiW2sgPj4gMV0gfCAwKSA+IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGQgKyAxMzA4NCkgPj4gMl0gPSBiaSgxMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbY1soZCArIDEzMDg0KSA+PiAyXSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhkICsgMTMwODQpID4+IDJdIHwgMCkgKyA1KSB8IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGQgKyAxMzA4NCkgPj4gMl0gfCAwKSArIDgpID4+IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gKGQgKyAxMzA5MikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbcCA+PiAyXSA9IChjW3AgPj4gMl0gfCAwKSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGJbayA+PiAxXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHAgfCAwKSA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAociB8IDApID49XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiW2wgPj4gMV0gfCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gMTAyMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNyKG8sIGQsIDApIHwgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IChyICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzIHwgMCkgPT0gMTAyMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3MoZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHAgfCAwKSA9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAociB8IDApID49XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiW2wgPj4gMV0gfCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gMTAzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNyKG8sIGQsIDEpIHwgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IChyICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzIHwgMCkgPT0gMTAzMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3MoZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHAgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNyKG8sIGQsIDApIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3MoZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gY3QoZCwgcSwgZSwgZikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1IHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1IHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1IHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgIHQgPSAwO1xuICAgICAgICAgICAgICAgIHUgPSB0O1xuICAgICAgICAgICAgICAgIGkgPSBoO1xuICAgICAgICAgICAgICAgIHJldHVybiB1IHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNyKGEsIGIsIGQpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGYgPSAwLFxuICAgICAgICAgICAgICAgICAgICBnID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGogPSAwLFxuICAgICAgICAgICAgICAgICAgICBrID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG0gPSAwLFxuICAgICAgICAgICAgICAgICAgICBuID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbyA9IDA7XG4gICAgICAgICAgICAgICAgZSA9IGk7XG4gICAgICAgICAgICAgICAgaSA9IChpICsgMTYpIHwgMDtcbiAgICAgICAgICAgICAgICBmID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgZyA9IChlICsgOCkgfCAwO1xuICAgICAgICAgICAgICAgIGggPSBhO1xuICAgICAgICAgICAgICAgIGEgPSBiO1xuICAgICAgICAgICAgICAgIGIgPSBjWyhhICsgMTMwODQpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZCB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gMTA0NztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjWyhiICsgOCkgPj4gMl0gfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gY1soYiArIDgpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNbKGEgKyAxMzA5NikgPj4gMl0gPSBjW2IgPj4gMl07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBqID0gMTA0NztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgIGlmICgoaiB8IDApID09IDEwNDcpIHtcbiAgICAgICAgICAgICAgICAgICAgY1soYSArIDEzMDk2KSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChjUChoLCBnIHwgMCwgMSwgNCkgfCAwKSA9PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNQKGgsIGYsIDQsIDEpIHwgMCkgIT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY1tmID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbZiA+PiAyXSAmIDI1NSkgPDwgMjQpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbZiA+PiAyXSAmIDY1MjgwKSA8PCA4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW2YgPj4gMl0gJiAxNjcxMTY4MCkgPj4gOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tmID4+IDJdID4+IDI0KSAmIDI1NSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGM0KGcgfCAwLCA2MjcyLCA0KSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gLTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGwgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gY3YoaCwgYSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZCB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IDEwNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG0gfCAwKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gMTA1NztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBjWyhiICsgOCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZCB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAoY1tkID4+IDJdIHwgMCkgPCAoY1ttID4+IDJdIHwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gY1soYiArIDgpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sobSArIDgpID4+IDJdID0gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhiICsgOCkgPj4gMl0gPSBtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAoYSArIDEzMDkyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tvID4+IDJdID0gKGNbbyA+PiAyXSB8IDApICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaiB8IDApID09IDEwNTUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gLTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGwgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoaiB8IDApID09IDEwNTcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbCB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICBrID0gLTE7XG4gICAgICAgICAgICAgICAgbCA9IGs7XG4gICAgICAgICAgICAgICAgaSA9IGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGwgfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY3MoYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgYiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGQgPSAwO1xuICAgICAgICAgICAgICAgIGIgPSBhO1xuICAgICAgICAgICAgICAgIGEgPSBjWyhiICsgMTMwODQpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gYTtcbiAgICAgICAgICAgICAgICBpZiAoKGEgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChkIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYSA9IGNbKGQgKyA4KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGMwKGQpO1xuICAgICAgICAgICAgICAgICAgICBkID0gYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY1soYiArIDEzMDg0KSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY3QoYiwgZSwgZiwgZykge1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgZiA9IGYgfCAwO1xuICAgICAgICAgICAgICAgIGcgPSBnIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgaCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGogPSAwLFxuICAgICAgICAgICAgICAgICAgICBrID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG0gPSAwLFxuICAgICAgICAgICAgICAgICAgICBuID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHAgPSAwLFxuICAgICAgICAgICAgICAgICAgICBxID0gMCxcbiAgICAgICAgICAgICAgICAgICAgciA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHMgPSAwLFxuICAgICAgICAgICAgICAgICAgICB0ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgdSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHYgPSAwLFxuICAgICAgICAgICAgICAgICAgICB3ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgeCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHkgPSAwLFxuICAgICAgICAgICAgICAgICAgICB6ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgQSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIEIgPSAwO1xuICAgICAgICAgICAgICAgIGggPSBpO1xuICAgICAgICAgICAgICAgIGkgPSAoaSArIDE5MikgfCAwO1xuICAgICAgICAgICAgICAgIGogPSBoIHwgMDtcbiAgICAgICAgICAgICAgICBrID0gKGggKyA2NCkgfCAwO1xuICAgICAgICAgICAgICAgIGwgPSAoaCArIDEyOCkgfCAwO1xuICAgICAgICAgICAgICAgIG0gPSBiO1xuICAgICAgICAgICAgICAgIGIgPSBlO1xuICAgICAgICAgICAgICAgIGUgPSBmO1xuICAgICAgICAgICAgICAgIGYgPSBnO1xuICAgICAgICAgICAgICAgIGcgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZyB8IDApID49IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjWyhqICsgKGcgPDwgMikpID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY1soayArIChnIDw8IDIpKSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbKGwgKyAoZyA8PCAyKSkgPj4gMl0gPSBjWyhtICsgMTA1NikgPj4gMl07XG4gICAgICAgICAgICAgICAgICAgIGcgPSAoZyArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbiA9IDVlNTtcbiAgICAgICAgICAgICAgICBjdShtLCBuLCBiKTtcbiAgICAgICAgICAgICAgICBvID0gYmkoKChjWyhtICsgMTMwOTIpID4+IDJdIHwgMCkgKyAxKSA8PCAzKSB8IDA7XG4gICAgICAgICAgICAgICAgcCA9IG87XG4gICAgICAgICAgICAgICAgcSA9IG87XG4gICAgICAgICAgICAgICAgbyA9IGNbKG0gKyAxMzA4NCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIHIgPSAwO1xuICAgICAgICAgICAgICAgIHMgPSAwO1xuICAgICAgICAgICAgICAgIHQgPSAwO1xuICAgICAgICAgICAgICAgIHUgPSAwO1xuICAgICAgICAgICAgICAgIHYgPSAwO1xuICAgICAgICAgICAgICAgIGcgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZyB8IDApID49IChjWyhtICsgMTMwOTIpID4+IDJdIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHcgPSAwO1xuICAgICAgICAgICAgICAgICAgICB4ID0gZFsobyArIDUpIHwgMF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHggfCAwKSA9PSA5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKG0gKyAxMzA1NikgPj4gMl0gJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgKGRbKG8gKyA0KSB8IDBdIHwgMCkpKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTQwICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChkWyhvICsgNikgfCAwXSB8IDApIDw8IDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBkWyhvICsgNikgfCAwXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhWyhvICsgNikgfCAwXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1soayArICgoZFsobyArIDQpIHwgMF0gfCAwKSA8PCAyKSkgPj4gMl0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeSB8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoayArICgoZFsobyArIDQpIHwgMF0gfCAwKSA8PCAyKSkgPj4gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBkWyhvICsgNikgfCAwXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwgKyAoKGRbKG8gKyA0KSB8IDBdIHwgMCkgPDwgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChkWyhvICsgNCkgfCAwXSB8IDApIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeSB8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHogPSAxMDk2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwgKyAoKGRbKG8gKyA0KSB8IDBdIHwgMCkgPDwgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHogPSAxMDk2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh6IHwgMCkgPT0gMTA5Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHggfCAwKSA9PSAxNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhtICsgMTMwNTYpID4+IDJdICZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IChkWyhvICsgNCkgfCAwXSB8IDApKSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobSArIDI4ICsgKChkWyhvICsgNikgfCAwXSB8IDApIDw8IDIpKSA+PiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gZFsobyArIDYpIHwgMF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbKG8gKyA2KSB8IDBdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGogKyAoKGRbKG8gKyA0KSB8IDBdIHwgMCkgPDwgMikpID4+IDJdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5IHwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soaiArICgoZFsobyArIDQpIHwgMF0gfCAwKSA8PCAyKSkgPj4gMl0gPSB5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHggfCAwKSA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh2IHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKG0gKyAxMzA1NikgPj4gMl0gJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgKGRbKG8gKyA0KSB8IDBdIHwgMCkpKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG0gK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTQwICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChkWyhvICsgNCkgfCAwXSB8IDApIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRbKG8gKyA2KSB8IDBdIHwgMCkgPDwgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU0MCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoayArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZFsobyArIDQpIHwgMF0gfCAwKSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChkWyhvICsgNikgfCAwXSB8IDApIDw8IDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1sobCArICgoZFsobyArIDQpIHwgMF0gfCAwKSA8PCAyKSkgPj4gMl0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG0gK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGogK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRbKG8gKyA0KSB8IDBdIHwgMCkgPDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZFsobyArIDQpIHwgMF0gfCAwKSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZFsobyArIDQpIHwgMF0gfCAwKSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChkWyhvICsgNCkgfCAwXSB8IDApIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgIHggPSAoKGNbbyA+PiAyXSB8IDApIC0gdCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBBID0geDtcbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh4IHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodiB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeiA9IDExMjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCID0gXyhjWyhtICsgMTA3NikgPj4gMl0gfCAwLCBBKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IChzICsgKF8oY1sobSArIDEwODApID4+IDJdIHwgMCwgQSkgfCAwKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKHMgJiAtNjU1MzYpIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCID0gKEIgKyAoKHMgPj4gMTYpICYgNjU1MzUpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzICYgNjU1MzU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSAodSArIEIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeiA9IDExMjU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHogfCAwKSA9PSAxMTI1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodiB8IDApID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGRbKG8gKyA1KSB8IDBdIHwgMCB8IDApID09IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRbKG8gKyA0KSB8IDBdIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRbKG8gKyA3KSB8IDBdIHwgMCkgPDwgOCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRbKG8gKyA2KSB8IDBdIHwgMCkgPDwgMTYpKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1KG0sIG4sIGIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgodyB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgeCA9IG8gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1tBID4+IDJdID0gY1t4ID4+IDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1soQSArIDQpID4+IDJdID0gY1soeCArIDQpID4+IDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1twID4+IDJdID0gdTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAocCArIDgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAociArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ID0gY1tvID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgbyA9IGNbKG8gKyA4KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGcgPSAoZyArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY1twID4+IDJdID0gdTtcbiAgICAgICAgICAgICAgICBhWyhwICsgNSkgfCAwXSA9IDk5O1xuICAgICAgICAgICAgICAgIHIgPSAociArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICBjcyhtKTtcbiAgICAgICAgICAgICAgICBjW2UgPj4gMl0gPSByO1xuICAgICAgICAgICAgICAgIGNbZiA+PiAyXSA9IHU7XG4gICAgICAgICAgICAgICAgaSA9IGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEgfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY3UoYSwgYiwgZCkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgZCA9IGQgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBlID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZiA9IDAuMDtcbiAgICAgICAgICAgICAgICBlID0gYTtcbiAgICAgICAgICAgICAgICBmID0gKCsoYiB8IDApICogKyhjWyhlICsgNCkgPj4gMl0gfCAwKSAqIDAuMDY1NTM2KSAvICsoZCB8IDApO1xuICAgICAgICAgICAgICAgIGNbKGUgKyAxMDgwKSA+PiAyXSA9IH5+ZiAmIDY1NTM1O1xuICAgICAgICAgICAgICAgIGNbKGUgKyAxMDc2KSA+PiAyXSA9IH5+ZiA+PiAxNjtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjdihiLCBlKSB7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGUgPSBlIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGcgPSAwLFxuICAgICAgICAgICAgICAgICAgICBoID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGsgPSAwLFxuICAgICAgICAgICAgICAgICAgICBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG4gPSAwLFxuICAgICAgICAgICAgICAgICAgICBvID0gMCxcbiAgICAgICAgICAgICAgICAgICAgcCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHEgPSAwLFxuICAgICAgICAgICAgICAgICAgICByID0gMCxcbiAgICAgICAgICAgICAgICAgICAgcyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHQgPSAwLFxuICAgICAgICAgICAgICAgICAgICB1ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgdiA9IDA7XG4gICAgICAgICAgICAgICAgZiA9IGk7XG4gICAgICAgICAgICAgICAgaSA9IChpICsgNDApIHwgMDtcbiAgICAgICAgICAgICAgICBnID0gZiB8IDA7XG4gICAgICAgICAgICAgICAgaCA9IChmICsgOCkgfCAwO1xuICAgICAgICAgICAgICAgIGogPSAoZiArIDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgayA9IChmICsgMjQpIHwgMDtcbiAgICAgICAgICAgICAgICBsID0gKGYgKyAzMikgfCAwO1xuICAgICAgICAgICAgICAgIG0gPSBiO1xuICAgICAgICAgICAgICAgIGIgPSBlO1xuICAgICAgICAgICAgICAgIEwxNDQyOiB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gY3cobSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBuID0gKGIgKyAxMzA5NikgfCAwO1xuICAgICAgICAgICAgICAgICAgICBjW24gPj4gMl0gPSAoY1tuID4+IDJdIHwgMCkgKyBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGNQKG0sIGcsIDEsIDEpIHwgMCkgIT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbyA9IDExMzg7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGRbZ10gfCAwKSA9PSAyNDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gMTE0MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChkW2ddIHwgMCkgPT0gMjQ3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAxMTQxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChkW2ddIHwgMCkgPT0gMjU1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjUChlLCBoLCAxLCAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBjdyhtKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZFtoXSB8IDApID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZFtoXSB8IDApID49IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAxMTQ2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IGFbaF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN4KGUsIG4sIHEsIHIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IDExNDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG8gfCAwKSA9PSAxMTQ2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBkW2hdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgociB8IDApID09IDQ3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IDExNDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDE0NDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChyIHwgMCkgPT0gODEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gMTE0ODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMTQ0MjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNRKG0sIHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtqXSA9IGFbZ10gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChhW2pdICYgMTI4KSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbNjYzMl0gPSBkW2pdICYgMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhWzY2MjRdID0gKGRbal0gPj4gNCkgJiA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IG07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjUChyLCBqLCAxLCAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW2pdID0gZFtqXSAmIDEyNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRbNjYyNF0gfCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gMTE1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMTQ0MjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAxMTg4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwxNDQyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IDExODY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDE0NDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAxMTU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwxNDQyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IDExNTc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDE0NDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjUChtLCBrLCAxLCAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtrXSA9IGRba10gJiAxMjc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMMTQ2NjogZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRbal0gfCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk4OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVs2NjE2XSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDY2MDAgKyAoZFs2NjMyXSB8IDApKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IGFba10gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhWzY2MTZdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMTQ2NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDY1ODQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWzY2MzJdIHwgMCkpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2NjAwICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFs2NjMyXSB8IDApKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgociB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IDExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyIHwgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzI2MzlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IDExNzk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwxNDQyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2NDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEyMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSAxMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTIzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IDE0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZFtrXSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVs2NjE2XSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDY1ODQgKyAoZFs2NjMyXSB8IDApKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IGFba10gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhWzY2MTZdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNjYwMCArIChkWzY2MzJdIHwgMCkpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gYVtrXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVs2NjE2XSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDY1ODQgKyAoZFs2NjMyXSB8IDApKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IGFba10gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzIHwgMCkgIT0gMjU1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAxMTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMTQ0MjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKG8gfCAwKSA9PSAxMTQxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBjdyhtKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjUShtLCBwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKG8gfCAwKSA9PSAxMTg0KSB7XG4gICAgICAgICAgICAgICAgICAgIHQgPSBiaSgxMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICBjW3QgPj4gMl0gPSBjWyhiICsgMTMwOTYpID4+IDJdO1xuICAgICAgICAgICAgICAgICAgICBhWyh0ICsgNSkgfCAwXSA9IHMgJiAyNTU7XG4gICAgICAgICAgICAgICAgICAgIGFbKHQgKyA0KSB8IDBdID0gYVs2NjMyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGFbKHQgKyA2KSB8IDBdID0gYVtrXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGFbKHQgKyA3KSB8IDBdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY1sodCArIDgpID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgIHYgPSB1O1xuICAgICAgICAgICAgICAgICAgICBpID0gZjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYgfCAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG8gfCAwKSA9PSAxMTU2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNQKG0sIGssIDEsIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgYVtrXSA9IGRba10gJiAxMjc7XG4gICAgICAgICAgICAgICAgICAgIHQgPSBiaSgxMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICBjW3QgPj4gMl0gPSBjWyhiICsgMTMwOTYpID4+IDJdO1xuICAgICAgICAgICAgICAgICAgICBhWyh0ICsgNSkgfCAwXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGFbKHQgKyA0KSB8IDBdID0gYVs2NjMyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGFbKHQgKyA2KSB8IDBdID0gYVtqXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGFbKHQgKyA3KSB8IDBdID0gYVtrXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbKHQgKyA4KSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHUgPSB0O1xuICAgICAgICAgICAgICAgICAgICB2ID0gdTtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGY7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2IHwgMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChvIHwgMCkgPT0gMTE3OSkge1xuICAgICAgICAgICAgICAgICAgICB0ID0gYmkoMTIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1t0ID4+IDJdID0gY1soYiArIDEzMDk2KSA+PiAyXTtcbiAgICAgICAgICAgICAgICAgICAgYVsodCArIDUpIHwgMF0gPSAxMTtcbiAgICAgICAgICAgICAgICAgICAgYVsodCArIDQpIHwgMF0gPSBhWzY2MzJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgYVsodCArIDYpIHwgMF0gPSAyO1xuICAgICAgICAgICAgICAgICAgICBhWyh0ICsgNykgfCAwXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbKHQgKyA4KSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHUgPSB0O1xuICAgICAgICAgICAgICAgICAgICB2ID0gdTtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGY7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2IHwgMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChvIHwgMCkgPT0gMTEzOCkge1xuICAgICAgICAgICAgICAgICAgICB1ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdiA9IHU7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBmO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdiB8IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgobyB8IDApID09IDExODgpIHtcbiAgICAgICAgICAgICAgICAgICAgY1AobSwgaywgMSwgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBhW2tdID0gZFtrXSAmIDEyNztcbiAgICAgICAgICAgICAgICAgICAgdCA9IGJpKDEyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbdCA+PiAyXSA9IGNbKGIgKyAxMzA5NikgPj4gMl07XG4gICAgICAgICAgICAgICAgICAgIGFbKHQgKyA1KSB8IDBdID0gODtcbiAgICAgICAgICAgICAgICAgICAgYVsodCArIDQpIHwgMF0gPSBhWzY2MzJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgYVsodCArIDYpIHwgMF0gPSBhW2pdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgYVsodCArIDcpIHwgMF0gPSBhW2tdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1sodCArIDgpID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgIHYgPSB1O1xuICAgICAgICAgICAgICAgICAgICBpID0gZjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYgfCAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG8gfCAwKSA9PSAxMTg2KSB7XG4gICAgICAgICAgICAgICAgICAgIGFbal0gPSBkW2pdICYgMTI3O1xuICAgICAgICAgICAgICAgICAgICB0ID0gYmkoMTIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1t0ID4+IDJdID0gY1soYiArIDEzMDk2KSA+PiAyXTtcbiAgICAgICAgICAgICAgICAgICAgYVsodCArIDUpIHwgMF0gPSA5O1xuICAgICAgICAgICAgICAgICAgICBhWyh0ICsgNCkgfCAwXSA9IGFbNjYzMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBhWyh0ICsgNikgfCAwXSA9IGFbal0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBhWyh0ICsgNykgfCAwXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbKHQgKyA4KSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHUgPSB0O1xuICAgICAgICAgICAgICAgICAgICB2ID0gdTtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGY7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2IHwgMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChvIHwgMCkgPT0gMTE0Nykge1xuICAgICAgICAgICAgICAgICAgICB1ID0gLTE7XG4gICAgICAgICAgICAgICAgICAgIHYgPSB1O1xuICAgICAgICAgICAgICAgICAgICBpID0gZjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYgfCAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG8gfCAwKSA9PSAxMTQ4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNQKG0sIGosIDEsIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1AobSwgaywgMSwgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBjUChtLCBsLCAxLCAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIHQgPSBiaSgxMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICBjW3QgPj4gMl0gPSBjWyhiICsgMTMwOTYpID4+IDJdO1xuICAgICAgICAgICAgICAgICAgICBhWyh0ICsgNSkgfCAwXSA9IDEwO1xuICAgICAgICAgICAgICAgICAgICBhWyh0ICsgNCkgfCAwXSA9IGFbbF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBhWyh0ICsgNikgfCAwXSA9IGFbal0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBhWyh0ICsgNykgfCAwXSA9IGFba10gfCAwO1xuICAgICAgICAgICAgICAgICAgICBjWyh0ICsgOCkgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICB1ID0gdDtcbiAgICAgICAgICAgICAgICAgICAgdiA9IHU7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBmO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdiB8IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgobyB8IDApID09IDExNTUpIHtcbiAgICAgICAgICAgICAgICAgICAgY1AobSwgaywgMSwgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBhW2tdID0gZFtrXSAmIDEyNztcbiAgICAgICAgICAgICAgICAgICAgdCA9IGJpKDEyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbdCA+PiAyXSA9IGNbKGIgKyAxMzA5NikgPj4gMl07XG4gICAgICAgICAgICAgICAgICAgIGFbKHQgKyA1KSB8IDBdID0gMjtcbiAgICAgICAgICAgICAgICAgICAgYVsodCArIDQpIHwgMF0gPSBhWzY2MzJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgYVsodCArIDYpIHwgMF0gPSBhW2pdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgYVsodCArIDcpIHwgMF0gPSBhW2tdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1sodCArIDgpID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgIHYgPSB1O1xuICAgICAgICAgICAgICAgICAgICBpID0gZjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYgfCAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG8gfCAwKSA9PSAxMTU3KSB7XG4gICAgICAgICAgICAgICAgICAgIGNQKG0sIGssIDEsIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgYVtrXSA9IGRba10gJiAxMjc7XG4gICAgICAgICAgICAgICAgICAgIHQgPSBiaSgxMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICBjW3QgPj4gMl0gPSBjWyhiICsgMTMwOTYpID4+IDJdO1xuICAgICAgICAgICAgICAgICAgICBhWyh0ICsgNSkgfCAwXSA9IDM7XG4gICAgICAgICAgICAgICAgICAgIGFbKHQgKyA0KSB8IDBdID0gYVs2NjMyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGFbKHQgKyA2KSB8IDBdID0gYVtqXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGFbKHQgKyA3KSB8IDBdID0gYVtrXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbKHQgKyA4KSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHUgPSB0O1xuICAgICAgICAgICAgICAgICAgICB2ID0gdTtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGY7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2IHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjdyhiKSB7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBjID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgICAgIGMgPSBpO1xuICAgICAgICAgICAgICAgIGkgPSAoaSArIDgpIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gYyB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGI7XG4gICAgICAgICAgICAgICAgYiA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY1AoZSwgZCwgMSwgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBiID0gKGIgKyAoYVtkXSAmIDEyNykpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgoYVtkXSAmIDEyOCkgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBiID0gYiA8PCA3O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpID0gYztcbiAgICAgICAgICAgICAgICByZXR1cm4gYiB8IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGN4KGIsIGUsIGYsIGcpIHtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGYgPSBmIHwgMDtcbiAgICAgICAgICAgICAgICBnID0gZyB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGsgPSAwO1xuICAgICAgICAgICAgICAgIGggPSBlO1xuICAgICAgICAgICAgICAgIGUgPSBmO1xuICAgICAgICAgICAgICAgIGYgPSBnO1xuICAgICAgICAgICAgICAgIGcgPSBiaSgoaCArIDEpIHwgMCkgfCAwO1xuICAgICAgICAgICAgICAgIGlmICgoaCB8IDApICE9IChjUChiLCBnLCAxLCBoKSB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgIGMwKGcpO1xuICAgICAgICAgICAgICAgICAgICBpID0gLTE7XG4gICAgICAgICAgICAgICAgICAgIGogPSBpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaiB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFbKGcgKyBoKSB8IDBdID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBiID0gaDtcbiAgICAgICAgICAgICAgICAgICAgaCA9IChiIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGIgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGRbKGcgKyBoKSB8IDBdIHwgMCB8IDApIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFbKGcgKyBoKSB8IDBdID0gNDY7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaCA9IGUgJiAyNTU7XG4gICAgICAgICAgICAgICAgaWYgKChoIHwgMCkgPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBrID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChoIHwgMCkgPT0gMikge1xuICAgICAgICAgICAgICAgICAgICBrID0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjMChnKTtcbiAgICAgICAgICAgICAgICAgICAgZyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoZyB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChjWyhmICsgMTMxMDQgKyAoayA8PCAyKSkgPj4gMl0gfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjMChjWyhmICsgMTMxMDQgKyAoayA8PCAyKSkgPj4gMl0gfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjWyhmICsgMTMxMDQgKyAoayA8PCAyKSkgPj4gMl0gPSBnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAgICAgICBqID0gaTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaiB8IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGN5KGIsIGUsIGYpIHtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGYgPSBmIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGsgPSAwO1xuICAgICAgICAgICAgICAgIGcgPSBiO1xuICAgICAgICAgICAgICAgIGIgPSBlO1xuICAgICAgICAgICAgICAgIGUgPSBmO1xuICAgICAgICAgICAgICAgIGYgPSAoZyArIDE3MjQgKyAoKGIgKiAyMzYpIHwgMCkpIHwgMDtcbiAgICAgICAgICAgICAgICBpZiAoKGNbKChjWyhmICsgNCkgPj4gMl0gfCAwKSArIDEyKSA+PiAyXSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaCA9IGNbKGYgKyAxNikgPj4gMl0gPj4gMTI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIChjW2UgPj4gMl0gfCAwKSA+PVxuICAgICAgICAgICAgICAgICAgICAgICAgKCgoY1soKGNbKGYgKyA0KSA+PiAyXSB8IDApICsgOCkgPj4gMl0gPj4gMTIpIC0gaCkgfCAwKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFbZiB8IDBdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbZSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbKChjWyhmICsgNCkgPj4gMl0gfCAwKSArIDgpID4+IDJdID4+IDEyKSAtIGg7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gKGYgKyAxNikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1tpID4+IDJdID0gKGNbaSA+PiAyXSB8IDApICsgKGNbZSA+PiAyXSA8PCAxMik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAoKGNbKChjWyhmICsgNCkgPj4gMl0gfCAwKSArIDg4KSA+PiAyXSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaCA8PCAxKSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgayA9IGo7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaCA9IGFbKChjWyhmICsgNCkgPj4gMl0gfCAwKSArIDExMCkgfCAwXSB8IDA7XG4gICAgICAgICAgICAgICAgaWYgKChjWyhmICsgMjEyKSA+PiAyXSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgTDE1NzU6IGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGggJiA0KSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGggJiA2NCkgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGRbZiB8IDBdIHwgMCB8IDApID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZFtmIHwgMF0gfCAwIHwgMCkgIT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwxNTc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoaCAmIDgpIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gY3ooZywgZiwgY1tlID4+IDJdIHwgMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGsgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBjQShnLCBmLCBjW2UgPj4gMl0gfCAwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gayB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgaiA9IGNCKGcsIGIsIGUpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgayA9IGo7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrIHwgMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBMMTU2MTogZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoaCAmIDQpIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoaCAmIDY0KSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZFtmIHwgMF0gfCAwIHwgMCkgPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChkW2YgfCAwXSB8IDAgfCAwKSAhPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDE1NjE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChoICYgOCkgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBjQyhnLCBmLCBjW2UgPj4gMl0gfCAwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gayB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IGNEKGcsIGYsIGNbZSA+PiAyXSB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICBqID0gY0UoZywgYiwgZSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBrID0gajtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGsgfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGN6KGEsIGQsIGUpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgZCA9IGQgfCAwO1xuICAgICAgICAgICAgICAgIGUgPSBlIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGcgPSAwLFxuICAgICAgICAgICAgICAgICAgICBoID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGogPSAwLFxuICAgICAgICAgICAgICAgICAgICBrID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG0gPSAwLFxuICAgICAgICAgICAgICAgICAgICBuID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHAgPSAwLFxuICAgICAgICAgICAgICAgICAgICBxID0gMCxcbiAgICAgICAgICAgICAgICAgICAgciA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHMgPSAwLFxuICAgICAgICAgICAgICAgICAgICB0ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgdSA9IDA7XG4gICAgICAgICAgICAgICAgZiA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGQ7XG4gICAgICAgICAgICAgICAgZCA9IGU7XG4gICAgICAgICAgICAgICAgZSA9IGNbKGEgKyAxNikgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIGcgPSBjWyhhICsgMjApID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBoID0gY1soKGNbKGEgKyA0KSA+PiAyXSB8IDApICsgNCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIGkgPSBjW2NbKGEgKyA0KSA+PiAyXSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgaiA9IGNbKGYgKyAxMDY4KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgayA9IGNbKChjWyhhICsgNCkgPj4gMl0gfCAwKSArIDg4KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgbCA9IGNbKGEgKyAyMTYpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBtID0gaCA8PCAxO1xuICAgICAgICAgICAgICAgIG4gPSBpIDw8IDE7XG4gICAgICAgICAgICAgICAgbyA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChkIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcCA9IChlIHwgMCkgPD0gKGkgfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcSA9ICgoKCgoaSAtIGUpIHwgMCkgLyAoZyB8IDApKSB8IDApICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHEgfCAwKSA+IChkIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgocSB8IDApID4gKGwgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcSA9IGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBvID0gMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAobCAtIHEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkID0gKGQgLSBxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByID0gcTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAociAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgociB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBiWyhrICsgKChlID4+IDEyKSA8PCAxKSkgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGJbKGsgKyAoKChlID4+IDEyKSArIDEpIDw8IDEpKSA+PiAxXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICByID0gajtcbiAgICAgICAgICAgICAgICAgICAgICAgIGogPSAociArIDIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJbciA+PiAxXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgocyA8PCAxNikgPj4gMTYpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodCA8PCAxNikgPj4gMTYpIC0gKChzIDw8IDE2KSA+PiAxNikpIHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgJiA0MDk1XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPj4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMikpICZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NTUzNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSAoZSArIGcpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKG8gfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gY1soYSArIDIxMikgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGNHKGYsIGEsIDApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZCB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZyB8IDApID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGg7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBxID0gKCgoKCh1IC0gZSkgfCAwKSAvIChnIHwgMCkpIHwgMCkgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocSB8IDApID4gKGQgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKChxIHwgMCkgPiAobCB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxID0gbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAxO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbCA9IChsIC0gcSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGQgPSAoZCAtIHEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBxO1xuICAgICAgICAgICAgICAgICAgICAgICAgcSA9IChwIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChwIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGJbKGsgKyAoKGUgPj4gMTIpIDw8IDEpKSA+PiAxXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gYlsoayArICgoKGUgPj4gMTIpICsgMSkgPDwgMSkpID4+IDFdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgaiA9IChwICsgMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgYltwID4+IDFdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChzIDw8IDE2KSA+PiAxNikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh0IDw8IDE2KSA+PiAxNikgLSAoKHMgPDwgMTYpID4+IDE2KSkgfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSAmIDQwOTVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA+Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyKSkgJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1NTM1O1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IChlICsgZykgfCAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgobyB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBjWyhhICsgMjEyKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBnID0gY0coZiwgYSwgKChnIHwgMCkgPCAwKSB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8gPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZSB8IDApID49IChoIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSAobSAtIGUpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoZyAqIC0xKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGUgfCAwKSA8PSAoaSB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IChuIC0gZSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoZyAqIC0xKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY1soYSArIDIxNikgPj4gMl0gPSBsO1xuICAgICAgICAgICAgICAgIGNbKGEgKyAyMCkgPj4gMl0gPSBnO1xuICAgICAgICAgICAgICAgIGNbKGEgKyAxNikgPj4gMl0gPSBlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjWyhmICsgMTA2OCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY0EoYSwgZCwgZSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gZCB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGsgPSAwLFxuICAgICAgICAgICAgICAgICAgICBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG4gPSAwLFxuICAgICAgICAgICAgICAgICAgICBvID0gMCxcbiAgICAgICAgICAgICAgICAgICAgcCA9IDA7XG4gICAgICAgICAgICAgICAgZiA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGQ7XG4gICAgICAgICAgICAgICAgZCA9IGU7XG4gICAgICAgICAgICAgICAgZSA9IGNbKGEgKyAxNikgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIGcgPSBjWyhhICsgMjApID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBoID0gY1soKGNbKGEgKyA0KSA+PiAyXSB8IDApICsgNCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIGkgPSAoaCAtIChjW2NbKGEgKyA0KSA+PiAyXSA+PiAyXSB8IDApKSB8IDA7XG4gICAgICAgICAgICAgICAgaiA9IGNbKGYgKyAxMDY4KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgayA9IGNbKChjWyhhICsgNCkgPj4gMl0gfCAwKSArIDg4KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgbCA9IGNbKGEgKyAyMTYpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBtID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGQgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUgfCAwKSA+PSAoaCB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gKGUgLSBpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbiA9ICgoKCgoaCAtIGUpIHwgMCkgLyAoZyB8IDApKSB8IDApICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSA+IChkIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApID4gKGwgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBtID0gMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAobCAtIG4pIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkID0gKGQgLSBuKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvID0gbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAobyAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobyB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBiWyhrICsgKChlID4+IDEyKSA8PCAxKSkgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICBqID0gKHAgKyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBiW3AgPj4gMV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKG8gPDwgMTYpID4+IDE2KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoXyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYlsoayArICgoKGUgPj4gMTIpICsgMSkgPDwgMSkpID4+IDFdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChvIDw8IDE2KSA+PiAxNikpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSAmIDQwOTVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA+Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyKSkgJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1NTM1O1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IChlICsgZykgfCAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgobSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBjWyhhICsgMjEyKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBnID0gY0coZiwgYSwgMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY1soYSArIDIxNikgPj4gMl0gPSBsO1xuICAgICAgICAgICAgICAgIGNbKGEgKyAyMCkgPj4gMl0gPSBnO1xuICAgICAgICAgICAgICAgIGNbKGEgKyAxNikgPj4gMl0gPSBlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjWyhmICsgMTA2OCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY0IoZCwgZSwgZikge1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgZiA9IGYgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBnID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGkgPSAwLFxuICAgICAgICAgICAgICAgICAgICBqID0gMCxcbiAgICAgICAgICAgICAgICAgICAgayA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGwgPSAwLFxuICAgICAgICAgICAgICAgICAgICBtID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG8gPSAwLFxuICAgICAgICAgICAgICAgICAgICBwID0gMCxcbiAgICAgICAgICAgICAgICAgICAgcSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHIgPSAwLFxuICAgICAgICAgICAgICAgICAgICBzID0gMCxcbiAgICAgICAgICAgICAgICAgICAgdCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHUgPSAwLFxuICAgICAgICAgICAgICAgICAgICB2ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgdyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHggPSAwLFxuICAgICAgICAgICAgICAgICAgICB5ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgeiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIEEgPSAwLFxuICAgICAgICAgICAgICAgICAgICBCID0gMDtcbiAgICAgICAgICAgICAgICBnID0gZDtcbiAgICAgICAgICAgICAgICBkID0gZjtcbiAgICAgICAgICAgICAgICBmID0gKGcgKyAxNzI0ICsgKChlICogMjM2KSB8IDApKSB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGNbKGcgKyAxMDY4KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgaCA9IGNbKChjWyhmICsgNCkgPj4gMl0gfCAwKSArIDg4KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgaSA9IGNbKChjWyhmICsgNCkgPj4gMl0gfCAwKSArIDgpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBqID0gY1soZiArIDE2KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgayA9IGNbKGYgKyAyMCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIGwgPSBjW2QgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIG0gPSBjWyhmICsgMjE2KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgaWYgKChrIHwgMCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGsgPSAtayB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgbiA9IGw7XG4gICAgICAgICAgICAgICAgICAgIGwgPSAobiAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbyA9IDEzMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuID0gbTtcbiAgICAgICAgICAgICAgICAgICAgbSA9IChuIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKG4gfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtID0gY1soZiArIDIxMikgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgayA9IGNHKGcsIGYsIDApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuID0gYlsoaCArICgoaiA+PiAxMikgPDwgMSkpID4+IDFdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGUgPSAocCArIDIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgYltwID4+IDFdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICgoKG4gPDwgMTYpID4+IDE2KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGJbKGggKyAoKChqID4+IDEyKSArIDEpIDw8IDEpKSA+PiAxXSB8IDApIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobiA8PCAxNikgPj4gMTYpKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICYgNDA5NVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA+Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIpKSAmXG4gICAgICAgICAgICAgICAgICAgICAgICA2NTUzNTtcbiAgICAgICAgICAgICAgICAgICAgaiA9IChqICsgaykgfCAwO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKChqIHwgMCkgPCAoaSB8IDApKTtcbiAgICAgICAgICAgICAgICBpZiAoKG8gfCAwKSA9PSAxMzIyKSB7XG4gICAgICAgICAgICAgICAgICAgIHEgPSBtO1xuICAgICAgICAgICAgICAgICAgICByID0gZjtcbiAgICAgICAgICAgICAgICAgICAgcyA9IChyICsgMjE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbcyA+PiAyXSA9IHE7XG4gICAgICAgICAgICAgICAgICAgIHQgPSBrO1xuICAgICAgICAgICAgICAgICAgICB1ID0gZjtcbiAgICAgICAgICAgICAgICAgICAgdiA9ICh1ICsgMjApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1t2ID4+IDJdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgdyA9IGo7XG4gICAgICAgICAgICAgICAgICAgIHggPSBmO1xuICAgICAgICAgICAgICAgICAgICB5ID0gKHggKyAxNikgfCAwO1xuICAgICAgICAgICAgICAgICAgICBjW3kgPj4gMl0gPSB3O1xuICAgICAgICAgICAgICAgICAgICB6ID0gZztcbiAgICAgICAgICAgICAgICAgICAgQSA9ICh6ICsgMTA2OCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBCID0gY1tBID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEIgfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKGogfCAwKSA9PSAoaSB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBlO1xuICAgICAgICAgICAgICAgICAgICBlID0gKGkgKyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGJbaSA+PiAxXSA9IGJbKGggKyAoKGogPj4gMTIpIDw8IDEpKSA+PiAxXSB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFbZiB8IDBdID0gMDtcbiAgICAgICAgICAgICAgICBoID0gZDtcbiAgICAgICAgICAgICAgICBjW2ggPj4gMl0gPSAoY1toID4+IDJdIHwgMCkgLSAobCArIDEpO1xuICAgICAgICAgICAgICAgIHEgPSBtO1xuICAgICAgICAgICAgICAgIHIgPSBmO1xuICAgICAgICAgICAgICAgIHMgPSAociArIDIxNikgfCAwO1xuICAgICAgICAgICAgICAgIGNbcyA+PiAyXSA9IHE7XG4gICAgICAgICAgICAgICAgdCA9IGs7XG4gICAgICAgICAgICAgICAgdSA9IGY7XG4gICAgICAgICAgICAgICAgdiA9ICh1ICsgMjApIHwgMDtcbiAgICAgICAgICAgICAgICBjW3YgPj4gMl0gPSB0O1xuICAgICAgICAgICAgICAgIHcgPSBqO1xuICAgICAgICAgICAgICAgIHggPSBmO1xuICAgICAgICAgICAgICAgIHkgPSAoeCArIDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgY1t5ID4+IDJdID0gdztcbiAgICAgICAgICAgICAgICB6ID0gZztcbiAgICAgICAgICAgICAgICBBID0gKHogKyAxMDY4KSB8IDA7XG4gICAgICAgICAgICAgICAgQiA9IGNbQSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEIgfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY0MoYSwgZCwgZSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gZCB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGsgPSAwLFxuICAgICAgICAgICAgICAgICAgICBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG4gPSAwLFxuICAgICAgICAgICAgICAgICAgICBvID0gMCxcbiAgICAgICAgICAgICAgICAgICAgcCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHEgPSAwLFxuICAgICAgICAgICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgICAgICBmID0gYTtcbiAgICAgICAgICAgICAgICBhID0gZDtcbiAgICAgICAgICAgICAgICBkID0gZTtcbiAgICAgICAgICAgICAgICBlID0gY1soYSArIDE2KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgZyA9IGNbKGEgKyAyMCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIGggPSBjWygoY1soYSArIDQpID4+IDJdIHwgMCkgKyA0KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgaSA9IGNbY1soYSArIDQpID4+IDJdID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBqID0gY1soZiArIDEwNjgpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBrID0gY1soKGNbKGEgKyA0KSA+PiAyXSB8IDApICsgODgpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBsID0gaCA8PCAxO1xuICAgICAgICAgICAgICAgIG0gPSBpIDw8IDE7XG4gICAgICAgICAgICAgICAgaWYgKChlIHwgMCkgPD0gKGkgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICBuID0gKCgoKChpIC0gZSkgfCAwKSAvIChnIHwgMCkpIHwgMCkgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApID4gKGQgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSAoZCAtIG4pIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbyA9IG47XG4gICAgICAgICAgICAgICAgICAgICAgICBuID0gKG8gLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG8gfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBwID0gYlsoayArICgoZSA+PiAxMikgPDwgMSkpID4+IDFdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBiWyhrICsgKCgoZSA+PiAxMikgKyAxKSA8PCAxKSkgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICBqID0gKG8gKyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBiW28gPj4gMV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHAgPDwgMTYpID4+IDE2KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoXyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHEgPDwgMTYpID4+IDE2KSAtICgocCA8PCAxNikgPj4gMTYpKSB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlICYgNDA5NVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID4+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIpKSAmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNjU1MzU7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gKGUgKyBnKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChkIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKChnIHwgMCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByID0gaDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG4gPSAoKCgoKHIgLSBlKSB8IDApIC8gKGcgfCAwKSkgfCAwKSArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgPiAoZCB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuID0gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZCA9IChkIC0gbikgfCAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvID0gbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAobyAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobyB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBiWyhrICsgKChlID4+IDEyKSA8PCAxKSkgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcSA9IGJbKGsgKyAoKChlID4+IDEyKSArIDEpIDw8IDEpKSA+PiAxXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBvID0gajtcbiAgICAgICAgICAgICAgICAgICAgICAgIGogPSAobyArIDIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJbbyA+PiAxXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgocCA8PCAxNikgPj4gMTYpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgocSA8PCAxNikgPj4gMTYpIC0gKChwIDw8IDE2KSA+PiAxNikpIHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgJiA0MDk1XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPj4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMikpICZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NTUzNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSAoZSArIGcpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUgfCAwKSA+PSAoaCB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gKGwgLSBlKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBnID0gKGcgKiAtMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChlIHwgMCkgPD0gKGkgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSAobSAtIGUpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gKGcgKiAtMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNbKGEgKyAyMCkgPj4gMl0gPSBnO1xuICAgICAgICAgICAgICAgIGNbKGEgKyAxNikgPj4gMl0gPSBlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjWyhmICsgMTA2OCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY0QoYSwgZCwgZSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gZCB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGsgPSAwLFxuICAgICAgICAgICAgICAgICAgICBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG4gPSAwO1xuICAgICAgICAgICAgICAgIGYgPSBhO1xuICAgICAgICAgICAgICAgIGEgPSBkO1xuICAgICAgICAgICAgICAgIGQgPSBlO1xuICAgICAgICAgICAgICAgIGUgPSBjWyhhICsgMTYpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBnID0gY1soYSArIDIwKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgaCA9IGNbKChjWyhhICsgNCkgPj4gMl0gfCAwKSArIDQpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBpID0gKGggLSAoY1tjWyhhICsgNCkgPj4gMl0gPj4gMl0gfCAwKSkgfCAwO1xuICAgICAgICAgICAgICAgIGogPSBjWyhmICsgMTA2OCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIGsgPSBjWygoY1soYSArIDQpID4+IDJdIHwgMCkgKyA4OCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZCB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZSB8IDApID49IChoIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSAoZSAtIGkpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsID0gKCgoKChoIC0gZSkgfCAwKSAvIChnIHwgMCkpIHwgMCkgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgobCB8IDApID4gKGQgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSAoZCAtIGwpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gKG0gLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG0gfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBtID0gYlsoayArICgoZSA+PiAxMikgPDwgMSkpID4+IDFdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgaiA9IChuICsgMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgYltuID4+IDFdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChtIDw8IDE2KSA+PiAxNikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGJbKGsgKyAoKChlID4+IDEyKSArIDEpIDw8IDEpKSA+PiAxXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobSA8PCAxNikgPj4gMTYpKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgJiA0MDk1XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPj4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMikpICZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NTUzNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSAoZSArIGcpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjWyhhICsgMTYpID4+IDJdID0gZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY1soZiArIDEwNjgpID4+IDJdIHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNFKGQsIGUsIGYpIHtcbiAgICAgICAgICAgICAgICBkID0gZCB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGYgPSBmIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGsgPSAwLFxuICAgICAgICAgICAgICAgICAgICBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG4gPSAwLFxuICAgICAgICAgICAgICAgICAgICBvID0gMCxcbiAgICAgICAgICAgICAgICAgICAgcCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHEgPSAwLFxuICAgICAgICAgICAgICAgICAgICByID0gMCxcbiAgICAgICAgICAgICAgICAgICAgcyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHQgPSAwLFxuICAgICAgICAgICAgICAgICAgICB1ID0gMDtcbiAgICAgICAgICAgICAgICBnID0gZDtcbiAgICAgICAgICAgICAgICBkID0gZjtcbiAgICAgICAgICAgICAgICBmID0gKGcgKyAxNzI0ICsgKChlICogMjM2KSB8IDApKSB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGNbKGcgKyAxMDY4KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgaCA9IGNbKChjWyhmICsgNCkgPj4gMl0gfCAwKSArIDg4KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgaSA9IGNbKGYgKyAxNikgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIGogPSBjWyhmICsgMjApID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBrID0gY1soKGNbKGYgKyA0KSA+PiAyXSB8IDApICsgOCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIGwgPSBjW2QgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIGlmICgoaiB8IDApIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBqID0gLWogfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtID0gKCgoKChrIC0gaSkgfCAwKSAvIChqIHwgMCkpIHwgMCkgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgaWYgKChtIHwgMCkgPiAobCB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgIG0gPSBsO1xuICAgICAgICAgICAgICAgICAgICBsID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsID0gKGwgLSBtKSB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIG4gPSBtO1xuICAgICAgICAgICAgICAgICAgICBtID0gKG4gLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgobiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG4gPSBiWyhoICsgKChpID4+IDEyKSA8PCAxKSkgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBvID0gZTtcbiAgICAgICAgICAgICAgICAgICAgZSA9IChvICsgMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICBiW28gPj4gMV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgKCgobiA8PCAxNikgPj4gMTYpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYlsoaCArICgoKGkgPj4gMTIpICsgMSkgPDwgMSkpID4+IDFdIHwgMCkgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChuIDw8IDE2KSA+PiAxNikpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgJiA0MDk1XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID4+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMikpICZcbiAgICAgICAgICAgICAgICAgICAgICAgIDY1NTM1O1xuICAgICAgICAgICAgICAgICAgICBpID0gKGkgKyBqKSB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoaSB8IDApIDwgKGsgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICBwID0gaTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IGY7XG4gICAgICAgICAgICAgICAgICAgIHIgPSAocSArIDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbciA+PiAyXSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHMgPSBnO1xuICAgICAgICAgICAgICAgICAgICB0ID0gKHMgKyAxMDY4KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIHUgPSBjW3QgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdSB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoaSB8IDApID09IChrIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGUgPSAoayArIDIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgYltrID4+IDFdID0gYlsoaCArICgoaSA+PiAxMikgPDwgMSkpID4+IDFdIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYVtmIHwgMF0gPSAwO1xuICAgICAgICAgICAgICAgIGggPSBkO1xuICAgICAgICAgICAgICAgIGNbaCA+PiAyXSA9IChjW2ggPj4gMl0gfCAwKSAtIChsICsgMSk7XG4gICAgICAgICAgICAgICAgcCA9IGk7XG4gICAgICAgICAgICAgICAgcSA9IGY7XG4gICAgICAgICAgICAgICAgciA9IChxICsgMTYpIHwgMDtcbiAgICAgICAgICAgICAgICBjW3IgPj4gMl0gPSBwO1xuICAgICAgICAgICAgICAgIHMgPSBnO1xuICAgICAgICAgICAgICAgIHQgPSAocyArIDEwNjgpIHwgMDtcbiAgICAgICAgICAgICAgICB1ID0gY1t0ID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdSB8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjRihlLCBmKSB7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGYgPSBmIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBpID0gMC4wLFxuICAgICAgICAgICAgICAgICAgICBqID0gMCxcbiAgICAgICAgICAgICAgICAgICAgayA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGwgPSAwLFxuICAgICAgICAgICAgICAgICAgICBtID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG8gPSAwLFxuICAgICAgICAgICAgICAgICAgICBwID0gMCxcbiAgICAgICAgICAgICAgICAgICAgcSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHIgPSAwLFxuICAgICAgICAgICAgICAgICAgICBzID0gMCxcbiAgICAgICAgICAgICAgICAgICAgdCA9IDAuMCxcbiAgICAgICAgICAgICAgICAgICAgdSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHYgPSAwLFxuICAgICAgICAgICAgICAgICAgICB3ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgeCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHkgPSAwLFxuICAgICAgICAgICAgICAgICAgICB6ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgQSA9IDAuMCxcbiAgICAgICAgICAgICAgICAgICAgQiA9IDAuMCxcbiAgICAgICAgICAgICAgICAgICAgQyA9IDAuMCxcbiAgICAgICAgICAgICAgICAgICAgRCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIEUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBGID0gMCxcbiAgICAgICAgICAgICAgICAgICAgRyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIEggPSAwLFxuICAgICAgICAgICAgICAgICAgICBJID0gMCxcbiAgICAgICAgICAgICAgICAgICAgSiA9IDAuMCxcbiAgICAgICAgICAgICAgICAgICAgSyA9IDAuMCxcbiAgICAgICAgICAgICAgICAgICAgTCA9IDAuMCxcbiAgICAgICAgICAgICAgICAgICAgTSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIE4gPSAwLFxuICAgICAgICAgICAgICAgICAgICBPID0gMCxcbiAgICAgICAgICAgICAgICAgICAgUCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIFEgPSAwLFxuICAgICAgICAgICAgICAgICAgICBSID0gMCxcbiAgICAgICAgICAgICAgICAgICAgUyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIFQgPSAwLFxuICAgICAgICAgICAgICAgICAgICBVID0gMCxcbiAgICAgICAgICAgICAgICAgICAgViA9IDAsXG4gICAgICAgICAgICAgICAgICAgIFcgPSAwLFxuICAgICAgICAgICAgICAgICAgICBYID0gMDtcbiAgICAgICAgICAgICAgICBnID0gZjtcbiAgICAgICAgICAgICAgICBmID0gY1soZyArIDg4KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgaCA9ICgxMDU2ICsgKGFbKGcgKyAxMTIpIHwgMF0gPDwgMikpIHwgMDtcbiAgICAgICAgICAgICAgICBpID1cbiAgICAgICAgICAgICAgICAgICAgKCsoY1soZyArIDEyKSA+PiAyXSB8IDApICpcbiAgICAgICAgICAgICAgICAgICAgICAgICsoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFtoXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGggKyAxKSB8IDBdIDw8IDgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoaCArIDIpIHwgMF0gPDwgMTYpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoaCArIDMpIHwgMF0gPDwgMjQpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICApKSAvXG4gICAgICAgICAgICAgICAgICAgICgrKGNbKGcgKyAzMikgPj4gMl0gfCAwKSAqICsoY1soZSArIDQpID4+IDJdIHwgMCkpO1xuICAgICAgICAgICAgICAgIGUgPSB+figrKGNbKGcgKyA4KSA+PiAyXSB8IDApIC8gaSk7XG4gICAgICAgICAgICAgICAgaCA9IGJpKGUgPj4gMTEpIHwgMDtcbiAgICAgICAgICAgICAgICBqID0gaDtcbiAgICAgICAgICAgICAgICBrID0gaDtcbiAgICAgICAgICAgICAgICBoID0gKChlID4+IDEyKSAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICBsID0gKCgoKGNbKGcgKyA4KSA+PiAyXSB8IDApIC0gNDA5NikgfCAwKSAvIChoIHwgMCkpIHwgMDtcbiAgICAgICAgICAgICAgICBtID0gbDtcbiAgICAgICAgICAgICAgICBuID0gbDtcbiAgICAgICAgICAgICAgICBsID0gKGggLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgaCA9IGw7XG4gICAgICAgICAgICAgICAgaWYgKChsIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBsID0gaztcbiAgICAgICAgICAgICAgICAgICAgayA9IChsICsgMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICBiW2wgPj4gMV0gPSBiW2YgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBsID0gKGggLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGggPSBsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGwgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsID0gKGYgKyAoKG4gPj4gMTIpIDw8IDEpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsID4+PiAwID4gZiA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGJbKGwgLSAyKSA+PiAxXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwID0gbyAmIDY1NTM1O1xuICAgICAgICAgICAgICAgICAgICBxID0gYltsID4+IDFdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgciA9IGJbKGwgKyAyKSA+PiAxXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIHMgPSBiWyhsICsgNCkgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICB0ID0gKygoKG4gJiA0MDk1KSA+Pj4gMCkgPj4+IDApICogMC4wMDAyNDQxNDA2MjU7XG4gICAgICAgICAgICAgICAgICAgIGwgPSBrO1xuICAgICAgICAgICAgICAgICAgICBrID0gKGwgKyAyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGJbbCA+PiAxXSA9IH5+KFxuICAgICAgICAgICAgICAgICAgICAgICAgKygoKHEgPDwgMTYpID4+IDE2KSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICh0IC8gNi4wKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCsoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKCgocCA8PCAxNikgPj4gMTYpICogLTIpIHwgMCkgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKHEgPDwgMTYpID4+IDE2KSAqIDMpIHwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKHIgPDwgMTYpID4+IDE2KSAqIDYpIHwgMCkgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzIDw8IDE2KSA+PiAxNikpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgrKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKCgocCA8PCAxNikgPj4gMTYpIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgocSA8PCAxNikgPj4gMTYpIDw8IDEpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChyIDw8IDE2KSA+PiAxNikpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKC0oKHAgPDwgMTYpID4+IDE2KSB8IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgoKChxIDw8IDE2KSA+PiAxNikgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHIgPDwgMTYpID4+IDE2KSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocyA8PCAxNikgPj4gMTYpKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBuID0gKG4gKyBtKSB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoKG4gJiA0MDk1KSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcCA9IGJbKGYgKyAoKG4gPj4gMTIpIDw8IDEpKSA+PiAxXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIHEgPSBiWyhmICsgKCgobiA+PiAxMikgKyAxKSA8PCAxKSkgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBtID0gaztcbiAgICAgICAgICAgICAgICAgICAgayA9IChtICsgMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICBiW20gPj4gMV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgKCgocCA8PCAxNikgPj4gMTYpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHEgPDwgMTYpID4+IDE2KSAtICgocCA8PCAxNikgPj4gMTYpKSB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gJiA0MDk1XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID4+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMikpICZcbiAgICAgICAgICAgICAgICAgICAgICAgIDY1NTM1O1xuICAgICAgICAgICAgICAgICAgICB1ID0gZTtcbiAgICAgICAgICAgICAgICAgICAgdiA9IGc7XG4gICAgICAgICAgICAgICAgICAgIHcgPSAodiArIDgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1t3ID4+IDJdID0gdTtcbiAgICAgICAgICAgICAgICAgICAgeCA9IGc7XG4gICAgICAgICAgICAgICAgICAgIHkgPSB4IHwgMDtcbiAgICAgICAgICAgICAgICAgICAgeiA9IGNbeSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIEEgPSArKHogfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgQiA9IGk7XG4gICAgICAgICAgICAgICAgICAgIEMgPSBBIC8gQjtcbiAgICAgICAgICAgICAgICAgICAgRCA9IH5+QztcbiAgICAgICAgICAgICAgICAgICAgRSA9IGc7XG4gICAgICAgICAgICAgICAgICAgIEYgPSBFIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1tGID4+IDJdID0gRDtcbiAgICAgICAgICAgICAgICAgICAgRyA9IGc7XG4gICAgICAgICAgICAgICAgICAgIEggPSAoRyArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgSSA9IGNbSCA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIEogPSArKEkgfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgSyA9IGk7XG4gICAgICAgICAgICAgICAgICAgIEwgPSBKIC8gSztcbiAgICAgICAgICAgICAgICAgICAgTSA9IH5+TDtcbiAgICAgICAgICAgICAgICAgICAgTiA9IGc7XG4gICAgICAgICAgICAgICAgICAgIE8gPSAoTiArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1tPID4+IDJdID0gTTtcbiAgICAgICAgICAgICAgICAgICAgUCA9IGc7XG4gICAgICAgICAgICAgICAgICAgIFEgPSAoUCArIDg4KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIFIgPSBjW1EgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBTID0gUjtcbiAgICAgICAgICAgICAgICAgICAgYzAoUyk7XG4gICAgICAgICAgICAgICAgICAgIFQgPSBqO1xuICAgICAgICAgICAgICAgICAgICBVID0gZztcbiAgICAgICAgICAgICAgICAgICAgViA9IChVICsgODgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1tWID4+IDJdID0gVDtcbiAgICAgICAgICAgICAgICAgICAgVyA9IGc7XG4gICAgICAgICAgICAgICAgICAgIFggPSAoVyArIDEyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbWCA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwID0gaztcbiAgICAgICAgICAgICAgICAgICAgayA9IChwICsgMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICBiW3AgPj4gMV0gPSBiWyhmICsgKChuID4+IDEyKSA8PCAxKSkgPj4gMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICB1ID0gZTtcbiAgICAgICAgICAgICAgICAgICAgdiA9IGc7XG4gICAgICAgICAgICAgICAgICAgIHcgPSAodiArIDgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1t3ID4+IDJdID0gdTtcbiAgICAgICAgICAgICAgICAgICAgeCA9IGc7XG4gICAgICAgICAgICAgICAgICAgIHkgPSB4IHwgMDtcbiAgICAgICAgICAgICAgICAgICAgeiA9IGNbeSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIEEgPSArKHogfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgQiA9IGk7XG4gICAgICAgICAgICAgICAgICAgIEMgPSBBIC8gQjtcbiAgICAgICAgICAgICAgICAgICAgRCA9IH5+QztcbiAgICAgICAgICAgICAgICAgICAgRSA9IGc7XG4gICAgICAgICAgICAgICAgICAgIEYgPSBFIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1tGID4+IDJdID0gRDtcbiAgICAgICAgICAgICAgICAgICAgRyA9IGc7XG4gICAgICAgICAgICAgICAgICAgIEggPSAoRyArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgSSA9IGNbSCA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIEogPSArKEkgfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgSyA9IGk7XG4gICAgICAgICAgICAgICAgICAgIEwgPSBKIC8gSztcbiAgICAgICAgICAgICAgICAgICAgTSA9IH5+TDtcbiAgICAgICAgICAgICAgICAgICAgTiA9IGc7XG4gICAgICAgICAgICAgICAgICAgIE8gPSAoTiArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1tPID4+IDJdID0gTTtcbiAgICAgICAgICAgICAgICAgICAgUCA9IGc7XG4gICAgICAgICAgICAgICAgICAgIFEgPSAoUCArIDg4KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIFIgPSBjW1EgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBTID0gUjtcbiAgICAgICAgICAgICAgICAgICAgYzAoUyk7XG4gICAgICAgICAgICAgICAgICAgIFQgPSBqO1xuICAgICAgICAgICAgICAgICAgICBVID0gZztcbiAgICAgICAgICAgICAgICAgICAgViA9IChVICsgODgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1tWID4+IDJdID0gVDtcbiAgICAgICAgICAgICAgICAgICAgVyA9IGc7XG4gICAgICAgICAgICAgICAgICAgIFggPSAoVyArIDEyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbWCA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjRyhhLCBiLCBlKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSAwLFxuICAgICAgICAgICAgICAgICAgICBnID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGogPSAwLFxuICAgICAgICAgICAgICAgICAgICBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbSA9IDAuMCxcbiAgICAgICAgICAgICAgICAgICAgbiA9IDAuMDtcbiAgICAgICAgICAgICAgICBmID0gYTtcbiAgICAgICAgICAgICAgICBhID0gYjtcbiAgICAgICAgICAgICAgICBiID0gZTtcbiAgICAgICAgICAgICAgICBlID0gKGEgKyAyMDgpIHwgMDtcbiAgICAgICAgICAgICAgICBnID0gY1tlID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBjW2UgPj4gMl0gPSBnICsgMTtcbiAgICAgICAgICAgICAgICBpZiAoKGcgfCAwKSA+PSA2Mykge1xuICAgICAgICAgICAgICAgICAgICBjWyhhICsgMjA4KSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGcgPSBjSChjWyhhICsgMjA4KSA+PiAyXSB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICBpZiAoKGNbKGEgKyA4MCArIChnIDw8IDIpKSA+PiAyXSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChiIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IC0oY1soYSArIDgwICsgKGcgPDwgMikpID4+IDJdIHwgMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaiA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaiB8IDA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gY1soYSArIDgwICsgKGcgPDwgMikpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGogPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGogfCAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGUgPSAoZFsoKGNbKGEgKyA0KSA+PiAyXSB8IDApICsgMTA5KSB8IDBdIHwgMCkgPDwgNztcbiAgICAgICAgICAgICAgICBpZiAoKGNbKGEgKyA1MikgPj4gMl0gfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGwgPSAoYSArIDU2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbbCA+PiAyXSA9IChjW2wgPj4gMl0gfCAwKSArIChjWyhhICsgNTIpID4+IDJdIHwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoY1soYSArIDU2KSA+PiAyXSB8IDApID49IDY1NTM2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjWyhhICsgNTIpID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBfKGUsIGNbKGEgKyA1NikgPj4gMl0gfCAwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gZSA+PiAxNjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtID1cbiAgICAgICAgICAgICAgICAgICAgKCgrKGNbKChjWyhhICsgNCkgPj4gMl0gfCAwKSArIDEyKSA+PiAyXSB8IDApICpcbiAgICAgICAgICAgICAgICAgICAgICAgICsoY1soYSArIDEyKSA+PiAyXSB8IDApKSAvXG4gICAgICAgICAgICAgICAgICAgICAgICAoKyhjWygoY1soYSArIDQpID4+IDJdIHwgMCkgKyAzMikgPj4gMl0gfCAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyhjWyhmICsgNCkgPj4gMl0gfCAwKSkpICpcbiAgICAgICAgICAgICAgICAgICAgNDA5Ni4wO1xuICAgICAgICAgICAgICAgIGYgPSB+fihcbiAgICAgICAgICAgICAgICAgICAgK1IoXG4gICAgICAgICAgICAgICAgICAgICAgICArKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsoKGNbKGEgKyAyMDgpID4+IDJdIDw8IDQpIHwgMCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDA2MTM1OTIzMTUxNTQyNTY1XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkgKlxuICAgICAgICAgICAgICAgICAgICArKGUgfCAwKSAqXG4gICAgICAgICAgICAgICAgICAgIDEuMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGYgPSAtZiB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGUgPSAoMTcwNCArICgoKGYgPj4gNSkgJiAyNTUpIDw8IDMpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIG4gPVxuICAgICAgICAgICAgICAgICAgICAgICAgKChjW2sgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbZV0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhlICsgMSkgfCAwXSA8PCA4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyAyKSB8IDBdIDw8IDE2KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyAzKSB8IDBdIDw8IDI0KSksXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1soayArIDQpID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWyhlICsgNCkgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyA1KSB8IDBdIDw8IDgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZSArIDYpIHwgMF0gPDwgMTYpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZSArIDcpIHwgMF0gPDwgMjQpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICtoW2sgPj4gM10pO1xuICAgICAgICAgICAgICAgICAgICBlID0gKDM3NTIgKyAoKGYgPj4gMTMpIDw8IDMpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIG0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgbSAvXG4gICAgICAgICAgICAgICAgICAgICAgICAobiAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW2sgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkW2VdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyAxKSB8IDBdIDw8IDgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyAyKSB8IDBdIDw8IDE2KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhlICsgMykgfCAwXSA8PCAyNCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjWyhrICsgNCkgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWyhlICsgNCkgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhlICsgNSkgfCAwXSA8PCA4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhlICsgNikgfCAwXSA8PCAxNikgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZSArIDcpIHwgMF0gPDwgMjQpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAraFtrID4+IDNdKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9ICgxNzA0ICsgKCgoZiA+PiA1KSAmIDI1NSkgPDwgMykpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAoKGNbayA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFtlXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyAxKSB8IDBdIDw8IDgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZSArIDIpIHwgMF0gPDwgMTYpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZSArIDMpIHwgMF0gPDwgMjQpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChjWyhrICsgNCkgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbKGUgKyA0KSB8IDBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZSArIDUpIHwgMF0gPDwgOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhlICsgNikgfCAwXSA8PCAxNikgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhlICsgNykgfCAwXSA8PCAyNCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgK2hbayA+PiAzXSk7XG4gICAgICAgICAgICAgICAgICAgIGUgPSAoMzc1MiArICgoZiA+PiAxMykgPDwgMykpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgbSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBtICpcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gKlxuICAgICAgICAgICAgICAgICAgICAgICAgKChjW2sgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbZV0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkWyhlICsgMSkgfCAwXSA8PCA4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyAyKSB8IDBdIDw8IDE2KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyAzKSB8IDBdIDw8IDI0KSksXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1soayArIDQpID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWyhlICsgNCkgfCAwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRbKGUgKyA1KSB8IDBdIDw8IDgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZSArIDYpIHwgMF0gPDwgMTYpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZFsoZSArIDcpIHwgMF0gPDwgMjQpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICtoW2sgPj4gM10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKGNbKGEgKyA1MikgPj4gMl0gfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNbKGEgKyA4MCArIChnIDw8IDIpKSA+PiAyXSA9IH5+bTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChiIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBtID0gLTAuMCAtIG07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGkgPSB+fm07XG4gICAgICAgICAgICAgICAgaiA9IGk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGogfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY0goYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgYiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGMgPSAwO1xuICAgICAgICAgICAgICAgIGIgPSBhO1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChiIHwgMCkgPCAxNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICgxNSAtIGIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYiB8IDApID49IDQ4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICg3OSAtIGIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IChiIC0gMTYpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBjIHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNJKGEsIGIsIGQsIGUpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFuKGIgfCAwLCBkIHwgMCwgZSB8IDAsIGNbYSA+PiAyXSB8IDApIHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNKKGEpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGIgPSAwLFxuICAgICAgICAgICAgICAgICAgICBkID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZSA9IDA7XG4gICAgICAgICAgICAgICAgYiA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKChjWyhiICsgNCkgPj4gMl0gfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGQgPSBiO1xuICAgICAgICAgICAgICAgICAgICBjMChkKTtcbiAgICAgICAgICAgICAgICAgICAgZSA9IGE7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYSA9IGFvKGNbYiA+PiAyXSB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gYjtcbiAgICAgICAgICAgICAgICBjMChkKTtcbiAgICAgICAgICAgICAgICBlID0gYTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZSB8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjSyhhLCBiLCBkLCBlKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gZCB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDA7XG4gICAgICAgICAgICAgICAgZiA9IGQ7XG4gICAgICAgICAgICAgICAgZCA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGU7XG4gICAgICAgICAgICAgICAgZSA9IGNbKGQgKyA0KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgZyA9IChlICsgKF8oYSwgZikgfCAwKSkgfCAwO1xuICAgICAgICAgICAgICAgIGlmIChnID4+PiAwID4gKGNbKGQgKyA4KSA+PiAyXSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgICAgICAgICAgKCgoKChjWyhkICsgOCkgPj4gMl0gfCAwKSAtIChjWyhkICsgNCkgPj4gMl0gfCAwKSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID4+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApIC9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZiA+Pj4gMCkpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGcgPSBiO1xuICAgICAgICAgICAgICAgIGIgPSBjWyhkICsgNCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIGUgPSBfKGEsIGYpIHwgMDtcbiAgICAgICAgICAgICAgICBjNihnIHwgMCwgYiB8IDAsIGUpIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gXyhhLCBmKSB8IDA7XG4gICAgICAgICAgICAgICAgZiA9IChkICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgIGNbZiA+PiAyXSA9IChjW2YgPj4gMl0gfCAwKSArIGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY0woYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgYiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGQgPSAwO1xuICAgICAgICAgICAgICAgIGIgPSBhO1xuICAgICAgICAgICAgICAgIGlmICgoY1soYiArIDEyKSA+PiAyXSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZCA9IGI7XG4gICAgICAgICAgICAgICAgICAgIGMwKGQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYzAoY1tiID4+IDJdIHwgMCk7XG4gICAgICAgICAgICAgICAgZCA9IGI7XG4gICAgICAgICAgICAgICAgYzAoZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjTShhLCBiKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDA7XG4gICAgICAgICAgICAgICAgZCA9IGJpKDEyKSB8IDA7XG4gICAgICAgICAgICAgICAgaWYgKChkIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZiA9IGU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZyA9IGJpKDgpIHwgMDtcbiAgICAgICAgICAgICAgICBpZiAoKGcgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGMwKGQpO1xuICAgICAgICAgICAgICAgICAgICBlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZiA9IGU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmIHwgMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjW2cgPj4gMl0gPSBhO1xuICAgICAgICAgICAgICAgICAgICBjWyhnICsgNCkgPj4gMl0gPSBiO1xuICAgICAgICAgICAgICAgICAgICBjWyhkICsgOCkgPj4gMl0gPSBnO1xuICAgICAgICAgICAgICAgICAgICBjW2QgPj4gMl0gPSAyO1xuICAgICAgICAgICAgICAgICAgICBjWyhkICsgNCkgPj4gMl0gPSA0O1xuICAgICAgICAgICAgICAgICAgICBlID0gZDtcbiAgICAgICAgICAgICAgICAgICAgZiA9IGU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjTihhKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBiID0gMCxcbiAgICAgICAgICAgICAgICAgICAgYyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGQgPSAwO1xuICAgICAgICAgICAgICAgIGIgPSBhdihhIHwgMCwgNjU0NCkgfCAwO1xuICAgICAgICAgICAgICAgIGlmICgoYiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGQgPSBjO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZCB8IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IGNNKGIsIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgZCA9IGM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjTyhhLCBiLCBkKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gZCB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwO1xuICAgICAgICAgICAgICAgIGUgPSBhO1xuICAgICAgICAgICAgICAgIGEgPSBiaSgxMikgfCAwO1xuICAgICAgICAgICAgICAgIGlmICgoYSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZiA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGcgPSBmO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZyB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGggPSBiaSgxNikgfCAwO1xuICAgICAgICAgICAgICAgIGlmICgoaCB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYzAoYSk7XG4gICAgICAgICAgICAgICAgICAgIGYgPSAwO1xuICAgICAgICAgICAgICAgICAgICBnID0gZjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGcgfCAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNbaCA+PiAyXSA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGNbKGggKyA0KSA+PiAyXSA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGNbKGggKyA4KSA+PiAyXSA9IGUgKyBiO1xuICAgICAgICAgICAgICAgICAgICBjWyhoICsgMTIpID4+IDJdID0gZDtcbiAgICAgICAgICAgICAgICAgICAgY1soYSArIDgpID4+IDJdID0gaDtcbiAgICAgICAgICAgICAgICAgICAgY1thID4+IDJdID0gNDtcbiAgICAgICAgICAgICAgICAgICAgY1soYSArIDQpID4+IDJdID0gMjtcbiAgICAgICAgICAgICAgICAgICAgZiA9IGE7XG4gICAgICAgICAgICAgICAgICAgIGcgPSBmO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZyB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY1AoYSwgYiwgZCwgZSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgZCA9IGQgfCAwO1xuICAgICAgICAgICAgICAgIGUgPSBlIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZiA9IDA7XG4gICAgICAgICAgICAgICAgZiA9IGE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFZW2NbZiA+PiAyXSAmIDddKGNbKGYgKyA4KSA+PiAyXSB8IDAsIGIsIGQsIGUpIHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNRKGEsIGIpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBjID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgICAgIGMgPSBpO1xuICAgICAgICAgICAgICAgIGkgPSAoaSArIDEwMjQpIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gYyB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGI7XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEgPj4+IDAgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYiA9IGE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiID4+PiAwID4gMTAyNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYiA9IDEwMjQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYSA9IChhIC0gYikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAoYiB8IDApICE9IChjUChlLCBkIHwgMCwgMSwgYikgfCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaSA9IGM7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY1IoYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgYiA9IDA7XG4gICAgICAgICAgICAgICAgYiA9IGE7XG4gICAgICAgICAgICAgICAgYSA9IGFXW2NbKGIgKyA0KSA+PiAyXSAmIDddKGNbKGIgKyA4KSA+PiAyXSB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICBjMChiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYSB8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjUygpIHtcbiAgICAgICAgICAgICAgICBsZXQgYSA9IDA7XG4gICAgICAgICAgICAgICAgY1sxNjc2XSA9IGJpKDUxNikgfCAwO1xuICAgICAgICAgICAgICAgIGM1KGNbMTY3Nl0gfCAwLCAwLCA1MTYpO1xuICAgICAgICAgICAgICAgIGEgPSBiaSgzNTg0KSB8IDA7XG4gICAgICAgICAgICAgICAgY1tjWzE2NzZdID4+IDJdID0gYTtcbiAgICAgICAgICAgICAgICBjNShjW2NbMTY3Nl0gPj4gMl0gfCAwLCAwLCAzNTg0KTtcbiAgICAgICAgICAgICAgICBjWzE4MDRdID0gYmkoNTE2KSB8IDA7XG4gICAgICAgICAgICAgICAgYzUoY1sxODA0XSB8IDAsIDAsIDUxNik7XG4gICAgICAgICAgICAgICAgYSA9IGJpKDM1ODQpIHwgMDtcbiAgICAgICAgICAgICAgICBjW2NbMTgwNF0gPj4gMl0gPSBhO1xuICAgICAgICAgICAgICAgIGM1KGNbY1sxODA0XSA+PiAyXSB8IDAsIDAsIDM1ODQpO1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY1QoYikge1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBqID0gMDtcbiAgICAgICAgICAgICAgICBkID0gaTtcbiAgICAgICAgICAgICAgICBpID0gKGkgKyAxMDI0KSB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGQgfCAwO1xuICAgICAgICAgICAgICAgIGYgPSBiO1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjMShmIHwgMCkgfCAwKSA+Pj4gMCA+PSAxMDI0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBiID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBnID0gZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMyKGIgfCAwLCBnIHwgMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGFFKGYgfCAwLCA0NykgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChnIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbKGUgKyAoZyAtIGYpKSB8IDBdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gY1ttID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NDgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGcgPSBpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgPSAoaSArIDgpIHwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjW2cgPj4gMl0gPSBiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZykgfCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmooZSB8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgY1MoKSB8IDA7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGFbZl0gfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBoID0gZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGogPSBjVShoKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgIGYgPSA2NTIwO1xuICAgICAgICAgICAgICAgIGggPSBmO1xuICAgICAgICAgICAgICAgIGogPSBjVShoKSB8IDA7XG4gICAgICAgICAgICAgICAgaSA9IGQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGogfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY1UoYikge1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBqID0gMCxcbiAgICAgICAgICAgICAgICAgICAgayA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGwgPSAwLFxuICAgICAgICAgICAgICAgICAgICBuID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHAgPSAwLFxuICAgICAgICAgICAgICAgICAgICBxID0gMCxcbiAgICAgICAgICAgICAgICAgICAgciA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHMgPSAwLFxuICAgICAgICAgICAgICAgICAgICB0ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgdSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHYgPSAwLFxuICAgICAgICAgICAgICAgICAgICB3ID0gMDtcbiAgICAgICAgICAgICAgICBkID0gaTtcbiAgICAgICAgICAgICAgICBpID0gKGkgKyAxMDY0KSB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGQgfCAwO1xuICAgICAgICAgICAgICAgIGYgPSAoZCArIDEwMjQpIHwgMDtcbiAgICAgICAgICAgICAgICBnID0gYjtcbiAgICAgICAgICAgICAgICBiID0gMDtcbiAgICAgICAgICAgICAgICBoID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoKGNbMTY2MF0gfCAwKSA+IDUwKSB7XG4gICAgICAgICAgICAgICAgICAgIGogPSBjW20gPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBhcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGogfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgNTc5MixcbiAgICAgICAgICAgICAgICAgICAgICAgICgoayA9IGkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGkgPSAoaSArIDEpIHwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAoaSA9IChpICsgNykgJiAtOCksXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1trID4+IDJdID0gMCksXG4gICAgICAgICAgICAgICAgICAgICAgICBrKSB8IDBcbiAgICAgICAgICAgICAgICAgICAgKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBrO1xuICAgICAgICAgICAgICAgICAgICBsID0gLTE7XG4gICAgICAgICAgICAgICAgICAgIG4gPSBsO1xuICAgICAgICAgICAgICAgICAgICBpID0gZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBqID0gYmgoZykgfCAwO1xuICAgICAgICAgICAgICAgIG8gPSBqO1xuICAgICAgICAgICAgICAgIGlmICgoaiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaiA9IGNbbSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBnO1xuICAgICAgICAgICAgICAgICAgICBhcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGogfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgNTM5MixcbiAgICAgICAgICAgICAgICAgICAgICAgICgoayA9IGkpLCAoaSA9IChpICsgOCkgfCAwKSwgKGNbayA+PiAyXSA9IHApLCBrKSB8IDBcbiAgICAgICAgICAgICAgICAgICAgKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBrO1xuICAgICAgICAgICAgICAgICAgICBsID0gLTE7XG4gICAgICAgICAgICAgICAgICAgIG4gPSBsO1xuICAgICAgICAgICAgICAgICAgICBpID0gZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBMMTg4MTogd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChjXyhlIHwgMCwgMTAyNCwgbykgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxID0gMTY0NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGggPSAoaCArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbZiA+PiAyXSA9IGF5KGUgfCAwLCA1MDk2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoY1tmID4+IDJdIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhVihjW2YgPj4gMl0gfCAwLCA0ODQwKSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYVtjW2YgPj4gMl0gfCAwXSB8IDApID09IDM1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIEwxODgxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjWyhmICsgKHAgPDwgMikpID4+IDJdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGFbY1soZiArIChwIDw8IDIpKSA+PiAyXSB8IDBdIHwgMCkgPT0gMzUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IChwIHwgMCkgPCAxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaiA9IChwICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgKGogPDwgMikpID4+IDJdID0gYXkoMCwgNTA5NikgfCAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYVYoY1tmID4+IDJdIHwgMCwgNDgzMikgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhVihjW2YgPj4gMl0gfCAwLCA0ODE2KSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IDE1MDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGFWKGNbZiA+PiAyXSB8IDAsIDQ4MDApIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gMTUwNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYVYoY1tmID4+IDJdIHwgMCwgNjU1MikgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAxNTA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhVihjW2YgPj4gMl0gfCAwLCA2NTM2KSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IDE1MDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGFWKGNbZiA+PiAyXSB8IDAsIDY1MDQpIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGFWKGNbZiA+PiAyXSB8IDAsIDY0MTYpIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFWKGNbZiA+PiAyXSB8IDAsIDY0MDApIHwgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gMTUwOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFWKGNbZiA+PiAyXSB8IDAsIDYzNDQpIHwgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVYoY1tmID4+IDJdIHwgMCwgNjI4MCkgfCAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhVihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbZiA+PiAyXSB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MTc2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tmID4+IDJdIHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MTM2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAxNTE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFWKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbZiA+PiAyXSB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjA3MlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFWKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW2YgPj4gMl0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjAwOFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFWKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTk1MlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFWKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1ODgwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU3ODRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhVihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTcyMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFWKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NjE2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApIDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gMTU2MjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMTg4MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAxNTYyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwxODgxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1N1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IDE1NjI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDE4ODE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IDE1NjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDE4ODE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gMTU2NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMTg4MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYiB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IDE1Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDE4ODE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocyAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGMxKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0IHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocyAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHMgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocyAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocyAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1IHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID49XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUgPDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAxNTczO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMTg4MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUgPDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTI3MlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFWKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1IDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTIwOFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFWKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGYgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1IDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MTUyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUgPDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAwOFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFWKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1IDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDk0NFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gMTYyNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwxODgxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhVihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1ZTNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhVihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OTkyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDkzNlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IDE2MjE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwxODgxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocyAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHMgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocyAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNWUzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDk5MlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAxNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwxODgxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHMgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHMgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjApID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhVihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MTQ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTExMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFWKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUxMDRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKCgoYUwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU3KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSAxMjc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodiB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IDE2MDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwxODgxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2IHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAxNjA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMTg4MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodiB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gMTYwNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMTg4MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAxNjA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwxODgxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHYgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IDE1ODY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDE4ODE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHYgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gMTU4NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMTg4MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAxNTg2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwxODgxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1N1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IDE1ODY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDE4ODE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocyAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0KSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHYgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApIDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gMTU3OTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwxODgxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2IHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gMTU3OTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwxODgxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApIDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IDE1Nzk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMTg4MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1N1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAxNTc5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDE4ODE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHMgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAxNTUyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwxODgxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IDE1NTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDE4ODE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gMTU1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMTg4MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDY3MDQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMgPDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNjcwNCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocyA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUxNlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjNShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2NzA0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocyA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTE2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTg0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNjcwNCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMgPDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2NzA0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMgPDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1ODRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDY3MDQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMgPDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApIDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gMTU0MztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwxODgxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGYgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocyB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAxNTQ2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDE4ODE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyN1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAxNTQ2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDE4ODE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDcyMTYgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocyA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNzIxNiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUxNlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjNShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNzIxNiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocyA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTE2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1ODRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNzIxNiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocyA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjNShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDcyMTYgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzU4NFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDcyMTYgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocyA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gMTUzOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDE4ODE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGYgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjNyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzcyOCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhWzc5ODNdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApIDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gMTUzMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMTg4MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPj1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMTY2MF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1sxNjYwXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMgPDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzE2NjBdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbMTY2MF0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAxNTIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDE4ODE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA+PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmooXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGYgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMgPDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW20gPj4gMl0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTk2MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChrID0gaSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcpICZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC04KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID4+IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrKSB8IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBjW20gPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGsgPSBpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpICsgMSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpICsgNykgJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtOCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbayA+PiAyXSA9IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGspIHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAxNTE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChxIHwgMCkgPT0gMTUxNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBjW20gPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBjW2YgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjA4OCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChrID0gaSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpID0gKGkgKyA4KSB8IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1trID4+IDJdID0gdyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGspIHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IGNbbSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MTkyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoayA9IGkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpID0gKGkgKyAxKSB8IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpID0gKGkgKyA3KSAmIC04KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1trID4+IDJdID0gMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaykgfCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IGNbbSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Mjk2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChrID0gaSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSA9IChpICsgMSkgfCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpID0gKGkgKyA3KSAmIC04KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjW2sgPj4gMl0gPSAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGspIHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gMTUwOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocSB8IDApID09IDE1MDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IGNbbSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gY1tmID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYzNTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChrID0gaSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgPSAoaSArIDgpIHwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbayA+PiAyXSA9IHQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGspIHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBjW20gPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQzMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoayA9IGkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgPSAoaSArIDEpIHwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSA9IChpICsgNykgJiAtOCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1trID4+IDJdID0gMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrKSB8IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IDE1MDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHEgfCAwKSA9PSAxNTA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKHEgfCAwKSA9PSAxNTIzKSB7XG4gICAgICAgICAgICAgICAgICAgIHMgPSBjW20gPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBiID0gZztcbiAgICAgICAgICAgICAgICAgICAgdiA9IGg7XG4gICAgICAgICAgICAgICAgICAgIGFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgcyB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICA1OTEyLFxuICAgICAgICAgICAgICAgICAgICAgICAgKChrID0gaSksXG4gICAgICAgICAgICAgICAgICAgICAgICAoaSA9IChpICsgMTYpIHwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1trID4+IDJdID0gYiksXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1soayArIDgpID4+IDJdID0gdiksXG4gICAgICAgICAgICAgICAgICAgICAgICBrKSB8IDBcbiAgICAgICAgICAgICAgICAgICAgKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBrO1xuICAgICAgICAgICAgICAgICAgICBsID0gLTI7XG4gICAgICAgICAgICAgICAgICAgIG4gPSBsO1xuICAgICAgICAgICAgICAgICAgICBpID0gZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gfCAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHEgfCAwKSA9PSAxNTU1KSB7XG4gICAgICAgICAgICAgICAgICAgIGFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgY1ttID4+IDJdIHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDU1MjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGsgPSBpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpID0gKGkgKyAxNikgfCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChjW2sgPj4gMl0gPSBnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChjWyhrICsgOCkgPj4gMl0gPSBoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGspIHwgMFxuICAgICAgICAgICAgICAgICAgICApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGs7XG4gICAgICAgICAgICAgICAgICAgIGwgPSAtMjtcbiAgICAgICAgICAgICAgICAgICAgbiA9IGw7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiB8IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgocSB8IDApID09IDE1NjIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjW20gPj4gMl0gfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgNTQ4MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICgoayA9IGkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGkgPSAoaSArIDE2KSB8IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbayA+PiAyXSA9IGcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGsgKyA4KSA+PiAyXSA9IGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaykgfCAwXG4gICAgICAgICAgICAgICAgICAgICkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpID0gaztcbiAgICAgICAgICAgICAgICAgICAgbCA9IC0yO1xuICAgICAgICAgICAgICAgICAgICBuID0gbDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuIHwgMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChxIHwgMCkgPT0gMTU2NSkge1xuICAgICAgICAgICAgICAgICAgICBhcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbbSA+PiAyXSB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICA1NDMyLFxuICAgICAgICAgICAgICAgICAgICAgICAgKChrID0gaSksXG4gICAgICAgICAgICAgICAgICAgICAgICAoaSA9IChpICsgMTYpIHwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1trID4+IDJdID0gZyksXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1soayArIDgpID4+IDJdID0gaCksXG4gICAgICAgICAgICAgICAgICAgICAgICBrKSB8IDBcbiAgICAgICAgICAgICAgICAgICAgKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBrO1xuICAgICAgICAgICAgICAgICAgICBsID0gLTI7XG4gICAgICAgICAgICAgICAgICAgIG4gPSBsO1xuICAgICAgICAgICAgICAgICAgICBpID0gZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gfCAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHEgfCAwKSA9PSAxNTY3KSB7XG4gICAgICAgICAgICAgICAgICAgIGFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgY1ttID4+IDJdIHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDUzMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGsgPSBpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpID0gKGkgKyAxNikgfCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChjW2sgPj4gMl0gPSBnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChjWyhrICsgOCkgPj4gMl0gPSBoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGspIHwgMFxuICAgICAgICAgICAgICAgICAgICApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGs7XG4gICAgICAgICAgICAgICAgICAgIGwgPSAtMjtcbiAgICAgICAgICAgICAgICAgICAgbiA9IGw7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiB8IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgocSB8IDApID09IDE1MzkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjW20gPj4gMl0gfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgNTcyOCxcbiAgICAgICAgICAgICAgICAgICAgICAgICgoayA9IGkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGkgPSAoaSArIDE2KSB8IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbayA+PiAyXSA9IGcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGsgKyA4KSA+PiAyXSA9IGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaykgfCAwXG4gICAgICAgICAgICAgICAgICAgICkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpID0gaztcbiAgICAgICAgICAgICAgICAgICAgbCA9IC0yO1xuICAgICAgICAgICAgICAgICAgICBuID0gbDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuIHwgMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChxIHwgMCkgPT0gMTUzMSkge1xuICAgICAgICAgICAgICAgICAgICBhcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbbSA+PiAyXSB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICA1ODQwLFxuICAgICAgICAgICAgICAgICAgICAgICAgKChrID0gaSksXG4gICAgICAgICAgICAgICAgICAgICAgICAoaSA9IChpICsgMTYpIHwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1trID4+IDJdID0gZyksXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1soayArIDgpID4+IDJdID0gaCksXG4gICAgICAgICAgICAgICAgICAgICAgICBrKSB8IDBcbiAgICAgICAgICAgICAgICAgICAgKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBrO1xuICAgICAgICAgICAgICAgICAgICBsID0gLTI7XG4gICAgICAgICAgICAgICAgICAgIG4gPSBsO1xuICAgICAgICAgICAgICAgICAgICBpID0gZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gfCAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHEgfCAwKSA9PSAxNTUyKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgY1ttID4+IDJdIHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDU1NzYsXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGsgPSBpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpID0gKGkgKyAxNikgfCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChjW2sgPj4gMl0gPSBnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChjWyhrICsgOCkgPj4gMl0gPSBoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGspIHwgMFxuICAgICAgICAgICAgICAgICAgICApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGs7XG4gICAgICAgICAgICAgICAgICAgIGwgPSAtMjtcbiAgICAgICAgICAgICAgICAgICAgbiA9IGw7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiB8IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgocSB8IDApID09IDE1NzkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjW20gPj4gMl0gfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgNTIxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICgoayA9IGkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGkgPSAoaSArIDI0KSB8IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbayA+PiAyXSA9IGcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGsgKyA4KSA+PiAyXSA9IGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGsgKyAxNikgPj4gMl0gPSA4MDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgaykgfCAwXG4gICAgICAgICAgICAgICAgICAgICkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpID0gaztcbiAgICAgICAgICAgICAgICAgICAgbCA9IC0yO1xuICAgICAgICAgICAgICAgICAgICBuID0gbDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuIHwgMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChxIHwgMCkgPT0gMTU4Nikge1xuICAgICAgICAgICAgICAgICAgICBhcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbbSA+PiAyXSB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICA1MTYwLFxuICAgICAgICAgICAgICAgICAgICAgICAgKChrID0gaSksXG4gICAgICAgICAgICAgICAgICAgICAgICAoaSA9IChpICsgMTYpIHwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1trID4+IDJdID0gZyksXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1soayArIDgpID4+IDJdID0gaCksXG4gICAgICAgICAgICAgICAgICAgICAgICBrKSB8IDBcbiAgICAgICAgICAgICAgICAgICAgKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBrO1xuICAgICAgICAgICAgICAgICAgICBsID0gLTI7XG4gICAgICAgICAgICAgICAgICAgIG4gPSBsO1xuICAgICAgICAgICAgICAgICAgICBpID0gZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gfCAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHEgfCAwKSA9PSAxNjExKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgY1ttID4+IDJdIHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDQ5NTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGsgPSBpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpID0gKGkgKyAxNikgfCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChjW2sgPj4gMl0gPSBnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChjWyhrICsgOCkgPj4gMl0gPSBoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGspIHwgMFxuICAgICAgICAgICAgICAgICAgICApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGs7XG4gICAgICAgICAgICAgICAgICAgIGwgPSAtMjtcbiAgICAgICAgICAgICAgICAgICAgbiA9IGw7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiB8IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgocSB8IDApID09IDE2MjEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjW20gPj4gMl0gfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgNDg4OCxcbiAgICAgICAgICAgICAgICAgICAgICAgICgoayA9IGkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGkgPSAoaSArIDE2KSB8IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbayA+PiAyXSA9IGcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGsgKyA4KSA+PiAyXSA9IGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaykgfCAwXG4gICAgICAgICAgICAgICAgICAgICkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpID0gaztcbiAgICAgICAgICAgICAgICAgICAgbCA9IC0yO1xuICAgICAgICAgICAgICAgICAgICBuID0gbDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuIHwgMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChxIHwgMCkgPT0gMTYyNSkge1xuICAgICAgICAgICAgICAgICAgICB2ID0gY1soZiArICh1IDw8IDIpKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgY1ttID4+IDJdIHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDUyODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGsgPSBpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpID0gKGkgKyAyNCkgfCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChjW2sgPj4gMl0gPSBnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChjWyhrICsgOCkgPj4gMl0gPSBoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChjWyhrICsgMTYpID4+IDJdID0gdiksXG4gICAgICAgICAgICAgICAgICAgICAgICBrKSB8IDBcbiAgICAgICAgICAgICAgICAgICAgKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBrO1xuICAgICAgICAgICAgICAgICAgICBsID0gLTI7XG4gICAgICAgICAgICAgICAgICAgIG4gPSBsO1xuICAgICAgICAgICAgICAgICAgICBpID0gZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gfCAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHEgfCAwKSA9PSAxNTQ2KSB7XG4gICAgICAgICAgICAgICAgICAgIGFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgY1ttID4+IDJdIHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDU2MjQsXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGsgPSBpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpID0gKGkgKyAxNikgfCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChjW2sgPj4gMl0gPSBnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChjWyhrICsgOCkgPj4gMl0gPSBoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGspIHwgMFxuICAgICAgICAgICAgICAgICAgICApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGs7XG4gICAgICAgICAgICAgICAgICAgIGwgPSAtMjtcbiAgICAgICAgICAgICAgICAgICAgbiA9IGw7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiB8IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgocSB8IDApID09IDE1NDMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjW20gPj4gMl0gfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgNTY4MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICgoayA9IGkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGkgPSAoaSArIDE2KSB8IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbayA+PiAyXSA9IGcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGsgKyA4KSA+PiAyXSA9IGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaykgfCAwXG4gICAgICAgICAgICAgICAgICAgICkgfCAwO1xuICAgICAgICAgICAgICAgICAgICBpID0gaztcbiAgICAgICAgICAgICAgICAgICAgbCA9IC0yO1xuICAgICAgICAgICAgICAgICAgICBuID0gbDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuIHwgMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChxIHwgMCkgPT0gMTYwNCkge1xuICAgICAgICAgICAgICAgICAgICBhcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbbSA+PiAyXSB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICA1MDE2LFxuICAgICAgICAgICAgICAgICAgICAgICAgKChrID0gaSksXG4gICAgICAgICAgICAgICAgICAgICAgICAoaSA9IChpICsgMTYpIHwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1trID4+IDJdID0gZyksXG4gICAgICAgICAgICAgICAgICAgICAgICAoY1soayArIDgpID4+IDJdID0gaCksXG4gICAgICAgICAgICAgICAgICAgICAgICBrKSB8IDBcbiAgICAgICAgICAgICAgICAgICAgKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBrO1xuICAgICAgICAgICAgICAgICAgICBsID0gLTI7XG4gICAgICAgICAgICAgICAgICAgIG4gPSBsO1xuICAgICAgICAgICAgICAgICAgICBpID0gZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gfCAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHEgfCAwKSA9PSAxNTczKSB7XG4gICAgICAgICAgICAgICAgICAgIHYgPSBjWyhmICsgKHUgPDwgMikpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgYXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjW20gPj4gMl0gfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgNTI4MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICgoayA9IGkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGkgPSAoaSArIDI0KSB8IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbayA+PiAyXSA9IGcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGsgKyA4KSA+PiAyXSA9IGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNbKGsgKyAxNikgPj4gMl0gPSB2KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGspIHwgMFxuICAgICAgICAgICAgICAgICAgICApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGs7XG4gICAgICAgICAgICAgICAgICAgIGwgPSAtMjtcbiAgICAgICAgICAgICAgICAgICAgbiA9IGw7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiB8IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgocSB8IDApID09IDE2NDYpIHtcbiAgICAgICAgICAgICAgICAgICAgYW8obyB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgbCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIG4gPSBsO1xuICAgICAgICAgICAgICAgICAgICBpID0gZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNWKGQsIGUsIGYsIGcpIHtcbiAgICAgICAgICAgICAgICBkID0gZCB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGUgfCAwO1xuICAgICAgICAgICAgICAgIGYgPSBmIHwgMDtcbiAgICAgICAgICAgICAgICBnID0gZyB8IDA7XG4gICAgICAgICAgICAgICAgY1sxNjcyXSA9IGQ7XG4gICAgICAgICAgICAgICAgYlszMzQ2XSA9IGU7XG4gICAgICAgICAgICAgICAgYVs2Njk0XSA9IGY7XG4gICAgICAgICAgICAgICAgYlszMzQ4XSA9IGc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDY2ODg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjVyhmLCBnLCBoKSB7XG4gICAgICAgICAgICAgICAgZiA9IGYgfCAwO1xuICAgICAgICAgICAgICAgIGcgPSBnIHwgMDtcbiAgICAgICAgICAgICAgICBoID0gaCB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGogPSAwLFxuICAgICAgICAgICAgICAgICAgICBrID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG4gPSAwO1xuICAgICAgICAgICAgICAgIGogPSBpO1xuICAgICAgICAgICAgICAgIGsgPSBmO1xuICAgICAgICAgICAgICAgIGYgPSBoO1xuICAgICAgICAgICAgICAgIGlmICgoayB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIG4gPSBsO1xuICAgICAgICAgICAgICAgICAgICBpID0gajtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoID0gYmkoMTQxNjQpIHwgMDtcbiAgICAgICAgICAgICAgICBjNShoIHwgMCwgMCwgMTQxNjQpO1xuICAgICAgICAgICAgICAgIGNbKGggKyAyNCkgPj4gMl0gPSBnO1xuICAgICAgICAgICAgICAgIGcgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZyB8IDApID49IDEyOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKChjWyg2NzA0ICsgKGcgPDwgMikpID4+IDJdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY1soaCArIDI4ICsgKGcgPDwgMikpID4+IDJdID0gYmkoNTE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjNShjWyhoICsgMjggKyAoZyA8PCAyKSkgPj4gMl0gfCAwLCAwLCA1MTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1tjWyhoICsgMjggKyAoZyA8PCAyKSkgPj4gMl0gPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbY1soNjcwNCArIChnIDw8IDIpKSA+PiAyXSA+PiAyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGNbKDcyMTYgKyAoZyA8PCAyKSkgPj4gMl0gfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjWyhoICsgNTQwICsgKGcgPDwgMikpID4+IDJdID0gYmkoNTE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjNShjWyhoICsgNTQwICsgKGcgPDwgMikpID4+IDJdIHwgMCwgMCwgNTE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbY1soaCArIDU0MCArIChnIDw8IDIpKSA+PiAyXSA+PiAyXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tjWyg3MjE2ICsgKGcgPDwgMikpID4+IDJdID4+IDJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGcgPSAoZyArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY1soaCArIDIwKSA+PiAyXSA9IDcwO1xuICAgICAgICAgICAgICAgIGNbKGggKyAxMzA1MikgPj4gMl0gPSAzMjtcbiAgICAgICAgICAgICAgICBjWyhoICsgMTMwNTYpID4+IDJdID0gMzMyODA7XG4gICAgICAgICAgICAgICAgY1soaCArIDQpID4+IDJdID0gY1tmID4+IDJdO1xuICAgICAgICAgICAgICAgIGNbKGggKyA4KSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKCgoYlsoZiArIDQpID4+IDFdICYgMjU1KSB8IDApID09IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgIGcgPSAoaCArIDgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1tnID4+IDJdID0gY1tnID4+IDJdIHwgNDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCgoYlsoZiArIDQpID4+IDFdICYgMzI3NjgpIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBnID0gKGggKyA4KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGNbZyA+PiAyXSA9IGNbZyA+PiAyXSB8IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoZFsoZiArIDYpIHwgMF0gfCAwKSA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGcgPSAoaCArIDgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1tnID4+IDJdID0gY1tnID4+IDJdIHwgMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZyA9IGVbKGYgKyA0KSA+PiAxXSB8IDA7XG4gICAgICAgICAgICAgICAgaWYgKChnIHwgMCkgPT0gMzY4ODApIHtcbiAgICAgICAgICAgICAgICAgICAgY1soaCArIDEwNjApID4+IDJdID0gNDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChnIHwgMCkgPT0gMTYpIHtcbiAgICAgICAgICAgICAgICAgICAgY1soaCArIDEwNjApID4+IDJdID0gNjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChnIHwgMCkgPT0gMzI3NzYpIHtcbiAgICAgICAgICAgICAgICAgICAgY1soaCArIDEwNjApID4+IDJdID0gMTA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoZyB8IDApID09IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgY1soaCArIDEwNjApID4+IDJdID0gODtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChnIHwgMCkgPT0gMzI3ODQpIHtcbiAgICAgICAgICAgICAgICAgICAgY1soaCArIDEwNjApID4+IDJdID0gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbbSA+PiAyXSB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICA2MTQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgKChnID0gaSksXG4gICAgICAgICAgICAgICAgICAgICAgICAoaSA9IChpICsgMSkgfCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpID0gKGkgKyA3KSAmIC04KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChjW2cgPj4gMl0gPSAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGcpIHwgMFxuICAgICAgICAgICAgICAgICAgICApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGc7XG4gICAgICAgICAgICAgICAgICAgIGNbKGggKyAxMDYwKSA+PiAyXSA9IDY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNbKGggKyAxMDY0KSA+PiAyXSA9IGVbKGYgKyA4KSA+PiAxXSB8IDA7XG4gICAgICAgICAgICAgICAgY1soaCArIDEwNjgpID4+IDJdID0gYmkoZVsoZiArIDgpID4+IDFdIDw8IDEpIHwgMDtcbiAgICAgICAgICAgICAgICBjWyhoICsgMTA3MikgPj4gMl0gPSBiaSgoZVsoZiArIDgpID4+IDFdIDw8IDEpIDw8IDIpIHwgMDtcbiAgICAgICAgICAgICAgICBjWyhoICsgMTIpID4+IDJdID1cbiAgICAgICAgICAgICAgICAgICAgXyhcbiAgICAgICAgICAgICAgICAgICAgICAgICgoY1soaCArIDgpID4+IDJdICYgMSkgfCAwKSAhPSAwID8gMSA6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGNbKGggKyA4KSA+PiAyXSAmIDQpIHwgMCkgIT0gMCA/IDIgOiAxXG4gICAgICAgICAgICAgICAgICAgICkgfCAwO1xuICAgICAgICAgICAgICAgIGNbKGggKyAxMzA2MCkgPj4gMl0gPSAoKGNbZiA+PiAyXSB8IDApIC8gMWUzKSB8IDA7XG4gICAgICAgICAgICAgICAgaWYgKChjWyhoICsgMTMwNjApID4+IDJdIHwgMCkgPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNbKGggKyAxMzA2MCkgPj4gMl0gPSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoY1soaCArIDEzMDYwKSA+PiAyXSB8IDApID4gMjU1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjWyhoICsgMTMwNjApID4+IDJdID0gMjU1O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNbKGggKyAxMzA2NCkgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgIGNbKGggKyAxMzA2OCkgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgIGNbKGggKyAxMzA3NikgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICBjcShrLCBoLCAoaCArIDEzMTAwKSB8IDAsIChoICsgMTMwNzIpIHwgMCkgfCAwO1xuICAgICAgICAgICAgICAgIGlmICgoY1soaCArIDEzMDc2KSA+PiAyXSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYzAoaCk7XG4gICAgICAgICAgICAgICAgICAgIGwgPSAwO1xuICAgICAgICAgICAgICAgICAgICBuID0gbDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGo7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY1soaCArIDEwNTIpID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICBjWyhoICsgMTA1NikgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgIGlmICgoYVs3NzI4XSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IGg7XG4gICAgICAgICAgICAgICAgICAgIGJ6KGssIDc3MjgpIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnYoaCkgfCAwO1xuICAgICAgICAgICAgICAgIGwgPSBoO1xuICAgICAgICAgICAgICAgIG4gPSBsO1xuICAgICAgICAgICAgICAgIGkgPSBqO1xuICAgICAgICAgICAgICAgIHJldHVybiBuIHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG1pZF9zb25nX2xvYWRcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNYKGEsIGIpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIHJldHVybiBjVyhhLCAwLCBiKSB8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBtaWRfc29uZ19mcmVlXG4gICAgICAgICAgICBmdW5jdGlvbiBjWShhKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBiID0gMDtcbiAgICAgICAgICAgICAgICBiID0gYTtcbiAgICAgICAgICAgICAgICBieChiKTtcbiAgICAgICAgICAgICAgICBhID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGEgfCAwKSA+PSAxMjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgoY1soYiArIDI4ICsgKGEgPDwgMikpID4+IDJdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzAoY1soYiArIDI4ICsgKGEgPDwgMikpID4+IDJdIHwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKChjWyhiICsgNTQwICsgKGEgPDwgMikpID4+IDJdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzAoY1soYiArIDU0MCArIChhIDw8IDIpKSA+PiAyXSB8IDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGEgPSAoYSArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYzAoY1soYiArIDEwNzIpID4+IDJdIHwgMCk7XG4gICAgICAgICAgICAgICAgYzAoY1soYiArIDEwNjgpID4+IDJdIHwgMCk7XG4gICAgICAgICAgICAgICAgYzAoY1soYiArIDEzMDc2KSA+PiAyXSB8IDApO1xuICAgICAgICAgICAgICAgIGEgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhID4+PiAwID49IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgoY1soYiArIDEzMTA0ICsgKGEgPDwgMikpID4+IDJdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzAoY1soYiArIDEzMTA0ICsgKGEgPDwgMikpID4+IDJdIHwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYSA9IChhICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjMChiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBtaWRfZXhpdFxuICAgICAgICAgICAgZnVuY3Rpb24gY1ooKSB7XG4gICAgICAgICAgICAgICAgbGV0IGEgPSAwLFxuICAgICAgICAgICAgICAgICAgICBiID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgICAgIGEgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoYSB8IDApID49IDEyOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKChjWyg2NzA0ICsgKGEgPDwgMikpID4+IDJdIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYiA9IGNbY1soNjcwNCArIChhIDw8IDIpKSA+PiAyXSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGIgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChkIHwgMCkgPj0gMTI4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNbKGIgKyAoKGQgKiAyOCkgfCAwKSkgPj4gMl0gfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMChjWyhiICsgKChkICogMjgpIHwgMCkpID4+IDJdIHwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IChkICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMChiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGMwKGNbKDY3MDQgKyAoYSA8PCAyKSkgPj4gMl0gfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGNbKDcyMTYgKyAoYSA8PCAyKSkgPj4gMl0gfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gY1tjWyg3MjE2ICsgKGEgPDwgMikpID4+IDJdID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGQgfCAwKSA+PSAxMjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1soZSArICgoZCAqIDI4KSB8IDApKSA+PiAyXSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMwKGNbKGUgKyAoKGQgKiAyOCkgfCAwKSkgPj4gMl0gfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gKGQgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMwKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYzAoY1soNzIxNiArIChhIDw8IDIpKSA+PiAyXSB8IDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGEgPSAoYSArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYmsoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjXyhiLCBjLCBkKSB7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGMgPSBjIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gZCB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAgICAgICBlID0gYjtcbiAgICAgICAgICAgICAgICBiID0gYztcbiAgICAgICAgICAgICAgICBjID0gZDtcbiAgICAgICAgICAgICAgICBkID0gMDtcbiAgICAgICAgICAgICAgICBmID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGQgfCAwKSA8IChiIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoKGYgfCAwKSAhPSAwKSBeIDE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgoYW4oKGUgKyBkKSB8IDAsIDEsIDEsIGMgfCAwKSB8IDApICE9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGggPSAxNzUyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKChhWyhlICsgZCkgfCAwXSB8IDApID09IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoID0gMTc1NTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYVsoZSArIGQpIHwgMF0gfCAwKSA9PSAxMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSAxNzU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgoaCB8IDApID09IDE3NTUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgYVsoZSArIGQpIHwgMF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZiA9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZCA9IChkICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhWyhlICsgZCkgfCAwXSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKChkIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpID0gZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgfCAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSB8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbWFsbG9jXG4gICAgICAgICAgICBmdW5jdGlvbiBjJChhKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBiID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGggPSAwLFxuICAgICAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGsgPSAwLFxuICAgICAgICAgICAgICAgICAgICBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG4gPSAwLFxuICAgICAgICAgICAgICAgICAgICBvID0gMCxcbiAgICAgICAgICAgICAgICAgICAgcCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHEgPSAwLFxuICAgICAgICAgICAgICAgICAgICByID0gMCxcbiAgICAgICAgICAgICAgICAgICAgcyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHQgPSAwLFxuICAgICAgICAgICAgICAgICAgICB1ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgdiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHcgPSAwLFxuICAgICAgICAgICAgICAgICAgICB4ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgeSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHogPSAwLFxuICAgICAgICAgICAgICAgICAgICBBID0gMCxcbiAgICAgICAgICAgICAgICAgICAgQiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIEMgPSAwLFxuICAgICAgICAgICAgICAgICAgICBEID0gMCxcbiAgICAgICAgICAgICAgICAgICAgRSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIEYgPSAwLFxuICAgICAgICAgICAgICAgICAgICBHID0gMCxcbiAgICAgICAgICAgICAgICAgICAgSCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIEkgPSAwLFxuICAgICAgICAgICAgICAgICAgICBKID0gMCxcbiAgICAgICAgICAgICAgICAgICAgSyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIEwgPSAwLFxuICAgICAgICAgICAgICAgICAgICBNID0gMCxcbiAgICAgICAgICAgICAgICAgICAgTiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIE8gPSAwLFxuICAgICAgICAgICAgICAgICAgICBQID0gMCxcbiAgICAgICAgICAgICAgICAgICAgUSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIFIgPSAwLFxuICAgICAgICAgICAgICAgICAgICBTID0gMCxcbiAgICAgICAgICAgICAgICAgICAgVCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIFUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBWID0gMCxcbiAgICAgICAgICAgICAgICAgICAgVyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIFggPSAwLFxuICAgICAgICAgICAgICAgICAgICBZID0gMCxcbiAgICAgICAgICAgICAgICAgICAgWiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIF8gPSAwLFxuICAgICAgICAgICAgICAgICAgICAkID0gMCxcbiAgICAgICAgICAgICAgICAgICAgYWEgPSAwLFxuICAgICAgICAgICAgICAgICAgICBhYiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGFjID0gMCxcbiAgICAgICAgICAgICAgICAgICAgYWQgPSAwLFxuICAgICAgICAgICAgICAgICAgICBhZSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGFmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgYWcgPSAwLFxuICAgICAgICAgICAgICAgICAgICBhaCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGFpID0gMCxcbiAgICAgICAgICAgICAgICAgICAgYWogPSAwLFxuICAgICAgICAgICAgICAgICAgICBhayA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGFsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgYW4gPSAwLFxuICAgICAgICAgICAgICAgICAgICBhbyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGFwID0gMCxcbiAgICAgICAgICAgICAgICAgICAgYXIgPSAwLFxuICAgICAgICAgICAgICAgICAgICBhcyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGF0ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgYXUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBhdiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGF3ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgYXggPSAwLFxuICAgICAgICAgICAgICAgICAgICBheSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGF6ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgYUEgPSAwLFxuICAgICAgICAgICAgICAgICAgICBhQiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGFDID0gMCxcbiAgICAgICAgICAgICAgICAgICAgYUQgPSAwLFxuICAgICAgICAgICAgICAgICAgICBhRSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGFGID0gMCxcbiAgICAgICAgICAgICAgICAgICAgYUcgPSAwLFxuICAgICAgICAgICAgICAgICAgICBhSCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGFJID0gMDtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhID4+PiAwIDwgMjQ1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+Pj4gMCA8IDExKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gKGEgKyAxMSkgJiAtODtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBiID4+PiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IGNbMTk5Nl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGUgPj4+IChkID4+PiAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGYgJiAzKSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gKCgoZiAmIDEpIF4gMSkgKyBkKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IGcgPDwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gKDgwMjQgKyAoaCA8PCAyKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSAoODAyNCArICgoaCArIDIpIDw8IDIpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IGNbaiA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IChoICsgOCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBjW2sgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpIHwgMCkgPT0gKGwgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sxOTk2XSA9IGUgJiB+KDEgPDwgZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA+Pj4gMCA8IChjWzJlM10gfCAwKSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gKGwgKyAxMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjW20gPj4gMl0gfCAwKSA9PSAoaCB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1ttID4+IDJdID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW2ogPj4gMl0gPSBsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGcgPDwgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhoICsgNCkgPj4gMl0gPSBsIHwgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gKGggKyAobCB8IDQpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tqID4+IDJdID0gY1tqID4+IDJdIHwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYiA+Pj4gMCA8PSAoY1sxOTk4XSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IDIgPDwgZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gKGYgPDwgZCkgJiAoaiB8IC1qKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gKChsICYgLWwpIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAoaiA+Pj4gMTIpICYgMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGogPj4+IChsID4+PiAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gKGkgPj4+IDUpICYgODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gaSA+Pj4gKGogPj4+IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAobSA+Pj4gMikgJiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBtID4+PiAoaSA+Pj4gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IChwID4+PiAxKSAmIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IHAgPj4+IChtID4+PiAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gKHEgPj4+IDEpICYgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gKChqIHwgbCB8IGkgfCBtIHwgcCkgKyAocSA+Pj4gKHAgPj4+IDApKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSByIDw8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9ICg4MDI0ICsgKHAgPDwgMikpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gKDgwMjQgKyAoKHAgKyAyKSA8PCAyKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBjW20gPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAocCArIDgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gY1tpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocSB8IDApID09IChsIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMTk5Nl0gPSBlICYgfigxIDw8IHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPj4+IDAgPCAoY1syZTNdIHwgMCkgPj4+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IChsICsgMTIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1tqID4+IDJdIHwgMCkgPT0gKHAgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbaiA+PiAyXSA9IHE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1ttID4+IDJdID0gbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSByIDw8IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IChsIC0gYikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKHAgKyA0KSA+PiAyXSA9IGIgfCAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSAocSArIGIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhxICsgKGIgfCA0KSkgPj4gMl0gPSBtIHwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhxICsgbCkgPj4gMl0gPSBtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBjWzE5OThdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGwgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBjWzIwMDFdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGwgPj4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBkIDw8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAoODAyNCArIChsIDw8IDIpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBjWzE5OTZdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IDEgPDwgZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoayAmIGgpIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMTk5Nl0gPSBrIHwgaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKDgwMjQgKyAoKGwgKyAyKSA8PCAyKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gKDgwMjQgKyAoKGwgKyAyKSA8PCAyKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBjW2QgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwID49IChjWzJlM10gfCAwKSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1t0ID4+IDJdID0gcTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1socyArIDEyKSA+PiAyXSA9IHE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKHEgKyA4KSA+PiAyXSA9IHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKHEgKyAxMikgPj4gMl0gPSBmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzE5OThdID0gbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzIwMDFdID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gY1sxOTk3XSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGwgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBoID0gKChsICYgLWwpIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbCA9IChoID4+PiAxMikgJiAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBoID4+PiAobCA+Pj4gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoID0gKGsgPj4+IDUpICYgODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBrID4+PiAoaCA+Pj4gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBrID0gKHAgPj4+IDIpICYgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBwID4+PiAoayA+Pj4gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwID0gKHIgPj4+IDEpICYgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSByID4+PiAocCA+Pj4gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByID0gKGQgPj4+IDEpICYgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGcgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg4Mjg4ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGggfCBsIHwgayB8IHAgfCByKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGQgPj4+IChyID4+PiAwKSkpIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICByID0gZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcCA9ICgoY1soZyArIDQpID4+IDJdICYgLTgpIC0gYikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gY1sociArIDE2KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChnIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gY1sociArIDIwKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoayB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9ICgoY1sodSArIDQpID4+IDJdICYgLTgpIC0gYikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBnID4+PiAwIDwgcCA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gdTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gayA/IHUgOiBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBrID8gZyA6IHA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByID0gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBjWzJlM10gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDAgPCBpID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSAociArIGIpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPj4+IDAgPj0gZSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gY1soZCArIDI0KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmID0gY1soZCArIDEyKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgPT0gKGQgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gKGQgKyAyMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gY1txID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChnIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IChkICsgMTYpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBjW2sgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAodyArIDIwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gY1txID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZyB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gcTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAodyArIDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gY1txID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZyB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IGc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPj4+IDAgPCBpID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW3ggPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBjWyhkICsgOCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocSA+Pj4gMCA8IGkgPj4+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gKHEgKyAxMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNbZyA+PiAyXSB8IDApICE9IChkIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gKGYgKyA4KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1trID4+IDJdIHwgMCkgPT0gKGQgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tnID4+IDJdID0gZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbayA+PiAyXSA9IHE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBMMjMwNDogZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IChkICsgMjgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9ICg4Mjg4ICsgKGNbZiA+PiAyXSA8PCAyKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGQgfCAwKSA9PSAoY1tpID4+IDJdIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW2kgPj4gMl0gPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodiB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMTk5N10gPSBjWzE5OTddICYgfigxIDw8IGNbZiA+PiAyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDIzMDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlID4+PiAwIDwgKGNbMmUzXSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gKGUgKyAxNikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1txID4+IDJdIHwgMCkgPT0gKGQgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW3EgPj4gMl0gPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGUgKyAyMCkgPj4gMl0gPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHYgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwyMzA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID4+PiAwIDwgKGNbMmUzXSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sodiArIDI0KSA+PiAyXSA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBjWyhkICsgMTYpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID4+PiAwIDwgKGNbMmUzXSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKHYgKyAxNikgPj4gMl0gPSBmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgMjQpID4+IDJdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGNbKGQgKyAyMCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA+Pj4gMCA8IChjWzJlM10gfCAwKSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sodiArIDIwKSA+PiAyXSA9IGY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhmICsgMjQpID4+IDJdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA+Pj4gMCA8IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IChwICsgYikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGQgKyA0KSA+PiAyXSA9IGUgfCAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAociArIChlICsgNCkpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW2YgPj4gMl0gPSBjW2YgPj4gMl0gfCAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhkICsgNCkgPj4gMl0gPSBiIHwgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhyICsgKGIgfCA0KSkgPj4gMl0gPSBwIHwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhyICsgKHAgKyBiKSkgPj4gMl0gPSBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBjWzE5OThdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGYgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBjWzIwMDFdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGYgPj4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpIDw8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSAoODAyNCArIChmIDw8IDIpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBjWzE5OTZdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IDEgPDwgaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoayAmIGcpIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMTk5Nl0gPSBrIHwgZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gcTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ID0gKDgwMjQgKyAoKGYgKyAyKSA8PCAyKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gKDgwMjQgKyAoKGYgKyAyKSA8PCAyKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBjW2kgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID4+PiAwID49IChjWzJlM10gfCAwKSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeiA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1t6ID4+IDJdID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soeSArIDEyKSA+PiAyXSA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGUgKyA4KSA+PiAyXSA9IHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGUgKyAxMikgPj4gMl0gPSBxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzE5OThdID0gcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzIwMDFdID0gbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAoZCArIDgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiB8IDA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+Pj4gMCA+IDQyOTQ5NjcyMzEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmID0gKGEgKyAxMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGYgJiAtODtcbiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBjWzE5OTddIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoayB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAtZyB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZiA+Pj4gODtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID4+PiAwID4gMTY3NzcyMTUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSAzMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAoKChpICsgMTA0ODMyMCkgfCAwKSA+Pj4gMTYpICYgODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGkgPDwgZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9ICgoKGwgKyA1MjAxOTIpIHwgMCkgPj4+IDE2KSAmIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBsIDw8IGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAoKChqICsgMjQ1NzYwKSB8IDApID4+PiAxNikgJiAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCID0gKDE0IC0gKGggfCBmIHwgbCkgKyAoKGogPDwgbCkgPj4+IDE1KSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZyA+Pj4gKCgoQiArIDcpIHwgMCkgPj4+IDApKSAmIDEpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCIDw8IDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGNbKDgyODggKyAoQSA8PCAyKSkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgTDIzNTI6IGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEID0gcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChBIHwgMCkgPT0gMzEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRiA9ICgyNSAtIChBID4+PiAxKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBnIDw8IEY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiA9IGNbKHAgKyA0KSA+PiAyXSAmIC04O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IChCIC0gZykgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPj4+IDAgPCBtID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChCIHwgMCkgPT0gKGcgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRCA9IGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUgPSBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMjM1MjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHID0gcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSCA9IGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHID0gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIID0gbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBjWyhwICsgMjApID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKHAgKyAxNiArICgocSA+Pj4gMzEpIDw8IDIpKSA+PiAyXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobCB8IDApID09IDApIHwgKChsIHwgMCkgPT0gKEIgfCAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoQiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gRztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEID0gSDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFID0gajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IEc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IEg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IEI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IHEgPDwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoRSB8IDApID09IDApICYgKChDIHwgMCkgPT0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMiA8PCBBO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBrICYgKGkgfCAtaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAoKHIgJiAtcikgLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IChpID4+PiAxMikgJiAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gaSA+Pj4gKHIgPj4+IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAoZSA+Pj4gNSkgJiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBlID4+PiAoaSA+Pj4gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IChxID4+PiAyKSAmIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHEgPj4+IChlID4+PiAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gKHAgPj4+IDEpICYgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gcCA+Pj4gKHEgPj4+IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAobSA+Pj4gMSkgJiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDgyODggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGkgfCByIHwgZSB8IHEgfCBwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtID4+PiAocCA+Pj4gMCkpKSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJID0gRTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKID0gRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBLID0gQztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IEk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IEQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IEM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9ICgoY1socCArIDQpID4+IDJdICYgLTgpIC0gZykgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gZSA+Pj4gMCA8IG0gPj4+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSByID8gZSA6IG07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSByID8gcCA6IHE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBjWyhwICsgMTYpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IGNbKHAgKyAyMCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHIgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEsgPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEsgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSiA+Pj4gMCA+PSAoKChjWzE5OThdIHwgMCkgLSBnKSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBxID0gSztcbiAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBjWzJlM10gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEgPj4+IDAgPCBtID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAocSArIGcpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEgPj4+IDAgPj0gcCA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gY1soSyArIDI0KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gY1soSyArIDEyKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpIHwgMCkgPT0gKEsgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gKEsgKyAyMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gY1tyID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChkIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IChLICsgMTYpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgPSBjW2ogPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChCIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEwgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNID0gQjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOID0gajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0gPSBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTiA9IHI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAoTSArIDIwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gY1tyID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZCB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNID0gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOID0gcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAoTSArIDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gY1tyID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZCB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTiA9IHI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE4gPj4+IDAgPCBtID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW04gPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTCA9IE07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBjWyhLICsgOCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA+Pj4gMCA8IG0gPj4+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gKHIgKyAxMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNbZCA+PiAyXSB8IDApICE9IChLIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gKGkgKyA4KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1tqID4+IDJdIHwgMCkgPT0gKEsgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tkID4+IDJdID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbaiA+PiAyXSA9IHI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBMMjQwMjogZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IChLICsgMjgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9ICg4Mjg4ICsgKGNbaSA+PiAyXSA8PCAyKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEsgfCAwKSA9PSAoY1ttID4+IDJdIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW20gPj4gMl0gPSBMO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoTCB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMTk5N10gPSBjWzE5OTddICYgfigxIDw8IGNbaSA+PiAyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDI0MDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlID4+PiAwIDwgKGNbMmUzXSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gKGUgKyAxNikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1tyID4+IDJdIHwgMCkgPT0gKEsgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW3IgPj4gMl0gPSBMO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGUgKyAyMCkgPj4gMl0gPSBMO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEwgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwyNDAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMID4+PiAwIDwgKGNbMmUzXSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soTCArIDI0KSA+PiAyXSA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBjWyhLICsgMTYpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID4+PiAwIDwgKGNbMmUzXSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKEwgKyAxNikgPj4gMl0gPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhpICsgMjQpID4+IDJdID0gTDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGNbKEsgKyAyMCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+Pj4gMCA8IChjWzJlM10gfCAwKSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soTCArIDIwKSA+PiAyXSA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhpICsgMjQpID4+IDJdID0gTDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEogPj4+IDAgPCAxNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gKEogKyBnKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKEsgKyA0KSA+PiAyXSA9IGUgfCAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gKHEgKyAoZSArIDQpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbaSA+PiAyXSA9IGNbaSA+PiAyXSB8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soSyArIDQpID4+IDJdID0gZyB8IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKHEgKyAoZyB8IDQpKSA+PiAyXSA9IEogfCAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhxICsgKEogKyBnKSkgPj4gMl0gPSBKO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gSiA+Pj4gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEogPj4+IDAgPCAyNTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBpIDw8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gKDgwMjQgKyAoZSA8PCAyKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IGNbMTk5Nl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IDEgPDwgaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChyICYgaikgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMTk5Nl0gPSByIHwgajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyA9IG07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAgPSAoODAyNCArICgoZSArIDIpIDw8IDIpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9ICg4MDI0ICsgKChlICsgMikgPDwgMikpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGNbaSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkID4+PiAwID49IChjWzJlM10gfCAwKSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tQID4+IDJdID0gaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKE8gKyAxMikgPj4gMl0gPSBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1socSArIChnICsgOCkpID4+IDJdID0gTztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKHEgKyAoZyArIDEyKSkgPj4gMl0gPSBtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBKID4+PiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGogfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKID4+PiAwID4gMTY3NzcyMTUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUSA9IDMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9ICgoKGogKyAxMDQ4MzIwKSB8IDApID4+PiAxNikgJiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBqIDw8IHI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9ICgoKGkgKyA1MjAxOTIpIHwgMCkgPj4+IDE2KSAmIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiA9IGkgPDwgZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gKCgoQiArIDI0NTc2MCkgfCAwKSA+Pj4gMTYpICYgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE0IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkIHwgciB8IGkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQiA8PCBpKSA+Pj4gMTUpKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSiA+Pj4gKCgobCArIDcpIHwgMCkgPj4+IDApKSAmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsIDw8IDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9ICg4Mjg4ICsgKFEgPDwgMikpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1socSArIChnICsgMjgpKSA+PiAyXSA9IFE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKHEgKyAoZyArIDIwKSkgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhxICsgKGcgKyAxNikpID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGNbMTk5N10gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gMSA8PCBRO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChtICYgbCkgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzE5OTddID0gbSB8IGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW2ogPj4gMl0gPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1socSArIChnICsgMjQpKSA+PiAyXSA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhxICsgKGcgKyAxMikpID4+IDJdID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKHEgKyAoZyArIDgpKSA+PiAyXSA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFEgfCAwKSA9PSAzMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gKDI1IC0gKFEgPj4+IDEpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IEogPDwgUjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGNbaiA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhtICsgNCkgPj4gMl0gJiAtOCkgfCAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChKIHwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IChtICsgMTYgKyAoKGwgPj4+IDMxKSA8PCAyKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IGNbUyA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGogfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCA9IDE5MTM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBsIDw8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChUIHwgMCkgPT0gMTkxMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFMgPj4+IDAgPCAoY1syZTNdIHwgMCkgPj4+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1MgPj4gMl0gPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKHEgKyAoZyArIDI0KSkgPj4gMl0gPSBtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKHEgKyAoZyArIDEyKSkgPj4gMl0gPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKHEgKyAoZyArIDgpKSA+PiAyXSA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IChtICsgOCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gY1tsID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGNbMmUzXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtID4+PiAwIDwgaSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqID4+PiAwIDwgaSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soaiArIDEyKSA+PiAyXSA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW2wgPj4gMl0gPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1socSArIChnICsgOCkpID4+IDJdID0gajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKHEgKyAoZyArIDEyKSkgPj4gMl0gPSBtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1socSArIChnICsgMjQpKSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcSA9IChLICsgOCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChxIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gcTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgIEsgPSBjWzE5OThdIHwgMDtcbiAgICAgICAgICAgICAgICBpZiAobyA+Pj4gMCA8PSBLID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIFMgPSAoSyAtIG8pIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgSiA9IGNbMjAwMV0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoUyA+Pj4gMCA+IDE1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBSID0gSjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbMjAwMV0gPSBSICsgbztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbMTk5OF0gPSBTO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1soUiArIChvICsgNCkpID4+IDJdID0gUyB8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjWyhSICsgSykgPj4gMl0gPSBTO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1soSiArIDQpID4+IDJdID0gbyB8IDM7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjWzE5OThdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbMjAwMV0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1soSiArIDQpID4+IDJdID0gSyB8IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICBTID0gKEogKyAoSyArIDQpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjW1MgPj4gMl0gPSBjW1MgPj4gMl0gfCAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG4gPSAoSiArIDgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBKID0gY1sxOTk5XSB8IDA7XG4gICAgICAgICAgICAgICAgaWYgKG8gPj4+IDAgPCBKID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIFMgPSAoSiAtIG8pIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY1sxOTk5XSA9IFM7XG4gICAgICAgICAgICAgICAgICAgIEogPSBjWzIwMDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgSyA9IEo7XG4gICAgICAgICAgICAgICAgICAgIGNbMjAwMl0gPSBLICsgbztcbiAgICAgICAgICAgICAgICAgICAgY1soSyArIChvICsgNCkpID4+IDJdID0gUyB8IDE7XG4gICAgICAgICAgICAgICAgICAgIGNbKEogKyA0KSA+PiAyXSA9IG8gfCAzO1xuICAgICAgICAgICAgICAgICAgICBuID0gKEogKyA4KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGNbMTY2Nl0gfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBKID0gYW0oMzApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKChKIC0gMSkgJiBKKSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzE2NjhdID0gSjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzE2NjddID0gSjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzE2NjldID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sxNjcwXSA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMTY3MV0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMjEwN10gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMTY2Nl0gPSAoKGFKKDApIHwgMCkgJiAtMTYpIF4gMTQzMTY1NTc2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgIEogPSAobyArIDQ4KSB8IDA7XG4gICAgICAgICAgICAgICAgUyA9IGNbMTY2OF0gfCAwO1xuICAgICAgICAgICAgICAgIEsgPSAobyArIDQ3KSB8IDA7XG4gICAgICAgICAgICAgICAgUiA9IChTICsgSykgfCAwO1xuICAgICAgICAgICAgICAgIFEgPSAtUyB8IDA7XG4gICAgICAgICAgICAgICAgUyA9IFIgJiBRO1xuICAgICAgICAgICAgICAgIGlmIChTID4+PiAwIDw9IG8gPj4+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbiA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgTyA9IGNbMjEwNl0gfCAwO1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChPIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgUCA9IGNbMjEwNF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgTCA9IChQICsgUykgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChMID4+PiAwIDw9IFAgPj4+IDApIHwgKEwgPj4+IDAgPiBPID4+PiAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgIEwyNDk0OiBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoKGNbMjEwN10gJiA0KSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE8gPSBjWzIwMDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIEwyNDk2OiBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChPIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUID0gMTk0MztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMID0gTztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCA9IDg0MzI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVID0gUCB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNID0gY1tVID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNID4+PiAwIDw9IEwgPj4+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWID0gKFAgKyA0KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE0gKyAoY1tWID4+IDJdIHwgMCkpIHwgMCkgPj4+IDAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMID4+PiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0gPSBjWyhQICsgOCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChNIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQgPSAxOTQzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwyNDk2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQID0gTTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFAgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUID0gMTk0MztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEwgPSAoUiAtIChjWzE5OTldIHwgMCkpICYgUTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEwgPj4+IDAgPj0gMjE0NzQ4MzY0Nykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gYVMoTCB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobSB8IDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChjW1UgPj4gMl0gfCAwKSArIChjW1YgPj4gMl0gfCAwKSkgfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWCA9IGUgPyBtIDogLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFkgPSBlID8gTCA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFogPSBtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfID0gTDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCA9IDE5NTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChUIHwgMCkgPT0gMTk0Mykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPID0gYVMoMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKE8gfCAwKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gTztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTCA9IGNbMTY2N10gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gKEwgLSAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKG0gJiBnKSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQgPSBTO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCA9IChTIC0gZyArICgobSArIGcpICYgLUwpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTCA9IGNbMjEwNF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gKEwgKyAkKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCQgPj4+IDAgPiBvID4+PiAwKSAmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCQgPj4+IDAgPCAyMTQ3NDgzNjQ3KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGNbMjEwNl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG0gfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGcgPj4+IDAgPD0gTCA+Pj4gMCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnID4+PiAwID4gbSA+Pj4gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBhUygkIHwgMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gKG0gfCAwKSA9PSAoTyB8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYID0gZyA/IE8gOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWSA9IGcgPyAkIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWiA9IG07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gPSAkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUID0gMTk1MjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEwyNTE2OiBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChUIHwgMCkgPT0gMTk1Mikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gLV8gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFggfCAwKSAhPSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWEgPSBZO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWIgPSBYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCA9IDE5NjM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMjQ5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChaIHwgMCkgIT0gLTEpICZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXyA+Pj4gMCA8IDIxNDc0ODM2NDcpICZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXyA+Pj4gMCA8IEogPj4+IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gY1sxNjY4XSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyA9IChLIC0gXyArIGcpICYgLWc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE8gPj4+IDAgPj0gMjE0NzQ4MzY0Nykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYyA9IF87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGFTKE8gfCAwKSB8IDApID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFTKG0gfCAwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcgPSBZO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMjUxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYyA9IChPICsgXykgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjID0gXztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoWiB8IDApID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXID0gWTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFhID0gYWM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYiA9IFo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUID0gMTk2MztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwyNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjWzIxMDddID0gY1syMTA3XSB8IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZCA9IFc7XG4gICAgICAgICAgICAgICAgICAgICAgICBUID0gMTk2MDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIFQgPSAxOTYwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKFQgfCAwKSA9PSAxOTYwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUyA+Pj4gMCA+PSAyMTQ3NDgzNjQ3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBXID0gYVMoUyB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIFogPSBhUygwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChaIHwgMCkgIT0gLTEpICZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXIHwgMCkgIT0gLTEpICZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFcgPj4+IDAgPCBaID4+PiAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYWMgPSAoWiAtIFcpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIFogPSBhYyA+Pj4gMCA+ICgobyArIDQwKSB8IDApID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgWSA9IFogPyBXIDogLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFkgfCAwKSAhPSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFhID0gWiA/IGFjIDogYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWIgPSBZO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQgPSAxOTYzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKFQgfCAwKSA9PSAxOTYzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZCA9ICgoY1syMTA0XSB8IDApICsgYWEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbMjEwNF0gPSBhZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZCA+Pj4gMCA+IChjWzIxMDVdIHwgMCkgPj4+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzIxMDVdID0gYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhZCA9IGNbMjAwMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgTDI1MzY6IGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGFkIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gY1syZTNdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoUyB8IDApID09IDApIHwgKGFiID4+PiAwIDwgUyA+Pj4gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMmUzXSA9IGFiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMjEwOF0gPSBhYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1syMTA5XSA9IGFhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzIxMTFdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1syMDA1XSA9IGNbMTY2Nl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMjAwNF0gPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFkgPSBTIDw8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYyA9ICg4MDI0ICsgKFkgPDwgMikpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKDgwMjQgKyAoKFkgKyAzKSA8PCAyKSkgPj4gMl0gPSBhYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKDgwMjQgKyAoKFkgKyAyKSA8PCAyKSkgPj4gMl0gPSBhYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSAoUyArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoUyA+Pj4gMCA8IDMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IChhYiArIDgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoUyAmIDcpIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWUgPSAtUyAmIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IChhYSAtIDQwIC0gYWUpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1syMDAyXSA9IGFiICsgYWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMTk5OV0gPSBTO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhYiArIChhZSArIDQpKSA+PiAyXSA9IFMgfCAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhYiArIChhYSAtIDM2KSkgPj4gMl0gPSA0MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1syMDAzXSA9IGNbMTY3MF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IDg0MzI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZiA9IGNbUyA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZyA9IChTICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWggPSBjW2FnID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYWIgfCAwKSA9PSAoKGFmICsgYWgpIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUID0gMTk3NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjID0gY1soUyArIDgpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYWMgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBhYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFQgfCAwKSA9PSAxOTc1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoY1soUyArIDEyKSA+PiAyXSAmIDgpIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWMgPSBhZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWMgPj4+IDAgPj0gYWYgPj4+IDApICZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhYyA+Pj4gMCA8IGFiID4+PiAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW2FnID4+IDJdID0gYWggKyBhYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYyA9IGNbMjAwMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFkgPSAoKGNbMTk5OV0gfCAwKSArIGFhKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWiA9IGFjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcgPSAoYWMgKyA4KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoVyAmIDcpIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWkgPSAtVyAmIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcgPSAoWSAtIGFpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1syMDAyXSA9IFogKyBhaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzE5OTldID0gVztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhaICsgKGFpICsgNCkpID4+IDJdID0gVyB8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soWiArIChZICsgNCkpID4+IDJdID0gNDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1syMDAzXSA9IGNbMTY3MF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDI1MzY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWIgPj4+IDAgPCAoY1syZTNdIHwgMCkgPj4+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMmUzXSA9IGFiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSAoYWIgKyBhYSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZID0gODQzMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqID0gWSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNbYWogPj4gMl0gfCAwKSA9PSAoUyB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCA9IDE5ODU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaID0gY1soWSArIDgpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoWiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWSA9IFo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChUIHwgMCkgPT0gMTk4NSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGNbKFkgKyAxMikgPj4gMl0gJiA4KSB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbYWogPj4gMl0gPSBhYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gKFkgKyA0KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tTID4+IDJdID0gKGNbUyA+PiAyXSB8IDApICsgYWE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IChhYiArIDgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChTICYgNykgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFrID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhayA9IC1TICYgNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IChhYiArIChhYSArIDgpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoUyAmIDcpIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWwgPSAtUyAmIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSAoYWIgKyAoYWwgKyBhYSkpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaID0gUztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXID0gKGFrICsgbykgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjID0gKGFiICsgVykgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gPSBhYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLID0gKFMgLSAoYWIgKyBhaykgLSBvKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soYWIgKyAoYWsgKyA0KSkgPj4gMl0gPSBvIHwgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoWiB8IDApID09IChjWzIwMDJdIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEogPSAoKGNbMTk5OV0gfCAwKSArIEspIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMTk5OV0gPSBKO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1syMDAyXSA9IF87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhYiArIChXICsgNCkpID4+IDJdID0gSiB8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFogfCAwKSA9PSAoY1syMDAxXSB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSiA9ICgoY1sxOTk4XSB8IDApICsgSykgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMTk5OF0gPSBKO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMjAwMV0gPSBfO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGFiICsgKFcgKyA0KSkgPj4gMl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKIHwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhYiArIChKICsgVykpID4+IDJdID0gSjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEogPSAoYWEgKyA0KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYID0gY1soYWIgKyAoSiArIGFsKSkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoWCAmIDMpIHwgMCkgPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQgPSBYICYgLTg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgViA9IFggPj4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDI1NzE6IGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFggPj4+IDAgPCAyNTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhYiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGFsIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWEpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhYSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsKSkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg4MDI0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChWIDw8IDEpIDw8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVSB8IDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSIHwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVSA+Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjWzJlM10gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID4+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMikgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChaIHwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUSB8IDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFUgfCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sxOTk2XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMTk5Nl0gJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+KDEgPDwgVik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUSB8IDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSIHwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFEgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUSA+Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjWzJlM10gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID4+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFogfCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuID0gbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVSArIDEyKSA+PiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gUTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbYW4gPj4gMl0gPSBVO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhbCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYSkpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFhICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWwpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFAgfCAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUiB8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8gPSBhbCB8IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhYiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEogK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPKSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhYiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChPICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFhKSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTyB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW8gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcCA9IE87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXIgPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXAgPSBMO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXIgPSBnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXAgPSBMO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyID0gZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEwgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXAgPSBMO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyID0gZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhciA+Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjWzJlM10gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID4+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW8gPSBhcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhYiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYWwgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWEpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA+Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjWzJlM10gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID4+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEwgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSIHwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFIgfCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTCA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gUDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFvID0gUDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG0gfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWEgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWwpKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg4Mjg4ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQID4+IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFIgfCAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1tVID4+IDJdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVID4+IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IGFvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYW8gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICE9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sxOTk3XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzE5OTddICZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMjU3MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID4+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgPFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbMmUzXSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPj4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNikgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFIgfCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gYW87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjApID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPSBhbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYW8gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDI1NzE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbyA+Pj4gMCA8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNbMmUzXSB8IDApID4+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYW8gKyAyNCkgPj4gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IG07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gYWwgfCAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhYiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWEpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFAgfCAwKSAhPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAgPj4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1syZTNdIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA+Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYW8gK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNikgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IFA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQpID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPSBhbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEogK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIpKSA+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChQIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAgPj4+IDAgPFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjWzJlM10gfCAwKSA+Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFvICsgMjApID4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA9IFA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFAgKyAyNCkgPj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gYW87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhYiArICgoJCB8IGFsKSArIGFhKSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0ID0gKCQgKyBLKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzID0gWjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCA9IEs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKID0gKGFzICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tKID4+IDJdID0gY1tKID4+IDJdICYgLTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhYiArIChXICsgNCkpID4+IDJdID0gYXQgfCAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soYWIgKyAoYXQgKyBXKSkgPj4gMl0gPSBhdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEogPSBhdCA+Pj4gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdCA+Pj4gMCA8IDI1Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYgPSBKIDw8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWCA9ICg4MDI0ICsgKFYgPDwgMikpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQID0gY1sxOTk2XSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IDEgPDwgSjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUCAmIG0pIHwgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzE5OTZdID0gUCB8IG07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdSA9IFg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDgwMjQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFYgKyAyKSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDgwMjQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFYgKyAyKSA8PFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVSA9IGNbSiA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVSA+Pj4gMCA+PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjWzJlM10gfCAwKSA+Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXUgPSBVO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2ID0gSjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbYXYgPj4gMl0gPSBfO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGF1ICsgMTIpID4+IDJdID0gXztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhYiArIChXICsgOCkpID4+IDJdID0gYXU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soYWIgKyAoVyArIDEyKSkgPj4gMl0gPSBYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgViA9IGFjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGF0ID4+PiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXcgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0ID4+PiAwID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Nzc3MjE1XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXcgPSAzMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgobSArIDEwNDgzMjApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA+Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNikgJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCA9IG0gPDwgUDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgkICsgNTIwMTkyKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPj4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYpICZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFUgPSAkIDw8IEo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoVSArIDI0NTc2MCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID4+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2KSAmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNCAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEogfCBQIHwgJCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVSA8PCAkKSA+Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUpKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGF0ID4+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFEgKyA3KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApID4+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkgJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChRIDw8IDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9ICg4Mjg4ICsgKGF3IDw8IDIpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhYiArIChXICsgMjgpKSA+PiAyXSA9IGF3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soYWIgKyAoVyArIDIwKSkgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soYWIgKyAoVyArIDE2KSkgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWCA9IGNbMTk5N10gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUSA9IDEgPDwgYXc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChYICYgUSkgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sxOTk3XSA9IFggfCBRO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbbSA+PiAyXSA9IFY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soYWIgKyAoVyArIDI0KSkgPj4gMl0gPSBtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGFiICsgKFcgKyAxMikpID4+IDJdID0gVjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhYiArIChXICsgOCkpID4+IDJdID0gVjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYXcgfCAwKSA9PSAzMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXggPSAoMjUgLSAoYXcgPj4+IDEpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRID0gYXQgPDwgYXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYID0gY1ttID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNbKFggKyA0KSA+PiAyXSAmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtOCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGF0IHwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChRID4+PiAzMSkgPDwgMikpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gY1theSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUID0gMjA1ODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUSA9IFEgPDwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWCA9IG07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChUIHwgMCkgPT0gMjA1OCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXkgPj4+IDAgPFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY1syZTNdIHwgMCkgPj4+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1theSA+PiAyXSA9IFY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWIgKyAoVyArIDI0KSkgPj4gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gWDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhYiArIChXICsgMTIpKSA+PiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPSBWO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFiICsgKFcgKyA4KSkgPj4gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gVjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUSA9IChYICsgOCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGNbUSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkID0gY1syZTNdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChYID4+PiAwIDwgJCA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobSA+Pj4gMCA8ICQgPj4+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhtICsgMTIpID4+IDJdID0gVjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1EgPj4gMl0gPSBWO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGFiICsgKFcgKyA4KSkgPj4gMl0gPSBtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGFiICsgKFcgKyAxMikpID4+IDJdID0gWDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhYiArIChXICsgMjQpKSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gKGFiICsgKGFrIHwgOCkpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZID0gYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcgPSA4NDMyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXogPSBjW1cgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF6ID4+PiAwIDw9IFkgPj4+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQSA9IGNbKFcgKyA0KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUIgPSAoYXogKyBhQSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhQiA+Pj4gMCA+IFkgPj4+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVyA9IGNbKFcgKyA4KSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVyA9IChheiArIChhQSAtIDM5KSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChXICYgNykgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQyA9IC1XICYgNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXID0gKGF6ICsgKGFBIC0gNDcgKyBhQykpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWMgPSBXID4+PiAwIDwgKChhZCArIDE2KSB8IDApID4+PiAwID8gWSA6IFc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcgPSAoYWMgKyA4KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gPSAoYWIgKyA4KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKF8gJiA3KSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFEID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFEID0gLV8gJiA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gPSAoYWEgLSA0MCAtIGFEKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMjAwMl0gPSBhYiArIGFEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzE5OTldID0gXztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soYWIgKyAoYUQgKyA0KSkgPj4gMl0gPSBfIHwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soYWIgKyAoYWEgLSAzNikpID4+IDJdID0gNDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMjAwM10gPSBjWzE2NzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhYyArIDQpID4+IDJdID0gMjc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbVyA+PiAyXSA9IGNbMjEwOF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKFcgKyA0KSA+PiAyXSA9IGNbMjEwOV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKFcgKyA4KSA+PiAyXSA9IGNbMjExMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKFcgKyAxMikgPj4gMl0gPSBjWzIxMTFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzIxMDhdID0gYWI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMjEwOV0gPSBhYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1syMTExXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMjExMF0gPSBXO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXID0gKGFjICsgMjgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tXID4+IDJdID0gNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoYWMgKyAzMikgfCAwKSA+Pj4gMCA8IGFCID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfID0gVztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVyA9IChfICsgNCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbVyA+PiAyXSA9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoXyArIDgpIHwgMCkgPj4+IDAgPCBhQiA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfID0gVztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhYyB8IDApID09IChZIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gPSAoYWMgLSBhZCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXID0gKFkgKyAoXyArIDQpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbVyA+PiAyXSA9IGNbVyA+PiAyXSAmIC0yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhZCArIDQpID4+IDJdID0gXyB8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKFkgKyBfKSA+PiAyXSA9IF87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcgPSBfID4+PiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXyA+Pj4gMCA8IDI1Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSyA9IFcgPDwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFogPSAoODAyNCArIChLIDw8IDIpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gY1sxOTk2XSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gMSA8PCBXO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKFMgJiBtKSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sxOTk2XSA9IFMgfCBtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhRSA9IFo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFGID0gKDgwMjQgKyAoKEsgKyAyKSA8PCAyKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcgPSAoODAyNCArICgoSyArIDIpIDw8IDIpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEgPSBjW1cgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUSA+Pj4gMCA+PSAoY1syZTNdIHwgMCkgPj4+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFFID0gUTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFGID0gVztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1thRiA+PiAyXSA9IGFkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soYUUgKyAxMikgPj4gMl0gPSBhZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGFkICsgOCkgPj4gMl0gPSBhRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGFkICsgMTIpID4+IDJdID0gWjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEsgPSBhZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IF8gPj4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhRyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfID4+PiAwID4gMTY3NzcyMTUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUcgPSAzMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSAoKChtICsgMTA0ODMyMCkgfCAwKSA+Pj4gMTYpICYgODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZID0gbSA8PCBTO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjID0gKCgoWSArIDUyMDE5MikgfCAwKSA+Pj4gMTYpICYgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXID0gWSA8PCBhYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZID0gKCgoVyArIDI0NTc2MCkgfCAwKSA+Pj4gMTYpICYgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE0IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhYyB8IFMgfCBZKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFcgPDwgWSkgPj4+IDE1KSkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFHID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfID4+PiAoKChRICsgNykgfCAwKSA+Pj4gMCkpICZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFEgPDwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gKDgyODggKyAoYUcgPDwgMikpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soYWQgKyAyOCkgPj4gMl0gPSBhRztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soYWQgKyAyMCkgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhZCArIDE2KSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFogPSBjWzE5OTddIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUSA9IDEgPDwgYUc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKFogJiBRKSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMTk5N10gPSBaIHwgUTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbbSA+PiAyXSA9IEs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhZCArIDI0KSA+PiAyXSA9IG07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhZCArIDEyKSA+PiAyXSA9IGFkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soYWQgKyA4KSA+PiAyXSA9IGFkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhRyB8IDApID09IDMxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhSCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhSCA9ICgyNSAtIChhRyA+Pj4gMSkpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRID0gXyA8PCBhSDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWiA9IGNbbSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjWyhaICsgNCkgPj4gMl0gJiAtOCkgfCAwKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfIHwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUkgPSAoWiArIDE2ICsgKChRID4+PiAzMSkgPDwgMikpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBjW2FJID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUID0gMjA5MztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUSA9IFEgPDwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaID0gbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFQgfCAwKSA9PSAyMDkzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYUkgPj4+IDAgPCAoY1syZTNdIHwgMCkgPj4+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW2FJID4+IDJdID0gSztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhZCArIDI0KSA+PiAyXSA9IFo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soYWQgKyAxMikgPj4gMl0gPSBhZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhZCArIDgpID4+IDJdID0gYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUSA9IChaICsgOCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfID0gY1tRID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGNbMmUzXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChaID4+PiAwIDwgbSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfID4+PiAwIDwgbSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soXyArIDEyKSA+PiAyXSA9IEs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW1EgPj4gMl0gPSBLO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soYWQgKyA4KSA+PiAyXSA9IF87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhZCArIDEyKSA+PiAyXSA9IFo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhhZCArIDI0KSA+PiAyXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWQgPSBjWzE5OTldIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZCA+Pj4gMCA8PSBvID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBfID0gKGFkIC0gbykgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1sxOTk5XSA9IF87XG4gICAgICAgICAgICAgICAgICAgICAgICBhZCA9IGNbMjAwMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgUSA9IGFkO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1syMDAyXSA9IFEgKyBvO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1soUSArIChvICsgNCkpID4+IDJdID0gXyB8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjWyhhZCArIDQpID4+IDJdID0gbyB8IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICBuID0gKGFkICsgOCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gfCAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgY1soYVEoKSB8IDApID4+IDJdID0gMTI7XG4gICAgICAgICAgICAgICAgbiA9IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG4gfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZnJlZVxuICAgICAgICAgICAgZnVuY3Rpb24gYzAoYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgYiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGQgPSAwLFxuICAgICAgICAgICAgICAgICAgICBlID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGcgPSAwLFxuICAgICAgICAgICAgICAgICAgICBoID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGogPSAwLFxuICAgICAgICAgICAgICAgICAgICBrID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG0gPSAwLFxuICAgICAgICAgICAgICAgICAgICBuID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHAgPSAwLFxuICAgICAgICAgICAgICAgICAgICBxID0gMCxcbiAgICAgICAgICAgICAgICAgICAgciA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHMgPSAwLFxuICAgICAgICAgICAgICAgICAgICB0ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgdSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHYgPSAwLFxuICAgICAgICAgICAgICAgICAgICB3ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgeCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHkgPSAwLFxuICAgICAgICAgICAgICAgICAgICB6ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgQSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIEIgPSAwLFxuICAgICAgICAgICAgICAgICAgICBDID0gMCxcbiAgICAgICAgICAgICAgICAgICAgRCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIEUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBGID0gMCxcbiAgICAgICAgICAgICAgICAgICAgRyA9IDAsXG4gICAgICAgICAgICAgICAgICAgIEggPSAwLFxuICAgICAgICAgICAgICAgICAgICBJID0gMCxcbiAgICAgICAgICAgICAgICAgICAgSiA9IDAsXG4gICAgICAgICAgICAgICAgICAgIEsgPSAwLFxuICAgICAgICAgICAgICAgICAgICBMID0gMCxcbiAgICAgICAgICAgICAgICAgICAgTSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIE4gPSAwLFxuICAgICAgICAgICAgICAgICAgICBPID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoKGEgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYiA9IChhIC0gOCkgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBiO1xuICAgICAgICAgICAgICAgIGUgPSBjWzJlM10gfCAwO1xuICAgICAgICAgICAgICAgIGlmIChiID4+PiAwIDwgZSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmID0gY1soYSAtIDQpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICBnID0gZiAmIDM7XG4gICAgICAgICAgICAgICAgaWYgKChnIHwgMCkgPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoID0gZiAmIC04O1xuICAgICAgICAgICAgICAgIGkgPSAoYSArIChoIC0gOCkpIHwgMDtcbiAgICAgICAgICAgICAgICBqID0gaTtcbiAgICAgICAgICAgICAgICBMMjc1MzogZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKChmICYgMSkgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrID0gY1tiID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZyB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gKC04IC0gaykgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbSA9IChhICsgbCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG07XG4gICAgICAgICAgICAgICAgICAgICAgICBvID0gKGsgKyBoKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSA+Pj4gMCA8IGUgPj4+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuIHwgMCkgPT0gKGNbMjAwMV0gfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAoYSArIChoIC0gNCkpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChjW3AgPj4gMl0gJiAzKSB8IDApICE9IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sxOTk4XSA9IG87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1twID4+IDJdID0gY1twID4+IDJdICYgLTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soYSArIChsICsgNCkpID4+IDJdID0gbyB8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tpID4+IDJdID0gbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBwID0gayA+Pj4gMztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID4+PiAwIDwgMjU2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IGNbKGEgKyAobCArIDgpKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGNbKGEgKyAobCArIDEyKSkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAoODAyNCArICgocCA8PCAxKSA8PCAyKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChrIHwgMCkgIT0gKHQgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPj4+IDAgPCBlID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1soayArIDEyKSA+PiAyXSB8IDApID09IChuIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHMgfCAwKSA9PSAoayB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMTk5Nl0gPSBjWzE5OTZdICYgfigxIDw8IHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IG87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocyB8IDApID09ICh0IHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSAocyArIDgpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4+PiAwIDwgZSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gKHMgKyA4KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNbdiA+PiAyXSB8IDApID09IChuIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhrICsgMTIpID4+IDJdID0gcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW3UgPj4gMl0gPSBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IG07XG4gICAgICAgICAgICAgICAgICAgICAgICBwID0gY1soYSArIChsICsgMjQpKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gY1soYSArIChsICsgMTIpKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh2IHwgMCkgPT0gKHQgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gKGEgKyAobCArIDIwKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gY1t3ID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh4IHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IChhICsgKGwgKyAxNikpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHogPSBjW3kgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh6IHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCID0gejtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0geTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgPSB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IHc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSAoQiArIDIwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gY1t3ID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeCB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCID0geDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gdztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSAoQiArIDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gY1t3ID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeCB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiA9IHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IHc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEMgPj4+IDAgPCBlID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tDID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBCO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gY1soYSArIChsICsgOCkpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPj4+IDAgPCBlID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSAodyArIDEyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1t4ID4+IDJdIHwgMCkgIT0gKHQgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gKHYgKyA4KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1t5ID4+IDJdIHwgMCkgPT0gKHQgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1t4ID4+IDJdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbeSA+PiAyXSA9IHc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChwIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdiA9IChhICsgKGwgKyAyOCkpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG0gPSAoODI4OCArIChjW3YgPj4gMl0gPDwgMikpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHQgfCAwKSA9PSAoY1ttID4+IDJdIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1ttID4+IDJdID0gQTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChBIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sxOTk3XSA9IGNbMTk5N10gJiB+KDEgPDwgY1t2ID4+IDJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBMMjc1MztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA+Pj4gMCA8IChjWzJlM10gfCAwKSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gKHAgKyAxNikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNbayA+PiAyXSB8IDApID09ICh0IHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbayA+PiAyXSA9IEE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhwICsgMjApID4+IDJdID0gQTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEEgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTDI3NTM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID4+PiAwIDwgKGNbMmUzXSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNbKEEgKyAyNCkgPj4gMl0gPSBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGNbKGEgKyAobCArIDE2KSkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodCB8IDApICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPj4+IDAgPCAoY1syZTNdIHwgMCkgPj4+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhBICsgMTYpID4+IDJdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKHQgKyAyNCkgPj4gMl0gPSBBO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBjWyhhICsgKGwgKyAyMCkpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodCB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID4+PiAwIDwgKGNbMmUzXSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soQSArIDIwKSA+PiAyXSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sodCArIDI0KSA+PiAyXSA9IEE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IG87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxID0gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgZCA9IHE7XG4gICAgICAgICAgICAgICAgaWYgKGQgPj4+IDAgPj0gaSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBBID0gKGEgKyAoaCAtIDQpKSB8IDA7XG4gICAgICAgICAgICAgICAgZSA9IGNbQSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgaWYgKCgoZSAmIDEpIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoKGUgJiAyKSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaiB8IDApID09IChjWzIwMDJdIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCID0gKChjWzE5OTldIHwgMCkgKyByKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sxOTk5XSA9IEI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1syMDAyXSA9IHE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1socSArIDQpID4+IDJdID0gQiB8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChxIHwgMCkgIT0gKGNbMjAwMV0gfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMjAwMV0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbMTk5OF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaiB8IDApID09IChjWzIwMDFdIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCID0gKChjWzE5OThdIHwgMCkgKyByKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sxOTk4XSA9IEI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1syMDAxXSA9IHE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1socSArIDQpID4+IDJdID0gQiB8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soZCArIEIpID4+IDJdID0gQjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBCID0gKChlICYgLTgpICsgcikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgQyA9IGUgPj4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICBMMjg1NjogZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlID4+PiAwIDwgMjU2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBjWyhhICsgaCkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gY1soYSArIChoIHwgNCkpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9ICg4MDI0ICsgKChDIDw8IDEpIDw8IDIpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodSB8IDApICE9IChiIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA+Pj4gMCA8IChjWzJlM10gfCAwKSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNbKHUgKyAxMikgPj4gMl0gfCAwKSA9PSAoaiB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChnIHwgMCkgPT0gKHUgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sxOTk2XSA9IGNbMTk5Nl0gJiB+KDEgPDwgQyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGcgfCAwKSA9PSAoYiB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRCA9IChnICsgOCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyA+Pj4gMCA8IChjWzJlM10gfCAwKSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gKGcgKyA4KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjW2YgPj4gMl0gfCAwKSA9PSAoaiB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgPSBmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKHUgKyAxMikgPj4gMl0gPSBnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW0QgPj4gMl0gPSB1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gY1soYSArIChoICsgMTYpKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBjWyhhICsgKGggfCA0KSkgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHQgfCAwKSA9PSAoYiB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IChhICsgKGggKyAxMikpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gY1twID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHYgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSAoYSArIChoICsgOCkpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IGNbbSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoayB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGID0gaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcgPSBtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRiA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcgPSBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gKEYgKyAyMCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gY1twID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh2IHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRiA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHID0gcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAoRiArIDE2KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBjW3AgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHYgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYgPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRyA9IHA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEcgPj4+IDAgPCAoY1syZTNdIHwgMCkgPj4+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW0cgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFID0gRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gY1soYSArIGgpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA+Pj4gMCA8IChjWzJlM10gfCAwKSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gKHAgKyAxMikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1t2ID4+IDJdIHwgMCkgIT0gKGIgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gKHQgKyA4KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjW20gPj4gMl0gfCAwKSA9PSAoYiB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbdiA+PiAyXSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbbSA+PiAyXSA9IHA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAoYSArIChoICsgMjApKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSAoODI4OCArIChjW3QgPj4gMl0gPDwgMikpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiIHwgMCkgPT0gKGNbdSA+PiAyXSB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1t1ID4+IDJdID0gRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEUgfCAwKSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWzE5OTddID0gY1sxOTk3XSAmIH4oMSA8PCBjW3QgPj4gMl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwyODU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA+Pj4gMCA8IChjWzJlM10gfCAwKSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gKGYgKyAxNikgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY1tnID4+IDJdIHwgMCkgPT0gKGIgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW2cgPj4gMl0gPSBFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGYgKyAyMCkgPj4gMl0gPSBFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEUgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIEwyODU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFID4+PiAwIDwgKGNbMmUzXSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKEUgKyAyNCkgPj4gMl0gPSBmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gY1soYSArIChoICsgOCkpID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiIHwgMCkgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiID4+PiAwIDwgKGNbMmUzXSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soRSArIDE2KSA+PiAyXSA9IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKGIgKyAyNCkgPj4gMl0gPSBFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gY1soYSArIChoICsgMTIpKSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYiB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiID4+PiAwIDwgKGNbMmUzXSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1soRSArIDIwKSA+PiAyXSA9IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhiICsgMjQpID4+IDJdID0gRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjWyhxICsgNCkgPj4gMl0gPSBCIHwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbKGQgKyBCKSA+PiAyXSA9IEI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHEgfCAwKSAhPSAoY1syMDAxXSB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSCA9IEI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjWzE5OThdID0gQjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbQSA+PiAyXSA9IGUgJiAtMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbKHEgKyA0KSA+PiAyXSA9IHIgfCAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1soZCArIHIpID4+IDJdID0gcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIEggPSByO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoMCk7XG4gICAgICAgICAgICAgICAgciA9IEggPj4+IDM7XG4gICAgICAgICAgICAgICAgaWYgKEggPj4+IDAgPCAyNTYpIHtcbiAgICAgICAgICAgICAgICAgICAgZCA9IHIgPDwgMTtcbiAgICAgICAgICAgICAgICAgICAgZSA9ICg4MDI0ICsgKGQgPDwgMikpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgQSA9IGNbMTk5Nl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBFID0gMSA8PCByO1xuICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChBICYgRSkgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1sxOTk2XSA9IEEgfCBFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkgPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEogPSAoODAyNCArICgoZCArIDIpIDw8IDIpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAoODAyNCArICgoZCArIDIpIDw8IDIpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IGNbciA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPj4+IDAgPj0gKGNbMmUzXSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkgPSBoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKID0gcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgICAgICBjW0ogPj4gMl0gPSBxO1xuICAgICAgICAgICAgICAgICAgICBjWyhJICsgMTIpID4+IDJdID0gcTtcbiAgICAgICAgICAgICAgICAgICAgY1socSArIDgpID4+IDJdID0gSTtcbiAgICAgICAgICAgICAgICAgICAgY1socSArIDEyKSA+PiAyXSA9IGU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZSA9IHE7XG4gICAgICAgICAgICAgICAgSSA9IEggPj4+IDg7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKEkgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBLID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChIID4+PiAwID4gMTY3NzcyMTUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBLID0gMzE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBKID0gKCgoSSArIDEwNDgzMjApIHwgMCkgPj4+IDE2KSAmIDg7XG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gSSA8PCBKO1xuICAgICAgICAgICAgICAgICAgICAgICAgRSA9ICgoKGQgKyA1MjAxOTIpIHwgMCkgPj4+IDE2KSAmIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBBID0gZCA8PCBFO1xuICAgICAgICAgICAgICAgICAgICAgICAgZCA9ICgoKEEgKyAyNDU3NjApIHwgMCkgPj4+IDE2KSAmIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICByID0gKDE0IC0gKEUgfCBKIHwgZCkgKyAoKEEgPDwgZCkgPj4+IDE1KSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgSyA9ICgoSCA+Pj4gKCgociArIDcpIHwgMCkgPj4+IDApKSAmIDEpIHwgKHIgPDwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IHdoaWxlICgwKTtcbiAgICAgICAgICAgICAgICBJID0gKDgyODggKyAoSyA8PCAyKSkgfCAwO1xuICAgICAgICAgICAgICAgIGNbKHEgKyAyOCkgPj4gMl0gPSBLO1xuICAgICAgICAgICAgICAgIGNbKHEgKyAyMCkgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgIGNbKHEgKyAxNikgPj4gMl0gPSAwO1xuICAgICAgICAgICAgICAgIHIgPSBjWzE5OTddIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gMSA8PCBLO1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgociAmIGQpIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY1sxOTk3XSA9IHIgfCBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1tJID4+IDJdID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbKHEgKyAyNCkgPj4gMl0gPSBJO1xuICAgICAgICAgICAgICAgICAgICAgICAgY1socSArIDEyKSA+PiAyXSA9IHE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjWyhxICsgOCkgPj4gMl0gPSBxO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChLIHwgMCkgPT0gMzEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTCA9ICgyNSAtIChLID4+PiAxKSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQSA9IEggPDwgTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIEogPSBjW0kgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChjWyhKICsgNCkgPj4gMl0gJiAtOCkgfCAwKSA9PSAoSCB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNID0gKEogKyAxNiArICgoQSA+Pj4gMzEpIDw8IDIpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRSA9IGNbTSA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChFIHwgMCkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOID0gMjI3MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IEEgPDwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSiA9IEU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChOIHwgMCkgPT0gMjI3MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNID4+PiAwIDwgKGNbMmUzXSB8IDApID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tNID4+IDJdID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1socSArIDI0KSA+PiAyXSA9IEo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKHEgKyAxMikgPj4gMl0gPSBxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhxICsgOCkgPj4gMl0gPSBxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBBID0gKEogKyA4KSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBCID0gY1tBID4+IDJdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIEUgPSBjWzJlM10gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEogPj4+IDAgPCBFID4+PiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCID4+PiAwIDwgRSA+Pj4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbKEIgKyAxMikgPj4gMl0gPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbQSA+PiAyXSA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1socSArIDgpID4+IDJdID0gQjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhxICsgMTIpID4+IDJdID0gSjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWyhxICsgMjQpID4+IDJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApO1xuICAgICAgICAgICAgICAgIHEgPSAoKGNbMjAwNF0gfCAwKSAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICBjWzIwMDRdID0gcTtcbiAgICAgICAgICAgICAgICBpZiAoKHEgfCAwKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIE8gPSA4NDQwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcSA9IGNbTyA+PiAyXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocSB8IDApID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgTyA9IChxICsgOCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNbMjAwNF0gPSAtMTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjMShiKSB7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGxldCBjID0gMDtcbiAgICAgICAgICAgICAgICBjID0gYjtcbiAgICAgICAgICAgICAgICB3aGlsZSAoYVtjXSB8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IChjICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKGMgLSBiKSB8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjMihiLCBjKSB7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGMgPSBjIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IDA7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBhWyhiICsgZCkgfCAwXSA9IGFbKGMgKyBkKSB8IDBdO1xuICAgICAgICAgICAgICAgICAgICBkID0gKGQgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoYVsoYyArIChkIC0gMSkpIHwgMF0gfCAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYiB8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjMyhiLCBjKSB7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGMgPSBjIHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgICAgIGQgPSAoYiArIChjMShiKSB8IDApKSB8IDA7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBhWyhkICsgZSkgfCAwXSA9IGFbKGMgKyBlKSB8IDBdO1xuICAgICAgICAgICAgICAgICAgICBlID0gKGUgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoYVsoYyArIChlIC0gMSkpIHwgMF0gfCAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYiB8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjNChhLCBiLCBjKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBjID0gYyB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBmID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZyA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKChlIHwgMCkgPCAoYyB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgIGYgPSBkWyhhICsgZSkgfCAwXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGcgPSBkWyhiICsgZSkgfCAwXSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZiB8IDApICE9IChnIHwgMCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChmIHwgMCkgPiAoZyB8IDApID8gMSA6IC0xKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGUgPSAoZSArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjNShiLCBkLCBlKSB7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSAwLFxuICAgICAgICAgICAgICAgICAgICBnID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaCA9IDA7XG4gICAgICAgICAgICAgICAgZiA9IChiICsgZSkgfCAwO1xuICAgICAgICAgICAgICAgIGlmICgoZSB8IDApID49IDIwKSB7XG4gICAgICAgICAgICAgICAgICAgIGQgPSBkICYgMjU1O1xuICAgICAgICAgICAgICAgICAgICBlID0gYiAmIDM7XG4gICAgICAgICAgICAgICAgICAgIGcgPSBkIHwgKGQgPDwgOCkgfCAoZCA8PCAxNikgfCAoZCA8PCAyNCk7XG4gICAgICAgICAgICAgICAgICAgIGggPSBmICYgfjM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gKGIgKyA0IC0gZSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChiIHwgMCkgPCAoZSB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtiXSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChiICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgoYiB8IDApIDwgKGggfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY1tiID4+IDJdID0gZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAoYiArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoKGIgfCAwKSA8IChmIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYVtiXSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgIGIgPSAoYiArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjNihiLCBkLCBlKSB7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSAwO1xuICAgICAgICAgICAgICAgIGYgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBpZiAoKGIgJiAzKSA9PSAoZCAmIDMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChiICYgMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChlIHwgMCkgPT0gMCkgcmV0dXJuIGYgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgYVtiXSA9IGFbZF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChiICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZCA9IChkICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IChlIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgoZSB8IDApID49IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNbYiA+PiAyXSA9IGNbZCA+PiAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAoYiArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSAoZCArIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSAoZSAtIDQpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoKGUgfCAwKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYVtiXSA9IGFbZF0gfCAwO1xuICAgICAgICAgICAgICAgICAgICBiID0gKGIgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgIGQgPSAoZCArIDEpIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgZSA9IChlIC0gMSkgfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZiB8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjNyhiLCBjLCBkKSB7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGMgPSBjIHwgMDtcbiAgICAgICAgICAgICAgICBkID0gZCB8IDA7XG4gICAgICAgICAgICAgICAgbGV0IGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICBmID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKGUgfCAwKSA8IChkIHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYVsoYiArIGUpIHwgMF0gPSBmID8gMCA6IGFbKGMgKyBlKSB8IDBdIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgZiA9IGYgPyAxIDogKGFbKGMgKyBlKSB8IDBdIHwgMCkgPT0gMDtcbiAgICAgICAgICAgICAgICAgICAgZSA9IChlICsgMSkgfCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYiB8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjOChhLCBiKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYVdbYSAmIDddKGIgfCAwKSB8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBjOShhLCBiKSB7XG4gICAgICAgICAgICAgICAgYSA9IGEgfCAwO1xuICAgICAgICAgICAgICAgIGIgPSBiIHwgMDtcbiAgICAgICAgICAgICAgICBhWFthICYgMV0oYiB8IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZGEoYSwgYiwgYywgZCwgZSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgYyA9IGMgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBlID0gZSB8IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFZW2EgJiA3XShiIHwgMCwgYyB8IDAsIGQgfCAwLCBlIHwgMCkgfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZGIoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgYyA9IGMgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICBhWlthICYgMTVdKGIgfCAwLCBjIHwgMCwgZCB8IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZGMoYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBhX1thICYgMV0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGRkKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgICBhID0gYSB8IDA7XG4gICAgICAgICAgICAgICAgYiA9IGIgfCAwO1xuICAgICAgICAgICAgICAgIGMgPSBjIHwgMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYSRbYSAmIDFdKGIgfCAwLCBjIHwgMCkgfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZGUoYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICAkKDApO1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZGYoYSkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICAkKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZGcoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgYyA9IGMgfCAwO1xuICAgICAgICAgICAgICAgIGQgPSBkIHwgMDtcbiAgICAgICAgICAgICAgICAkKDIpO1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZGgoYSwgYiwgYykge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgYyA9IGMgfCAwO1xuICAgICAgICAgICAgICAgICQoMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBkaSgpIHtcbiAgICAgICAgICAgICAgICAkKDQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZGooYSwgYikge1xuICAgICAgICAgICAgICAgIGEgPSBhIHwgMDtcbiAgICAgICAgICAgICAgICBiID0gYiB8IDA7XG4gICAgICAgICAgICAgICAgJCg1KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRU1TQ1JJUFRFTl9FTkRfRlVOQ1NcblxuICAgICAgICAgICAgdmFyIGFXID0gW2RlLCBkZSwgY0wsIGRlLCBjSiwgZGUsIGRlLCBkZV07XG4gICAgICAgICAgICB2YXIgYVggPSBbZGYsIGRmXTtcbiAgICAgICAgICAgIHZhciBhWSA9IFtkZywgZGcsIGNJLCBkZywgY0ssIGRnLCBkZywgZGddO1xuICAgICAgICAgICAgdmFyIGFaID0gW1xuICAgICAgICAgICAgICAgIGRoLFxuICAgICAgICAgICAgICAgIGRoLFxuICAgICAgICAgICAgICAgIGJaLFxuICAgICAgICAgICAgICAgIGRoLFxuICAgICAgICAgICAgICAgIGIkLFxuICAgICAgICAgICAgICAgIGRoLFxuICAgICAgICAgICAgICAgIGJfLFxuICAgICAgICAgICAgICAgIGRoLFxuICAgICAgICAgICAgICAgIGJZLFxuICAgICAgICAgICAgICAgIGRoLFxuICAgICAgICAgICAgICAgIGJYLFxuICAgICAgICAgICAgICAgIGRoLFxuICAgICAgICAgICAgICAgIGRoLFxuICAgICAgICAgICAgICAgIGRoLFxuICAgICAgICAgICAgICAgIGRoLFxuICAgICAgICAgICAgICAgIGRoXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdmFyIGFfID0gW2RpLCBkaV07XG4gICAgICAgICAgICB2YXIgYSQgPSBbZGosIGRqXTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgX3N0cmxlbjogYzEsXG4gICAgICAgICAgICAgICAgX3N0cmNhdDogYzMsXG4gICAgICAgICAgICAgICAgX21pZF9jcmVhdGVfb3B0aW9uczogY1YsXG4gICAgICAgICAgICAgICAgX21pZF9pc3RyZWFtX29wZW5fbWVtOiBjTyxcbiAgICAgICAgICAgICAgICBfbWlkX2lzdHJlYW1fb3Blbl9maWxlOiBjTixcbiAgICAgICAgICAgICAgICBfbWlkX3NvbmdfcmVhZF93YXZlOiBiNixcbiAgICAgICAgICAgICAgICBfbWlkX2V4aXQ6IGNaLFxuICAgICAgICAgICAgICAgIF9taWRfc29uZ19ub3RlX29uOiBiMCxcbiAgICAgICAgICAgICAgICBfc3RybmNweTogYzcsXG4gICAgICAgICAgICAgICAgX21lbXNldDogYzUsXG4gICAgICAgICAgICAgICAgX21lbWNweTogYzYsXG4gICAgICAgICAgICAgICAgX21pZF9zb25nX2dldF9taXNzaW5nX2luc3RydW1lbnQ6IGJ1LFxuICAgICAgICAgICAgICAgIF9taWRfaXN0cmVhbV9jbG9zZTogY1IsXG4gICAgICAgICAgICAgICAgX21pZF9zb25nX2ZyZWU6IGNZLFxuICAgICAgICAgICAgICAgIF9taWRfaW5pdDogY1QsXG4gICAgICAgICAgICAgICAgX21pZF9zb25nX2xvYWQ6IGNYLFxuICAgICAgICAgICAgICAgIF9taWRfc29uZ19zdGFydDogYjMsXG4gICAgICAgICAgICAgICAgX21pZF9zb25nX2dldF9udW1fbWlzc2luZ19pbnN0cnVtZW50czogYnQsXG4gICAgICAgICAgICAgICAgX21lbWNtcDogYzQsXG4gICAgICAgICAgICAgICAgX2ZyZWU6IGMwLFxuICAgICAgICAgICAgICAgIF9tYWxsb2M6IGMkLFxuICAgICAgICAgICAgICAgIF9zdHJjcHk6IGMyLFxuICAgICAgICAgICAgICAgIHJ1blBvc3RTZXRzOiBiZyxcbiAgICAgICAgICAgICAgICBzdGFja0FsbG9jOiBhMCxcbiAgICAgICAgICAgICAgICBzdGFja1NhdmU6IGExLFxuICAgICAgICAgICAgICAgIHN0YWNrUmVzdG9yZTogYTIsXG4gICAgICAgICAgICAgICAgc2V0VGhyZXc6IGEzLFxuICAgICAgICAgICAgICAgIHNldFRlbXBSZXQwOiBhNixcbiAgICAgICAgICAgICAgICBzZXRUZW1wUmV0MTogYTcsXG4gICAgICAgICAgICAgICAgc2V0VGVtcFJldDI6IGE4LFxuICAgICAgICAgICAgICAgIHNldFRlbXBSZXQzOiBhOSxcbiAgICAgICAgICAgICAgICBzZXRUZW1wUmV0NDogYmEsXG4gICAgICAgICAgICAgICAgc2V0VGVtcFJldDU6IGJiLFxuICAgICAgICAgICAgICAgIHNldFRlbXBSZXQ2OiBiYyxcbiAgICAgICAgICAgICAgICBzZXRUZW1wUmV0NzogYmQsXG4gICAgICAgICAgICAgICAgc2V0VGVtcFJldDg6IGJlLFxuICAgICAgICAgICAgICAgIHNldFRlbXBSZXQ5OiBiZixcbiAgICAgICAgICAgICAgICBkeW5DYWxsX2lpOiBjOCxcbiAgICAgICAgICAgICAgICBkeW5DYWxsX3ZpOiBjOSxcbiAgICAgICAgICAgICAgICBkeW5DYWxsX2lpaWlpOiBkYSxcbiAgICAgICAgICAgICAgICBkeW5DYWxsX3ZpaWk6IGRiLFxuICAgICAgICAgICAgICAgIGR5bkNhbGxfdjogZGMsXG4gICAgICAgICAgICAgICAgZHluQ2FsbF9paWk6IGRkXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShcbiAgICAgICAgICAgIC8vIEVNU0NSSVBURU5fRU5EX0FTTVxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgTWF0aDogTWF0aCxcbiAgICAgICAgICAgICAgICBJbnQ4QXJyYXk6IEludDhBcnJheSxcbiAgICAgICAgICAgICAgICBJbnQxNkFycmF5OiBJbnQxNkFycmF5LFxuICAgICAgICAgICAgICAgIEludDMyQXJyYXk6IEludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgVWludDhBcnJheTogVWludDhBcnJheSxcbiAgICAgICAgICAgICAgICBVaW50MTZBcnJheTogVWludDE2QXJyYXksXG4gICAgICAgICAgICAgICAgVWludDMyQXJyYXk6IFVpbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgIEZsb2F0MzJBcnJheTogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgIEZsb2F0NjRBcnJheTogRmxvYXQ2NEFycmF5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFib3J0OiBhYm9ydCxcbiAgICAgICAgICAgICAgICBhc3NlcnQ6IGFzc2VydCxcbiAgICAgICAgICAgICAgICBhc21QcmludEludDogYXNtUHJpbnRJbnQsXG4gICAgICAgICAgICAgICAgYXNtUHJpbnRGbG9hdDogYXNtUHJpbnRGbG9hdCxcbiAgICAgICAgICAgICAgICBtaW46IE1hdGhfbWluLFxuICAgICAgICAgICAgICAgIGludm9rZV9paTogaW52b2tlX2lpLFxuICAgICAgICAgICAgICAgIGludm9rZV92aTogaW52b2tlX3ZpLFxuICAgICAgICAgICAgICAgIGludm9rZV9paWlpaTogaW52b2tlX2lpaWlpLFxuICAgICAgICAgICAgICAgIGludm9rZV92aWlpOiBpbnZva2VfdmlpaSxcbiAgICAgICAgICAgICAgICBpbnZva2VfdjogaW52b2tlX3YsXG4gICAgICAgICAgICAgICAgaW52b2tlX2lpaTogaW52b2tlX2lpaSxcbiAgICAgICAgICAgICAgICBfc3RybmNtcDogX3N0cm5jbXAsXG4gICAgICAgICAgICAgICAgX2xzZWVrOiBfbHNlZWssXG4gICAgICAgICAgICAgICAgX3N5c2NvbmY6IF9zeXNjb25mLFxuICAgICAgICAgICAgICAgIF9mcmVhZDogX2ZyZWFkLFxuICAgICAgICAgICAgICAgIF9mY2xvc2U6IF9mY2xvc2UsXG4gICAgICAgICAgICAgICAgX3N0cnRva19yOiBfc3RydG9rX3IsXG4gICAgICAgICAgICAgICAgX2Fib3J0OiBfYWJvcnQsXG4gICAgICAgICAgICAgICAgX2ZwcmludGY6IF9mcHJpbnRmLFxuICAgICAgICAgICAgICAgIF9jbG9zZTogX2Nsb3NlLFxuICAgICAgICAgICAgICAgIF9wcmVhZDogX3ByZWFkLFxuICAgICAgICAgICAgICAgIF9mZmx1c2g6IF9mZmx1c2gsXG4gICAgICAgICAgICAgICAgX2ZvcGVuOiBfZm9wZW4sXG4gICAgICAgICAgICAgICAgX29wZW46IF9vcGVuLFxuICAgICAgICAgICAgICAgIF9zdHJ0b2w6IF9zdHJ0b2wsXG4gICAgICAgICAgICAgICAgX3N0cnRvazogX3N0cnRvayxcbiAgICAgICAgICAgICAgICBfX19zZXRFcnJObzogX19fc2V0RXJyTm8sXG4gICAgICAgICAgICAgICAgX19yZWFsbHlOZWdhdGl2ZTogX19yZWFsbHlOZWdhdGl2ZSxcbiAgICAgICAgICAgICAgICBfZnNlZWs6IF9mc2VlayxcbiAgICAgICAgICAgICAgICBfc2VuZDogX3NlbmQsXG4gICAgICAgICAgICAgICAgX3dyaXRlOiBfd3JpdGUsXG4gICAgICAgICAgICAgICAgX3N0cnJjaHI6IF9zdHJyY2hyLFxuICAgICAgICAgICAgICAgIF9zaW46IF9zaW4sXG4gICAgICAgICAgICAgICAgX3ByaW50ZjogX3ByaW50ZixcbiAgICAgICAgICAgICAgICBfc3RyY2hyOiBfc3RyY2hyLFxuICAgICAgICAgICAgICAgIF9yZWFkOiBfcmVhZCxcbiAgICAgICAgICAgICAgICBfdGltZTogX3RpbWUsXG4gICAgICAgICAgICAgICAgX19mb3JtYXRTdHJpbmc6IF9fZm9ybWF0U3RyaW5nLFxuICAgICAgICAgICAgICAgIF9hdG9pOiBfYXRvaSxcbiAgICAgICAgICAgICAgICBfcmVjdjogX3JlY3YsXG4gICAgICAgICAgICAgICAgX3B3cml0ZTogX3B3cml0ZSxcbiAgICAgICAgICAgICAgICBfbGx2bV9wb3dfZjY0OiBfbGx2bV9wb3dfZjY0LFxuICAgICAgICAgICAgICAgIF9mc3luYzogX2ZzeW5jLFxuICAgICAgICAgICAgICAgIF9fX2Vycm5vX2xvY2F0aW9uOiBfX19lcnJub19sb2NhdGlvbixcbiAgICAgICAgICAgICAgICBfaXNzcGFjZTogX2lzc3BhY2UsXG4gICAgICAgICAgICAgICAgX3Nicms6IF9zYnJrLFxuICAgICAgICAgICAgICAgIF9fcGFyc2VJbnQ6IF9fcGFyc2VJbnQsXG4gICAgICAgICAgICAgICAgX2Z3cml0ZTogX2Z3cml0ZSxcbiAgICAgICAgICAgICAgICBfc3RyY21wOiBfc3RyY21wLFxuICAgICAgICAgICAgICAgIFNUQUNLVE9QOiBTVEFDS1RPUCxcbiAgICAgICAgICAgICAgICBTVEFDS19NQVg6IFNUQUNLX01BWCxcbiAgICAgICAgICAgICAgICB0ZW1wRG91YmxlUHRyOiB0ZW1wRG91YmxlUHRyLFxuICAgICAgICAgICAgICAgIEFCT1JUOiBBQk9SVCxcbiAgICAgICAgICAgICAgICBOYU46IE5hTixcbiAgICAgICAgICAgICAgICBJbmZpbml0eTogSW5maW5pdHksXG4gICAgICAgICAgICAgICAgX3N0ZGVycjogX3N0ZGVyclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1ZmZlclxuICAgICAgICApO1xuICAgICAgICB2YXIgX3N0cmxlbiA9IChNb2R1bGVbJ19zdHJsZW4nXSA9IGFzbVsnX3N0cmxlbiddKTtcbiAgICAgICAgdmFyIF9zdHJjYXQgPSAoTW9kdWxlWydfc3RyY2F0J10gPSBhc21bJ19zdHJjYXQnXSk7XG4gICAgICAgIE1vZHVsZVsnX21pZF9jcmVhdGVfb3B0aW9ucyddID0gYXNtWydfbWlkX2NyZWF0ZV9vcHRpb25zJ107XG4gICAgICAgIE1vZHVsZVsnX21pZF9pc3RyZWFtX29wZW5fbWVtJ10gPSBhc21bJ19taWRfaXN0cmVhbV9vcGVuX21lbSddO1xuICAgICAgICBNb2R1bGVbJ19taWRfaXN0cmVhbV9vcGVuX2ZpbGUnXSA9IGFzbVsnX21pZF9pc3RyZWFtX29wZW5fZmlsZSddO1xuICAgICAgICBNb2R1bGVbJ19taWRfc29uZ19yZWFkX3dhdmUnXSA9IGFzbVsnX21pZF9zb25nX3JlYWRfd2F2ZSddO1xuICAgICAgICBNb2R1bGVbJ19taWRfZXhpdCddID0gYXNtWydfbWlkX2V4aXQnXTtcbiAgICAgICAgTW9kdWxlWydfbWlkX3Nvbmdfbm90ZV9vbiddID0gYXNtWydfbWlkX3Nvbmdfbm90ZV9vbiddO1xuICAgICAgICB2YXIgX3N0cm5jcHkgPSAoTW9kdWxlWydfc3RybmNweSddID0gYXNtWydfc3RybmNweSddKTtcbiAgICAgICAgdmFyIF9tZW1zZXQgPSAoTW9kdWxlWydfbWVtc2V0J10gPSBhc21bJ19tZW1zZXQnXSk7XG4gICAgICAgIHZhciBfbWVtY3B5ID0gKE1vZHVsZVsnX21lbWNweSddID0gYXNtWydfbWVtY3B5J10pO1xuICAgICAgICBNb2R1bGVbJ19taWRfc29uZ19nZXRfbWlzc2luZ19pbnN0cnVtZW50J10gPVxuICAgICAgICAgICAgYXNtWydfbWlkX3NvbmdfZ2V0X21pc3NpbmdfaW5zdHJ1bWVudCddO1xuICAgICAgICBNb2R1bGVbJ19taWRfaXN0cmVhbV9jbG9zZSddID0gYXNtWydfbWlkX2lzdHJlYW1fY2xvc2UnXTtcbiAgICAgICAgTW9kdWxlWydfbWlkX3NvbmdfZnJlZSddID0gYXNtWydfbWlkX3NvbmdfZnJlZSddO1xuICAgICAgICBNb2R1bGVbJ19taWRfaW5pdCddID0gYXNtWydfbWlkX2luaXQnXTtcbiAgICAgICAgTW9kdWxlWydfbWlkX3NvbmdfbG9hZCddID0gYXNtWydfbWlkX3NvbmdfbG9hZCddO1xuICAgICAgICBNb2R1bGVbJ19taWRfc29uZ19zdGFydCddID0gYXNtWydfbWlkX3Nvbmdfc3RhcnQnXTtcbiAgICAgICAgTW9kdWxlWydfbWlkX3NvbmdfZ2V0X251bV9taXNzaW5nX2luc3RydW1lbnRzJ10gPVxuICAgICAgICAgICAgYXNtWydfbWlkX3NvbmdfZ2V0X251bV9taXNzaW5nX2luc3RydW1lbnRzJ107XG4gICAgICAgIHZhciBfbWVtY21wID0gKE1vZHVsZVsnX21lbWNtcCddID0gYXNtWydfbWVtY21wJ10pO1xuICAgICAgICBNb2R1bGVbJ19mcmVlJ10gPSBhc21bJ19mcmVlJ107XG4gICAgICAgIHZhciBfbWFsbG9jID0gKE1vZHVsZS5fbWFsbG9jID0gYXNtWydfbWFsbG9jJ10pO1xuICAgICAgICB2YXIgX3N0cmNweSA9IChNb2R1bGVbJ19zdHJjcHknXSA9IGFzbVsnX3N0cmNweSddKTtcbiAgICAgICAgY29uc3QgcnVuUG9zdFNldHMgPSAoTW9kdWxlWydydW5Qb3N0U2V0cyddID0gYXNtWydydW5Qb3N0U2V0cyddKTtcblxuICAgICAgICBNb2R1bGVbJ2R5bkNhbGxfaWknXSA9IGFzbVsnZHluQ2FsbF9paSddO1xuICAgICAgICBNb2R1bGVbJ2R5bkNhbGxfdmknXSA9IGFzbVsnZHluQ2FsbF92aSddO1xuICAgICAgICBNb2R1bGVbJ2R5bkNhbGxfaWlpaWknXSA9IGFzbVsnZHluQ2FsbF9paWlpaSddO1xuICAgICAgICBNb2R1bGVbJ2R5bkNhbGxfdmlpaSddID0gYXNtWydkeW5DYWxsX3ZpaWknXTtcbiAgICAgICAgTW9kdWxlWydkeW5DYWxsX3YnXSA9IGFzbVsnZHluQ2FsbF92J107XG4gICAgICAgIE1vZHVsZVsnZHluQ2FsbF9paWknXSA9IGFzbVsnZHluQ2FsbF9paWknXTtcblxuICAgICAgICBSdW50aW1lLnN0YWNrQWxsb2MgPSBmdW5jdGlvbihzaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gYXNtWydzdGFja0FsbG9jJ10oc2l6ZSk7XG4gICAgICAgIH07XG4gICAgICAgIFJ1bnRpbWUuc3RhY2tTYXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gYXNtWydzdGFja1NhdmUnXSgpO1xuICAgICAgICB9O1xuICAgICAgICBSdW50aW1lLnN0YWNrUmVzdG9yZSA9IGZ1bmN0aW9uKHRvcCkge1xuICAgICAgICAgICAgYXNtWydzdGFja1Jlc3RvcmUnXSh0b3ApO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFdhcm5pbmc6IHByaW50aW5nIG9mIGk2NCB2YWx1ZXMgbWF5IGJlIHNsaWdodGx5IHJvdW5kZWQhIE5vIGRlZXAgaTY0IG1hdGggdXNlZCwgc28gcHJlY2lzZSBpNjQgY29kZSBub3QgaW5jbHVkZWRcbiAgICAgICAgdmFyIGk2NE1hdGggPSBudWxsO1xuXG4gICAgICAgIC8vID09PSBBdXRvLWdlbmVyYXRlZCBwb3N0YW1ibGUgc2V0dXAgZW50cnkgc3R1ZmYgPT09XG5cbiAgICAgICAgaWYgKG1lbW9yeUluaXRpYWxpemVyKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBhcHBseURhdGEoZGF0YSkge1xuICAgICAgICAgICAgICAgIEhFQVBVOC5zZXQoZGF0YSwgU1RBVElDX0JBU0UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWRkUnVuRGVwZW5kZW5jeSgnbWVtb3J5IGluaXRpYWxpemVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaW5pdGlhbFN0YWNrVG9wO1xuICAgICAgICBsZXQgY2FsbGVkUnVuID0gZmFsc2U7XG4gICAgICAgIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IGZ1bmN0aW9uIHJ1bkNhbGxlcigpIHtcbiAgICAgICAgICAgIC8vIElmIHJ1biBoYXMgbmV2ZXIgYmVlbiBjYWxsZWQsIGFuZCB3ZSBzaG91bGQgY2FsbCBydW4gKElOVk9LRV9SVU4gaXMgdHJ1ZSwgYW5kIE1vZHVsZS5ub0luaXRpYWxSdW4gaXMgbm90IGZhbHNlKVxuICAgICAgICAgICAgaWYgKCFjYWxsZWRSdW4gJiYgc2hvdWxkUnVuTm93KSBydW4oKTtcbiAgICAgICAgICAgIGlmICghY2FsbGVkUnVuKSBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBydW5DYWxsZXI7IC8vIHRyeSB0aGlzIGFnYWluIGxhdGVyLCBhZnRlciBuZXcgZGVwcyBhcmUgZnVsZmlsbGVkXG4gICAgICAgIH07XG5cbiAgICAgICAgTW9kdWxlWydjYWxsTWFpbiddID0gTW9kdWxlLmNhbGxNYWluID0gZnVuY3Rpb24gY2FsbE1haW4oYXJncykge1xuICAgICAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgICAgIHJ1bkRlcGVuZGVuY2llcyA9PSAwLFxuICAgICAgICAgICAgICAgICdjYW5ub3QgY2FsbCBtYWluIHdoZW4gYXN5bmMgZGVwZW5kZW5jaWVzIHJlbWFpbiEgKGxpc3RlbiBvbiBfX0FUTUFJTl9fKSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICAgICAgX19BVFBSRVJVTl9fLmxlbmd0aCA9PSAwLFxuICAgICAgICAgICAgICAgICdjYW5ub3QgY2FsbCBtYWluIHdoZW4gcHJlUnVuIGZ1bmN0aW9ucyByZW1haW4gdG8gYmUgY2FsbGVkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFyZ3MgPSBhcmdzIHx8IFtdO1xuICAgICAgICAgICAgZW5zdXJlSW5pdFJ1bnRpbWUoKTtcbiAgICAgICAgICAgIGNvbnN0IGFyZ2MgPSBhcmdzLmxlbmd0aCArIDE7XG4gICAgICAgICAgICBmdW5jdGlvbiBwYWQoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0IC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3YucHVzaCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJndiA9IFtcbiAgICAgICAgICAgICAgICBhbGxvY2F0ZShcbiAgICAgICAgICAgICAgICAgICAgaW50QXJyYXlGcm9tU3RyaW5nKCcvYmluL3RoaXMucHJvZ3JhbScpLFxuICAgICAgICAgICAgICAgICAgICAnaTgnLFxuICAgICAgICAgICAgICAgICAgICBBTExPQ19OT1JNQUxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgcGFkKCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ2MgLSAxOyBpID0gaSArIDEpIHtcbiAgICAgICAgICAgICAgICBhcmd2LnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlKGludEFycmF5RnJvbVN0cmluZyhhcmdzW2ldKSwgJ2k4JywgQUxMT0NfTk9STUFMKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcGFkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcmd2LnB1c2goMCk7XG4gICAgICAgICAgICBhcmd2ID0gYWxsb2NhdGUoYXJndiwgJ2kzMicsIEFMTE9DX05PUk1BTCk7XG4gICAgICAgICAgICBpbml0aWFsU3RhY2tUb3AgPSBTVEFDS1RPUDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV0ID0gTW9kdWxlWydfbWFpbiddKGFyZ2MsIGFyZ3YsIDApO1xuICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIG5vdCBydW5uaW5nIGFuIGV2ZW50ZWQgbWFpbiBsb29wLCBpdCdzIHRpbWUgdG8gZXhpdFxuICAgICAgICAgICAgICAgIGlmICghTW9kdWxlWydub0V4aXRSdW50aW1lJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgZXhpdChyZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEV4aXRTdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXhpdCgpIHRocm93cyB0aGlzIG9uY2UgaXQncyBkb25lIHRvIG1ha2Ugc3VyZSBleGVjdXRpb24gaGFzIGJlZW4gc3RvcHBlZCBjb21wbGV0ZWx5XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUgPT0gJ1NpbXVsYXRlSW5maW5pdGVMb29wJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBydW5uaW5nIGFuIGV2ZW50ZWQgbWFpbiBsb29wLCBkb24ndCBpbW1lZGlhdGVseSBleGl0XG4gICAgICAgICAgICAgICAgICAgIE1vZHVsZVsnbm9FeGl0UnVudGltZSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHJ1bihhcmdzKSB7XG4gICAgICAgICAgICBhcmdzID0gYXJncyB8fCBNb2R1bGVbJ2FyZ3VtZW50cyddO1xuICAgICAgICAgICAgaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICdydW4oKSBjYWxsZWQsIGJ1dCBkZXBlbmRlbmNpZXMgcmVtYWluLCBzbyBub3QgcnVubmluZydcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBGUztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZVJ1bigpO1xuICAgICAgICAgICAgaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBhIHByZVJ1biBhZGRlZCBhIGRlcGVuZGVuY3ksIHJ1biB3aWxsIGJlIGNhbGxlZCBsYXRlclxuICAgICAgICAgICAgICAgIHJldHVybiBGUztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvUnVuKCkge1xuICAgICAgICAgICAgICAgIGVuc3VyZUluaXRSdW50aW1lKCk7XG4gICAgICAgICAgICAgICAgcHJlTWFpbigpO1xuICAgICAgICAgICAgICAgIGNhbGxlZFJ1biA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKE1vZHVsZVsnX21haW4nXSAmJiBzaG91bGRSdW5Ob3cpIHtcbiAgICAgICAgICAgICAgICAgICAgTW9kdWxlWydjYWxsTWFpbiddKGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwb3N0UnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTW9kdWxlWydzZXRTdGF0dXMnXSkge1xuICAgICAgICAgICAgICAgIE1vZHVsZVsnc2V0U3RhdHVzJ10oJ1J1bm5pbmcuLi4nKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlWydzZXRTdGF0dXMnXSgnJyk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUFCT1JUKSBkb1J1bigpO1xuICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb1J1bigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gRlM7XG4gICAgICAgIH1cblxuICAgICAgICBNb2R1bGUucnVuID0gcnVuO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbml0aWFsaXplcyB0aGUgbGlicmFyeS5cbiAgICAgICAgICogQGZ1bmN0aW9uIGluaXRcbiAgICAgICAgICogQG1lbWJlcm9mIExpYlRpTWlkaXR5XG4gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Rocm93RXJyb3IgPSB0cnVlXSBUaHJvdyBhbiBlcnJvciBpZiBmaWxlL2ZvbGRlciBjcmVhdGlvbiBmYWlsZWQuXG4gICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgKi9cbiAgICAgICAgTW9kdWxlLmluaXQgPSBmdW5jdGlvbih0aHJvd0Vycm9yID0gdHJ1ZSkge1xuICAgICAgICAgICAgLy8gY3JlYXRlcyBmb2xkZXJzIGZvciBpbnN0cnVtZW50IHBhdGNoZXNcbiAgICAgICAgICAgIE1vZHVsZS5jcmVhdGVQYXRoKCcvJywgTElCVElNSURJVFlfUEFUQ0hfRElSRUNUT1JZLCB0aHJvd0Vycm9yKTtcbiAgICAgICAgICAgIE1vZHVsZS5jcmVhdGVQYXRoKFxuICAgICAgICAgICAgICAgIGAvJHtMSUJUSU1JRElUWV9QQVRDSF9ESVJFQ1RPUll9YCxcbiAgICAgICAgICAgICAgICBMSUJUSU1JRElUWV9QQVRDSF9EUlVNX0RJUkVDVE9SWSxcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBjcmVhdGVzIGNvbmZpZyBmaWxlXG4gICAgICAgICAgICBNb2R1bGUuY3JlYXRlRGF0YUZpbGUoXG4gICAgICAgICAgICAgICAgJy8nLFxuICAgICAgICAgICAgICAgIExJQlRJTUlESVRZX0NPTkZJR19GSUxFLFxuICAgICAgICAgICAgICAgIExJQlRJTUlESVRZX0NPTkZJR19EQVRBLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBzaG91bGRSdW5Ob3cgcmVmZXJzIHRvIGNhbGxpbmcgbWFpbigpLCBub3QgcnVuKCkuXG4gICAgICAgIHZhciBzaG91bGRSdW5Ob3cgPSB0cnVlO1xuXG4gICAgICAgIGlmIChNb2R1bGVbJ25vSW5pdGlhbFJ1biddKSB7XG4gICAgICAgICAgICBzaG91bGRSdW5Ob3cgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIE1vZHVsZS5GUyA9IHJ1bigpO1xuXG4gICAgICAgIHRoaXMuTW9kdWxlID0gTW9kdWxlO1xuICAgIH1cbn1cblxuY29uc3QgbGlidGltaWRpdHkgPSBuZXcgTGliVGlNaWRpdHkoKTtcblxuZXhwb3J0IGRlZmF1bHQgbGlidGltaWRpdHkuTW9kdWxlO1xuIiwiZXhwb3J0IGNvbnN0IE1JRElfSU5JVCA9ICdNSURJX0lOSVQnO1xuXG5leHBvcnQgY29uc3QgTUlESV9FUlJPUiA9ICdNSURJX0VSUk9SJztcblxuZXhwb3J0IGNvbnN0IE1JRElfU1RBVFVTID0gJ01JRElfU1RBVFVTJztcblxuZXhwb3J0IGNvbnN0IE1JRElfUFJFTE9BRCA9ICdNSURJX1BSRUxPQUQnO1xuXG5leHBvcnQgY29uc3QgTUlESV9MT0FEX0ZJTEUgPSAnTUlESV9MT0FEX0ZJTEUnO1xuXG5leHBvcnQgY29uc3QgTUlESV9MT0FEX1BBVENIID0gJ01JRElfTE9BRF9QQVRDSCc7XG5cbmV4cG9ydCBjb25zdCBNSURJX1BMQVkgPSAnTUlESV9QTEFZJztcblxuZXhwb3J0IGNvbnN0IE1JRElfUEFVU0UgPSAnTUlESV9QQVVTRSc7XG5cbmV4cG9ydCBjb25zdCBNSURJX1JFU1VNRSA9ICdNSURJX1JFU1VNRSc7XG5cbmV4cG9ydCBjb25zdCBNSURJX1NUT1AgPSAnTUlESV9TVE9QJztcblxuZXhwb3J0IGNvbnN0IE1JRElfRU5EID0gJ01JRElfRU5EJztcbiIsImltcG9ydCB7XG4gICAgTUlESV9JTklULFxuICAgIE1JRElfTE9BRF9GSUxFLFxuICAgIE1JRElfTE9BRF9QQVRDSCxcbiAgICBNSURJX1BMQVksXG4gICAgTUlESV9QQVVTRSxcbiAgICBNSURJX1JFU1VNRSxcbiAgICBNSURJX1NUT1AsXG4gICAgTUlESV9FTkQsXG4gICAgTUlESV9FUlJPUlxufSBmcm9tICcuL2V2ZW50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50SGFuZGxlciB7XG4gICAgLyoqXG4gICAgICogQGNsYXNzIEV2ZW50SGFuZGxlclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbY29uZmlndXJhdGlvbl1cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NvbmZpZ3VyYXRpb24ucGxheWVySWQgPSB1bmRlZmluZWRdIFRoZSBJRCBvZiB0aGUgTWlkaSBQbGF5ZXIgdGhhdCBzZW5kcyBldmVudHMuXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2NvbmZpZ3VyYXRpb24uZXZlbnRMb2dnZXIgPSB1bmRlZmluZWRdIFRoZSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGV2ZW50IHBheWxvYWRzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbmZpZ3VyYXRpb24ubG9nZ2luZyA9IGZhbHNlXSBUdXJucyBPTiBvciBPRkYgbG9nZ2luZyB0byB0aGUgY29uc29sZS5cbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IEFuIGBFdmVudEhhbmRsZXJgIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHtcbiAgICAgICAgZXZlbnRMb2dnZXIgPSB1bmRlZmluZWQsXG4gICAgICAgIGxvZ2dpbmcgPSBmYWxzZSxcbiAgICAgICAgcGxheWVySWQgPSB1bmRlZmluZWRcbiAgICB9KSB7XG4gICAgICAgIHRoaXMucGxheWVySWQgPSBwbGF5ZXJJZDtcbiAgICAgICAgdGhpcy5sb2dnaW5nID0gbG9nZ2luZztcbiAgICAgICAgdGhpcy5ldmVudExvZ2dlciA9IGV2ZW50TG9nZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIE1JREkgcGxheWVyIGlzIGluaXRpYWxpemVkLlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7dW5kZWZpbmVkfVxuICAgICAqL1xuICAgIGVtaXRJbml0KCkge1xuICAgICAgICB0aGlzLmVtaXRFdmVudCh7XG4gICAgICAgICAgICBldmVudDogTUlESV9JTklULFxuICAgICAgICAgICAgbWVzc2FnZTogJ01JREkgcGxheWVyIGluaXRpYWxpemVkLidcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgdGhhdCBpbmRpY2F0ZXMgdGhhdCBhIE1JREkgZmlsZSBpcyBiZWluZyBsb2FkZWQuXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHBheWxvYWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3BheWxvYWQubWVzc2FnZV0gQSBtZXNzYWdlIGFib3V0IHRoZSBNSURJIGZpbGUgYmVpbmcgbG9hZGVkLlxuICAgICAqL1xuICAgIGVtaXRMb2FkRmlsZSA9ICh7IG1lc3NhZ2UgPSAnTG9hZGluZyBNSURJIGZpbGUuLi4nIH0pID0+IHtcbiAgICAgICAgdGhpcy5lbWl0RXZlbnQoe1xuICAgICAgICAgICAgZXZlbnQ6IE1JRElfTE9BRF9GSUxFLFxuICAgICAgICAgICAgbWVzc2FnZVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgdGhhdCBpbmRpY2F0ZXMgdGhhdCBhIE1JREkgaW5zdHJ1bWVudCBwYXRjaCBpcyBiZWluZyBsb2FkZWQuXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHBheWxvYWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3BheWxvYWQubWVzc2FnZV0gQSBtZXNzYWdlIGFib3V0IHRoZSBpbnN0cnVtZW50IHBhdGNoIGJlaW5nIGxvYWRlZC5cbiAgICAgKi9cbiAgICBlbWl0TG9hZFBhdGNoID0gKHsgbWVzc2FnZSA9ICdMb2FkaW5nIGluc3RydW1lbnQgcGF0Y2guLi4nIH0pID0+IHtcbiAgICAgICAgdGhpcy5lbWl0RXZlbnQoe1xuICAgICAgICAgICAgZXZlbnQ6IE1JRElfTE9BRF9QQVRDSCxcbiAgICAgICAgICAgIG1lc3NhZ2VcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIE1JREkgcGxheWVyIGN1cnJlbnRseSBwbGF5aW5nIGEgTUlESSBmaWxlLlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwYXlsb2FkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXlsb2FkLnRpbWVdIFRoZSBwbGF5YmFjayBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBlbWl0UGxheSh7IHRpbWUgfSkge1xuICAgICAgICB0aGlzLmVtaXRFdmVudCh7XG4gICAgICAgICAgICBldmVudDogTUlESV9QTEFZLFxuICAgICAgICAgICAgdGltZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB0aGF0IGluZGljYXRlcyB0aGF0IHRoZSBNSURJIHBsYXllciBoYXMgcGF1c2VkIHRoZSBwbGF5YmFjayBvZiBhIGZpbGUuXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHBheWxvYWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3BheWxvYWQudGltZV0gVGhlIHBsYXliYWNrIHBvc2l0aW9uLlxuICAgICAqL1xuICAgIGVtaXRQYXVzZSh7IHRpbWUgfSkge1xuICAgICAgICB0aGlzLmVtaXRFdmVudCh7XG4gICAgICAgICAgICBldmVudDogTUlESV9QQVVTRSxcbiAgICAgICAgICAgIHRpbWVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgdGhhdCBpbmRpY2F0ZXMgdGhhdCB0aGUgTUlESSBwbGF5ZXIgaGFzIHJlc3VtZWQgdGhlIHBsYXliYWNrIG9mIGEgZmlsZS5cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gcGF5bG9hZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcGF5bG9hZC50aW1lXSBUaGUgcGxheWJhY2sgcG9zaXRpb24uXG4gICAgICovXG4gICAgZW1pdFJlc3VtZSh7IHRpbWUgfSkge1xuICAgICAgICB0aGlzLmVtaXRFdmVudCh7XG4gICAgICAgICAgICBldmVudDogTUlESV9SRVNVTUUsXG4gICAgICAgICAgICB0aW1lXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIE1JREkgcGxheWVyIGhhcyBzdG9wcGVkIHRoZSBwbGF5YmFjayBvZiBhIGZpbGUuXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHt1bmRlZmluZWR9XG4gICAgICovXG4gICAgZW1pdFN0b3AoKSB7XG4gICAgICAgIHRoaXMuZW1pdEV2ZW50KHtcbiAgICAgICAgICAgIGV2ZW50OiBNSURJX1NUT1AsXG4gICAgICAgICAgICB0aW1lOiAwXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIE1JREkgcGxheWVyIGhhcyByZWFjaGVkIHRoZSBlbmQgb2YgYSBmaWxlLlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwYXlsb2FkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXlsb2FkLnRpbWVdIFRoZSBwbGF5YmFjayBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBlbWl0RW5kKHsgdGltZSB9KSB7XG4gICAgICAgIHRoaXMuZW1pdEV2ZW50KHtcbiAgICAgICAgICAgIGV2ZW50OiBNSURJX0VORCxcbiAgICAgICAgICAgIHRpbWVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgdGhhdCBpbmRpY2F0ZXMgdGhhdCBhbiBlcnJvciBwcmV2ZW50ZWQgdGhlIE1JREkgcGxheWVyIHRvIGNvbnRpbnVlLlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwYXlsb2FkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXlsb2FkLm1lc3NhZ2VdIEEgbWVzc2FnZSB0aGF0IGluZGljYXRlcyB0aGF0IGFuIGVycm9yIG9jY3VycmVkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcGF5bG9hZC5lcnJvcl0gQSBtZXNzYWdlIHRoYXQgZGVzY3JpYmVzIHRoZSBkZXRhaWxzIG9mIHRoZSBlcnJvci5cbiAgICAgKi9cbiAgICBlbWl0RXJyb3IgPSAoeyBtZXNzYWdlID0gJ0FuIGVycm9yIG9jY3VycmVkLicsIGVycm9yID0gJycgfSkgPT4ge1xuICAgICAgICB0aGlzLmVtaXRFdmVudCh7XG4gICAgICAgICAgICBldmVudDogTUlESV9FUlJPUixcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvclxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU2VuZCBwYXlsb2FkcyB0byB0aGUgZXZlbnQgbG9nZ2VyLlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwYXlsb2FkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXlsb2FkLmV2ZW50XSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXlsb2FkLm1lc3NhZ2VdIEEgbWVzc2FnZSB0aGF0IGRlc2NyaWJlcyB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgZW1pdEV2ZW50ID0gcGF5bG9hZCA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWRXaXRoSWQgPSB7XG4gICAgICAgICAgICAuLi5wYXlsb2FkLFxuICAgICAgICAgICAgcGxheWVySWQ6IHRoaXMucGxheWVySWRcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5ldmVudExvZ2dlcikge1xuICAgICAgICAgICAgdGhpcy5ldmVudExvZ2dlcihwYXlsb2FkV2l0aElkKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgICAgIGlmIChwYXlsb2FkV2l0aElkLmV2ZW50ID09PSBNSURJX0VSUk9SKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihwYXlsb2FkV2l0aElkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocGF5bG9hZFdpdGhJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgbG9nZ2VyLlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbY29uZmlndXJhdGlvbl1cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY29uZmlndXJhdGlvbi5ldmVudExvZ2dlciA9IHVuZGVmaW5lZF0gVGhlIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgZXZlbnQgcGF5bG9hZHMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY29uZmlndXJhdGlvbi5sb2dnaW5nID0gZmFsc2VdIFR1cm5zIE9OIG9yIE9GRiBsb2dnaW5nIHRvIHRoZSBjb25zb2xlLlxuICAgICAqL1xuICAgIHNldExvZ2dlcih7IGV2ZW50TG9nZ2VyID0gdW5kZWZpbmVkLCBsb2dnaW5nID0gZmFsc2UgfSkge1xuICAgICAgICB0aGlzLmV2ZW50TG9nZ2VyID0gZXZlbnRMb2dnZXI7XG5cbiAgICAgICAgdGhpcy5sb2dnaW5nID0gbG9nZ2luZztcbiAgICB9XG59XG4iLCJpbXBvcnQgdXVpZCBmcm9tICd1dWlkL3Y0JztcblxuaW1wb3J0IHtcbiAgICBNSURJX0FVRElPX0JVRkZFUl9TSVpFLFxuICAgIE1JRElfREVGQVVMVF9QQVRDSF9VUkwsXG4gICAgTUlESV9BVURJT19TMTZMU0IsXG4gICAgTUFYX0kxNlxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmltcG9ydCBMaWJUaU1pZGl0eSBmcm9tICcuL0xpYlRpTWlkaXR5JztcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9FdmVudEhhbmRsZXInO1xuXG5sZXQgaXNGaXJzdEluc3RhbmNlID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWlkaVBsYXllciB7XG4gICAgLyoqXG4gICAgICogQGNsYXNzIE1pZGlQbGF5ZXJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW2NvbmZpZ3VyYXRpb25dXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2NvbmZpZ3VyYXRpb24uZXZlbnRMb2dnZXIgPSB1bmRlZmluZWRdIFRoZSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGV2ZW50IHBheWxvYWRzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbmZpZ3VyYXRpb24ubG9nZ2luZyA9IGZhbHNlXSBUdXJucyBPTiBvciBPRkYgbG9nZ2luZyB0byB0aGUgY29uc29sZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NvbmZpZ3VyYXRpb24ucGF0Y2hVcmwgPSBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL21pZGktaW5zdHJ1bWVudC1wYXRjaGVzQGxhdGVzdC9dIFRoZSBwdWJsaWMgcGF0aCB3aGVyZSBNSURJIGluc3RydW1lbnQgcGF0Y2hlcyBjYW4gYmUgZm91bmQuXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYXllcklkIElEIG9mIHRoaXMgaW5zdGFuY2Ugb2YgTWlkaSBQbGF5ZXIuXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IGNvbnRleHQgVGhlIEF1ZGlvQ29udGV4dCBpbnN0YW5jZS5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gc2FtcGxlUmF0ZSBUaGUgc2FtcGxlIHJhdGUgb2YgdGhlIEF1ZGlvQ29udGV4dC5cbiAgICAgKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBldmVudExvZ2dlciBUaGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgdG8gZW1pdCBldmVudHMuXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBsb2dnaW5nIFdoZXRoZXIgY29uc29sZSBsb2dnaW5nIGlzIE9OIG9yIE9GRi5cbiAgICAgKiBAcHJvcGVydHkge2FycmF5QnVmZmVyfSBtaWRpRmlsZUFycmF5IEEgdHlwZWQgYXJyYXkgdGhhdCByZXByZXNlbnRzIHRoZSBjb250ZW50IG9mIHRoZSBNSURJLlxuICAgICAqIEBwcm9wZXJ0eSB7Kn0gbWlkaUZpbGVCdWZmZXIgVGhlIGJ1ZmZlciB3aXRoIHRoZSBNSURJIGRhdGEuXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IHBhdGNoVXJsIFRoZSBVUkwgdXNlZCB0byBsb2FkIE1JREkgaW5zdHJ1bWVudCBwYXRjaGVzLlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSB0aGF0IHBsYXlzIHRoZSBhdWRpbyBzaWduYWwuXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IHN0YXJ0VGltZSBUaGUgdGltZSB3aGVuIE1JREkgcGxheWJhY2sgc3RhcnRlZC5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gc3RyZWFtIFRoZSBNSURJIHN0cmVhbS5cbiAgICAgKiBAcHJvcGVydHkgeyp9IHdhdmVCdWZmZXIgVGhlIGJ1ZmZlciB3aXRoIHRoZSBNSURJIGRhdGEgY29udmVydGVkIHRvIFdBVi5cbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzRmlyc3RJbnN0YW5jZSBXaGV0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGluc3RhbmNlIG9mIHRoZSBNaWRpIFBsYXllciBvciBub3QuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IEEgYE1pZGlQbGF5ZXJgIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogaW1wb3J0IE1pZGlQbGF5ZXIgZnJvbSAnd2ViLW1pZGktcGxheWVyJztcbiAgICAgKlxuICAgICAqIGNvbnN0IGV2ZW50TG9nZ2VyID0gKHBheWxvYWQpID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdSZWNlaXZlZCBldmVudDonLCBwYXlsb2FkLmV2ZW50KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBjb25zdCBtaWRpUGxheWVyID0gbmV3IE1pZGlQbGF5ZXIoeyBldmVudExvZ2dlciB9KTtcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih7XG4gICAgICAgIGV2ZW50TG9nZ2VyID0gdW5kZWZpbmVkLFxuICAgICAgICBsb2dnaW5nID0gZmFsc2UsXG4gICAgICAgIHBhdGNoVXJsID0gTUlESV9ERUZBVUxUX1BBVENIX1VSTFxuICAgIH0gPSB7fSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGxheWVySWQgPSB1dWlkKCk7XG4gICAgICAgICAgICB0aGlzLnBsYXllcklkID0gcGxheWVySWQ7XG4gICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBFdmVudEhhbmRsZXIoe1xuICAgICAgICAgICAgICAgIGV2ZW50TG9nZ2VyLFxuICAgICAgICAgICAgICAgIGxvZ2dpbmcsXG4gICAgICAgICAgICAgICAgcGxheWVySWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmF0YWwgZXJyb3IuIENvdWxkIG5vdCBpbml0aWFsaXplIGV2ZW50IGhhbmRsZXIuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5ldmVudExvZ2dlciA9IGV2ZW50TG9nZ2VyO1xuICAgICAgICAgICAgdGhpcy5sb2dnaW5nID0gbG9nZ2luZztcbiAgICAgICAgICAgIHRoaXMucGF0Y2hVcmwgPSBwYXRjaFVybDtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDtcblxuICAgICAgICAgICAgTGliVGlNaWRpdHkuaW5pdChpc0ZpcnN0SW5zdGFuY2UpO1xuXG4gICAgICAgICAgICB0aGlzLmlzRmlyc3RJbnN0YW5jZSA9IGlzRmlyc3RJbnN0YW5jZTtcbiAgICAgICAgICAgIGlmIChpc0ZpcnN0SW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBpc0ZpcnN0SW5zdGFuY2UgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEluaXQoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFcnJvcih7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0NvdWxkIG5vdCBpbml0aWFsaXplIGluc3RhbmNlIG9mIE1pZGlQbGF5ZXIuJyxcbiAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3JtYXRzIHRoZSBuYW1lIG9mIGEgTUlESSBmb3IgZGlzcGxheSBwdXJwb3Nlcy5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBNSURJIHNvbmcuXG4gICAgICogQHJldHVybiB7U3RyaW5nfVxuICAgICAqL1xuICAgIHN0YXRpYyBmb3JtYXRNaWRpTmFtZShuYW1lKSB7XG4gICAgICAgIHJldHVybiBuYW1lID8gYCAnJHtuYW1lfSdgIDogJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZHMgaW5zdHJ1bWVudCBwYXRjaGVzIGZvciBhIGxpc3Qgb2YgTUlESSBpbnB1dC5cbiAgICAgKlxuICAgICAqIFBsZWFzZSBub3RlIHRoYXQgeW91IGNhbiBub3QgdXNlIGBwYXJhbWV0ZXJzLml0ZW1zLmFycmF5QnVmZmVyYCBhbmQgYHBhcmFtZXRlcnMuaXRlbXMudXJsYCBjb25jdXJyZW50bHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtZXRlcnMuaXRlbXNdIEFuIGFycmF5LlxuICAgICAqIEBwYXJhbSB7YXJyYXlCdWZmZXJ9IFtwYXJhbWV0ZXJzLml0ZW1zLmFycmF5QnVmZmVyXSBBbiBhcnJheSBidWZmZXIgY29udGFpbmluZyBNSURJIGRhdGEgdG8gcGxheS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtZXRlcnMuaXRlbXMudXJsXSBUaGUgVVJMIHdoZXJlIHRoZSBNSURJIGZpbGUgdG8gcGxheSBpcyBsb2NhdGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1ldGVycy5hdWRpb0NvbnRleHRdIEFuIGluc3RhbmNlIG9mIHRoZSBXZWIgQXVkaW8gQVBJIEF1ZGlvQ29udGV4dCBpbnRlcmZhY2UuXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciBpbnN0cnVtZW50IHBhdGNoZXMgd2VyZSBzdWNjZXNzZnVsbHkgcHJlbG9hZGVkIG9yIG5vdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IG5hbWUxID0gJ015IE1JREkgZmlsZSBmcm9tIFVSTCc7XG4gICAgICogY29uc3QgdXJsID0gJ21lZGlhL2ZpbGUubWlkaSc7XG4gICAgICogY29uc3QgbmFtZTIgPSAnTXkgTUlESSBmaWxlIGZyb20gQXJyYXlCdWZmZXInO1xuICAgICAqIGNvbnN0IGFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKCk7XG4gICAgICpcbiAgICAgKiBtaWRpUGxheWVyLnByZWxvYWQoe1xuICAgICAqICAgaXRlbXM6IFtcbiAgICAgKiAgICAgeyB1cmwsIG5hbWU6IG5hbWUxIH0sXG4gICAgICogICAgIHsgYXJyYXlCdWZmZXIsIG5hbWU6IG5hbWUyIH1cbiAgICAgKiAgIF1cbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBhc3luYyBwcmVsb2FkKHsgaXRlbXMgPSBbXSwgYXVkaW9Db250ZXh0IH0gPSB7fSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICBjb25zdCB7IHVybCwgYXJyYXlCdWZmZXIgfSA9IGl0ZW07XG5cbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxpemVkID0gdGhpcy5pbml0QXVkaW9Db250ZXh0KHsgYXVkaW9Db250ZXh0IH0pO1xuXG4gICAgICAgICAgICBpZiAoIWluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNTb3VyY2VWYWxpZCh7IHVybCwgYXJyYXlCdWZmZXIgfSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldFNvdXJjZSh7IHVybCwgYXJyYXlCdWZmZXIgfSk7XG5cbiAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5taWRpRmlsZUFycmF5ID0gbmV3IEludDhBcnJheShkYXRhKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU3RyZWFtKCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldEluc3RydW1lbnRQYXRjaGVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdGFydHMgcGxheWJhY2sgb2YgTUlESSBpbnB1dC5cbiAgICAgKlxuICAgICAqIFBsZWFzZSBub3RlIHRoYXQgeW91IGNhbiBub3QgdXNlIGBpbnB1dC5hcnJheUJ1ZmZlcmAgYW5kIGBpbnB1dC51cmxgIGNvbmN1cnJlbnRseS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gaW5wdXRcbiAgICAgKiBAcGFyYW0ge2FycmF5QnVmZmVyfSBbaW5wdXQuYXJyYXlCdWZmZXJdIEFuIGFycmF5IGJ1ZmZlciBjb250YWluaW5nIE1JREkgZGF0YSB0byBwbGF5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbaW5wdXQudXJsXSBUaGUgVVJMIHdoZXJlIHRoZSBNSURJIGZpbGUgdG8gcGxheSBpcyBsb2NhdGVkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbaW5wdXQubmFtZV0gQSBodW1hbi1mcmllbmRseSBuYW1lIGZvciB0aGUgc29uZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW2lucHV0LmF1ZGlvQ29udGV4dF0gQW4gaW5zdGFuY2Ugb2YgdGhlIFdlYiBBdWRpbyBBUEkgQXVkaW9Db250ZXh0IGludGVyZmFjZS5cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHBsYXliYWNrIHdhcyBzdWNjZXNzZnVsbHkgaW5pdGlhdGVkIG9yIG5vdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IG5hbWUxID0gJ015IE1JREkgZmlsZSBmcm9tIFVSTCc7XG4gICAgICogY29uc3QgdXJsID0gJ21lZGlhL2ZpbGUubWlkaSc7XG4gICAgICogbWlkaVBsYXllci5wbGF5KHsgdXJsLCBuYW1lOiBuYW1lMSB9KTtcbiAgICAgKlxuICAgICAqIGNvbnN0IG5hbWUyID0gJ015IE1JREkgZmlsZSBmcm9tIEFycmF5QnVmZmVyJztcbiAgICAgKiBjb25zdCBhcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcigpO1xuICAgICAqIG1pZGlQbGF5ZXIucGxheSh7IGFycmF5QnVmZmVyLCBuYW1lOiBuYW1lMiB9KTtcbiAgICAgKi9cbiAgICBhc3luYyBwbGF5KHsgYXJyYXlCdWZmZXIsIHVybCwgbmFtZSwgYXVkaW9Db250ZXh0IH0gPSB7fSkge1xuICAgICAgICB0aGlzLnN0b3AoKTtcblxuICAgICAgICBjb25zdCBpbml0aWFsaXplZCA9IHRoaXMuaW5pdEF1ZGlvQ29udGV4dCh7IGF1ZGlvQ29udGV4dCB9KTtcblxuICAgICAgICBpZiAoIWluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNTb3VyY2VWYWxpZCh7IHVybCwgYXJyYXlCdWZmZXIgfSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRMb2FkRmlsZSh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgTG9hZGluZyR7TWlkaVBsYXllci5mb3JtYXRNaWRpTmFtZShuYW1lKX0uLi5gXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldFNvdXJjZSh7IHVybCwgYXJyYXlCdWZmZXIgfSk7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2FkZWQgPSBhd2FpdCB0aGlzLmxvYWRTb25nKHsgYXJyYXlCdWZmZXI6IGRhdGEgfSk7XG5cbiAgICAgICAgaWYgKGxvYWRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdFBsYXliYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0QXVkaW9Db250ZXh0KHsgYXVkaW9Db250ZXh0IH0pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEF1ZGlvQ29udGV4dCBtdXN0IGJlIGZpcmVkIGNsb3NlIHRvIHRoZSB0b3VjaC9jbGljayBldmVudCBpbml0aWF0ZWQgYnkgdGhlIHVzZXIgdG8gd29yayBpbiBTYWZhcmlcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9XG4gICAgICAgICAgICAgICAgYXVkaW9Db250ZXh0IHx8XG4gICAgICAgICAgICAgICAgbmV3ICh3aW5kb3cuQXVkaW9Db250ZXh0IHx8IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKCk7XG4gICAgICAgICAgICB0aGlzLnNhbXBsZVJhdGUgPSB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcbiAgICAgICAgICAgIGxldCBnYWluTm9kZSA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG4gICAgICAgICAgICBnYWluTm9kZS5nYWluLnZhbHVlID0gMTsgLy8gdm9sdW1lXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFcnJvcih7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBzZXQgQXVkaW9Db250ZXh0LmAsXG4gICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNTb3VyY2VWYWxpZCh7IGFycmF5QnVmZmVyLCB1cmwgfSkge1xuICAgICAgICBpZiAoIWFycmF5QnVmZmVyICYmICF1cmwpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFcnJvcih7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgICAgICAgXCJVbmtub3duIHNvdXJjZS4gVVJMIG9yIGFycmF5IGJ1ZmZlciBjYW4ndCBiZSBib3RoIHVuZGVmaW5lZCB0byBzdGFydCBwbGF5YmFjay5cIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJyYXlCdWZmZXIgJiYgdXJsKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgICAgICAgICdBbWJpZ3VvdXMgc291cmNlLiBNSURJIGRhdGEgbXVzdCBvcmlnaW5hdGUgZWl0aGVyIGZyb20gYSBVUkwgb3IgYW4gYXJyYXkgYnVmZmVyIHRvIHN0YXJ0IHBsYXliYWNrLiBOb3QgYm90aC4nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFNvdXJjZSh7IGFycmF5QnVmZmVyLCB1cmwgfSkge1xuICAgICAgICBpZiAoYXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJheUJ1ZmZlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHJldHJpZXZlIE1JREkke01pZGlQbGF5ZXIuZm9ybWF0TWlkaU5hbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgICAgICAgICl9LmAsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBgU3RhdHVzIGNvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfS5gXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5hcnJheUJ1ZmZlcigpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEVycm9yKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHJldHJpZXZlIE1JREkke01pZGlQbGF5ZXIuZm9ybWF0TWlkaU5hbWUoXG4gICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICApfS5gLFxuICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZFNvbmcoeyBhcnJheUJ1ZmZlciB9KSB7XG4gICAgICAgIHRoaXMubWlkaUZpbGVBcnJheSA9IG5ldyBJbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5oYW5kbGVTdHJlYW0oKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0SW5zdHJ1bWVudFBhdGNoZXMoKTtcblxuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byByZWxvYWQgdGhlIE1JREkgb25jZSB0aGUgaW5zdHJ1bWVudCBwYXRjaGVzIGhhdmUgYmVlbiBsb2FkZWRcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtID0gTGliVGlNaWRpdHkuY2FsbChcbiAgICAgICAgICAgICAgICAnbWlkX2lzdHJlYW1fb3Blbl9tZW0nLFxuICAgICAgICAgICAgICAgICdudW1iZXInLFxuICAgICAgICAgICAgICAgIFsnbnVtYmVyJywgJ251bWJlcicsICdudW1iZXInXSxcbiAgICAgICAgICAgICAgICBbdGhpcy5taWRpRmlsZUJ1ZmZlciwgdGhpcy5taWRpRmlsZUFycmF5Lmxlbmd0aCwgZmFsc2VdXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLnNvbmcgPSBMaWJUaU1pZGl0eS5jYWxsKFxuICAgICAgICAgICAgICAgICdtaWRfc29uZ19sb2FkJyxcbiAgICAgICAgICAgICAgICAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICBbJ251bWJlcicsICdudW1iZXInXSxcbiAgICAgICAgICAgICAgICBbdGhpcy5zdHJlYW0sIG9wdGlvbnNdXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBMaWJUaU1pZGl0eS5jYWxsKFxuICAgICAgICAgICAgICAgICdtaWRfaXN0cmVhbV9jbG9zZScsXG4gICAgICAgICAgICAgICAgJ251bWJlcicsXG4gICAgICAgICAgICAgICAgWydudW1iZXInXSxcbiAgICAgICAgICAgICAgICBbdGhpcy5zdHJlYW1dXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEVycm9yKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGxvYWQgc29uZy4nLFxuICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGhhbmRsZVN0cmVhbSgpIHtcbiAgICAgICAgdGhpcy5taWRpRmlsZUJ1ZmZlciA9IExpYlRpTWlkaXR5Ll9tYWxsb2ModGhpcy5taWRpRmlsZUFycmF5Lmxlbmd0aCk7XG5cbiAgICAgICAgTGliVGlNaWRpdHkud3JpdGVBcnJheVRvTWVtb3J5KHRoaXMubWlkaUZpbGVBcnJheSwgdGhpcy5taWRpRmlsZUJ1ZmZlcik7XG4gICAgICAgIExpYlRpTWlkaXR5LmNhbGwoJ21pZF9pbml0JywgJ251bWJlcicsIFtdLCBbXSk7XG5cbiAgICAgICAgdGhpcy5zdHJlYW0gPSBMaWJUaU1pZGl0eS5jYWxsKFxuICAgICAgICAgICAgJ21pZF9pc3RyZWFtX29wZW5fbWVtJyxcbiAgICAgICAgICAgICdudW1iZXInLFxuICAgICAgICAgICAgWydudW1iZXInLCAnbnVtYmVyJywgJ251bWJlciddLFxuICAgICAgICAgICAgW3RoaXMubWlkaUZpbGVCdWZmZXIsIHRoaXMubWlkaUZpbGVBcnJheS5sZW5ndGgsIGZhbHNlXVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBMaWJUaU1pZGl0eS5jYWxsKFxuICAgICAgICAgICAgJ21pZF9jcmVhdGVfb3B0aW9ucycsXG4gICAgICAgICAgICAnbnVtYmVyJyxcbiAgICAgICAgICAgIFsnbnVtYmVyJywgJ251bWJlcicsICdudW1iZXInLCAnbnVtYmVyJ10sXG4gICAgICAgICAgICBbdGhpcy5zYW1wbGVSYXRlLCBNSURJX0FVRElPX1MxNkxTQiwgMSwgTUlESV9BVURJT19CVUZGRVJfU0laRSAqIDJdXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zb25nID0gTGliVGlNaWRpdHkuY2FsbChcbiAgICAgICAgICAgICdtaWRfc29uZ19sb2FkJyxcbiAgICAgICAgICAgICdudW1iZXInLFxuICAgICAgICAgICAgWydudW1iZXInLCAnbnVtYmVyJ10sXG4gICAgICAgICAgICBbdGhpcy5zdHJlYW0sIG9wdGlvbnNdXG4gICAgICAgICk7XG5cbiAgICAgICAgTGliVGlNaWRpdHkuY2FsbChcbiAgICAgICAgICAgICdtaWRfaXN0cmVhbV9jbG9zZScsXG4gICAgICAgICAgICAnbnVtYmVyJyxcbiAgICAgICAgICAgIFsnbnVtYmVyJ10sXG4gICAgICAgICAgICBbdGhpcy5zdHJlYW1dXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0SW5zdHJ1bWVudFBhdGNoZXMoKSB7XG4gICAgICAgIGNvbnN0IG1pc3NpbmdQYXRjaENvdW50ID0gTGliVGlNaWRpdHkuY2FsbChcbiAgICAgICAgICAgICdtaWRfc29uZ19nZXRfbnVtX21pc3NpbmdfaW5zdHJ1bWVudHMnLFxuICAgICAgICAgICAgJ251bWJlcicsXG4gICAgICAgICAgICBbJ251bWJlciddLFxuICAgICAgICAgICAgW3RoaXMuc29uZ11cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobWlzc2luZ1BhdGNoQ291bnQgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0TG9hZFBhdGNoKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgTG9hZGluZyAke21pc3NpbmdQYXRjaENvdW50fSBpbnN0cnVtZW50IHBhdGNoZXMuLi5gXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaXNzaW5nUGF0Y2hDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWlzc2luZ1BhdGNoID0gTGliVGlNaWRpdHkuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgJ21pZF9zb25nX2dldF9taXNzaW5nX2luc3RydW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgWydudW1iZXInLCAnbnVtYmVyJ10sXG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLnNvbmcsIGldXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IExpYlRpTWlkaXR5LmxvYWRQYXRjaEZyb21VcmwoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdGNoVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZ1BhdGNoXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgcmV0cmlldmUgbWlzc2luZyBpbnN0cnVtZW50IHBhdGNoICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZ1BhdGNoID8gYCcke21pc3NpbmdQYXRjaH0nYCA6IGAjJHtpfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIH0uYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdFBsYXliYWNrID0gKCkgPT4ge1xuICAgICAgICBMaWJUaU1pZGl0eS5jYWxsKCdtaWRfc29uZ19zdGFydCcsICd2b2lkJywgWydudW1iZXInXSwgW3RoaXMuc29uZ10pO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RTb3VyY2UoKTtcbiAgICAgICAgICAgIHRoaXMud2F2ZUJ1ZmZlciA9IExpYlRpTWlkaXR5Ll9tYWxsb2MoTUlESV9BVURJT19CVUZGRVJfU0laRSAqIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3QgaW5pdGlhbGl6ZSBwbGF5YmFjay4nLFxuICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRQbGF5KHsgdGltZTogMCB9KTtcbiAgICB9O1xuXG4gICAgLy8gY3JlYXRlcyBzY3JpcHQgcHJvY2Vzc29yIHdpdGggYXV0byBidWZmZXIgc2l6ZSBhbmQgYSBzaW5nbGUgb3V0cHV0IGNoYW5uZWxcbiAgICBjb25uZWN0U291cmNlID0gKCkgPT4ge1xuICAgICAgICAvLyBXYXJuaW5nISBUaGlzIGZlYXR1cmUgaGFzIGJlZW4gbWFya2VkIGFzIGRlcHJlY2F0ZWQ6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9CYXNlQXVkaW9Db250ZXh0L2NyZWF0ZVNjcmlwdFByb2Nlc3NvclxuICAgICAgICAvLyBTZWUgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS95dmVzZ3VyY2FuL3dlYi1taWRpLXBsYXllci9pc3N1ZXMvMjlcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLmNvbnRleHQuY3JlYXRlU2NyaXB0UHJvY2Vzc29yKFxuICAgICAgICAgICAgTUlESV9BVURJT19CVUZGRVJfU0laRSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAxXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gZXZlbnQgaGFuZGxlciBmb3IgbmV4dCBidWZmZXIgZnVsbCBvZiBhdWRpbyBkYXRhXG4gICAgICAgIHRoaXMuc291cmNlLm9uYXVkaW9wcm9jZXNzID0gZXZlbnQgPT4gdGhpcy5oYW5kbGVPdXRwdXQoZXZlbnQpO1xuXG4gICAgICAgIC8vIGNvbm5lY3RzIHRoZSBzb3VyY2UgdG8gdGhlIGNvbnRleHQncyBkZXN0aW5hdGlvbiAodGhlIHNwZWFrZXJzKVxuICAgICAgICB0aGlzLnNvdXJjZS5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7XG4gICAgfTtcblxuICAgIGhhbmRsZU91dHB1dCh7IG91dHB1dEJ1ZmZlciB9KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lIC0gdGhpcy5zdGFydFRpbWU7XG5cbiAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRQbGF5KHsgdGltZSB9KTtcblxuICAgICAgICAgICAgLy8gY29sbGVjdCBuZXcgd2F2ZSBkYXRhIGZyb20gTGliVGlNaWRpdHkgaW50byB3YXZlQnVmZmVyXG4gICAgICAgICAgICBjb25zdCByZWFkV2F2ZUJ5dGVzID0gTGliVGlNaWRpdHkuY2FsbChcbiAgICAgICAgICAgICAgICAnbWlkX3NvbmdfcmVhZF93YXZlJyxcbiAgICAgICAgICAgICAgICAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICBbJ251bWJlcicsICdudW1iZXInLCAnbnVtYmVyJywgJ251bWJlciddLFxuICAgICAgICAgICAgICAgIFt0aGlzLnNvbmcsIHRoaXMud2F2ZUJ1ZmZlciwgTUlESV9BVURJT19CVUZGRVJfU0laRSAqIDIsIGZhbHNlXVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHJlYWRXYXZlQnl0ZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RW5kKHsgdGltZSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgc2FtcGxlc1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNSURJX0FVRElPX0JVRkZFUl9TSVpFOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA8IHJlYWRXYXZlQnl0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydHMgUENNIGRhdGEgZnJvbSBzaW50MTYgaW4gQyB0byBudW1iZXIgaW4gSmF2YVNjcmlwdCAocmFuZ2U6IC0xLjAgLi4gKzEuMClcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDApW2ldID1cbiAgICAgICAgICAgICAgICAgICAgICAgIExpYlRpTWlkaXR5LmdldFZhbHVlKHRoaXMud2F2ZUJ1ZmZlciArIDIgKiBpLCAnaTE2JykgL1xuICAgICAgICAgICAgICAgICAgICAgICAgTUFYX0kxNjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBmaWxsIGVuZCBvZiBidWZmZXIgd2l0aCB6ZXJvZXMsIG1heSBoYXBwZW4gYXQgdGhlIGVuZCBvZiBhIHBpZWNlXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKVtpXSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEVycm9yKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IHByb2Nlc3MgYXVkaW8uJyxcbiAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXVzZXMgcGxheWJhY2sgb2YgTUlESSBpbnB1dC5cbiAgICAgKiBAcGFyYW0ge3VuZGVmaW5lZH1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHBsYXliYWNrIHdhcyBzdWNjZXNzZnVsbHkgcGF1c2VkIG9yIG5vdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1pZGlQbGF5ZXIucGF1c2UoKTtcbiAgICAgKi9cbiAgICBwYXVzZSgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCB0aW1lID0gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuc3VzcGVuZCgpO1xuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUgLSB0aGlzLnN0YXJ0VGltZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRQYXVzZSh7IHRpbWUgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFcnJvcih7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0NvdWxkIG5vdCBwYXVzZSBwbGF5YmFjay4nLFxuICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzdW1lcyBwbGF5YmFjayBvZiBNSURJIGlucHV0LlxuICAgICAqIEBwYXJhbSB7dW5kZWZpbmVkfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgcGxheWJhY2sgd2FzIHN1Y2Nlc3NmdWxseSByZXNzdW1lZCBvciBub3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtaWRpUGxheWVyLnJlc3VtZSgpO1xuICAgICAqL1xuICAgIHJlc3VtZSgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCB0aW1lID0gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQucmVzdW1lKCk7XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuY29udGV4dC5jdXJyZW50VGltZSAtIHRoaXMuc3RhcnRUaW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdFJlc3VtZSh7XG4gICAgICAgICAgICAgICAgdGltZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFcnJvcih7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0NvdWxkIG5vdCByZXN1bWUgcGxheWJhY2suJyxcbiAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0b3BzIHBsYXliYWNrIG9mIE1JREkgaW5wdXQuXG4gICAgICogQHBhcmFtIHt1bmRlZmluZWR9XG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciBwbGF5YmFjayB3YXMgc3VjY2Vzc2Z1bGx5IHN0b3BwZWQgb3Igbm90LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWlkaVBsYXllci5zdG9wKCk7XG4gICAgICovXG4gICAgc3RvcCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdFNvdXJjZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZnJlZU1lbW9yeSgpO1xuICAgICAgICAgICAgICAgIExpYlRpTWlkaXR5LmNhbGwoJ21pZF9leGl0JywgJ3ZvaWQnLCBbXSwgW10pO1xuICAgICAgICAgICAgICAgIHRoaXMuc29uZyA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDtcblxuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdFN0b3AoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXJyb3Ioe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3Qgc3RvcCBwbGF5YmFjay4nLFxuICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnJlZU1lbW9yeSgpIHtcbiAgICAgICAgTGliVGlNaWRpdHkuX2ZyZWUodGhpcy53YXZlQnVmZmVyKTtcbiAgICAgICAgTGliVGlNaWRpdHkuX2ZyZWUodGhpcy5taWRpRmlsZUJ1ZmZlcik7XG4gICAgICAgIExpYlRpTWlkaXR5LmNhbGwoJ21pZF9zb25nX2ZyZWUnLCAndm9pZCcsIFsnbnVtYmVyJ10sIFt0aGlzLnNvbmddKTtcbiAgICB9XG5cbiAgICAvLyB0ZXJtaW5hdGUgcGxheWJhY2tcbiAgICBkaXNjb25uZWN0U291cmNlKCkge1xuICAgICAgICB0aGlzLnNvdXJjZS5kaXNjb25uZWN0KCk7XG4gICAgICAgIHRoaXMuc291cmNlID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZW5kIGN1c3RvbSBwYXlsb2FkcyB0byB0aGUgZXZlbnQgbG9nZ2VyLlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwYXlsb2FkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXlsb2FkLmV2ZW50XSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXlsb2FkLm1lc3NhZ2VdIEEgbWVzc2FnZSB0aGF0IGRlc2NyaWJlZCB0aGUgZXZlbnQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCBldmVudCA9ICdNSURJX0NVU1RPTV9FVkVOVCc7XG4gICAgICogY29uc3QgbWVzc2FnZSA9ICdTb21ldGhpbmcgaGFwcGVuZWQuJztcbiAgICAgKiBtaWRpUGxheWVyLmVtaXRFdmVudCh7IGV2ZW50LCBtZXNzYWdlIH0pO1xuICAgICAqL1xuICAgIGVtaXRFdmVudCA9IHBheWxvYWQgPT4gdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KHBheWxvYWQpO1xuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgbG9nZ2VyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbY29uZmlndXJhdGlvbl1cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY29uZmlndXJhdGlvbi5ldmVudExvZ2dlciA9IHVuZGVmaW5lZF0gVGhlIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgZXZlbnQgcGF5bG9hZHMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY29uZmlndXJhdGlvbi5sb2dnaW5nID0gZmFsc2VdIFR1cm5zIE9OIG9yIE9GRiBsb2dnaW5nIHRvIHRoZSBjb25zb2xlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogIGNvbnN0IGV2ZW50TG9nZ2VyID0gKHBheWxvYWQpID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdSZWNlaXZlZCBldmVudDonLCBwYXlsb2FkLmV2ZW50KTtcbiAgICAgKiB9XG4gICAgICogbWlkaVBsYXllci5zZXRMb2dnZXIoeyBldmVudExvZ2dlciB9KTtcbiAgICAgKi9cbiAgICBzZXRMb2dnZXIoeyBldmVudExvZ2dlciA9IHVuZGVmaW5lZCwgbG9nZ2luZyA9IGZhbHNlIH0pIHtcbiAgICAgICAgdGhpcy5ldmVudExvZ2dlciA9IGV2ZW50TG9nZ2VyO1xuICAgICAgICB0aGlzLmxvZ2dpbmcgPSBsb2dnaW5nO1xuICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5zZXRMb2dnZXIoeyBldmVudExvZ2dlciwgbG9nZ2luZyB9KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgTWlkaVBsYXllciBmcm9tICcuL01pZGlQbGF5ZXInO1xuXG5leHBvcnQgZGVmYXVsdCBNaWRpUGxheWVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUVBO0FBRUE7QUFFQTtBQUdBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpIQTtBQTRIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF2SEE7QUFDQTtBQTBIQTs7Ozs7O0FDeFFBO0FBV0E7Ozs7O0FBV0E7QUFrQkE7QUFDQTtBQW9CQTtBQXlDQTtBQUVBO0FBaUJBO0FBSUE7QUFDQTtBQWtCQTtBQWFBO0FBcURBO0FBaUNBO0FBS0E7QUFHQTtBQUdBO0FBMEJBO0FBZ0VBO0FBQ0E7QUFTQTtBQUdBO0FBbUJBOzs7OztBQWFBO0FBNEJBOzs7Ozs7QUFvQkE7QUFJQTs7Ozs7O0FBY0E7Ozs7Ozs7QUFnQkE7Ozs7Ozs7Ozs7QUFvQkE7QUFXQTs7Ozs7Ozs7QUF3Q0E7QUFHQTs7Ozs7OztBQXNEQTtBQUdBO0FBd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBZ0JBO0FBNERBO0FBRUE7Ozs7OztBQW1CQTtBQUVBO0FBQ0E7QUFjQTs7Ozs7QUE2QkE7QUFRQTs7Ozs7OztBQWVBO0FBR0E7QUFDQTtBQUdBOzs7Ozs7QUFhQTtBQVFBOzs7Ozs7O0FBdUJBO0FBSUE7QUFDQTtBQVVBOzs7OztBQVlBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQTBCQTs7Ozs7QUFpQkE7Ozs7O0FBYUE7Ozs7O0FBYUE7Ozs7O0FBYUE7Ozs7O0FBYUE7Ozs7Ozs7QUFoOUJBO0FBZytCQTtBQUNBO0FBQ0E7Ozs7O0FBd0JBOzs7Ozs7O0FBMS9CQTtBQWtoQ0E7Ozs7OztBQW9CQTs7Ozs7OztBQWlCQTtBQWFBO0FBVUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQXVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBOzs7OztBQU9BOzs7OztBQXNCQTtBQW9CQTtBQVFBO0FBZUE7QUFVQTtBQVdBO0FBY0E7QUFXQTtBQW9CQTtBQUlBO0FBTUE7QUFtQ0E7QUFXQTtBQThEQTtBQTJGQTtBQWtEQTtBQWdCQTtBQW9CQTtBQTZCQTtBQVlBO0FBaURBO0FBNkJBO0FBT0E7QUFxQkE7QUFHQTtBQXlCQTtBQU1BO0FBQ0E7QUFJQTtBQWlDQTtBQUNBO0FBQ0E7QUFZQTtBQUtBO0FBaUJBO0FBR0E7QUFPQTtBQU1BO0FBS0E7QUFJQTtBQUNBO0FBQ0E7QUFjQTtBQStEQTtBQWVBO0FBSUE7QUFHQTtBQUNBO0FBc0dBO0FBcURBO0FBNEJBO0FBbUNBO0FBRUE7QUF1Q0E7QUFjQTtBQVFBO0FBSUE7QUFJQTtBQUtBO0FBZ0VBO0FBVUE7QUFJQTtBQUVBO0FBS0E7QUFLQTtBQU1BO0FBQ0E7QUFJQTtBQU1BO0FBQ0E7QUFnQkE7QUFPQTtBQUVBO0FBTUE7QUFDQTtBQXFDQTtBQW9FQTtBQWtGQTtBQUNBO0FBR0E7QUFLQTtBQU9BO0FBSUE7QUFLQTtBQUlBO0FBRUE7QUFJQTtBQUtBO0FBT0E7QUFpRkE7QUFzQ0E7QUFxRkE7QUFFQTtBQVVBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWdCQTtBQWlDQTtBQTJDQTs7Ozs7Ozs7QUFzREE7QUFZQTs7Ozs7Ozs7O0FBZUE7Ozs7Ozs7Ozs7OztBQXVCQTtBQXVDQTs7Ozs7OztBQWlCQTtBQTZCQTtBQU1BO0FBMkRBO0FBaUdBO0FBZ0RBO0FBQ0E7QUFZQTtBQUNBO0FBaUNBO0FBYUE7QUFFQTtBQVdBO0FBSUE7QUFRQTtBQXdCQTtBQThCQTtBQUFBO0FBbUJBO0FBR0E7QUFnQkE7QUFDQTtBQUNBO0FBc0NBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFlQTtBQW9CQTtBQUNBO0FBSUE7QUFVQTtBQUtBO0FBSUE7QUE0QkE7QUFPQTtBQWdCQTtBQUlBO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFpQ0E7QUFRQTtBQUtBO0FBZUE7QUFPQTtBQUdBO0FBUUE7QUE4QkE7QUFLQTtBQUtBO0FBSUE7QUFNQTtBQWNBO0FBUUE7QUFNQTtBQU1BO0FBa0JBO0FBUUE7QUFFQTtBQVlBO0FBT0E7QUFHQTtBQU9BO0FBZUE7QUF1QkE7QUFDQTtBQWVBO0FBQ0E7QUFlQTtBQUNBO0FBbUJBO0FBQ0E7QUFTQTtBQUVBO0FBaUJBO0FBaUNBO0FBYUE7QUFzQkE7QUFFQTtBQU9BO0FBRUE7QUFPQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBUUE7QUFTQTtBQU1BO0FBUUE7QUFRQTtBQXNEQTtBQWtDQTtBQVFBO0FBS0E7QUFZQTtBQWFBO0FBZUE7QUFDQTtBQW1DQTtBQW9CQTtBQVVBO0FBTUE7QUFPQTtBQUVBO0FBU0E7QUFpQkE7QUFFQTtBQU9BO0FBZ0NBO0FBU0E7QUFNQTtBQUtBO0FBbUJBO0FBQ0E7QUFxQkE7QUFDQTtBQWVBO0FBQ0E7QUFlQTtBQUNBO0FBdUJBO0FBQ0E7QUFjQTtBQUNBO0FBVUE7QUFDQTtBQWVBO0FBQ0E7QUFHQTtBQVFBO0FBQ0E7QUFLQTtBQUNBO0FBMEZBO0FBRUE7QUFRQTtBQTBCQTtBQVlBO0FBRUE7QUFJQTtBQVNBO0FBNkJBOzs7OztBQTBCQTtBQUdBO0FBVUE7QUFHQTtBQUNBO0FBaU5BO0FBa0VBO0FBbUdBO0FBdVBBO0FBMGpCQTtBQUNBO0FBQ0E7QUFNQTtBQVdBO0FBSUE7QUFXQTtBQWdCQTtBQUlBO0FBMktBO0FBdXhQQTtBQU1BO0FBbUNBO0FBcUdBO0FBaW1FQTtBQW94QkE7QUF1RUE7QUFtSEE7QUFJQTtBQVdBO0FBRUE7QUF1Q0E7QUFNQTtBQUdBO0FBbUJBOzs7Ozs7QUFtQ0E7QUFFQTtBQVFBO0FBWUE7O0FDdndpQkE7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFFQTs7Ozs7Ozs7OztBQ3BCQTtBQUNBO0FBV0E7OztBQUNBOzs7Ozs7OztBQVFBO0FBSUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQURBO0FBd0JBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQTlCQTtBQXFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUEzQ0E7QUFtSEE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBMUhBO0FBbUlBO0FBRUE7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpKQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFFQTs7Ozs7Ozs7OztBQTBCQTs7Ozs7O0FBTUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFFQTs7Ozs7Ozs7O0FBTUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFFQTs7Ozs7Ozs7O0FBTUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFFQTs7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFFQTs7Ozs7Ozs7O0FBTUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFFQTs7Ozs7Ozs7Ozs7QUF1Q0E7Ozs7Ozs7QUFPQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDdkxBO0FBRUE7QUFPQTtBQUNBO0FBRUE7QUFDQTtBQUNBOzs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOEJBO0FBSUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBREE7QUF5VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBelZBO0FBNFZBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFXQTtBQWdnQkE7QUFBQTtBQUNBO0FBaGdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztBQVNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUJBO0FBQ0E7QUFDQTs7QUFEQTs7Ozs7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTs7Ozs7QUFDQTtBQUNBOztBQUVBO0FBQUE7QUFBQTtBQUFBOzs7OztBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7O0FBREE7QUFDQTtBQUNBOzs7OztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFDQTtBQUNBOztBQXZCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBOzs7OztBQUNBO0FBQ0E7O0FBRUE7QUFBQTtBQUFBO0FBQUE7Ozs7O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBREE7O0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFDQTs7QUFEQTtBQUNBO0FBQ0E7Ozs7O0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUFBO0FBQ0E7O0FBREE7QUFDQTtBQUNBOzs7OztBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFBQTs7Ozs7QUFDQTtBQUNBOzs7O0FBR0E7QUFDQTs7QUFEQTtBQUNBO0FBQUE7Ozs7O0FBQ0E7QUFDQTtBQUdBO0FBSkE7QUFPQTtBQUNBOztBQUVBO0FBQ0E7Ozs7QUFDQTtBQUNBO0FBR0E7QUFKQTtBQU1BO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0E7QUFDQTs7QUFHQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFPQTtBQU9BOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQU9BO0FBT0E7QUFPQTtBQU9BO0FBQ0E7Ozs7Ozs7Ozs7OztBQUdBO0FBQ0E7QUFNQTs7Ozs7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBOztBQURBOzs7OztBQUNBOzs7QUFRQTtBQUNBOzs7Ozs7OztBQUlBO0FBQ0E7QUFHQTtBQUpBO0FBTUE7QUFDQTs7QUFyQkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkRBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUVBOzs7Ozs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7O0FBYUE7Ozs7Ozs7Ozs7O0FBV0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBOzs7QUF4ZUE7QUFDQTtBQUNBOzs7Ozs7OztBQzVGQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///11\\n\");}]);});\n\n//# sourceURL=webpack:////Users/owner/Projects/web-midi-player/index.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js": +/*!**************************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js ***! + \**************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _assertThisInitialized; });\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/extends.js": +/*!************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/extends.js ***! + \************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _extends; });\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/extends.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js": +/*!******************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js ***! + \******************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _inheritsLoose; });\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js ***! + \*********************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _objectWithoutPropertiesLoose; });\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js?"); + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/inheritsLoose.js": +/*!**************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/inheritsLoose.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nmodule.exports = _inheritsLoose;\n\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/inheritsLoose.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js ***! + \*******************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _emotion_memoize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/memoize */ \"./node_modules/@emotion/memoize/dist/memoize.browser.esm.js\");\n\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = Object(_emotion_memoize__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (index);\n\n\n//# sourceURL=webpack:///./node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/memoize/dist/memoize.browser.esm.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@emotion/memoize/dist/memoize.browser.esm.js ***! + \*******************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\nfunction memoize(fn) {\n var cache = {};\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (memoize);\n\n\n//# sourceURL=webpack:///./node_modules/@emotion/memoize/dist/memoize.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/@emotion/unitless/dist/unitless.browser.esm.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@emotion/unitless/dist/unitless.browser.esm.js ***! + \*********************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\nvar unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (unitlessKeys);\n\n\n//# sourceURL=webpack:///./node_modules/@emotion/unitless/dist/unitless.browser.esm.js?"); + +/***/ }), + +/***/ "./node_modules/ansi-html/index.js": +/*!*****************************************!*\ + !*** ./node_modules/ansi-html/index.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n\nmodule.exports = ansiHTML\n\n// Reference to https://github.com/sindresorhus/ansi-regex\nvar _regANSI = /(?:(?:\\u001b\\[)|\\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\\u001b[A-M]/\n\nvar _defColors = {\n reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR]\n black: '000',\n red: 'ff0000',\n green: '209805',\n yellow: 'e8bf03',\n blue: '0000ff',\n magenta: 'ff00ff',\n cyan: '00ffee',\n lightgrey: 'f0f0f0',\n darkgrey: '888'\n}\nvar _styles = {\n 30: 'black',\n 31: 'red',\n 32: 'green',\n 33: 'yellow',\n 34: 'blue',\n 35: 'magenta',\n 36: 'cyan',\n 37: 'lightgrey'\n}\nvar _openTags = {\n '1': 'font-weight:bold', // bold\n '2': 'opacity:0.5', // dim\n '3': '', // italic\n '4': '', // underscore\n '8': 'display:none', // hidden\n '9': '' // delete\n}\nvar _closeTags = {\n '23': '', // reset italic\n '24': '', // reset underscore\n '29': '' // reset delete\n}\n\n;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) {\n _closeTags[n] = ''\n})\n\n/**\n * Converts text with ANSI color codes to HTML markup.\n * @param {String} text\n * @returns {*}\n */\nfunction ansiHTML (text) {\n // Returns the text if the string has no ANSI escape code.\n if (!_regANSI.test(text)) {\n return text\n }\n\n // Cache opened sequence.\n var ansiCodes = []\n // Replace with markup.\n var ret = text.replace(/\\033\\[(\\d+)*m/g, function (match, seq) {\n var ot = _openTags[seq]\n if (ot) {\n // If current sequence has been opened, close it.\n if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast\n ansiCodes.pop()\n return ''\n }\n // Open tag.\n ansiCodes.push(seq)\n return ot[0] === '<' ? ot : ''\n }\n\n var ct = _closeTags[seq]\n if (ct) {\n // Pop sequence\n ansiCodes.pop()\n return ct\n }\n return ''\n })\n\n // Make sure tags are closed.\n var l = ansiCodes.length\n ;(l > 0) && (ret += Array(l + 1).join(''))\n\n return ret\n}\n\n/**\n * Customize colors.\n * @param {Object} colors reference to _defColors\n */\nansiHTML.setColors = function (colors) {\n if (typeof colors !== 'object') {\n throw new Error('`colors` parameter must be an Object.')\n }\n\n var _finalColors = {}\n for (var key in _defColors) {\n var hex = colors.hasOwnProperty(key) ? colors[key] : null\n if (!hex) {\n _finalColors[key] = _defColors[key]\n continue\n }\n if ('reset' === key) {\n if (typeof hex === 'string') {\n hex = [hex]\n }\n if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) {\n return typeof h !== 'string'\n })) {\n throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000')\n }\n var defHexColor = _defColors[key]\n if (!hex[0]) {\n hex[0] = defHexColor[0]\n }\n if (hex.length === 1 || !hex[1]) {\n hex = [hex[0]]\n hex.push(defHexColor[1])\n }\n\n hex = hex.slice(0, 2)\n } else if (typeof hex !== 'string') {\n throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000')\n }\n _finalColors[key] = hex\n }\n _setTags(_finalColors)\n}\n\n/**\n * Reset colors.\n */\nansiHTML.reset = function () {\n _setTags(_defColors)\n}\n\n/**\n * Expose tags, including open and close.\n * @type {Object}\n */\nansiHTML.tags = {}\n\nif (Object.defineProperty) {\n Object.defineProperty(ansiHTML.tags, 'open', {\n get: function () { return _openTags }\n })\n Object.defineProperty(ansiHTML.tags, 'close', {\n get: function () { return _closeTags }\n })\n} else {\n ansiHTML.tags.open = _openTags\n ansiHTML.tags.close = _closeTags\n}\n\nfunction _setTags (colors) {\n // reset all\n _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1]\n // inverse\n _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0]\n // dark grey\n _openTags['90'] = 'color:#' + colors.darkgrey\n\n for (var code in _styles) {\n var color = _styles[code]\n var oriColor = colors[color] || '000'\n _openTags[code] = 'color:#' + oriColor\n code = parseInt(code)\n _openTags[(code + 10).toString()] = 'background:#' + oriColor\n }\n}\n\nansiHTML.reset()\n\n\n//# sourceURL=webpack:///./node_modules/ansi-html/index.js?"); + +/***/ }), + +/***/ "./node_modules/ansi-regex/index.js": +/*!******************************************!*\ + !*** ./node_modules/ansi-regex/index.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nmodule.exports = function () {\n\treturn /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;\n};\n\n\n//# sourceURL=webpack:///./node_modules/ansi-regex/index.js?"); + +/***/ }), + +/***/ "./node_modules/dom-helpers/esm/addClass.js": +/*!**************************************************!*\ + !*** ./node_modules/dom-helpers/esm/addClass.js ***! + \**************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return addClass; });\n/* harmony import */ var _hasClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hasClass */ \"./node_modules/dom-helpers/esm/hasClass.js\");\n\nfunction addClass(element, className) {\n if (element.classList) element.classList.add(className);else if (!Object(_hasClass__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element, className)) if (typeof element.className === 'string') element.className = element.className + \" \" + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + \" \" + className);\n}\n\n//# sourceURL=webpack:///./node_modules/dom-helpers/esm/addClass.js?"); + +/***/ }), + +/***/ "./node_modules/dom-helpers/esm/hasClass.js": +/*!**************************************************!*\ + !*** ./node_modules/dom-helpers/esm/hasClass.js ***! + \**************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return hasClass; });\nfunction hasClass(element, className) {\n if (element.classList) return !!className && element.classList.contains(className);\n return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}\n\n//# sourceURL=webpack:///./node_modules/dom-helpers/esm/hasClass.js?"); + +/***/ }), + +/***/ "./node_modules/dom-helpers/esm/removeClass.js": +/*!*****************************************************!*\ + !*** ./node_modules/dom-helpers/esm/removeClass.js ***! + \*****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return removeClass; });\nfunction replaceClassName(origClass, classToRemove) {\n return origClass.replace(new RegExp(\"(^|\\\\s)\" + classToRemove + \"(?:\\\\s|$)\", 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n\nfunction removeClass(element, className) {\n if (element.classList) {\n element.classList.remove(className);\n } else if (typeof element.className === 'string') {\n ;\n element.className = replaceClassName(element.className, className);\n } else {\n element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n }\n}\n\n//# sourceURL=webpack:///./node_modules/dom-helpers/esm/removeClass.js?"); + +/***/ }), + +/***/ "./node_modules/events/events.js": +/*!***************************************!*\ + !*** ./node_modules/events/events.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = $getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n ReflectApply(this.listener, this.target, args);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\n\n//# sourceURL=webpack:///./node_modules/events/events.js?"); + +/***/ }), + +/***/ "./node_modules/gud/index.js": +/*!***********************************!*\ + !*** ./node_modules/gud/index.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/* WEBPACK VAR INJECTION */(function(global) {// @flow\n\n\nvar key = '__global_unique_id__';\n\nmodule.exports = function() {\n return global[key] = (global[key] || 0) + 1;\n};\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./node_modules/gud/index.js?"); + +/***/ }), + +/***/ "./node_modules/history/esm/history.js": +/*!*********************************************!*\ + !*** ./node_modules/history/esm/history.js ***! + \*********************************************/ +/*! exports provided: createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createBrowserHistory\", function() { return createBrowserHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createHashHistory\", function() { return createHashHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createMemoryHistory\", function() { return createMemoryHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createLocation\", function() { return createLocation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"locationsAreEqual\", function() { return locationsAreEqual; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parsePath\", function() { return parsePath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createPath\", function() { return createPath; });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var resolve_pathname__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! resolve-pathname */ \"./node_modules/resolve-pathname/esm/resolve-pathname.js\");\n/* harmony import */ var value_equal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! value-equal */ \"./node_modules/value-equal/esm/value-equal.js\");\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tiny-warning */ \"./node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n/* harmony import */ var tiny_invariant__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tiny-invariant */ \"./node_modules/tiny-invariant/dist/tiny-invariant.esm.js\");\n\n\n\n\n\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n var hashIndex = pathname.indexOf('#');\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n}\nfunction createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n var path = pathname || '/';\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n var location;\n\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = parsePath(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, path);\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = Object(resolve_pathname__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n}\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && Object(value_equal__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n var prompt = null;\n\n function setPrompt(nextPrompt) {\n true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(prompt == null, 'A history supports only one prompt at a time') : undefined;\n prompt = nextPrompt;\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n }\n\n function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : undefined;\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n }\n\n var listeners = [];\n\n function appendListener(fn) {\n var isActive = true;\n\n function listener() {\n if (isActive) fn.apply(void 0, arguments);\n }\n\n listeners.push(listener);\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function notifyListeners() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(void 0, args);\n });\n }\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n var ua = window.navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(false, 'Browser history needs a DOM') : undefined : void 0;\n var globalHistory = window.history;\n var canUseHistory = supportsHistory();\n var needsHashChangeListener = !supportsPopStateOnHashChange();\n var _props = props,\n _props$forceRefresh = _props.forceRefresh,\n forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n var path = pathname + search + hash;\n true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : undefined;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path, state, key);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (isExtraneousPopstateEvent(event)) return;\n handlePop(getDOMLocation(event.state));\n }\n\n function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n }\n\n var forceNextPop = false;\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allKeys.indexOf(fromLocation.key);\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n }\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key]; // Public interface\n\n function createHref(location) {\n return basename + createPath(location);\n }\n\n function push(path, state) {\n true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : undefined;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.pushState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex + 1);\n nextKeys.push(location.key);\n allKeys = nextKeys;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : undefined;\n window.location.href = href;\n }\n });\n }\n\n function replace(path, state) {\n true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : undefined;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.replaceState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : undefined;\n window.location.replace(href);\n }\n });\n }\n\n function go(n) {\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: stripLeadingSlash,\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nfunction stripHash(url) {\n var hashIndex = url.indexOf('#');\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(false, 'Hash history needs a DOM') : undefined : void 0;\n var globalHistory = window.history;\n var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n var _props = props,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$hashType = _props.hashType,\n hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n function getDOMLocation() {\n var path = decodePath(getHashPath());\n true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : undefined;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n var forceNextPop = false;\n var ignorePath = null;\n\n function locationsAreEqual$$1(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n }\n\n function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n handlePop(location);\n }\n }\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n } // Ensure the hash is encoded properly before doing anything else.\n\n\n var path = getHashPath();\n var encodedPath = encodePath(path);\n if (path !== encodedPath) replaceHashPath(encodedPath);\n var initialLocation = getDOMLocation();\n var allPaths = [createPath(initialLocation)]; // Public interface\n\n function createHref(location) {\n var baseTag = document.querySelector('base');\n var href = '';\n\n if (baseTag && baseTag.getAttribute('href')) {\n href = stripHash(window.location.href);\n }\n\n return href + '#' + encodePath(basename + createPath(location));\n }\n\n function push(path, state) {\n true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state === undefined, 'Hash history cannot push state; it is ignored') : undefined;\n var action = 'PUSH';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n var nextPaths = allPaths.slice(0, prevIndex + 1);\n nextPaths.push(path);\n allPaths = nextPaths;\n setState({\n action: action,\n location: location\n });\n } else {\n true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : undefined;\n setState();\n }\n });\n }\n\n function replace(path, state) {\n true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state === undefined, 'Hash history cannot replace state; it is ignored') : undefined;\n var action = 'REPLACE';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(createPath(history.location));\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : undefined;\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(HashChangeEvent$1, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(HashChangeEvent$1, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n getUserConfirmation = _props.getUserConfirmation,\n _props$initialEntries = _props.initialEntries,\n initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n _props$initialIndex = _props.initialIndex,\n initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(history, nextState);\n\n history.length = history.entries.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n }); // Public interface\n\n var createHref = createPath;\n\n function push(path, state) {\n true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : undefined;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n var nextEntries = history.entries.slice(0);\n\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n }\n\n function replace(path, state) {\n true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : undefined;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n history.entries[history.index] = location;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n var action = 'POP';\n var location = history.entries[nextIndex];\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n }\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n return transitionManager.setPrompt(prompt);\n }\n\n function listen(listener) {\n return transitionManager.appendListener(listener);\n }\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n return history;\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/history/esm/history.js?"); + +/***/ }), + +/***/ "./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js ***! + \**********************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n\nvar reactIs = __webpack_require__(/*! react-is */ \"./node_modules/react-is/index.js\");\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\n\nfunction getStatics(component) {\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n }\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n\n\n//# sourceURL=webpack:///./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js?"); + +/***/ }), + +/***/ "./node_modules/html-entities/index.js": +/*!*********************************************!*\ + !*** ./node_modules/html-entities/index.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("module.exports = {\n XmlEntities: __webpack_require__(/*! ./lib/xml-entities.js */ \"./node_modules/html-entities/lib/xml-entities.js\"),\n Html4Entities: __webpack_require__(/*! ./lib/html4-entities.js */ \"./node_modules/html-entities/lib/html4-entities.js\"),\n Html5Entities: __webpack_require__(/*! ./lib/html5-entities.js */ \"./node_modules/html-entities/lib/html5-entities.js\"),\n AllHtmlEntities: __webpack_require__(/*! ./lib/html5-entities.js */ \"./node_modules/html-entities/lib/html5-entities.js\")\n};\n\n\n//# sourceURL=webpack:///./node_modules/html-entities/index.js?"); + +/***/ }), + +/***/ "./node_modules/html-entities/lib/html4-entities.js": +/*!**********************************************************!*\ + !*** ./node_modules/html-entities/lib/html4-entities.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("var HTML_ALPHA = ['apos', 'nbsp', 'iexcl', 'cent', 'pound', 'curren', 'yen', 'brvbar', 'sect', 'uml', 'copy', 'ordf', 'laquo', 'not', 'shy', 'reg', 'macr', 'deg', 'plusmn', 'sup2', 'sup3', 'acute', 'micro', 'para', 'middot', 'cedil', 'sup1', 'ordm', 'raquo', 'frac14', 'frac12', 'frac34', 'iquest', 'Agrave', 'Aacute', 'Acirc', 'Atilde', 'Auml', 'Aring', 'Aelig', 'Ccedil', 'Egrave', 'Eacute', 'Ecirc', 'Euml', 'Igrave', 'Iacute', 'Icirc', 'Iuml', 'ETH', 'Ntilde', 'Ograve', 'Oacute', 'Ocirc', 'Otilde', 'Ouml', 'times', 'Oslash', 'Ugrave', 'Uacute', 'Ucirc', 'Uuml', 'Yacute', 'THORN', 'szlig', 'agrave', 'aacute', 'acirc', 'atilde', 'auml', 'aring', 'aelig', 'ccedil', 'egrave', 'eacute', 'ecirc', 'euml', 'igrave', 'iacute', 'icirc', 'iuml', 'eth', 'ntilde', 'ograve', 'oacute', 'ocirc', 'otilde', 'ouml', 'divide', 'oslash', 'ugrave', 'uacute', 'ucirc', 'uuml', 'yacute', 'thorn', 'yuml', 'quot', 'amp', 'lt', 'gt', 'OElig', 'oelig', 'Scaron', 'scaron', 'Yuml', 'circ', 'tilde', 'ensp', 'emsp', 'thinsp', 'zwnj', 'zwj', 'lrm', 'rlm', 'ndash', 'mdash', 'lsquo', 'rsquo', 'sbquo', 'ldquo', 'rdquo', 'bdquo', 'dagger', 'Dagger', 'permil', 'lsaquo', 'rsaquo', 'euro', 'fnof', 'Alpha', 'Beta', 'Gamma', 'Delta', 'Epsilon', 'Zeta', 'Eta', 'Theta', 'Iota', 'Kappa', 'Lambda', 'Mu', 'Nu', 'Xi', 'Omicron', 'Pi', 'Rho', 'Sigma', 'Tau', 'Upsilon', 'Phi', 'Chi', 'Psi', 'Omega', 'alpha', 'beta', 'gamma', 'delta', 'epsilon', 'zeta', 'eta', 'theta', 'iota', 'kappa', 'lambda', 'mu', 'nu', 'xi', 'omicron', 'pi', 'rho', 'sigmaf', 'sigma', 'tau', 'upsilon', 'phi', 'chi', 'psi', 'omega', 'thetasym', 'upsih', 'piv', 'bull', 'hellip', 'prime', 'Prime', 'oline', 'frasl', 'weierp', 'image', 'real', 'trade', 'alefsym', 'larr', 'uarr', 'rarr', 'darr', 'harr', 'crarr', 'lArr', 'uArr', 'rArr', 'dArr', 'hArr', 'forall', 'part', 'exist', 'empty', 'nabla', 'isin', 'notin', 'ni', 'prod', 'sum', 'minus', 'lowast', 'radic', 'prop', 'infin', 'ang', 'and', 'or', 'cap', 'cup', 'int', 'there4', 'sim', 'cong', 'asymp', 'ne', 'equiv', 'le', 'ge', 'sub', 'sup', 'nsub', 'sube', 'supe', 'oplus', 'otimes', 'perp', 'sdot', 'lceil', 'rceil', 'lfloor', 'rfloor', 'lang', 'rang', 'loz', 'spades', 'clubs', 'hearts', 'diams'];\nvar HTML_CODES = [39, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 34, 38, 60, 62, 338, 339, 352, 353, 376, 710, 732, 8194, 8195, 8201, 8204, 8205, 8206, 8207, 8211, 8212, 8216, 8217, 8218, 8220, 8221, 8222, 8224, 8225, 8240, 8249, 8250, 8364, 402, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 977, 978, 982, 8226, 8230, 8242, 8243, 8254, 8260, 8472, 8465, 8476, 8482, 8501, 8592, 8593, 8594, 8595, 8596, 8629, 8656, 8657, 8658, 8659, 8660, 8704, 8706, 8707, 8709, 8711, 8712, 8713, 8715, 8719, 8721, 8722, 8727, 8730, 8733, 8734, 8736, 8743, 8744, 8745, 8746, 8747, 8756, 8764, 8773, 8776, 8800, 8801, 8804, 8805, 8834, 8835, 8836, 8838, 8839, 8853, 8855, 8869, 8901, 8968, 8969, 8970, 8971, 9001, 9002, 9674, 9824, 9827, 9829, 9830];\n\nvar alphaIndex = {};\nvar numIndex = {};\n\nvar i = 0;\nvar length = HTML_ALPHA.length;\nwhile (i < length) {\n var a = HTML_ALPHA[i];\n var c = HTML_CODES[i];\n alphaIndex[a] = String.fromCharCode(c);\n numIndex[c] = a;\n i++;\n}\n\n/**\n * @constructor\n */\nfunction Html4Entities() {}\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.prototype.decode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n return str.replace(/&(#?[\\w\\d]+);?/g, function(s, entity) {\n var chr;\n if (entity.charAt(0) === \"#\") {\n var code = entity.charAt(1).toLowerCase() === 'x' ?\n parseInt(entity.substr(2), 16) :\n parseInt(entity.substr(1));\n\n if (!(isNaN(code) || code < -32768 || code > 65535)) {\n chr = String.fromCharCode(code);\n }\n } else {\n chr = alphaIndex[entity];\n }\n return chr || s;\n });\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.decode = function(str) {\n return new Html4Entities().decode(str);\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.prototype.encode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var alpha = numIndex[str.charCodeAt(i)];\n result += alpha ? \"&\" + alpha + \";\" : str.charAt(i);\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.encode = function(str) {\n return new Html4Entities().encode(str);\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.prototype.encodeNonUTF = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var cc = str.charCodeAt(i);\n var alpha = numIndex[cc];\n if (alpha) {\n result += \"&\" + alpha + \";\";\n } else if (cc < 32 || cc > 126) {\n result += \"&#\" + cc + \";\";\n } else {\n result += str.charAt(i);\n }\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.encodeNonUTF = function(str) {\n return new Html4Entities().encodeNonUTF(str);\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.prototype.encodeNonASCII = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var c = str.charCodeAt(i);\n if (c <= 255) {\n result += str[i++];\n continue;\n }\n result += '&#' + c + ';';\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.encodeNonASCII = function(str) {\n return new Html4Entities().encodeNonASCII(str);\n};\n\nmodule.exports = Html4Entities;\n\n\n//# sourceURL=webpack:///./node_modules/html-entities/lib/html4-entities.js?"); + +/***/ }), + +/***/ "./node_modules/html-entities/lib/html5-entities.js": +/*!**********************************************************!*\ + !*** ./node_modules/html-entities/lib/html5-entities.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("var ENTITIES = [['Aacute', [193]], ['aacute', [225]], ['Abreve', [258]], ['abreve', [259]], ['ac', [8766]], ['acd', [8767]], ['acE', [8766, 819]], ['Acirc', [194]], ['acirc', [226]], ['acute', [180]], ['Acy', [1040]], ['acy', [1072]], ['AElig', [198]], ['aelig', [230]], ['af', [8289]], ['Afr', [120068]], ['afr', [120094]], ['Agrave', [192]], ['agrave', [224]], ['alefsym', [8501]], ['aleph', [8501]], ['Alpha', [913]], ['alpha', [945]], ['Amacr', [256]], ['amacr', [257]], ['amalg', [10815]], ['amp', [38]], ['AMP', [38]], ['andand', [10837]], ['And', [10835]], ['and', [8743]], ['andd', [10844]], ['andslope', [10840]], ['andv', [10842]], ['ang', [8736]], ['ange', [10660]], ['angle', [8736]], ['angmsdaa', [10664]], ['angmsdab', [10665]], ['angmsdac', [10666]], ['angmsdad', [10667]], ['angmsdae', [10668]], ['angmsdaf', [10669]], ['angmsdag', [10670]], ['angmsdah', [10671]], ['angmsd', [8737]], ['angrt', [8735]], ['angrtvb', [8894]], ['angrtvbd', [10653]], ['angsph', [8738]], ['angst', [197]], ['angzarr', [9084]], ['Aogon', [260]], ['aogon', [261]], ['Aopf', [120120]], ['aopf', [120146]], ['apacir', [10863]], ['ap', [8776]], ['apE', [10864]], ['ape', [8778]], ['apid', [8779]], ['apos', [39]], ['ApplyFunction', [8289]], ['approx', [8776]], ['approxeq', [8778]], ['Aring', [197]], ['aring', [229]], ['Ascr', [119964]], ['ascr', [119990]], ['Assign', [8788]], ['ast', [42]], ['asymp', [8776]], ['asympeq', [8781]], ['Atilde', [195]], ['atilde', [227]], ['Auml', [196]], ['auml', [228]], ['awconint', [8755]], ['awint', [10769]], ['backcong', [8780]], ['backepsilon', [1014]], ['backprime', [8245]], ['backsim', [8765]], ['backsimeq', [8909]], ['Backslash', [8726]], ['Barv', [10983]], ['barvee', [8893]], ['barwed', [8965]], ['Barwed', [8966]], ['barwedge', [8965]], ['bbrk', [9141]], ['bbrktbrk', [9142]], ['bcong', [8780]], ['Bcy', [1041]], ['bcy', [1073]], ['bdquo', [8222]], ['becaus', [8757]], ['because', [8757]], ['Because', [8757]], ['bemptyv', [10672]], ['bepsi', [1014]], ['bernou', [8492]], ['Bernoullis', [8492]], ['Beta', [914]], ['beta', [946]], ['beth', [8502]], ['between', [8812]], ['Bfr', [120069]], ['bfr', [120095]], ['bigcap', [8898]], ['bigcirc', [9711]], ['bigcup', [8899]], ['bigodot', [10752]], ['bigoplus', [10753]], ['bigotimes', [10754]], ['bigsqcup', [10758]], ['bigstar', [9733]], ['bigtriangledown', [9661]], ['bigtriangleup', [9651]], ['biguplus', [10756]], ['bigvee', [8897]], ['bigwedge', [8896]], ['bkarow', [10509]], ['blacklozenge', [10731]], ['blacksquare', [9642]], ['blacktriangle', [9652]], ['blacktriangledown', [9662]], ['blacktriangleleft', [9666]], ['blacktriangleright', [9656]], ['blank', [9251]], ['blk12', [9618]], ['blk14', [9617]], ['blk34', [9619]], ['block', [9608]], ['bne', [61, 8421]], ['bnequiv', [8801, 8421]], ['bNot', [10989]], ['bnot', [8976]], ['Bopf', [120121]], ['bopf', [120147]], ['bot', [8869]], ['bottom', [8869]], ['bowtie', [8904]], ['boxbox', [10697]], ['boxdl', [9488]], ['boxdL', [9557]], ['boxDl', [9558]], ['boxDL', [9559]], ['boxdr', [9484]], ['boxdR', [9554]], ['boxDr', [9555]], ['boxDR', [9556]], ['boxh', [9472]], ['boxH', [9552]], ['boxhd', [9516]], ['boxHd', [9572]], ['boxhD', [9573]], ['boxHD', [9574]], ['boxhu', [9524]], ['boxHu', [9575]], ['boxhU', [9576]], ['boxHU', [9577]], ['boxminus', [8863]], ['boxplus', [8862]], ['boxtimes', [8864]], ['boxul', [9496]], ['boxuL', [9563]], ['boxUl', [9564]], ['boxUL', [9565]], ['boxur', [9492]], ['boxuR', [9560]], ['boxUr', [9561]], ['boxUR', [9562]], ['boxv', [9474]], ['boxV', [9553]], ['boxvh', [9532]], ['boxvH', [9578]], ['boxVh', [9579]], ['boxVH', [9580]], ['boxvl', [9508]], ['boxvL', [9569]], ['boxVl', [9570]], ['boxVL', [9571]], ['boxvr', [9500]], ['boxvR', [9566]], ['boxVr', [9567]], ['boxVR', [9568]], ['bprime', [8245]], ['breve', [728]], ['Breve', [728]], ['brvbar', [166]], ['bscr', [119991]], ['Bscr', [8492]], ['bsemi', [8271]], ['bsim', [8765]], ['bsime', [8909]], ['bsolb', [10693]], ['bsol', [92]], ['bsolhsub', [10184]], ['bull', [8226]], ['bullet', [8226]], ['bump', [8782]], ['bumpE', [10926]], ['bumpe', [8783]], ['Bumpeq', [8782]], ['bumpeq', [8783]], ['Cacute', [262]], ['cacute', [263]], ['capand', [10820]], ['capbrcup', [10825]], ['capcap', [10827]], ['cap', [8745]], ['Cap', [8914]], ['capcup', [10823]], ['capdot', [10816]], ['CapitalDifferentialD', [8517]], ['caps', [8745, 65024]], ['caret', [8257]], ['caron', [711]], ['Cayleys', [8493]], ['ccaps', [10829]], ['Ccaron', [268]], ['ccaron', [269]], ['Ccedil', [199]], ['ccedil', [231]], ['Ccirc', [264]], ['ccirc', [265]], ['Cconint', [8752]], ['ccups', [10828]], ['ccupssm', [10832]], ['Cdot', [266]], ['cdot', [267]], ['cedil', [184]], ['Cedilla', [184]], ['cemptyv', [10674]], ['cent', [162]], ['centerdot', [183]], ['CenterDot', [183]], ['cfr', [120096]], ['Cfr', [8493]], ['CHcy', [1063]], ['chcy', [1095]], ['check', [10003]], ['checkmark', [10003]], ['Chi', [935]], ['chi', [967]], ['circ', [710]], ['circeq', [8791]], ['circlearrowleft', [8634]], ['circlearrowright', [8635]], ['circledast', [8859]], ['circledcirc', [8858]], ['circleddash', [8861]], ['CircleDot', [8857]], ['circledR', [174]], ['circledS', [9416]], ['CircleMinus', [8854]], ['CirclePlus', [8853]], ['CircleTimes', [8855]], ['cir', [9675]], ['cirE', [10691]], ['cire', [8791]], ['cirfnint', [10768]], ['cirmid', [10991]], ['cirscir', [10690]], ['ClockwiseContourIntegral', [8754]], ['clubs', [9827]], ['clubsuit', [9827]], ['colon', [58]], ['Colon', [8759]], ['Colone', [10868]], ['colone', [8788]], ['coloneq', [8788]], ['comma', [44]], ['commat', [64]], ['comp', [8705]], ['compfn', [8728]], ['complement', [8705]], ['complexes', [8450]], ['cong', [8773]], ['congdot', [10861]], ['Congruent', [8801]], ['conint', [8750]], ['Conint', [8751]], ['ContourIntegral', [8750]], ['copf', [120148]], ['Copf', [8450]], ['coprod', [8720]], ['Coproduct', [8720]], ['copy', [169]], ['COPY', [169]], ['copysr', [8471]], ['CounterClockwiseContourIntegral', [8755]], ['crarr', [8629]], ['cross', [10007]], ['Cross', [10799]], ['Cscr', [119966]], ['cscr', [119992]], ['csub', [10959]], ['csube', [10961]], ['csup', [10960]], ['csupe', [10962]], ['ctdot', [8943]], ['cudarrl', [10552]], ['cudarrr', [10549]], ['cuepr', [8926]], ['cuesc', [8927]], ['cularr', [8630]], ['cularrp', [10557]], ['cupbrcap', [10824]], ['cupcap', [10822]], ['CupCap', [8781]], ['cup', [8746]], ['Cup', [8915]], ['cupcup', [10826]], ['cupdot', [8845]], ['cupor', [10821]], ['cups', [8746, 65024]], ['curarr', [8631]], ['curarrm', [10556]], ['curlyeqprec', [8926]], ['curlyeqsucc', [8927]], ['curlyvee', [8910]], ['curlywedge', [8911]], ['curren', [164]], ['curvearrowleft', [8630]], ['curvearrowright', [8631]], ['cuvee', [8910]], ['cuwed', [8911]], ['cwconint', [8754]], ['cwint', [8753]], ['cylcty', [9005]], ['dagger', [8224]], ['Dagger', [8225]], ['daleth', [8504]], ['darr', [8595]], ['Darr', [8609]], ['dArr', [8659]], ['dash', [8208]], ['Dashv', [10980]], ['dashv', [8867]], ['dbkarow', [10511]], ['dblac', [733]], ['Dcaron', [270]], ['dcaron', [271]], ['Dcy', [1044]], ['dcy', [1076]], ['ddagger', [8225]], ['ddarr', [8650]], ['DD', [8517]], ['dd', [8518]], ['DDotrahd', [10513]], ['ddotseq', [10871]], ['deg', [176]], ['Del', [8711]], ['Delta', [916]], ['delta', [948]], ['demptyv', [10673]], ['dfisht', [10623]], ['Dfr', [120071]], ['dfr', [120097]], ['dHar', [10597]], ['dharl', [8643]], ['dharr', [8642]], ['DiacriticalAcute', [180]], ['DiacriticalDot', [729]], ['DiacriticalDoubleAcute', [733]], ['DiacriticalGrave', [96]], ['DiacriticalTilde', [732]], ['diam', [8900]], ['diamond', [8900]], ['Diamond', [8900]], ['diamondsuit', [9830]], ['diams', [9830]], ['die', [168]], ['DifferentialD', [8518]], ['digamma', [989]], ['disin', [8946]], ['div', [247]], ['divide', [247]], ['divideontimes', [8903]], ['divonx', [8903]], ['DJcy', [1026]], ['djcy', [1106]], ['dlcorn', [8990]], ['dlcrop', [8973]], ['dollar', [36]], ['Dopf', [120123]], ['dopf', [120149]], ['Dot', [168]], ['dot', [729]], ['DotDot', [8412]], ['doteq', [8784]], ['doteqdot', [8785]], ['DotEqual', [8784]], ['dotminus', [8760]], ['dotplus', [8724]], ['dotsquare', [8865]], ['doublebarwedge', [8966]], ['DoubleContourIntegral', [8751]], ['DoubleDot', [168]], ['DoubleDownArrow', [8659]], ['DoubleLeftArrow', [8656]], ['DoubleLeftRightArrow', [8660]], ['DoubleLeftTee', [10980]], ['DoubleLongLeftArrow', [10232]], ['DoubleLongLeftRightArrow', [10234]], ['DoubleLongRightArrow', [10233]], ['DoubleRightArrow', [8658]], ['DoubleRightTee', [8872]], ['DoubleUpArrow', [8657]], ['DoubleUpDownArrow', [8661]], ['DoubleVerticalBar', [8741]], ['DownArrowBar', [10515]], ['downarrow', [8595]], ['DownArrow', [8595]], ['Downarrow', [8659]], ['DownArrowUpArrow', [8693]], ['DownBreve', [785]], ['downdownarrows', [8650]], ['downharpoonleft', [8643]], ['downharpoonright', [8642]], ['DownLeftRightVector', [10576]], ['DownLeftTeeVector', [10590]], ['DownLeftVectorBar', [10582]], ['DownLeftVector', [8637]], ['DownRightTeeVector', [10591]], ['DownRightVectorBar', [10583]], ['DownRightVector', [8641]], ['DownTeeArrow', [8615]], ['DownTee', [8868]], ['drbkarow', [10512]], ['drcorn', [8991]], ['drcrop', [8972]], ['Dscr', [119967]], ['dscr', [119993]], ['DScy', [1029]], ['dscy', [1109]], ['dsol', [10742]], ['Dstrok', [272]], ['dstrok', [273]], ['dtdot', [8945]], ['dtri', [9663]], ['dtrif', [9662]], ['duarr', [8693]], ['duhar', [10607]], ['dwangle', [10662]], ['DZcy', [1039]], ['dzcy', [1119]], ['dzigrarr', [10239]], ['Eacute', [201]], ['eacute', [233]], ['easter', [10862]], ['Ecaron', [282]], ['ecaron', [283]], ['Ecirc', [202]], ['ecirc', [234]], ['ecir', [8790]], ['ecolon', [8789]], ['Ecy', [1069]], ['ecy', [1101]], ['eDDot', [10871]], ['Edot', [278]], ['edot', [279]], ['eDot', [8785]], ['ee', [8519]], ['efDot', [8786]], ['Efr', [120072]], ['efr', [120098]], ['eg', [10906]], ['Egrave', [200]], ['egrave', [232]], ['egs', [10902]], ['egsdot', [10904]], ['el', [10905]], ['Element', [8712]], ['elinters', [9191]], ['ell', [8467]], ['els', [10901]], ['elsdot', [10903]], ['Emacr', [274]], ['emacr', [275]], ['empty', [8709]], ['emptyset', [8709]], ['EmptySmallSquare', [9723]], ['emptyv', [8709]], ['EmptyVerySmallSquare', [9643]], ['emsp13', [8196]], ['emsp14', [8197]], ['emsp', [8195]], ['ENG', [330]], ['eng', [331]], ['ensp', [8194]], ['Eogon', [280]], ['eogon', [281]], ['Eopf', [120124]], ['eopf', [120150]], ['epar', [8917]], ['eparsl', [10723]], ['eplus', [10865]], ['epsi', [949]], ['Epsilon', [917]], ['epsilon', [949]], ['epsiv', [1013]], ['eqcirc', [8790]], ['eqcolon', [8789]], ['eqsim', [8770]], ['eqslantgtr', [10902]], ['eqslantless', [10901]], ['Equal', [10869]], ['equals', [61]], ['EqualTilde', [8770]], ['equest', [8799]], ['Equilibrium', [8652]], ['equiv', [8801]], ['equivDD', [10872]], ['eqvparsl', [10725]], ['erarr', [10609]], ['erDot', [8787]], ['escr', [8495]], ['Escr', [8496]], ['esdot', [8784]], ['Esim', [10867]], ['esim', [8770]], ['Eta', [919]], ['eta', [951]], ['ETH', [208]], ['eth', [240]], ['Euml', [203]], ['euml', [235]], ['euro', [8364]], ['excl', [33]], ['exist', [8707]], ['Exists', [8707]], ['expectation', [8496]], ['exponentiale', [8519]], ['ExponentialE', [8519]], ['fallingdotseq', [8786]], ['Fcy', [1060]], ['fcy', [1092]], ['female', [9792]], ['ffilig', [64259]], ['fflig', [64256]], ['ffllig', [64260]], ['Ffr', [120073]], ['ffr', [120099]], ['filig', [64257]], ['FilledSmallSquare', [9724]], ['FilledVerySmallSquare', [9642]], ['fjlig', [102, 106]], ['flat', [9837]], ['fllig', [64258]], ['fltns', [9649]], ['fnof', [402]], ['Fopf', [120125]], ['fopf', [120151]], ['forall', [8704]], ['ForAll', [8704]], ['fork', [8916]], ['forkv', [10969]], ['Fouriertrf', [8497]], ['fpartint', [10765]], ['frac12', [189]], ['frac13', [8531]], ['frac14', [188]], ['frac15', [8533]], ['frac16', [8537]], ['frac18', [8539]], ['frac23', [8532]], ['frac25', [8534]], ['frac34', [190]], ['frac35', [8535]], ['frac38', [8540]], ['frac45', [8536]], ['frac56', [8538]], ['frac58', [8541]], ['frac78', [8542]], ['frasl', [8260]], ['frown', [8994]], ['fscr', [119995]], ['Fscr', [8497]], ['gacute', [501]], ['Gamma', [915]], ['gamma', [947]], ['Gammad', [988]], ['gammad', [989]], ['gap', [10886]], ['Gbreve', [286]], ['gbreve', [287]], ['Gcedil', [290]], ['Gcirc', [284]], ['gcirc', [285]], ['Gcy', [1043]], ['gcy', [1075]], ['Gdot', [288]], ['gdot', [289]], ['ge', [8805]], ['gE', [8807]], ['gEl', [10892]], ['gel', [8923]], ['geq', [8805]], ['geqq', [8807]], ['geqslant', [10878]], ['gescc', [10921]], ['ges', [10878]], ['gesdot', [10880]], ['gesdoto', [10882]], ['gesdotol', [10884]], ['gesl', [8923, 65024]], ['gesles', [10900]], ['Gfr', [120074]], ['gfr', [120100]], ['gg', [8811]], ['Gg', [8921]], ['ggg', [8921]], ['gimel', [8503]], ['GJcy', [1027]], ['gjcy', [1107]], ['gla', [10917]], ['gl', [8823]], ['glE', [10898]], ['glj', [10916]], ['gnap', [10890]], ['gnapprox', [10890]], ['gne', [10888]], ['gnE', [8809]], ['gneq', [10888]], ['gneqq', [8809]], ['gnsim', [8935]], ['Gopf', [120126]], ['gopf', [120152]], ['grave', [96]], ['GreaterEqual', [8805]], ['GreaterEqualLess', [8923]], ['GreaterFullEqual', [8807]], ['GreaterGreater', [10914]], ['GreaterLess', [8823]], ['GreaterSlantEqual', [10878]], ['GreaterTilde', [8819]], ['Gscr', [119970]], ['gscr', [8458]], ['gsim', [8819]], ['gsime', [10894]], ['gsiml', [10896]], ['gtcc', [10919]], ['gtcir', [10874]], ['gt', [62]], ['GT', [62]], ['Gt', [8811]], ['gtdot', [8919]], ['gtlPar', [10645]], ['gtquest', [10876]], ['gtrapprox', [10886]], ['gtrarr', [10616]], ['gtrdot', [8919]], ['gtreqless', [8923]], ['gtreqqless', [10892]], ['gtrless', [8823]], ['gtrsim', [8819]], ['gvertneqq', [8809, 65024]], ['gvnE', [8809, 65024]], ['Hacek', [711]], ['hairsp', [8202]], ['half', [189]], ['hamilt', [8459]], ['HARDcy', [1066]], ['hardcy', [1098]], ['harrcir', [10568]], ['harr', [8596]], ['hArr', [8660]], ['harrw', [8621]], ['Hat', [94]], ['hbar', [8463]], ['Hcirc', [292]], ['hcirc', [293]], ['hearts', [9829]], ['heartsuit', [9829]], ['hellip', [8230]], ['hercon', [8889]], ['hfr', [120101]], ['Hfr', [8460]], ['HilbertSpace', [8459]], ['hksearow', [10533]], ['hkswarow', [10534]], ['hoarr', [8703]], ['homtht', [8763]], ['hookleftarrow', [8617]], ['hookrightarrow', [8618]], ['hopf', [120153]], ['Hopf', [8461]], ['horbar', [8213]], ['HorizontalLine', [9472]], ['hscr', [119997]], ['Hscr', [8459]], ['hslash', [8463]], ['Hstrok', [294]], ['hstrok', [295]], ['HumpDownHump', [8782]], ['HumpEqual', [8783]], ['hybull', [8259]], ['hyphen', [8208]], ['Iacute', [205]], ['iacute', [237]], ['ic', [8291]], ['Icirc', [206]], ['icirc', [238]], ['Icy', [1048]], ['icy', [1080]], ['Idot', [304]], ['IEcy', [1045]], ['iecy', [1077]], ['iexcl', [161]], ['iff', [8660]], ['ifr', [120102]], ['Ifr', [8465]], ['Igrave', [204]], ['igrave', [236]], ['ii', [8520]], ['iiiint', [10764]], ['iiint', [8749]], ['iinfin', [10716]], ['iiota', [8489]], ['IJlig', [306]], ['ijlig', [307]], ['Imacr', [298]], ['imacr', [299]], ['image', [8465]], ['ImaginaryI', [8520]], ['imagline', [8464]], ['imagpart', [8465]], ['imath', [305]], ['Im', [8465]], ['imof', [8887]], ['imped', [437]], ['Implies', [8658]], ['incare', [8453]], ['in', [8712]], ['infin', [8734]], ['infintie', [10717]], ['inodot', [305]], ['intcal', [8890]], ['int', [8747]], ['Int', [8748]], ['integers', [8484]], ['Integral', [8747]], ['intercal', [8890]], ['Intersection', [8898]], ['intlarhk', [10775]], ['intprod', [10812]], ['InvisibleComma', [8291]], ['InvisibleTimes', [8290]], ['IOcy', [1025]], ['iocy', [1105]], ['Iogon', [302]], ['iogon', [303]], ['Iopf', [120128]], ['iopf', [120154]], ['Iota', [921]], ['iota', [953]], ['iprod', [10812]], ['iquest', [191]], ['iscr', [119998]], ['Iscr', [8464]], ['isin', [8712]], ['isindot', [8949]], ['isinE', [8953]], ['isins', [8948]], ['isinsv', [8947]], ['isinv', [8712]], ['it', [8290]], ['Itilde', [296]], ['itilde', [297]], ['Iukcy', [1030]], ['iukcy', [1110]], ['Iuml', [207]], ['iuml', [239]], ['Jcirc', [308]], ['jcirc', [309]], ['Jcy', [1049]], ['jcy', [1081]], ['Jfr', [120077]], ['jfr', [120103]], ['jmath', [567]], ['Jopf', [120129]], ['jopf', [120155]], ['Jscr', [119973]], ['jscr', [119999]], ['Jsercy', [1032]], ['jsercy', [1112]], ['Jukcy', [1028]], ['jukcy', [1108]], ['Kappa', [922]], ['kappa', [954]], ['kappav', [1008]], ['Kcedil', [310]], ['kcedil', [311]], ['Kcy', [1050]], ['kcy', [1082]], ['Kfr', [120078]], ['kfr', [120104]], ['kgreen', [312]], ['KHcy', [1061]], ['khcy', [1093]], ['KJcy', [1036]], ['kjcy', [1116]], ['Kopf', [120130]], ['kopf', [120156]], ['Kscr', [119974]], ['kscr', [120000]], ['lAarr', [8666]], ['Lacute', [313]], ['lacute', [314]], ['laemptyv', [10676]], ['lagran', [8466]], ['Lambda', [923]], ['lambda', [955]], ['lang', [10216]], ['Lang', [10218]], ['langd', [10641]], ['langle', [10216]], ['lap', [10885]], ['Laplacetrf', [8466]], ['laquo', [171]], ['larrb', [8676]], ['larrbfs', [10527]], ['larr', [8592]], ['Larr', [8606]], ['lArr', [8656]], ['larrfs', [10525]], ['larrhk', [8617]], ['larrlp', [8619]], ['larrpl', [10553]], ['larrsim', [10611]], ['larrtl', [8610]], ['latail', [10521]], ['lAtail', [10523]], ['lat', [10923]], ['late', [10925]], ['lates', [10925, 65024]], ['lbarr', [10508]], ['lBarr', [10510]], ['lbbrk', [10098]], ['lbrace', [123]], ['lbrack', [91]], ['lbrke', [10635]], ['lbrksld', [10639]], ['lbrkslu', [10637]], ['Lcaron', [317]], ['lcaron', [318]], ['Lcedil', [315]], ['lcedil', [316]], ['lceil', [8968]], ['lcub', [123]], ['Lcy', [1051]], ['lcy', [1083]], ['ldca', [10550]], ['ldquo', [8220]], ['ldquor', [8222]], ['ldrdhar', [10599]], ['ldrushar', [10571]], ['ldsh', [8626]], ['le', [8804]], ['lE', [8806]], ['LeftAngleBracket', [10216]], ['LeftArrowBar', [8676]], ['leftarrow', [8592]], ['LeftArrow', [8592]], ['Leftarrow', [8656]], ['LeftArrowRightArrow', [8646]], ['leftarrowtail', [8610]], ['LeftCeiling', [8968]], ['LeftDoubleBracket', [10214]], ['LeftDownTeeVector', [10593]], ['LeftDownVectorBar', [10585]], ['LeftDownVector', [8643]], ['LeftFloor', [8970]], ['leftharpoondown', [8637]], ['leftharpoonup', [8636]], ['leftleftarrows', [8647]], ['leftrightarrow', [8596]], ['LeftRightArrow', [8596]], ['Leftrightarrow', [8660]], ['leftrightarrows', [8646]], ['leftrightharpoons', [8651]], ['leftrightsquigarrow', [8621]], ['LeftRightVector', [10574]], ['LeftTeeArrow', [8612]], ['LeftTee', [8867]], ['LeftTeeVector', [10586]], ['leftthreetimes', [8907]], ['LeftTriangleBar', [10703]], ['LeftTriangle', [8882]], ['LeftTriangleEqual', [8884]], ['LeftUpDownVector', [10577]], ['LeftUpTeeVector', [10592]], ['LeftUpVectorBar', [10584]], ['LeftUpVector', [8639]], ['LeftVectorBar', [10578]], ['LeftVector', [8636]], ['lEg', [10891]], ['leg', [8922]], ['leq', [8804]], ['leqq', [8806]], ['leqslant', [10877]], ['lescc', [10920]], ['les', [10877]], ['lesdot', [10879]], ['lesdoto', [10881]], ['lesdotor', [10883]], ['lesg', [8922, 65024]], ['lesges', [10899]], ['lessapprox', [10885]], ['lessdot', [8918]], ['lesseqgtr', [8922]], ['lesseqqgtr', [10891]], ['LessEqualGreater', [8922]], ['LessFullEqual', [8806]], ['LessGreater', [8822]], ['lessgtr', [8822]], ['LessLess', [10913]], ['lesssim', [8818]], ['LessSlantEqual', [10877]], ['LessTilde', [8818]], ['lfisht', [10620]], ['lfloor', [8970]], ['Lfr', [120079]], ['lfr', [120105]], ['lg', [8822]], ['lgE', [10897]], ['lHar', [10594]], ['lhard', [8637]], ['lharu', [8636]], ['lharul', [10602]], ['lhblk', [9604]], ['LJcy', [1033]], ['ljcy', [1113]], ['llarr', [8647]], ['ll', [8810]], ['Ll', [8920]], ['llcorner', [8990]], ['Lleftarrow', [8666]], ['llhard', [10603]], ['lltri', [9722]], ['Lmidot', [319]], ['lmidot', [320]], ['lmoustache', [9136]], ['lmoust', [9136]], ['lnap', [10889]], ['lnapprox', [10889]], ['lne', [10887]], ['lnE', [8808]], ['lneq', [10887]], ['lneqq', [8808]], ['lnsim', [8934]], ['loang', [10220]], ['loarr', [8701]], ['lobrk', [10214]], ['longleftarrow', [10229]], ['LongLeftArrow', [10229]], ['Longleftarrow', [10232]], ['longleftrightarrow', [10231]], ['LongLeftRightArrow', [10231]], ['Longleftrightarrow', [10234]], ['longmapsto', [10236]], ['longrightarrow', [10230]], ['LongRightArrow', [10230]], ['Longrightarrow', [10233]], ['looparrowleft', [8619]], ['looparrowright', [8620]], ['lopar', [10629]], ['Lopf', [120131]], ['lopf', [120157]], ['loplus', [10797]], ['lotimes', [10804]], ['lowast', [8727]], ['lowbar', [95]], ['LowerLeftArrow', [8601]], ['LowerRightArrow', [8600]], ['loz', [9674]], ['lozenge', [9674]], ['lozf', [10731]], ['lpar', [40]], ['lparlt', [10643]], ['lrarr', [8646]], ['lrcorner', [8991]], ['lrhar', [8651]], ['lrhard', [10605]], ['lrm', [8206]], ['lrtri', [8895]], ['lsaquo', [8249]], ['lscr', [120001]], ['Lscr', [8466]], ['lsh', [8624]], ['Lsh', [8624]], ['lsim', [8818]], ['lsime', [10893]], ['lsimg', [10895]], ['lsqb', [91]], ['lsquo', [8216]], ['lsquor', [8218]], ['Lstrok', [321]], ['lstrok', [322]], ['ltcc', [10918]], ['ltcir', [10873]], ['lt', [60]], ['LT', [60]], ['Lt', [8810]], ['ltdot', [8918]], ['lthree', [8907]], ['ltimes', [8905]], ['ltlarr', [10614]], ['ltquest', [10875]], ['ltri', [9667]], ['ltrie', [8884]], ['ltrif', [9666]], ['ltrPar', [10646]], ['lurdshar', [10570]], ['luruhar', [10598]], ['lvertneqq', [8808, 65024]], ['lvnE', [8808, 65024]], ['macr', [175]], ['male', [9794]], ['malt', [10016]], ['maltese', [10016]], ['Map', [10501]], ['map', [8614]], ['mapsto', [8614]], ['mapstodown', [8615]], ['mapstoleft', [8612]], ['mapstoup', [8613]], ['marker', [9646]], ['mcomma', [10793]], ['Mcy', [1052]], ['mcy', [1084]], ['mdash', [8212]], ['mDDot', [8762]], ['measuredangle', [8737]], ['MediumSpace', [8287]], ['Mellintrf', [8499]], ['Mfr', [120080]], ['mfr', [120106]], ['mho', [8487]], ['micro', [181]], ['midast', [42]], ['midcir', [10992]], ['mid', [8739]], ['middot', [183]], ['minusb', [8863]], ['minus', [8722]], ['minusd', [8760]], ['minusdu', [10794]], ['MinusPlus', [8723]], ['mlcp', [10971]], ['mldr', [8230]], ['mnplus', [8723]], ['models', [8871]], ['Mopf', [120132]], ['mopf', [120158]], ['mp', [8723]], ['mscr', [120002]], ['Mscr', [8499]], ['mstpos', [8766]], ['Mu', [924]], ['mu', [956]], ['multimap', [8888]], ['mumap', [8888]], ['nabla', [8711]], ['Nacute', [323]], ['nacute', [324]], ['nang', [8736, 8402]], ['nap', [8777]], ['napE', [10864, 824]], ['napid', [8779, 824]], ['napos', [329]], ['napprox', [8777]], ['natural', [9838]], ['naturals', [8469]], ['natur', [9838]], ['nbsp', [160]], ['nbump', [8782, 824]], ['nbumpe', [8783, 824]], ['ncap', [10819]], ['Ncaron', [327]], ['ncaron', [328]], ['Ncedil', [325]], ['ncedil', [326]], ['ncong', [8775]], ['ncongdot', [10861, 824]], ['ncup', [10818]], ['Ncy', [1053]], ['ncy', [1085]], ['ndash', [8211]], ['nearhk', [10532]], ['nearr', [8599]], ['neArr', [8663]], ['nearrow', [8599]], ['ne', [8800]], ['nedot', [8784, 824]], ['NegativeMediumSpace', [8203]], ['NegativeThickSpace', [8203]], ['NegativeThinSpace', [8203]], ['NegativeVeryThinSpace', [8203]], ['nequiv', [8802]], ['nesear', [10536]], ['nesim', [8770, 824]], ['NestedGreaterGreater', [8811]], ['NestedLessLess', [8810]], ['nexist', [8708]], ['nexists', [8708]], ['Nfr', [120081]], ['nfr', [120107]], ['ngE', [8807, 824]], ['nge', [8817]], ['ngeq', [8817]], ['ngeqq', [8807, 824]], ['ngeqslant', [10878, 824]], ['nges', [10878, 824]], ['nGg', [8921, 824]], ['ngsim', [8821]], ['nGt', [8811, 8402]], ['ngt', [8815]], ['ngtr', [8815]], ['nGtv', [8811, 824]], ['nharr', [8622]], ['nhArr', [8654]], ['nhpar', [10994]], ['ni', [8715]], ['nis', [8956]], ['nisd', [8954]], ['niv', [8715]], ['NJcy', [1034]], ['njcy', [1114]], ['nlarr', [8602]], ['nlArr', [8653]], ['nldr', [8229]], ['nlE', [8806, 824]], ['nle', [8816]], ['nleftarrow', [8602]], ['nLeftarrow', [8653]], ['nleftrightarrow', [8622]], ['nLeftrightarrow', [8654]], ['nleq', [8816]], ['nleqq', [8806, 824]], ['nleqslant', [10877, 824]], ['nles', [10877, 824]], ['nless', [8814]], ['nLl', [8920, 824]], ['nlsim', [8820]], ['nLt', [8810, 8402]], ['nlt', [8814]], ['nltri', [8938]], ['nltrie', [8940]], ['nLtv', [8810, 824]], ['nmid', [8740]], ['NoBreak', [8288]], ['NonBreakingSpace', [160]], ['nopf', [120159]], ['Nopf', [8469]], ['Not', [10988]], ['not', [172]], ['NotCongruent', [8802]], ['NotCupCap', [8813]], ['NotDoubleVerticalBar', [8742]], ['NotElement', [8713]], ['NotEqual', [8800]], ['NotEqualTilde', [8770, 824]], ['NotExists', [8708]], ['NotGreater', [8815]], ['NotGreaterEqual', [8817]], ['NotGreaterFullEqual', [8807, 824]], ['NotGreaterGreater', [8811, 824]], ['NotGreaterLess', [8825]], ['NotGreaterSlantEqual', [10878, 824]], ['NotGreaterTilde', [8821]], ['NotHumpDownHump', [8782, 824]], ['NotHumpEqual', [8783, 824]], ['notin', [8713]], ['notindot', [8949, 824]], ['notinE', [8953, 824]], ['notinva', [8713]], ['notinvb', [8951]], ['notinvc', [8950]], ['NotLeftTriangleBar', [10703, 824]], ['NotLeftTriangle', [8938]], ['NotLeftTriangleEqual', [8940]], ['NotLess', [8814]], ['NotLessEqual', [8816]], ['NotLessGreater', [8824]], ['NotLessLess', [8810, 824]], ['NotLessSlantEqual', [10877, 824]], ['NotLessTilde', [8820]], ['NotNestedGreaterGreater', [10914, 824]], ['NotNestedLessLess', [10913, 824]], ['notni', [8716]], ['notniva', [8716]], ['notnivb', [8958]], ['notnivc', [8957]], ['NotPrecedes', [8832]], ['NotPrecedesEqual', [10927, 824]], ['NotPrecedesSlantEqual', [8928]], ['NotReverseElement', [8716]], ['NotRightTriangleBar', [10704, 824]], ['NotRightTriangle', [8939]], ['NotRightTriangleEqual', [8941]], ['NotSquareSubset', [8847, 824]], ['NotSquareSubsetEqual', [8930]], ['NotSquareSuperset', [8848, 824]], ['NotSquareSupersetEqual', [8931]], ['NotSubset', [8834, 8402]], ['NotSubsetEqual', [8840]], ['NotSucceeds', [8833]], ['NotSucceedsEqual', [10928, 824]], ['NotSucceedsSlantEqual', [8929]], ['NotSucceedsTilde', [8831, 824]], ['NotSuperset', [8835, 8402]], ['NotSupersetEqual', [8841]], ['NotTilde', [8769]], ['NotTildeEqual', [8772]], ['NotTildeFullEqual', [8775]], ['NotTildeTilde', [8777]], ['NotVerticalBar', [8740]], ['nparallel', [8742]], ['npar', [8742]], ['nparsl', [11005, 8421]], ['npart', [8706, 824]], ['npolint', [10772]], ['npr', [8832]], ['nprcue', [8928]], ['nprec', [8832]], ['npreceq', [10927, 824]], ['npre', [10927, 824]], ['nrarrc', [10547, 824]], ['nrarr', [8603]], ['nrArr', [8655]], ['nrarrw', [8605, 824]], ['nrightarrow', [8603]], ['nRightarrow', [8655]], ['nrtri', [8939]], ['nrtrie', [8941]], ['nsc', [8833]], ['nsccue', [8929]], ['nsce', [10928, 824]], ['Nscr', [119977]], ['nscr', [120003]], ['nshortmid', [8740]], ['nshortparallel', [8742]], ['nsim', [8769]], ['nsime', [8772]], ['nsimeq', [8772]], ['nsmid', [8740]], ['nspar', [8742]], ['nsqsube', [8930]], ['nsqsupe', [8931]], ['nsub', [8836]], ['nsubE', [10949, 824]], ['nsube', [8840]], ['nsubset', [8834, 8402]], ['nsubseteq', [8840]], ['nsubseteqq', [10949, 824]], ['nsucc', [8833]], ['nsucceq', [10928, 824]], ['nsup', [8837]], ['nsupE', [10950, 824]], ['nsupe', [8841]], ['nsupset', [8835, 8402]], ['nsupseteq', [8841]], ['nsupseteqq', [10950, 824]], ['ntgl', [8825]], ['Ntilde', [209]], ['ntilde', [241]], ['ntlg', [8824]], ['ntriangleleft', [8938]], ['ntrianglelefteq', [8940]], ['ntriangleright', [8939]], ['ntrianglerighteq', [8941]], ['Nu', [925]], ['nu', [957]], ['num', [35]], ['numero', [8470]], ['numsp', [8199]], ['nvap', [8781, 8402]], ['nvdash', [8876]], ['nvDash', [8877]], ['nVdash', [8878]], ['nVDash', [8879]], ['nvge', [8805, 8402]], ['nvgt', [62, 8402]], ['nvHarr', [10500]], ['nvinfin', [10718]], ['nvlArr', [10498]], ['nvle', [8804, 8402]], ['nvlt', [60, 8402]], ['nvltrie', [8884, 8402]], ['nvrArr', [10499]], ['nvrtrie', [8885, 8402]], ['nvsim', [8764, 8402]], ['nwarhk', [10531]], ['nwarr', [8598]], ['nwArr', [8662]], ['nwarrow', [8598]], ['nwnear', [10535]], ['Oacute', [211]], ['oacute', [243]], ['oast', [8859]], ['Ocirc', [212]], ['ocirc', [244]], ['ocir', [8858]], ['Ocy', [1054]], ['ocy', [1086]], ['odash', [8861]], ['Odblac', [336]], ['odblac', [337]], ['odiv', [10808]], ['odot', [8857]], ['odsold', [10684]], ['OElig', [338]], ['oelig', [339]], ['ofcir', [10687]], ['Ofr', [120082]], ['ofr', [120108]], ['ogon', [731]], ['Ograve', [210]], ['ograve', [242]], ['ogt', [10689]], ['ohbar', [10677]], ['ohm', [937]], ['oint', [8750]], ['olarr', [8634]], ['olcir', [10686]], ['olcross', [10683]], ['oline', [8254]], ['olt', [10688]], ['Omacr', [332]], ['omacr', [333]], ['Omega', [937]], ['omega', [969]], ['Omicron', [927]], ['omicron', [959]], ['omid', [10678]], ['ominus', [8854]], ['Oopf', [120134]], ['oopf', [120160]], ['opar', [10679]], ['OpenCurlyDoubleQuote', [8220]], ['OpenCurlyQuote', [8216]], ['operp', [10681]], ['oplus', [8853]], ['orarr', [8635]], ['Or', [10836]], ['or', [8744]], ['ord', [10845]], ['order', [8500]], ['orderof', [8500]], ['ordf', [170]], ['ordm', [186]], ['origof', [8886]], ['oror', [10838]], ['orslope', [10839]], ['orv', [10843]], ['oS', [9416]], ['Oscr', [119978]], ['oscr', [8500]], ['Oslash', [216]], ['oslash', [248]], ['osol', [8856]], ['Otilde', [213]], ['otilde', [245]], ['otimesas', [10806]], ['Otimes', [10807]], ['otimes', [8855]], ['Ouml', [214]], ['ouml', [246]], ['ovbar', [9021]], ['OverBar', [8254]], ['OverBrace', [9182]], ['OverBracket', [9140]], ['OverParenthesis', [9180]], ['para', [182]], ['parallel', [8741]], ['par', [8741]], ['parsim', [10995]], ['parsl', [11005]], ['part', [8706]], ['PartialD', [8706]], ['Pcy', [1055]], ['pcy', [1087]], ['percnt', [37]], ['period', [46]], ['permil', [8240]], ['perp', [8869]], ['pertenk', [8241]], ['Pfr', [120083]], ['pfr', [120109]], ['Phi', [934]], ['phi', [966]], ['phiv', [981]], ['phmmat', [8499]], ['phone', [9742]], ['Pi', [928]], ['pi', [960]], ['pitchfork', [8916]], ['piv', [982]], ['planck', [8463]], ['planckh', [8462]], ['plankv', [8463]], ['plusacir', [10787]], ['plusb', [8862]], ['pluscir', [10786]], ['plus', [43]], ['plusdo', [8724]], ['plusdu', [10789]], ['pluse', [10866]], ['PlusMinus', [177]], ['plusmn', [177]], ['plussim', [10790]], ['plustwo', [10791]], ['pm', [177]], ['Poincareplane', [8460]], ['pointint', [10773]], ['popf', [120161]], ['Popf', [8473]], ['pound', [163]], ['prap', [10935]], ['Pr', [10939]], ['pr', [8826]], ['prcue', [8828]], ['precapprox', [10935]], ['prec', [8826]], ['preccurlyeq', [8828]], ['Precedes', [8826]], ['PrecedesEqual', [10927]], ['PrecedesSlantEqual', [8828]], ['PrecedesTilde', [8830]], ['preceq', [10927]], ['precnapprox', [10937]], ['precneqq', [10933]], ['precnsim', [8936]], ['pre', [10927]], ['prE', [10931]], ['precsim', [8830]], ['prime', [8242]], ['Prime', [8243]], ['primes', [8473]], ['prnap', [10937]], ['prnE', [10933]], ['prnsim', [8936]], ['prod', [8719]], ['Product', [8719]], ['profalar', [9006]], ['profline', [8978]], ['profsurf', [8979]], ['prop', [8733]], ['Proportional', [8733]], ['Proportion', [8759]], ['propto', [8733]], ['prsim', [8830]], ['prurel', [8880]], ['Pscr', [119979]], ['pscr', [120005]], ['Psi', [936]], ['psi', [968]], ['puncsp', [8200]], ['Qfr', [120084]], ['qfr', [120110]], ['qint', [10764]], ['qopf', [120162]], ['Qopf', [8474]], ['qprime', [8279]], ['Qscr', [119980]], ['qscr', [120006]], ['quaternions', [8461]], ['quatint', [10774]], ['quest', [63]], ['questeq', [8799]], ['quot', [34]], ['QUOT', [34]], ['rAarr', [8667]], ['race', [8765, 817]], ['Racute', [340]], ['racute', [341]], ['radic', [8730]], ['raemptyv', [10675]], ['rang', [10217]], ['Rang', [10219]], ['rangd', [10642]], ['range', [10661]], ['rangle', [10217]], ['raquo', [187]], ['rarrap', [10613]], ['rarrb', [8677]], ['rarrbfs', [10528]], ['rarrc', [10547]], ['rarr', [8594]], ['Rarr', [8608]], ['rArr', [8658]], ['rarrfs', [10526]], ['rarrhk', [8618]], ['rarrlp', [8620]], ['rarrpl', [10565]], ['rarrsim', [10612]], ['Rarrtl', [10518]], ['rarrtl', [8611]], ['rarrw', [8605]], ['ratail', [10522]], ['rAtail', [10524]], ['ratio', [8758]], ['rationals', [8474]], ['rbarr', [10509]], ['rBarr', [10511]], ['RBarr', [10512]], ['rbbrk', [10099]], ['rbrace', [125]], ['rbrack', [93]], ['rbrke', [10636]], ['rbrksld', [10638]], ['rbrkslu', [10640]], ['Rcaron', [344]], ['rcaron', [345]], ['Rcedil', [342]], ['rcedil', [343]], ['rceil', [8969]], ['rcub', [125]], ['Rcy', [1056]], ['rcy', [1088]], ['rdca', [10551]], ['rdldhar', [10601]], ['rdquo', [8221]], ['rdquor', [8221]], ['CloseCurlyDoubleQuote', [8221]], ['rdsh', [8627]], ['real', [8476]], ['realine', [8475]], ['realpart', [8476]], ['reals', [8477]], ['Re', [8476]], ['rect', [9645]], ['reg', [174]], ['REG', [174]], ['ReverseElement', [8715]], ['ReverseEquilibrium', [8651]], ['ReverseUpEquilibrium', [10607]], ['rfisht', [10621]], ['rfloor', [8971]], ['rfr', [120111]], ['Rfr', [8476]], ['rHar', [10596]], ['rhard', [8641]], ['rharu', [8640]], ['rharul', [10604]], ['Rho', [929]], ['rho', [961]], ['rhov', [1009]], ['RightAngleBracket', [10217]], ['RightArrowBar', [8677]], ['rightarrow', [8594]], ['RightArrow', [8594]], ['Rightarrow', [8658]], ['RightArrowLeftArrow', [8644]], ['rightarrowtail', [8611]], ['RightCeiling', [8969]], ['RightDoubleBracket', [10215]], ['RightDownTeeVector', [10589]], ['RightDownVectorBar', [10581]], ['RightDownVector', [8642]], ['RightFloor', [8971]], ['rightharpoondown', [8641]], ['rightharpoonup', [8640]], ['rightleftarrows', [8644]], ['rightleftharpoons', [8652]], ['rightrightarrows', [8649]], ['rightsquigarrow', [8605]], ['RightTeeArrow', [8614]], ['RightTee', [8866]], ['RightTeeVector', [10587]], ['rightthreetimes', [8908]], ['RightTriangleBar', [10704]], ['RightTriangle', [8883]], ['RightTriangleEqual', [8885]], ['RightUpDownVector', [10575]], ['RightUpTeeVector', [10588]], ['RightUpVectorBar', [10580]], ['RightUpVector', [8638]], ['RightVectorBar', [10579]], ['RightVector', [8640]], ['ring', [730]], ['risingdotseq', [8787]], ['rlarr', [8644]], ['rlhar', [8652]], ['rlm', [8207]], ['rmoustache', [9137]], ['rmoust', [9137]], ['rnmid', [10990]], ['roang', [10221]], ['roarr', [8702]], ['robrk', [10215]], ['ropar', [10630]], ['ropf', [120163]], ['Ropf', [8477]], ['roplus', [10798]], ['rotimes', [10805]], ['RoundImplies', [10608]], ['rpar', [41]], ['rpargt', [10644]], ['rppolint', [10770]], ['rrarr', [8649]], ['Rrightarrow', [8667]], ['rsaquo', [8250]], ['rscr', [120007]], ['Rscr', [8475]], ['rsh', [8625]], ['Rsh', [8625]], ['rsqb', [93]], ['rsquo', [8217]], ['rsquor', [8217]], ['CloseCurlyQuote', [8217]], ['rthree', [8908]], ['rtimes', [8906]], ['rtri', [9657]], ['rtrie', [8885]], ['rtrif', [9656]], ['rtriltri', [10702]], ['RuleDelayed', [10740]], ['ruluhar', [10600]], ['rx', [8478]], ['Sacute', [346]], ['sacute', [347]], ['sbquo', [8218]], ['scap', [10936]], ['Scaron', [352]], ['scaron', [353]], ['Sc', [10940]], ['sc', [8827]], ['sccue', [8829]], ['sce', [10928]], ['scE', [10932]], ['Scedil', [350]], ['scedil', [351]], ['Scirc', [348]], ['scirc', [349]], ['scnap', [10938]], ['scnE', [10934]], ['scnsim', [8937]], ['scpolint', [10771]], ['scsim', [8831]], ['Scy', [1057]], ['scy', [1089]], ['sdotb', [8865]], ['sdot', [8901]], ['sdote', [10854]], ['searhk', [10533]], ['searr', [8600]], ['seArr', [8664]], ['searrow', [8600]], ['sect', [167]], ['semi', [59]], ['seswar', [10537]], ['setminus', [8726]], ['setmn', [8726]], ['sext', [10038]], ['Sfr', [120086]], ['sfr', [120112]], ['sfrown', [8994]], ['sharp', [9839]], ['SHCHcy', [1065]], ['shchcy', [1097]], ['SHcy', [1064]], ['shcy', [1096]], ['ShortDownArrow', [8595]], ['ShortLeftArrow', [8592]], ['shortmid', [8739]], ['shortparallel', [8741]], ['ShortRightArrow', [8594]], ['ShortUpArrow', [8593]], ['shy', [173]], ['Sigma', [931]], ['sigma', [963]], ['sigmaf', [962]], ['sigmav', [962]], ['sim', [8764]], ['simdot', [10858]], ['sime', [8771]], ['simeq', [8771]], ['simg', [10910]], ['simgE', [10912]], ['siml', [10909]], ['simlE', [10911]], ['simne', [8774]], ['simplus', [10788]], ['simrarr', [10610]], ['slarr', [8592]], ['SmallCircle', [8728]], ['smallsetminus', [8726]], ['smashp', [10803]], ['smeparsl', [10724]], ['smid', [8739]], ['smile', [8995]], ['smt', [10922]], ['smte', [10924]], ['smtes', [10924, 65024]], ['SOFTcy', [1068]], ['softcy', [1100]], ['solbar', [9023]], ['solb', [10692]], ['sol', [47]], ['Sopf', [120138]], ['sopf', [120164]], ['spades', [9824]], ['spadesuit', [9824]], ['spar', [8741]], ['sqcap', [8851]], ['sqcaps', [8851, 65024]], ['sqcup', [8852]], ['sqcups', [8852, 65024]], ['Sqrt', [8730]], ['sqsub', [8847]], ['sqsube', [8849]], ['sqsubset', [8847]], ['sqsubseteq', [8849]], ['sqsup', [8848]], ['sqsupe', [8850]], ['sqsupset', [8848]], ['sqsupseteq', [8850]], ['square', [9633]], ['Square', [9633]], ['SquareIntersection', [8851]], ['SquareSubset', [8847]], ['SquareSubsetEqual', [8849]], ['SquareSuperset', [8848]], ['SquareSupersetEqual', [8850]], ['SquareUnion', [8852]], ['squarf', [9642]], ['squ', [9633]], ['squf', [9642]], ['srarr', [8594]], ['Sscr', [119982]], ['sscr', [120008]], ['ssetmn', [8726]], ['ssmile', [8995]], ['sstarf', [8902]], ['Star', [8902]], ['star', [9734]], ['starf', [9733]], ['straightepsilon', [1013]], ['straightphi', [981]], ['strns', [175]], ['sub', [8834]], ['Sub', [8912]], ['subdot', [10941]], ['subE', [10949]], ['sube', [8838]], ['subedot', [10947]], ['submult', [10945]], ['subnE', [10955]], ['subne', [8842]], ['subplus', [10943]], ['subrarr', [10617]], ['subset', [8834]], ['Subset', [8912]], ['subseteq', [8838]], ['subseteqq', [10949]], ['SubsetEqual', [8838]], ['subsetneq', [8842]], ['subsetneqq', [10955]], ['subsim', [10951]], ['subsub', [10965]], ['subsup', [10963]], ['succapprox', [10936]], ['succ', [8827]], ['succcurlyeq', [8829]], ['Succeeds', [8827]], ['SucceedsEqual', [10928]], ['SucceedsSlantEqual', [8829]], ['SucceedsTilde', [8831]], ['succeq', [10928]], ['succnapprox', [10938]], ['succneqq', [10934]], ['succnsim', [8937]], ['succsim', [8831]], ['SuchThat', [8715]], ['sum', [8721]], ['Sum', [8721]], ['sung', [9834]], ['sup1', [185]], ['sup2', [178]], ['sup3', [179]], ['sup', [8835]], ['Sup', [8913]], ['supdot', [10942]], ['supdsub', [10968]], ['supE', [10950]], ['supe', [8839]], ['supedot', [10948]], ['Superset', [8835]], ['SupersetEqual', [8839]], ['suphsol', [10185]], ['suphsub', [10967]], ['suplarr', [10619]], ['supmult', [10946]], ['supnE', [10956]], ['supne', [8843]], ['supplus', [10944]], ['supset', [8835]], ['Supset', [8913]], ['supseteq', [8839]], ['supseteqq', [10950]], ['supsetneq', [8843]], ['supsetneqq', [10956]], ['supsim', [10952]], ['supsub', [10964]], ['supsup', [10966]], ['swarhk', [10534]], ['swarr', [8601]], ['swArr', [8665]], ['swarrow', [8601]], ['swnwar', [10538]], ['szlig', [223]], ['Tab', [9]], ['target', [8982]], ['Tau', [932]], ['tau', [964]], ['tbrk', [9140]], ['Tcaron', [356]], ['tcaron', [357]], ['Tcedil', [354]], ['tcedil', [355]], ['Tcy', [1058]], ['tcy', [1090]], ['tdot', [8411]], ['telrec', [8981]], ['Tfr', [120087]], ['tfr', [120113]], ['there4', [8756]], ['therefore', [8756]], ['Therefore', [8756]], ['Theta', [920]], ['theta', [952]], ['thetasym', [977]], ['thetav', [977]], ['thickapprox', [8776]], ['thicksim', [8764]], ['ThickSpace', [8287, 8202]], ['ThinSpace', [8201]], ['thinsp', [8201]], ['thkap', [8776]], ['thksim', [8764]], ['THORN', [222]], ['thorn', [254]], ['tilde', [732]], ['Tilde', [8764]], ['TildeEqual', [8771]], ['TildeFullEqual', [8773]], ['TildeTilde', [8776]], ['timesbar', [10801]], ['timesb', [8864]], ['times', [215]], ['timesd', [10800]], ['tint', [8749]], ['toea', [10536]], ['topbot', [9014]], ['topcir', [10993]], ['top', [8868]], ['Topf', [120139]], ['topf', [120165]], ['topfork', [10970]], ['tosa', [10537]], ['tprime', [8244]], ['trade', [8482]], ['TRADE', [8482]], ['triangle', [9653]], ['triangledown', [9663]], ['triangleleft', [9667]], ['trianglelefteq', [8884]], ['triangleq', [8796]], ['triangleright', [9657]], ['trianglerighteq', [8885]], ['tridot', [9708]], ['trie', [8796]], ['triminus', [10810]], ['TripleDot', [8411]], ['triplus', [10809]], ['trisb', [10701]], ['tritime', [10811]], ['trpezium', [9186]], ['Tscr', [119983]], ['tscr', [120009]], ['TScy', [1062]], ['tscy', [1094]], ['TSHcy', [1035]], ['tshcy', [1115]], ['Tstrok', [358]], ['tstrok', [359]], ['twixt', [8812]], ['twoheadleftarrow', [8606]], ['twoheadrightarrow', [8608]], ['Uacute', [218]], ['uacute', [250]], ['uarr', [8593]], ['Uarr', [8607]], ['uArr', [8657]], ['Uarrocir', [10569]], ['Ubrcy', [1038]], ['ubrcy', [1118]], ['Ubreve', [364]], ['ubreve', [365]], ['Ucirc', [219]], ['ucirc', [251]], ['Ucy', [1059]], ['ucy', [1091]], ['udarr', [8645]], ['Udblac', [368]], ['udblac', [369]], ['udhar', [10606]], ['ufisht', [10622]], ['Ufr', [120088]], ['ufr', [120114]], ['Ugrave', [217]], ['ugrave', [249]], ['uHar', [10595]], ['uharl', [8639]], ['uharr', [8638]], ['uhblk', [9600]], ['ulcorn', [8988]], ['ulcorner', [8988]], ['ulcrop', [8975]], ['ultri', [9720]], ['Umacr', [362]], ['umacr', [363]], ['uml', [168]], ['UnderBar', [95]], ['UnderBrace', [9183]], ['UnderBracket', [9141]], ['UnderParenthesis', [9181]], ['Union', [8899]], ['UnionPlus', [8846]], ['Uogon', [370]], ['uogon', [371]], ['Uopf', [120140]], ['uopf', [120166]], ['UpArrowBar', [10514]], ['uparrow', [8593]], ['UpArrow', [8593]], ['Uparrow', [8657]], ['UpArrowDownArrow', [8645]], ['updownarrow', [8597]], ['UpDownArrow', [8597]], ['Updownarrow', [8661]], ['UpEquilibrium', [10606]], ['upharpoonleft', [8639]], ['upharpoonright', [8638]], ['uplus', [8846]], ['UpperLeftArrow', [8598]], ['UpperRightArrow', [8599]], ['upsi', [965]], ['Upsi', [978]], ['upsih', [978]], ['Upsilon', [933]], ['upsilon', [965]], ['UpTeeArrow', [8613]], ['UpTee', [8869]], ['upuparrows', [8648]], ['urcorn', [8989]], ['urcorner', [8989]], ['urcrop', [8974]], ['Uring', [366]], ['uring', [367]], ['urtri', [9721]], ['Uscr', [119984]], ['uscr', [120010]], ['utdot', [8944]], ['Utilde', [360]], ['utilde', [361]], ['utri', [9653]], ['utrif', [9652]], ['uuarr', [8648]], ['Uuml', [220]], ['uuml', [252]], ['uwangle', [10663]], ['vangrt', [10652]], ['varepsilon', [1013]], ['varkappa', [1008]], ['varnothing', [8709]], ['varphi', [981]], ['varpi', [982]], ['varpropto', [8733]], ['varr', [8597]], ['vArr', [8661]], ['varrho', [1009]], ['varsigma', [962]], ['varsubsetneq', [8842, 65024]], ['varsubsetneqq', [10955, 65024]], ['varsupsetneq', [8843, 65024]], ['varsupsetneqq', [10956, 65024]], ['vartheta', [977]], ['vartriangleleft', [8882]], ['vartriangleright', [8883]], ['vBar', [10984]], ['Vbar', [10987]], ['vBarv', [10985]], ['Vcy', [1042]], ['vcy', [1074]], ['vdash', [8866]], ['vDash', [8872]], ['Vdash', [8873]], ['VDash', [8875]], ['Vdashl', [10982]], ['veebar', [8891]], ['vee', [8744]], ['Vee', [8897]], ['veeeq', [8794]], ['vellip', [8942]], ['verbar', [124]], ['Verbar', [8214]], ['vert', [124]], ['Vert', [8214]], ['VerticalBar', [8739]], ['VerticalLine', [124]], ['VerticalSeparator', [10072]], ['VerticalTilde', [8768]], ['VeryThinSpace', [8202]], ['Vfr', [120089]], ['vfr', [120115]], ['vltri', [8882]], ['vnsub', [8834, 8402]], ['vnsup', [8835, 8402]], ['Vopf', [120141]], ['vopf', [120167]], ['vprop', [8733]], ['vrtri', [8883]], ['Vscr', [119985]], ['vscr', [120011]], ['vsubnE', [10955, 65024]], ['vsubne', [8842, 65024]], ['vsupnE', [10956, 65024]], ['vsupne', [8843, 65024]], ['Vvdash', [8874]], ['vzigzag', [10650]], ['Wcirc', [372]], ['wcirc', [373]], ['wedbar', [10847]], ['wedge', [8743]], ['Wedge', [8896]], ['wedgeq', [8793]], ['weierp', [8472]], ['Wfr', [120090]], ['wfr', [120116]], ['Wopf', [120142]], ['wopf', [120168]], ['wp', [8472]], ['wr', [8768]], ['wreath', [8768]], ['Wscr', [119986]], ['wscr', [120012]], ['xcap', [8898]], ['xcirc', [9711]], ['xcup', [8899]], ['xdtri', [9661]], ['Xfr', [120091]], ['xfr', [120117]], ['xharr', [10231]], ['xhArr', [10234]], ['Xi', [926]], ['xi', [958]], ['xlarr', [10229]], ['xlArr', [10232]], ['xmap', [10236]], ['xnis', [8955]], ['xodot', [10752]], ['Xopf', [120143]], ['xopf', [120169]], ['xoplus', [10753]], ['xotime', [10754]], ['xrarr', [10230]], ['xrArr', [10233]], ['Xscr', [119987]], ['xscr', [120013]], ['xsqcup', [10758]], ['xuplus', [10756]], ['xutri', [9651]], ['xvee', [8897]], ['xwedge', [8896]], ['Yacute', [221]], ['yacute', [253]], ['YAcy', [1071]], ['yacy', [1103]], ['Ycirc', [374]], ['ycirc', [375]], ['Ycy', [1067]], ['ycy', [1099]], ['yen', [165]], ['Yfr', [120092]], ['yfr', [120118]], ['YIcy', [1031]], ['yicy', [1111]], ['Yopf', [120144]], ['yopf', [120170]], ['Yscr', [119988]], ['yscr', [120014]], ['YUcy', [1070]], ['yucy', [1102]], ['yuml', [255]], ['Yuml', [376]], ['Zacute', [377]], ['zacute', [378]], ['Zcaron', [381]], ['zcaron', [382]], ['Zcy', [1047]], ['zcy', [1079]], ['Zdot', [379]], ['zdot', [380]], ['zeetrf', [8488]], ['ZeroWidthSpace', [8203]], ['Zeta', [918]], ['zeta', [950]], ['zfr', [120119]], ['Zfr', [8488]], ['ZHcy', [1046]], ['zhcy', [1078]], ['zigrarr', [8669]], ['zopf', [120171]], ['Zopf', [8484]], ['Zscr', [119989]], ['zscr', [120015]], ['zwj', [8205]], ['zwnj', [8204]]];\n\nvar alphaIndex = {};\nvar charIndex = {};\n\ncreateIndexes(alphaIndex, charIndex);\n\n/**\n * @constructor\n */\nfunction Html5Entities() {}\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml5Entities.prototype.decode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n return str.replace(/&(#?[\\w\\d]+);?/g, function(s, entity) {\n var chr;\n if (entity.charAt(0) === \"#\") {\n var code = entity.charAt(1) === 'x' ?\n parseInt(entity.substr(2).toLowerCase(), 16) :\n parseInt(entity.substr(1));\n\n if (!(isNaN(code) || code < -32768 || code > 65535)) {\n chr = String.fromCharCode(code);\n }\n } else {\n chr = alphaIndex[entity];\n }\n return chr || s;\n });\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n Html5Entities.decode = function(str) {\n return new Html5Entities().decode(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml5Entities.prototype.encode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var charInfo = charIndex[str.charCodeAt(i)];\n if (charInfo) {\n var alpha = charInfo[str.charCodeAt(i + 1)];\n if (alpha) {\n i++;\n } else {\n alpha = charInfo[''];\n }\n if (alpha) {\n result += \"&\" + alpha + \";\";\n i++;\n continue;\n }\n }\n result += str.charAt(i);\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n Html5Entities.encode = function(str) {\n return new Html5Entities().encode(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml5Entities.prototype.encodeNonUTF = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var c = str.charCodeAt(i);\n var charInfo = charIndex[c];\n if (charInfo) {\n var alpha = charInfo[str.charCodeAt(i + 1)];\n if (alpha) {\n i++;\n } else {\n alpha = charInfo[''];\n }\n if (alpha) {\n result += \"&\" + alpha + \";\";\n i++;\n continue;\n }\n }\n if (c < 32 || c > 126) {\n result += '&#' + c + ';';\n } else {\n result += str.charAt(i);\n }\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n Html5Entities.encodeNonUTF = function(str) {\n return new Html5Entities().encodeNonUTF(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml5Entities.prototype.encodeNonASCII = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var c = str.charCodeAt(i);\n if (c <= 255) {\n result += str[i++];\n continue;\n }\n result += '&#' + c + ';';\n i++\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n Html5Entities.encodeNonASCII = function(str) {\n return new Html5Entities().encodeNonASCII(str);\n };\n\n/**\n * @param {Object} alphaIndex Passed by reference.\n * @param {Object} charIndex Passed by reference.\n */\nfunction createIndexes(alphaIndex, charIndex) {\n var i = ENTITIES.length;\n var _results = [];\n while (i--) {\n var e = ENTITIES[i];\n var alpha = e[0];\n var chars = e[1];\n var chr = chars[0];\n var addChar = (chr < 32 || chr > 126) || chr === 62 || chr === 60 || chr === 38 || chr === 34 || chr === 39;\n var charInfo;\n if (addChar) {\n charInfo = charIndex[chr] = charIndex[chr] || {};\n }\n if (chars[1]) {\n var chr2 = chars[1];\n alphaIndex[alpha] = String.fromCharCode(chr) + String.fromCharCode(chr2);\n _results.push(addChar && (charInfo[chr2] = alpha));\n } else {\n alphaIndex[alpha] = String.fromCharCode(chr);\n _results.push(addChar && (charInfo[''] = alpha));\n }\n }\n}\n\nmodule.exports = Html5Entities;\n\n\n//# sourceURL=webpack:///./node_modules/html-entities/lib/html5-entities.js?"); + +/***/ }), + +/***/ "./node_modules/html-entities/lib/xml-entities.js": +/*!********************************************************!*\ + !*** ./node_modules/html-entities/lib/xml-entities.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("var ALPHA_INDEX = {\n '<': '<',\n '>': '>',\n '"': '\"',\n '&apos': '\\'',\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': '\\'',\n '&': '&'\n};\n\nvar CHAR_INDEX = {\n 60: 'lt',\n 62: 'gt',\n 34: 'quot',\n 39: 'apos',\n 38: 'amp'\n};\n\nvar CHAR_S_INDEX = {\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': ''',\n '&': '&'\n};\n\n/**\n * @constructor\n */\nfunction XmlEntities() {}\n\n/**\n * @param {String} str\n * @returns {String}\n */\nXmlEntities.prototype.encode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n return str.replace(/<|>|\"|'|&/g, function(s) {\n return CHAR_S_INDEX[s];\n });\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n XmlEntities.encode = function(str) {\n return new XmlEntities().encode(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nXmlEntities.prototype.decode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n return str.replace(/&#?[0-9a-zA-Z]+;?/g, function(s) {\n if (s.charAt(1) === '#') {\n var code = s.charAt(2).toLowerCase() === 'x' ?\n parseInt(s.substr(3), 16) :\n parseInt(s.substr(2));\n\n if (isNaN(code) || code < -32768 || code > 65535) {\n return '';\n }\n return String.fromCharCode(code);\n }\n return ALPHA_INDEX[s] || s;\n });\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n XmlEntities.decode = function(str) {\n return new XmlEntities().decode(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nXmlEntities.prototype.encodeNonUTF = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var c = str.charCodeAt(i);\n var alpha = CHAR_INDEX[c];\n if (alpha) {\n result += \"&\" + alpha + \";\";\n i++;\n continue;\n }\n if (c < 32 || c > 126) {\n result += '&#' + c + ';';\n } else {\n result += str.charAt(i);\n }\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n XmlEntities.encodeNonUTF = function(str) {\n return new XmlEntities().encodeNonUTF(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nXmlEntities.prototype.encodeNonASCII = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLenght = str.length;\n var result = '';\n var i = 0;\n while (i < strLenght) {\n var c = str.charCodeAt(i);\n if (c <= 255) {\n result += str[i++];\n continue;\n }\n result += '&#' + c + ';';\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n XmlEntities.encodeNonASCII = function(str) {\n return new XmlEntities().encodeNonASCII(str);\n };\n\nmodule.exports = XmlEntities;\n\n\n//# sourceURL=webpack:///./node_modules/html-entities/lib/xml-entities.js?"); + +/***/ }), + +/***/ "./node_modules/is-what/dist/index.esm.js": +/*!************************************************!*\ + !*** ./node_modules/is-what/dist/index.esm.js ***! + \************************************************/ +/*! exports provided: getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyString, isFile, isFullString, isFunction, isNull, isNullOrUndefined, isNumber, isObject, isObjectLike, isPlainObject, isPrimitive, isRegExp, isString, isSymbol, isType, isUndefined */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getType\", function() { return getType; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isAnyObject\", function() { return isAnyObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isArray\", function() { return isArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isBlob\", function() { return isBlob; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isBoolean\", function() { return isBoolean; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isDate\", function() { return isDate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isEmptyString\", function() { return isEmptyString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isFile\", function() { return isFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isFullString\", function() { return isFullString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isFunction\", function() { return isFunction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isNull\", function() { return isNull; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isNullOrUndefined\", function() { return isNullOrUndefined; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isNumber\", function() { return isNumber; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isObject\", function() { return isObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isObjectLike\", function() { return isObjectLike; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isPlainObject\", function() { return isPlainObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isPrimitive\", function() { return isPrimitive; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isRegExp\", function() { return isRegExp; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isString\", function() { return isString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isSymbol\", function() { return isSymbol; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isType\", function() { return isType; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isUndefined\", function() { return isUndefined; });\n/**\r\n * Returns the object type of the given payload\r\n *\r\n * @param {*} payload\r\n * @returns {string}\r\n */\r\nfunction getType(payload) {\r\n return Object.prototype.toString.call(payload).slice(8, -1);\r\n}\r\n/**\r\n * Returns whether the payload is undefined\r\n *\r\n * @param {*} payload\r\n * @returns {payload is undefined}\r\n */\r\nfunction isUndefined(payload) {\r\n return getType(payload) === 'Undefined';\r\n}\r\n/**\r\n * Returns whether the payload is null\r\n *\r\n * @param {*} payload\r\n * @returns {payload is null}\r\n */\r\nfunction isNull(payload) {\r\n return getType(payload) === 'Null';\r\n}\r\n/**\r\n * Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is {[key: string]: any}}\r\n */\r\nfunction isPlainObject(payload) {\r\n if (getType(payload) !== 'Object')\r\n return false;\r\n return payload.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype;\r\n}\r\n/**\r\n * Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is {[key: string]: any}}\r\n */\r\nfunction isObject(payload) {\r\n return isPlainObject(payload);\r\n}\r\n/**\r\n * Returns whether the payload is an any kind of object (including special classes or objects with different prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is {[key: string]: any}}\r\n */\r\nfunction isAnyObject(payload) {\r\n return getType(payload) === 'Object';\r\n}\r\n/**\r\n * Returns whether the payload is an object like a type passed in < >\r\n *\r\n * Usage: isObjectLike<{id: any}>(payload) // will make sure it's an object and has an `id` prop.\r\n *\r\n * @template T this must be passed in < >\r\n * @param {*} payload\r\n * @returns {payload is T}\r\n */\r\nfunction isObjectLike(payload) {\r\n return isAnyObject(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a function\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Function}\r\n */\r\nfunction isFunction(payload) {\r\n return getType(payload) === 'Function';\r\n}\r\n/**\r\n * Returns whether the payload is an array\r\n *\r\n * @param {*} payload\r\n * @returns {payload is undefined}\r\n */\r\nfunction isArray(payload) {\r\n return getType(payload) === 'Array';\r\n}\r\n/**\r\n * Returns whether the payload is a string\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\r\nfunction isString(payload) {\r\n return getType(payload) === 'String';\r\n}\r\n/**\r\n * Returns whether the payload is a string, BUT returns false for ''\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\r\nfunction isFullString(payload) {\r\n return isString(payload) && payload !== '';\r\n}\r\n/**\r\n * Returns whether the payload is ''\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\r\nfunction isEmptyString(payload) {\r\n return payload === '';\r\n}\r\n/**\r\n * Returns whether the payload is a number\r\n *\r\n * This will return false for NaN\r\n *\r\n * @param {*} payload\r\n * @returns {payload is number}\r\n */\r\nfunction isNumber(payload) {\r\n return getType(payload) === 'Number' && !isNaN(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a boolean\r\n *\r\n * @param {*} payload\r\n * @returns {payload is boolean}\r\n */\r\nfunction isBoolean(payload) {\r\n return getType(payload) === 'Boolean';\r\n}\r\n/**\r\n * Returns whether the payload is a regular expression\r\n *\r\n * @param {*} payload\r\n * @returns {payload is RegExp}\r\n */\r\nfunction isRegExp(payload) {\r\n return getType(payload) === 'RegExp';\r\n}\r\n/**\r\n * Returns whether the payload is a Symbol\r\n *\r\n * @param {*} payload\r\n * @returns {payload is symbol}\r\n */\r\nfunction isSymbol(payload) {\r\n return getType(payload) === 'Symbol';\r\n}\r\n/**\r\n * Returns whether the payload is a date, and that the date is Valid\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Date}\r\n */\r\nfunction isDate(payload) {\r\n return getType(payload) === 'Date' && !isNaN(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a blob\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Blob}\r\n */\r\nfunction isBlob(payload) {\r\n return getType(payload) === 'Blob';\r\n}\r\n/**\r\n * Returns whether the payload is a file\r\n *\r\n * @param {*} payload\r\n * @returns {payload is File}\r\n */\r\nfunction isFile(payload) {\r\n return getType(payload) === 'File';\r\n}\r\n/**\r\n * Returns whether the payload is a primitive type (eg. Boolean | Null | Undefined | Number | String | Symbol)\r\n *\r\n * @param {*} payload\r\n * @returns {(payload is boolean | null | undefined | number | string | symbol)}\r\n */\r\nfunction isPrimitive(payload) {\r\n return (isBoolean(payload) ||\r\n isNull(payload) ||\r\n isUndefined(payload) ||\r\n isNumber(payload) ||\r\n isString(payload) ||\r\n isSymbol(payload));\r\n}\r\n/**\r\n * Returns true whether the payload is null or undefined\r\n *\r\n * @param {*} payload\r\n * @returns {(payload is null | undefined)}\r\n */\r\nfunction isNullOrUndefined(payload) {\r\n return isNull(payload) || isUndefined(payload);\r\n}\r\n/**\r\n * Does a generic check to check that the given payload is of a given type.\r\n * In cases like Number, it will return true for NaN as NaN is a Number (thanks javascript!);\r\n * It will, however, differentiate between object and null\r\n *\r\n * @template T\r\n * @param {*} payload\r\n * @param {T} type\r\n * @throws {TypeError} Will throw type error if type is an invalid type\r\n * @returns {payload is T}\r\n */\r\nfunction isType(payload, type) {\r\n if (!(type instanceof Function)) {\r\n throw new TypeError('Type must be a function');\r\n }\r\n if (!type.hasOwnProperty('prototype')) {\r\n throw new TypeError('Type is not a class');\r\n }\r\n // Classes usually have names (as functions usually have names)\r\n var name = type.name;\r\n return getType(payload) === name || Boolean(payload && payload.constructor === type);\r\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/is-what/dist/index.esm.js?"); + +/***/ }), + +/***/ "./node_modules/isarray/index.js": +/*!***************************************!*\ + !*** ./node_modules/isarray/index.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("module.exports = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n\n//# sourceURL=webpack:///./node_modules/isarray/index.js?"); + +/***/ }), + +/***/ "./node_modules/loglevel/lib/loglevel.js": +/*!***********************************************!*\ + !*** ./node_modules/loglevel/lib/loglevel.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n \"use strict\";\n if (true) {\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (definition),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n}(this, function () {\n \"use strict\";\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function() {};\n var undefinedType = \"undefined\";\n var isIE = (typeof window !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n );\n\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods(level, loggerName) {\n /*jshint validthis:true */\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, loggerName);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName, level, loggerName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this, level, loggerName);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, level, loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n\n function Logger(name, defaultLevel, factory) {\n var self = this;\n var currentLevel;\n var storageKey = \"loglevel\";\n if (name) {\n storageKey += \":\" + name;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var location = cookie.indexOf(\n encodeURIComponent(storageKey) + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n return currentLevel;\n };\n\n self.setLevel = function (level, persist) {\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n currentLevel = level;\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(level);\n }\n replaceLoggingMethods.call(self, level, name);\n if (typeof console === undefinedType && level < self.levels.SILENT) {\n return \"No console available for logging\";\n }\n } else {\n throw \"log.setLevel() called with invalid level: \" + level;\n }\n };\n\n self.setDefaultLevel = function (level) {\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n // Initialize with the right level\n var initialLevel = getPersistedLevel();\n if (initialLevel == null) {\n initialLevel = defaultLevel == null ? \"WARN\" : defaultLevel;\n }\n self.setLevel(initialLevel, false);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n var defaultLogger = new Logger();\n\n var _loggersByName = {};\n defaultLogger.getLogger = function getLogger(name) {\n if (typeof name !== \"string\" || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name, defaultLogger.getLevel(), defaultLogger.methodFactory);\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n return defaultLogger;\n}));\n\n\n//# sourceURL=webpack:///./node_modules/loglevel/lib/loglevel.js?"); + +/***/ }), + +/***/ "./node_modules/memoize-one/dist/memoize-one.esm.js": +/*!**********************************************************!*\ + !*** ./node_modules/memoize-one/dist/memoize-one.esm.js ***! + \**********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (newInputs[i] !== lastInputs[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (memoizeOne);\n\n\n//# sourceURL=webpack:///./node_modules/memoize-one/dist/memoize-one.esm.js?"); + +/***/ }), + +/***/ "./node_modules/merge-anything/dist/index.esm.js": +/*!*******************************************************!*\ + !*** ./node_modules/merge-anything/dist/index.esm.js ***! + \*******************************************************/ +/*! exports provided: default, concatArrays, merge */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"concatArrays\", function() { return concatArrays; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"merge\", function() { return merge; });\n/* harmony import */ var is_what__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! is-what */ \"./node_modules/is-what/dist/index.esm.js\");\n\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\n\nfunction assignProp(carry, key, newVal, originalObject) {\r\n var propType = originalObject.propertyIsEnumerable(key)\r\n ? 'enumerable'\r\n : 'nonenumerable';\r\n if (propType === 'enumerable')\r\n carry[key] = newVal;\r\n if (propType === 'nonenumerable') {\r\n Object.defineProperty(carry, key, {\r\n value: newVal,\r\n enumerable: false,\r\n writable: true,\r\n configurable: true\r\n });\r\n }\r\n}\r\nfunction mergeRecursively(origin, newComer, extensions) {\r\n // work directly on newComer if its not an object\r\n if (!Object(is_what__WEBPACK_IMPORTED_MODULE_0__[\"isPlainObject\"])(newComer)) {\r\n // extend merge rules\r\n if (extensions && Object(is_what__WEBPACK_IMPORTED_MODULE_0__[\"isArray\"])(extensions)) {\r\n extensions.forEach(function (extend) {\r\n newComer = extend(origin, newComer);\r\n });\r\n }\r\n return newComer;\r\n }\r\n // define newObject to merge all values upon\r\n var newObject = {};\r\n if (Object(is_what__WEBPACK_IMPORTED_MODULE_0__[\"isPlainObject\"])(origin)) {\r\n var props_1 = Object.getOwnPropertyNames(origin);\r\n var symbols_1 = Object.getOwnPropertySymbols(origin);\r\n newObject = __spreadArrays(props_1, symbols_1).reduce(function (carry, key) {\r\n // @ts-ignore\r\n var targetVal = origin[key];\r\n if ((!Object(is_what__WEBPACK_IMPORTED_MODULE_0__[\"isSymbol\"])(key) && !Object.getOwnPropertyNames(newComer).includes(key)) ||\r\n (Object(is_what__WEBPACK_IMPORTED_MODULE_0__[\"isSymbol\"])(key) && !Object.getOwnPropertySymbols(newComer).includes(key))) {\r\n assignProp(carry, key, targetVal, origin);\r\n }\r\n return carry;\r\n }, {});\r\n }\r\n var props = Object.getOwnPropertyNames(newComer);\r\n var symbols = Object.getOwnPropertySymbols(newComer);\r\n var result = __spreadArrays(props, symbols).reduce(function (carry, key) {\r\n // re-define the origin and newComer as targetVal and newVal\r\n var newVal = newComer[key];\r\n var targetVal = (Object(is_what__WEBPACK_IMPORTED_MODULE_0__[\"isPlainObject\"])(origin))\r\n // @ts-ignore\r\n ? origin[key]\r\n : undefined;\r\n // extend merge rules\r\n if (extensions && Object(is_what__WEBPACK_IMPORTED_MODULE_0__[\"isArray\"])(extensions)) {\r\n extensions.forEach(function (extend) {\r\n newVal = extend(targetVal, newVal);\r\n });\r\n }\r\n // When newVal is an object do the merge recursively\r\n if (targetVal !== undefined && Object(is_what__WEBPACK_IMPORTED_MODULE_0__[\"isPlainObject\"])(newVal)) {\r\n newVal = mergeRecursively(targetVal, newVal, extensions);\r\n }\r\n assignProp(carry, key, newVal, newComer);\r\n return carry;\r\n }, newObject);\r\n return result;\r\n}\r\n/**\r\n * Merge anything recursively.\r\n * Objects get merged, special objects (classes etc.) are re-assigned \"as is\".\r\n * Basic types overwrite objects or other basic types.\r\n *\r\n * @param {(IConfig | any)} origin\r\n * @param {...any[]} newComers\r\n * @returns the result\r\n */\r\nfunction merge(origin) {\r\n var newComers = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n newComers[_i - 1] = arguments[_i];\r\n }\r\n var extensions = null;\r\n var base = origin;\r\n if (Object(is_what__WEBPACK_IMPORTED_MODULE_0__[\"isPlainObject\"])(origin) && origin.extensions && Object.keys(origin).length === 1) {\r\n base = {};\r\n extensions = origin.extensions;\r\n }\r\n return newComers.reduce(function (result, newComer) {\r\n return mergeRecursively(result, newComer, extensions);\r\n }, base);\r\n}\n\nfunction concatArrays(originVal, newVal) {\r\n if (Object(is_what__WEBPACK_IMPORTED_MODULE_0__[\"isArray\"])(originVal) && Object(is_what__WEBPACK_IMPORTED_MODULE_0__[\"isArray\"])(newVal)) {\r\n // concat logic\r\n return originVal.concat(newVal);\r\n }\r\n return newVal; // always return newVal as fallback!!\r\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (merge);\n\n\n\n//# sourceURL=webpack:///./node_modules/merge-anything/dist/index.esm.js?"); + +/***/ }), + +/***/ "./node_modules/mini-create-react-context/dist/esm/index.js": +/*!******************************************************************!*\ + !*** ./node_modules/mini-create-react-context/dist/esm/index.js ***! + \******************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/inheritsLoose */ \"./node_modules/@babel/runtime/helpers/inheritsLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var gud__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! gud */ \"./node_modules/gud/index.js\");\n/* harmony import */ var gud__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(gud__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tiny-warning */ \"./node_modules/tiny-warning/dist/tiny-warning.esm.js\");\n\n\n\n\n\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\n\nfunction objectIs(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nfunction createEventEmitter(value) {\n var handlers = [];\n return {\n on: function on(handler) {\n handlers.push(handler);\n },\n off: function off(handler) {\n handlers = handlers.filter(function (h) {\n return h !== handler;\n });\n },\n get: function get() {\n return value;\n },\n set: function set(newValue, changedBits) {\n value = newValue;\n handlers.forEach(function (handler) {\n return handler(value, changedBits);\n });\n }\n };\n}\n\nfunction onlyChild(children) {\n return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n var _Provider$childContex, _Consumer$contextType;\n\n var contextProp = '__create-react-context-' + gud__WEBPACK_IMPORTED_MODULE_3___default()() + '__';\n\n var Provider =\n /*#__PURE__*/\n function (_Component) {\n _babel_runtime_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_1___default()(Provider, _Component);\n\n function Provider() {\n var _this;\n\n _this = _Component.apply(this, arguments) || this;\n _this.emitter = createEventEmitter(_this.props.value);\n return _this;\n }\n\n var _proto = Provider.prototype;\n\n _proto.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (this.props.value !== nextProps.value) {\n var oldValue = this.props.value;\n var newValue = nextProps.value;\n var changedBits;\n\n if (objectIs(oldValue, newValue)) {\n changedBits = 0;\n } else {\n changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n if (true) {\n Object(tiny_warning__WEBPACK_IMPORTED_MODULE_4__[\"default\"])((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: ' + changedBits);\n }\n\n changedBits |= 0;\n\n if (changedBits !== 0) {\n this.emitter.set(nextProps.value, changedBits);\n }\n }\n }\n };\n\n _proto.render = function render() {\n return this.props.children;\n };\n\n return Provider;\n }(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object.isRequired, _Provider$childContex);\n\n var Consumer =\n /*#__PURE__*/\n function (_Component2) {\n _babel_runtime_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_1___default()(Consumer, _Component2);\n\n function Consumer() {\n var _this2;\n\n _this2 = _Component2.apply(this, arguments) || this;\n _this2.state = {\n value: _this2.getValue()\n };\n\n _this2.onUpdate = function (newValue, changedBits) {\n var observedBits = _this2.observedBits | 0;\n\n if ((observedBits & changedBits) !== 0) {\n _this2.setState({\n value: _this2.getValue()\n });\n }\n };\n\n return _this2;\n }\n\n var _proto2 = Consumer.prototype;\n\n _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var observedBits = nextProps.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentDidMount = function componentDidMount() {\n if (this.context[contextProp]) {\n this.context[contextProp].on(this.onUpdate);\n }\n\n var observedBits = this.props.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentWillUnmount = function componentWillUnmount() {\n if (this.context[contextProp]) {\n this.context[contextProp].off(this.onUpdate);\n }\n };\n\n _proto2.getValue = function getValue() {\n if (this.context[contextProp]) {\n return this.context[contextProp].get();\n } else {\n return defaultValue;\n }\n };\n\n _proto2.render = function render() {\n return onlyChild(this.props.children)(this.state.value);\n };\n\n return Consumer;\n }(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]);\n\n Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object, _Consumer$contextType);\n return {\n Provider: Provider,\n Consumer: Consumer\n };\n}\n\nvar index = react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext || createReactContext;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (index);\n\n\n//# sourceURL=webpack:///./node_modules/mini-create-react-context/dist/esm/index.js?"); + +/***/ }), + +/***/ "./node_modules/node-libs-browser/node_modules/punycode/punycode.js": +/*!**************************************************************************!*\ + !*** ./node_modules/node-libs-browser/node_modules/punycode/punycode.js ***! + \**************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = true && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = true && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttrue\n\t) {\n\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n\t\t\treturn punycode;\n\t\t}).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {}\n\n}(this));\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module), __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./node_modules/node-libs-browser/node_modules/punycode/punycode.js?"); + +/***/ }), + +/***/ "./node_modules/object-assign/index.js": +/*!*********************************************!*\ + !*** ./node_modules/object-assign/index.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n//# sourceURL=webpack:///./node_modules/object-assign/index.js?"); + +/***/ }), + +/***/ "./node_modules/path-to-regexp/index.js": +/*!**********************************************!*\ + !*** ./node_modules/path-to-regexp/index.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var isarray = __webpack_require__(/*! isarray */ \"./node_modules/isarray/index.js\")\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = options && options.delimiter || '/'\n var res\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n continue\n }\n\n var next = str[index]\n var prefix = res[2]\n var name = res[3]\n var capture = res[4]\n var group = res[5]\n var modifier = res[6]\n var asterisk = res[7]\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n }\n\n var partial = prefix != null && next != null && next !== prefix\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var delimiter = res[2] || defaultDelimiter\n var pattern = capture || group\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n })\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index)\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path)\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n }\n }\n\n return function (obj, opts) {\n var path = ''\n var data = obj || {}\n var options = opts || {}\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n\n continue\n }\n\n var value = data[token.name]\n var segment\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j])\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n })\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n var strict = options.strict\n var end = options.end !== false\n var route = ''\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var prefix = escapeString(token.prefix)\n var capture = '(?:' + token.pattern + ')'\n\n keys.push(token)\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*'\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?'\n } else {\n capture = prefix + '(' + capture + ')?'\n }\n } else {\n capture = prefix + '(' + capture + ')'\n }\n\n route += capture\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/')\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n }\n\n if (end) {\n route += '$'\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n\n\n//# sourceURL=webpack:///./node_modules/path-to-regexp/index.js?"); + +/***/ }), + +/***/ "./node_modules/process/browser.js": +/*!*****************************************!*\ + !*** ./node_modules/process/browser.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n//# sourceURL=webpack:///./node_modules/process/browser.js?"); + +/***/ }), + +/***/ "./node_modules/prop-types/checkPropTypes.js": +/*!***************************************************!*\ + !*** ./node_modules/prop-types/checkPropTypes.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar printWarning = function() {};\n\nif (true) {\n var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"./node_modules/prop-types/lib/ReactPropTypesSecret.js\");\n var loggedTypeFailures = {};\n var has = Function.call.bind(Object.prototype.hasOwnProperty);\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (true) {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n if (true) {\n loggedTypeFailures = {};\n }\n}\n\nmodule.exports = checkPropTypes;\n\n\n//# sourceURL=webpack:///./node_modules/prop-types/checkPropTypes.js?"); + +/***/ }), + +/***/ "./node_modules/prop-types/factoryWithTypeCheckers.js": +/*!************************************************************!*\ + !*** ./node_modules/prop-types/factoryWithTypeCheckers.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactIs = __webpack_require__(/*! react-is */ \"./node_modules/react-is/index.js\");\nvar assign = __webpack_require__(/*! object-assign */ \"./node_modules/object-assign/index.js\");\n\nvar ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"./node_modules/prop-types/lib/ReactPropTypesSecret.js\");\nvar checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ \"./node_modules/prop-types/checkPropTypes.js\");\n\nvar has = Function.call.bind(Object.prototype.hasOwnProperty);\nvar printWarning = function() {};\n\nif (true) {\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n var ANONYMOUS = '<>';\n\n // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n elementType: createElementTypeTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker,\n };\n\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n /*eslint-disable no-self-compare*/\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n function PropTypeError(message) {\n this.message = message;\n this.stack = '';\n }\n // Make `instanceof Error` still work for returned errors.\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (true) {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n } else if ( true && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n if (\n !manualPropTypeCallCache[cacheKey] &&\n // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3\n ) {\n printWarning(\n 'You are manually calling a React.PropTypes validation ' +\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n 'and will throw in the standalone `prop-types` package. ' +\n 'You may be seeing this warning due to a third-party PropTypes ' +\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n );\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!ReactIs.isValidElementType(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n if (true) {\n if (arguments.length > 1) {\n printWarning(\n 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n );\n } else {\n printWarning('Invalid argument supplied to oneOf, expected an array.');\n }\n }\n return emptyFunctionThatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n var type = getPreciseType(value);\n if (type === 'symbol') {\n return String(value);\n }\n return value;\n });\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (has(propValue, key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : undefined;\n return emptyFunctionThatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (typeof checker !== 'function') {\n printWarning(\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n );\n return emptyFunctionThatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\n return null;\n }\n }\n\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (!checker) {\n continue;\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n // We need to check all keys in case some are required but missing from\n // props.\n var allKeys = assign({}, props[propName], shapeTypes);\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n if (!checker) {\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n );\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // falsy value can't be a Symbol\n if (!propValue) {\n return false;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n }\n\n // Equivalent of `typeof` but with special handling for array and regexp.\n function getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n }\n\n // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n }\n\n // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n default:\n return type;\n }\n }\n\n // Returns class name of the object, if any.\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes;\n ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n\n\n//# sourceURL=webpack:///./node_modules/prop-types/factoryWithTypeCheckers.js?"); + +/***/ }), + +/***/ "./node_modules/prop-types/index.js": +/*!******************************************!*\ + !*** ./node_modules/prop-types/index.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (true) {\n var ReactIs = __webpack_require__(/*! react-is */ \"./node_modules/react-is/index.js\");\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ \"./node_modules/prop-types/factoryWithTypeCheckers.js\")(ReactIs.isElement, throwOnDirectAccess);\n} else {}\n\n\n//# sourceURL=webpack:///./node_modules/prop-types/index.js?"); + +/***/ }), + +/***/ "./node_modules/prop-types/lib/ReactPropTypesSecret.js": +/*!*************************************************************!*\ + !*** ./node_modules/prop-types/lib/ReactPropTypesSecret.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n//# sourceURL=webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js?"); + +/***/ }), + +/***/ "./node_modules/querystring-es3/decode.js": +/*!************************************************!*\ + !*** ./node_modules/querystring-es3/decode.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\n\n//# sourceURL=webpack:///./node_modules/querystring-es3/decode.js?"); + +/***/ }), + +/***/ "./node_modules/querystring-es3/encode.js": +/*!************************************************!*\ + !*** ./node_modules/querystring-es3/encode.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\n\n\n//# sourceURL=webpack:///./node_modules/querystring-es3/encode.js?"); + +/***/ }), + +/***/ "./node_modules/querystring-es3/index.js": +/*!***********************************************!*\ + !*** ./node_modules/querystring-es3/index.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n\nexports.decode = exports.parse = __webpack_require__(/*! ./decode */ \"./node_modules/querystring-es3/decode.js\");\nexports.encode = exports.stringify = __webpack_require__(/*! ./encode */ \"./node_modules/querystring-es3/encode.js\");\n\n\n//# sourceURL=webpack:///./node_modules/querystring-es3/index.js?"); + +/***/ }), + +/***/ "./node_modules/react-dom/cjs/react-dom.development.js": +/*!*************************************************************!*\ + !*** ./node_modules/react-dom/cjs/react-dom.development.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/** @license React v16.12.0\n * react-dom.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nvar _assign = __webpack_require__(/*! object-assign */ \"./node_modules/object-assign/index.js\");\nvar Scheduler = __webpack_require__(/*! scheduler */ \"./node_modules/scheduler/index.js\");\nvar checkPropTypes = __webpack_require__(/*! prop-types/checkPropTypes */ \"./node_modules/prop-types/checkPropTypes.js\");\nvar tracing = __webpack_require__(/*! scheduler/tracing */ \"./node_modules/scheduler/tracing.js\");\n\n// Do not require this module directly! Use normal `invariant` calls with\n// template literal strings. The messages will be replaced with error codes\n// during build.\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nif (!React) {\n {\n throw Error(\"ReactDOM was loaded before React. Make sure you load the React package before loading ReactDOM.\");\n }\n}\n\n/**\n * Injectable ordering of event plugins.\n */\nvar eventPluginOrder = null;\n/**\n * Injectable mapping from names to event plugin modules.\n */\n\nvar namesToPlugins = {};\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\n\nfunction recomputePluginOrdering() {\n if (!eventPluginOrder) {\n // Wait until an `eventPluginOrder` is injected.\n return;\n }\n\n for (var pluginName in namesToPlugins) {\n var pluginModule = namesToPlugins[pluginName];\n var pluginIndex = eventPluginOrder.indexOf(pluginName);\n\n if (!(pluginIndex > -1)) {\n {\n throw Error(\"EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `\" + pluginName + \"`.\");\n }\n }\n\n if (plugins[pluginIndex]) {\n continue;\n }\n\n if (!pluginModule.extractEvents) {\n {\n throw Error(\"EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `\" + pluginName + \"` does not.\");\n }\n }\n\n plugins[pluginIndex] = pluginModule;\n var publishedEvents = pluginModule.eventTypes;\n\n for (var eventName in publishedEvents) {\n if (!publishEventForPlugin(publishedEvents[eventName], pluginModule, eventName)) {\n {\n throw Error(\"EventPluginRegistry: Failed to publish event `\" + eventName + \"` for plugin `\" + pluginName + \"`.\");\n }\n }\n }\n }\n}\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\n\n\nfunction publishEventForPlugin(dispatchConfig, pluginModule, eventName) {\n if (!!eventNameDispatchConfigs.hasOwnProperty(eventName)) {\n {\n throw Error(\"EventPluginHub: More than one plugin attempted to publish the same event name, `\" + eventName + \"`.\");\n }\n }\n\n eventNameDispatchConfigs[eventName] = dispatchConfig;\n var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n\n if (phasedRegistrationNames) {\n for (var phaseName in phasedRegistrationNames) {\n if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n var phasedRegistrationName = phasedRegistrationNames[phaseName];\n publishRegistrationName(phasedRegistrationName, pluginModule, eventName);\n }\n }\n\n return true;\n } else if (dispatchConfig.registrationName) {\n publishRegistrationName(dispatchConfig.registrationName, pluginModule, eventName);\n return true;\n }\n\n return false;\n}\n/**\n * Publishes a registration name that is used to identify dispatched events.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\n\n\nfunction publishRegistrationName(registrationName, pluginModule, eventName) {\n if (!!registrationNameModules[registrationName]) {\n {\n throw Error(\"EventPluginHub: More than one plugin attempted to publish the same registration name, `\" + registrationName + \"`.\");\n }\n }\n\n registrationNameModules[registrationName] = pluginModule;\n registrationNameDependencies[registrationName] = pluginModule.eventTypes[eventName].dependencies;\n\n {\n var lowerCasedName = registrationName.toLowerCase();\n possibleRegistrationNames[lowerCasedName] = registrationName;\n\n if (registrationName === 'onDoubleClick') {\n possibleRegistrationNames.ondblclick = registrationName;\n }\n }\n}\n/**\n * Registers plugins so that they can extract and dispatch events.\n *\n * @see {EventPluginHub}\n */\n\n/**\n * Ordered list of injected plugins.\n */\n\n\nvar plugins = [];\n/**\n * Mapping from event name to dispatch config\n */\n\nvar eventNameDispatchConfigs = {};\n/**\n * Mapping from registration name to plugin module\n */\n\nvar registrationNameModules = {};\n/**\n * Mapping from registration name to event name\n */\n\nvar registrationNameDependencies = {};\n/**\n * Mapping from lowercase registration names to the properly cased version,\n * used to warn in the case of missing event handlers. Available\n * only in true.\n * @type {Object}\n */\n\nvar possibleRegistrationNames = {}; // Trust the developer to only use possibleRegistrationNames in true\n\n/**\n * Injects an ordering of plugins (by plugin name). This allows the ordering\n * to be decoupled from injection of the actual plugins so that ordering is\n * always deterministic regardless of packaging, on-the-fly injection, etc.\n *\n * @param {array} InjectedEventPluginOrder\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginOrder}\n */\n\nfunction injectEventPluginOrder(injectedEventPluginOrder) {\n if (!!eventPluginOrder) {\n {\n throw Error(\"EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.\");\n }\n } // Clone the ordering so it cannot be dynamically mutated.\n\n\n eventPluginOrder = Array.prototype.slice.call(injectedEventPluginOrder);\n recomputePluginOrdering();\n}\n/**\n * Injects plugins to be used by `EventPluginHub`. The plugin names must be\n * in the ordering injected by `injectEventPluginOrder`.\n *\n * Plugins can be injected as part of page initialization or on-the-fly.\n *\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginsByName}\n */\n\nfunction injectEventPluginsByName(injectedNamesToPlugins) {\n var isOrderingDirty = false;\n\n for (var pluginName in injectedNamesToPlugins) {\n if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n continue;\n }\n\n var pluginModule = injectedNamesToPlugins[pluginName];\n\n if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== pluginModule) {\n if (!!namesToPlugins[pluginName]) {\n {\n throw Error(\"EventPluginRegistry: Cannot inject two different event plugins using the same name, `\" + pluginName + \"`.\");\n }\n }\n\n namesToPlugins[pluginName] = pluginModule;\n isOrderingDirty = true;\n }\n }\n\n if (isOrderingDirty) {\n recomputePluginOrdering();\n }\n}\n\nvar invokeGuardedCallbackImpl = function (name, func, context, a, b, c, d, e, f) {\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n try {\n func.apply(context, funcArgs);\n } catch (error) {\n this.onError(error);\n }\n};\n\n{\n // In DEV mode, we swap out invokeGuardedCallback for a special version\n // that plays more nicely with the browser's DevTools. The idea is to preserve\n // \"Pause on exceptions\" behavior. Because React wraps all user-provided\n // functions in invokeGuardedCallback, and the production version of\n // invokeGuardedCallback uses a try-catch, all user exceptions are treated\n // like caught exceptions, and the DevTools won't pause unless the developer\n // takes the extra step of enabling pause on caught exceptions. This is\n // unintuitive, though, because even though React has caught the error, from\n // the developer's perspective, the error is uncaught.\n //\n // To preserve the expected \"Pause on exceptions\" behavior, we don't use a\n // try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake\n // DOM node, and call the user-provided callback from inside an event handler\n // for that fake event. If the callback throws, the error is \"captured\" using\n // a global event handler. But because the error happens in a different\n // event loop context, it does not interrupt the normal program flow.\n // Effectively, this gives us try-catch behavior without actually using\n // try-catch. Neat!\n // Check that the browser supports the APIs we need to implement our special\n // DEV version of invokeGuardedCallback\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n var fakeNode = document.createElement('react');\n\n var invokeGuardedCallbackDev = function (name, func, context, a, b, c, d, e, f) {\n // If document doesn't exist we know for sure we will crash in this method\n // when we call document.createEvent(). However this can cause confusing\n // errors: https://github.com/facebookincubator/create-react-app/issues/3482\n // So we preemptively throw with a better message instead.\n if (!(typeof document !== 'undefined')) {\n {\n throw Error(\"The `document` global was defined when React was initialized, but is not defined anymore. This can happen in a test environment if a component schedules an update from an asynchronous callback, but the test has already finished running. To solve this, you can either unmount the component at the end of your test (and ensure that any asynchronous operations get canceled in `componentWillUnmount`), or you can change the test itself to be asynchronous.\");\n }\n }\n\n var evt = document.createEvent('Event'); // Keeps track of whether the user-provided callback threw an error. We\n // set this to true at the beginning, then set it to false right after\n // calling the function. If the function errors, `didError` will never be\n // set to false. This strategy works even if the browser is flaky and\n // fails to call our global error handler, because it doesn't rely on\n // the error event at all.\n\n var didError = true; // Keeps track of the value of window.event so that we can reset it\n // during the callback to let user code access window.event in the\n // browsers that support it.\n\n var windowEvent = window.event; // Keeps track of the descriptor of window.event to restore it after event\n // dispatching: https://github.com/facebook/react/issues/13688\n\n var windowEventDescriptor = Object.getOwnPropertyDescriptor(window, 'event'); // Create an event handler for our fake event. We will synchronously\n // dispatch our fake event using `dispatchEvent`. Inside the handler, we\n // call the user-provided callback.\n\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n function callCallback() {\n // We immediately remove the callback from event listeners so that\n // nested `invokeGuardedCallback` calls do not clash. Otherwise, a\n // nested call would trigger the fake event handlers of any call higher\n // in the stack.\n fakeNode.removeEventListener(evtType, callCallback, false); // We check for window.hasOwnProperty('event') to prevent the\n // window.event assignment in both IE <= 10 as they throw an error\n // \"Member not found\" in strict mode, and in Firefox which does not\n // support window.event.\n\n if (typeof window.event !== 'undefined' && window.hasOwnProperty('event')) {\n window.event = windowEvent;\n }\n\n func.apply(context, funcArgs);\n didError = false;\n } // Create a global error event handler. We use this to capture the value\n // that was thrown. It's possible that this error handler will fire more\n // than once; for example, if non-React code also calls `dispatchEvent`\n // and a handler for that event throws. We should be resilient to most of\n // those cases. Even if our error event handler fires more than once, the\n // last error event is always used. If the callback actually does error,\n // we know that the last error event is the correct one, because it's not\n // possible for anything else to have happened in between our callback\n // erroring and the code that follows the `dispatchEvent` call below. If\n // the callback doesn't error, but the error event was fired, we know to\n // ignore it because `didError` will be false, as described above.\n\n\n var error; // Use this to track whether the error event is ever called.\n\n var didSetError = false;\n var isCrossOriginError = false;\n\n function handleWindowError(event) {\n error = event.error;\n didSetError = true;\n\n if (error === null && event.colno === 0 && event.lineno === 0) {\n isCrossOriginError = true;\n }\n\n if (event.defaultPrevented) {\n // Some other error handler has prevented default.\n // Browsers silence the error report if this happens.\n // We'll remember this to later decide whether to log it or not.\n if (error != null && typeof error === 'object') {\n try {\n error._suppressLogging = true;\n } catch (inner) {// Ignore.\n }\n }\n }\n } // Create a fake event type.\n\n\n var evtType = \"react-\" + (name ? name : 'invokeguardedcallback'); // Attach our event handlers\n\n window.addEventListener('error', handleWindowError);\n fakeNode.addEventListener(evtType, callCallback, false); // Synchronously dispatch our fake event. If the user-provided function\n // errors, it will trigger our global error handler.\n\n evt.initEvent(evtType, false, false);\n fakeNode.dispatchEvent(evt);\n\n if (windowEventDescriptor) {\n Object.defineProperty(window, 'event', windowEventDescriptor);\n }\n\n if (didError) {\n if (!didSetError) {\n // The callback errored, but the error event never fired.\n error = new Error('An error was thrown inside one of your components, but React ' + \"doesn't know what it was. This is likely due to browser \" + 'flakiness. React does its best to preserve the \"Pause on ' + 'exceptions\" behavior of the DevTools, which requires some ' + \"DEV-mode only tricks. It's possible that these don't work in \" + 'your browser. Try triggering the error in production mode, ' + 'or switching to a modern browser. If you suspect that this is ' + 'actually an issue with React, please file an issue.');\n } else if (isCrossOriginError) {\n error = new Error(\"A cross-origin error was thrown. React doesn't have access to \" + 'the actual error object in development. ' + 'See https://fb.me/react-crossorigin-error for more information.');\n }\n\n this.onError(error);\n } // Remove our event listeners\n\n\n window.removeEventListener('error', handleWindowError);\n };\n\n invokeGuardedCallbackImpl = invokeGuardedCallbackDev;\n }\n}\n\nvar invokeGuardedCallbackImpl$1 = invokeGuardedCallbackImpl;\n\nvar hasError = false;\nvar caughtError = null; // Used by event system to capture/rethrow the first error.\n\nvar hasRethrowError = false;\nvar rethrowError = null;\nvar reporter = {\n onError: function (error) {\n hasError = true;\n caughtError = error;\n }\n};\n/**\n * Call a function while guarding against errors that happens within it.\n * Returns an error if it throws, otherwise null.\n *\n * In production, this is implemented using a try-catch. The reason we don't\n * use a try-catch directly is so that we can swap out a different\n * implementation in DEV mode.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallback(name, func, context, a, b, c, d, e, f) {\n hasError = false;\n caughtError = null;\n invokeGuardedCallbackImpl$1.apply(reporter, arguments);\n}\n/**\n * Same as invokeGuardedCallback, but instead of returning an error, it stores\n * it in a global so it can be rethrown by `rethrowCaughtError` later.\n * TODO: See if caughtError and rethrowError can be unified.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallbackAndCatchFirstError(name, func, context, a, b, c, d, e, f) {\n invokeGuardedCallback.apply(this, arguments);\n\n if (hasError) {\n var error = clearCaughtError();\n\n if (!hasRethrowError) {\n hasRethrowError = true;\n rethrowError = error;\n }\n }\n}\n/**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\n\nfunction rethrowCaughtError() {\n if (hasRethrowError) {\n var error = rethrowError;\n hasRethrowError = false;\n rethrowError = null;\n throw error;\n }\n}\nfunction hasCaughtError() {\n return hasError;\n}\nfunction clearCaughtError() {\n if (hasError) {\n var error = caughtError;\n hasError = false;\n caughtError = null;\n return error;\n } else {\n {\n {\n throw Error(\"clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.\");\n }\n }\n }\n}\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\nvar warningWithoutStack = function () {};\n\n{\n warningWithoutStack = function (condition, format) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n if (format === undefined) {\n throw new Error('`warningWithoutStack(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (args.length > 8) {\n // Check before the condition to catch violations early.\n throw new Error('warningWithoutStack() currently supports at most 8 arguments.');\n }\n\n if (condition) {\n return;\n }\n\n if (typeof console !== 'undefined') {\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n });\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n\n Function.prototype.apply.call(console.error, console, argsWithFormat);\n }\n\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nvar warningWithoutStack$1 = warningWithoutStack;\n\nvar getFiberCurrentPropsFromNode = null;\nvar getInstanceFromNode = null;\nvar getNodeFromInstance = null;\nfunction setComponentTree(getFiberCurrentPropsFromNodeImpl, getInstanceFromNodeImpl, getNodeFromInstanceImpl) {\n getFiberCurrentPropsFromNode = getFiberCurrentPropsFromNodeImpl;\n getInstanceFromNode = getInstanceFromNodeImpl;\n getNodeFromInstance = getNodeFromInstanceImpl;\n\n {\n !(getNodeFromInstance && getInstanceFromNode) ? warningWithoutStack$1(false, 'EventPluginUtils.setComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.') : void 0;\n }\n}\nvar validateEventDispatches;\n\n{\n validateEventDispatches = function (event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n var listenersIsArr = Array.isArray(dispatchListeners);\n var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n var instancesIsArr = Array.isArray(dispatchInstances);\n var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;\n !(instancesIsArr === listenersIsArr && instancesLen === listenersLen) ? warningWithoutStack$1(false, 'EventPluginUtils: Invalid `event`.') : void 0;\n };\n}\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {function} listener Application-level callback\n * @param {*} inst Internal component instance\n */\n\n\nfunction executeDispatch(event, listener, inst) {\n var type = event.type || 'unknown-event';\n event.currentTarget = getNodeFromInstance(inst);\n invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event);\n event.currentTarget = null;\n}\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\n\nfunction executeDispatchesInOrder(event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n\n {\n validateEventDispatches(event);\n }\n\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n } // Listeners and Instances are two parallel arrays that are always in sync.\n\n\n executeDispatch(event, dispatchListeners[i], dispatchInstances[i]);\n }\n } else if (dispatchListeners) {\n executeDispatch(event, dispatchListeners, dispatchInstances);\n }\n\n event._dispatchListeners = null;\n event._dispatchInstances = null;\n}\n/**\n * @see executeDispatchesInOrderStopAtTrueImpl\n */\n\n\n\n/**\n * Execution of a \"direct\" dispatch - there must be at most one dispatch\n * accumulated on the event or it is considered an error. It doesn't really make\n * sense for an event with multiple dispatches (bubbled) to keep track of the\n * return values at each dispatch execution, but it does tend to make sense when\n * dealing with \"direct\" dispatches.\n *\n * @return {*} The return value of executing the single dispatch.\n */\n\n\n/**\n * @param {SyntheticEvent} event\n * @return {boolean} True iff number of dispatches accumulated is greater than 0.\n */\n\n/**\n * Accumulates items that must not be null or undefined into the first one. This\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\n * API cleanness. Since `current` can be null before being passed in and not\n * null after this function, make sure to assign it back to `current`:\n *\n * `a = accumulateInto(a, b);`\n *\n * This API should be sparingly used. Try `accumulate` for something cleaner.\n *\n * @return {*|array<*>} An accumulation of items.\n */\n\nfunction accumulateInto(current, next) {\n if (!(next != null)) {\n {\n throw Error(\"accumulateInto(...): Accumulated items must not be null or undefined.\");\n }\n }\n\n if (current == null) {\n return next;\n } // Both are not empty. Warning: Never call x.concat(y) when you are not\n // certain that x is an Array (x could be a string with concat method).\n\n\n if (Array.isArray(current)) {\n if (Array.isArray(next)) {\n current.push.apply(current, next);\n return current;\n }\n\n current.push(next);\n return current;\n }\n\n if (Array.isArray(next)) {\n // A bit too dangerous to mutate `next`.\n return [current].concat(next);\n }\n\n return [current, next];\n}\n\n/**\n * @param {array} arr an \"accumulation\" of items which is either an Array or\n * a single item. Useful when paired with the `accumulate` module. This is a\n * simple utility that allows us to reason about a collection of items, but\n * handling the case when there is exactly one item (and we do not need to\n * allocate an array).\n * @param {function} cb Callback invoked with each element or a collection.\n * @param {?} [scope] Scope used as `this` in a callback.\n */\nfunction forEachAccumulated(arr, cb, scope) {\n if (Array.isArray(arr)) {\n arr.forEach(cb, scope);\n } else if (arr) {\n cb.call(scope, arr);\n }\n}\n\n/**\n * Internal queue of events that have accumulated their dispatches and are\n * waiting to have their dispatches executed.\n */\n\nvar eventQueue = null;\n/**\n * Dispatches an event and releases it back into the pool, unless persistent.\n *\n * @param {?object} event Synthetic event to be dispatched.\n * @private\n */\n\nvar executeDispatchesAndRelease = function (event) {\n if (event) {\n executeDispatchesInOrder(event);\n\n if (!event.isPersistent()) {\n event.constructor.release(event);\n }\n }\n};\n\nvar executeDispatchesAndReleaseTopLevel = function (e) {\n return executeDispatchesAndRelease(e);\n};\n\nfunction runEventsInBatch(events) {\n if (events !== null) {\n eventQueue = accumulateInto(eventQueue, events);\n } // Set `eventQueue` to null before processing it so that we can tell if more\n // events get enqueued while processing.\n\n\n var processingEventQueue = eventQueue;\n eventQueue = null;\n\n if (!processingEventQueue) {\n return;\n }\n\n forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\n\n if (!!eventQueue) {\n {\n throw Error(\"processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.\");\n }\n } // This would be a good time to rethrow if any of the event handlers threw.\n\n\n rethrowCaughtError();\n}\n\nfunction isInteractive(tag) {\n return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\n}\n\nfunction shouldPreventMouseEvent(name, type, props) {\n switch (name) {\n case 'onClick':\n case 'onClickCapture':\n case 'onDoubleClick':\n case 'onDoubleClickCapture':\n case 'onMouseDown':\n case 'onMouseDownCapture':\n case 'onMouseMove':\n case 'onMouseMoveCapture':\n case 'onMouseUp':\n case 'onMouseUpCapture':\n return !!(props.disabled && isInteractive(type));\n\n default:\n return false;\n }\n}\n/**\n * This is a unified interface for event plugins to be installed and configured.\n *\n * Event plugins can implement the following properties:\n *\n * `extractEvents` {function(string, DOMEventTarget, string, object): *}\n * Required. When a top-level event is fired, this method is expected to\n * extract synthetic events that will in turn be queued and dispatched.\n *\n * `eventTypes` {object}\n * Optional, plugins that fire events must publish a mapping of registration\n * names that are used to register listeners. Values of this mapping must\n * be objects that contain `registrationName` or `phasedRegistrationNames`.\n *\n * `executeDispatch` {function(object, function, string)}\n * Optional, allows plugins to override how an event gets dispatched. By\n * default, the listener is simply invoked.\n *\n * Each plugin that is injected into `EventsPluginHub` is immediately operable.\n *\n * @public\n */\n\n/**\n * Methods for injecting dependencies.\n */\n\n\nvar injection = {\n /**\n * @param {array} InjectedEventPluginOrder\n * @public\n */\n injectEventPluginOrder: injectEventPluginOrder,\n\n /**\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n */\n injectEventPluginsByName: injectEventPluginsByName\n};\n/**\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @return {?function} The stored callback.\n */\n\nfunction getListener(inst, registrationName) {\n var listener; // TODO: shouldPreventMouseEvent is DOM-specific and definitely should not\n // live here; needs to be moved to a better place soon\n\n var stateNode = inst.stateNode;\n\n if (!stateNode) {\n // Work in progress (ex: onload events in incremental mode).\n return null;\n }\n\n var props = getFiberCurrentPropsFromNode(stateNode);\n\n if (!props) {\n // Work in progress.\n return null;\n }\n\n listener = props[registrationName];\n\n if (shouldPreventMouseEvent(registrationName, inst.type, props)) {\n return null;\n }\n\n if (!(!listener || typeof listener === 'function')) {\n {\n throw Error(\"Expected `\" + registrationName + \"` listener to be a function, instead got a value of `\" + typeof listener + \"` type.\");\n }\n }\n\n return listener;\n}\n/**\n * Allows registered plugins an opportunity to extract events from top-level\n * native browser events.\n *\n * @return {*} An accumulation of synthetic events.\n * @internal\n */\n\nfunction extractPluginEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n var events = null;\n\n for (var i = 0; i < plugins.length; i++) {\n // Not every plugin in the ordering may be loaded at runtime.\n var possiblePlugin = plugins[i];\n\n if (possiblePlugin) {\n var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);\n\n if (extractedEvents) {\n events = accumulateInto(events, extractedEvents);\n }\n }\n }\n\n return events;\n}\n\nfunction runExtractedPluginEventsInBatch(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n var events = extractPluginEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);\n runEventsInBatch(events);\n}\n\nvar FunctionComponent = 0;\nvar ClassComponent = 1;\nvar IndeterminateComponent = 2; // Before we know whether it is function or class\n\nvar HostRoot = 3; // Root of a host tree. Could be nested inside another node.\n\nvar HostPortal = 4; // A subtree. Could be an entry point to a different renderer.\n\nvar HostComponent = 5;\nvar HostText = 6;\nvar Fragment = 7;\nvar Mode = 8;\nvar ContextConsumer = 9;\nvar ContextProvider = 10;\nvar ForwardRef = 11;\nvar Profiler = 12;\nvar SuspenseComponent = 13;\nvar MemoComponent = 14;\nvar SimpleMemoComponent = 15;\nvar LazyComponent = 16;\nvar IncompleteClassComponent = 17;\nvar DehydratedFragment = 18;\nvar SuspenseListComponent = 19;\nvar FundamentalComponent = 20;\nvar ScopeComponent = 21;\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; // Prevent newer renderers from RTE when used with older react package versions.\n// Current owner and dispatcher used to share the same ref,\n// but PR #14548 split them out to better support the react-debug-tools package.\n\nif (!ReactSharedInternals.hasOwnProperty('ReactCurrentDispatcher')) {\n ReactSharedInternals.ReactCurrentDispatcher = {\n current: null\n };\n}\n\nif (!ReactSharedInternals.hasOwnProperty('ReactCurrentBatchConfig')) {\n ReactSharedInternals.ReactCurrentBatchConfig = {\n suspense: null\n };\n}\n\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\nvar describeComponentFrame = function (name, source, ownerName) {\n var sourceInfo = '';\n\n if (source) {\n var path = source.fileName;\n var fileName = path.replace(BEFORE_SLASH_RE, '');\n\n {\n // In DEV, include code for a common special case:\n // prefer \"folder/index.js\" instead of just \"index.js\".\n if (/^index\\./.test(fileName)) {\n var match = path.match(BEFORE_SLASH_RE);\n\n if (match) {\n var pathBeforeSlash = match[1];\n\n if (pathBeforeSlash) {\n var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n fileName = folderName + '/' + fileName;\n }\n }\n }\n }\n\n sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n } else if (ownerName) {\n sourceInfo = ' (created by ' + ownerName + ')';\n }\n\n return '\\n in ' + (name || 'Unknown') + sourceInfo;\n};\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\n\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = warningWithoutStack$1;\n\n{\n warning = function (condition, format) {\n if (condition) {\n return;\n }\n\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum(); // eslint-disable-next-line react-internal/warning-and-invariant-args\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n warningWithoutStack$1.apply(void 0, [false, format + '%s'].concat(args, [stack]));\n };\n}\n\nvar warning$1 = warning;\n\nvar Uninitialized = -1;\nvar Pending = 0;\nvar Resolved = 1;\nvar Rejected = 2;\nfunction refineResolvedLazyComponent(lazyComponent) {\n return lazyComponent._status === Resolved ? lazyComponent._result : null;\n}\nfunction initializeLazyComponentType(lazyComponent) {\n if (lazyComponent._status === Uninitialized) {\n lazyComponent._status = Pending;\n var ctor = lazyComponent._ctor;\n var thenable = ctor();\n lazyComponent._result = thenable;\n thenable.then(function (moduleObject) {\n if (lazyComponent._status === Pending) {\n var defaultExport = moduleObject.default;\n\n {\n if (defaultExport === undefined) {\n warning$1(false, 'lazy: Expected the result of a dynamic import() call. ' + 'Instead received: %s\\n\\nYour code should look like: \\n ' + \"const MyComponent = lazy(() => import('./MyComponent'))\", moduleObject);\n }\n }\n\n lazyComponent._status = Resolved;\n lazyComponent._result = defaultExport;\n }\n }, function (error) {\n if (lazyComponent._status === Pending) {\n lazyComponent._status = Rejected;\n lazyComponent._result = error;\n }\n });\n }\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n}\n\nfunction getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n warningWithoutStack$1(false, 'Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n return 'Context.Consumer';\n\n case REACT_PROVIDER_TYPE:\n return 'Context.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n\n case REACT_LAZY_TYPE:\n {\n var thenable = type;\n var resolvedThenable = refineResolvedLazyComponent(thenable);\n\n if (resolvedThenable) {\n return getComponentName(resolvedThenable);\n }\n\n break;\n }\n }\n }\n\n return null;\n}\n\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction describeFiber(fiber) {\n switch (fiber.tag) {\n case HostRoot:\n case HostPortal:\n case HostText:\n case Fragment:\n case ContextProvider:\n case ContextConsumer:\n return '';\n\n default:\n var owner = fiber._debugOwner;\n var source = fiber._debugSource;\n var name = getComponentName(fiber.type);\n var ownerName = null;\n\n if (owner) {\n ownerName = getComponentName(owner.type);\n }\n\n return describeComponentFrame(name, source, ownerName);\n }\n}\n\nfunction getStackByFiberInDevAndProd(workInProgress) {\n var info = '';\n var node = workInProgress;\n\n do {\n info += describeFiber(node);\n node = node.return;\n } while (node);\n\n return info;\n}\nvar current = null;\nvar phase = null;\nfunction getCurrentFiberOwnerNameInDevOrNull() {\n {\n if (current === null) {\n return null;\n }\n\n var owner = current._debugOwner;\n\n if (owner !== null && typeof owner !== 'undefined') {\n return getComponentName(owner.type);\n }\n }\n\n return null;\n}\nfunction getCurrentFiberStackInDev() {\n {\n if (current === null) {\n return '';\n } // Safe because if current fiber exists, we are reconciling,\n // and it is guaranteed to be the work-in-progress version.\n\n\n return getStackByFiberInDevAndProd(current);\n }\n\n return '';\n}\nfunction resetCurrentFiber() {\n {\n ReactDebugCurrentFrame.getCurrentStack = null;\n current = null;\n phase = null;\n }\n}\nfunction setCurrentFiber(fiber) {\n {\n ReactDebugCurrentFrame.getCurrentStack = getCurrentFiberStackInDev;\n current = fiber;\n phase = null;\n }\n}\nfunction setCurrentPhase(lifeCyclePhase) {\n {\n phase = lifeCyclePhase;\n }\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\nfunction endsWith(subject, search) {\n var length = subject.length;\n return subject.substring(length - search.length, length) === search;\n}\n\nvar PLUGIN_EVENT_SYSTEM = 1;\nvar RESPONDER_EVENT_SYSTEM = 1 << 1;\nvar IS_PASSIVE = 1 << 2;\nvar IS_ACTIVE = 1 << 3;\nvar PASSIVE_NOT_SUPPORTED = 1 << 4;\nvar IS_REPLAYED = 1 << 5;\n\nvar restoreImpl = null;\nvar restoreTarget = null;\nvar restoreQueue = null;\n\nfunction restoreStateOfTarget(target) {\n // We perform this translation at the end of the event loop so that we\n // always receive the correct fiber here\n var internalInstance = getInstanceFromNode(target);\n\n if (!internalInstance) {\n // Unmounted\n return;\n }\n\n if (!(typeof restoreImpl === 'function')) {\n {\n throw Error(\"setRestoreImplementation() needs to be called to handle a target for controlled events. This error is likely caused by a bug in React. Please file an issue.\");\n }\n }\n\n var props = getFiberCurrentPropsFromNode(internalInstance.stateNode);\n restoreImpl(internalInstance.stateNode, internalInstance.type, props);\n}\n\nfunction setRestoreImplementation(impl) {\n restoreImpl = impl;\n}\nfunction enqueueStateRestore(target) {\n if (restoreTarget) {\n if (restoreQueue) {\n restoreQueue.push(target);\n } else {\n restoreQueue = [target];\n }\n } else {\n restoreTarget = target;\n }\n}\nfunction needsStateRestore() {\n return restoreTarget !== null || restoreQueue !== null;\n}\nfunction restoreStateIfNeeded() {\n if (!restoreTarget) {\n return;\n }\n\n var target = restoreTarget;\n var queuedTargets = restoreQueue;\n restoreTarget = null;\n restoreQueue = null;\n restoreStateOfTarget(target);\n\n if (queuedTargets) {\n for (var i = 0; i < queuedTargets.length; i++) {\n restoreStateOfTarget(queuedTargets[i]);\n }\n }\n}\n\nvar enableUserTimingAPI = true; // Helps identify side effects in render-phase lifecycle hooks and setState\n// reducers by double invoking them in Strict Mode.\n\nvar debugRenderPhaseSideEffectsForStrictMode = true; // To preserve the \"Pause on caught exceptions\" behavior of the debugger, we\n// replay the begin phase of a failed component inside invokeGuardedCallback.\n\nvar replayFailedUnitOfWorkWithInvokeGuardedCallback = true; // Warn about deprecated, async-unsafe lifecycles; relates to RFC #6:\n\nvar warnAboutDeprecatedLifecycles = true; // Gather advanced timing metrics for Profiler subtrees.\n\nvar enableProfilerTimer = true; // Trace which interactions trigger each commit.\n\nvar enableSchedulerTracing = true; // SSR experiments\n\nvar enableSuspenseServerRenderer = false;\nvar enableSelectiveHydration = false; // Only used in www builds.\n\n // Only used in www builds.\n\n // Disable javascript: URL strings in href for XSS protection.\n\nvar disableJavaScriptURLs = false; // React Fire: prevent the value and checked attributes from syncing\n// with their related DOM properties\n\nvar disableInputAttributeSyncing = false; // These APIs will no longer be \"unstable\" in the upcoming 16.7 release,\n// Control this behavior with a flag to support 16.6 minor releases in the meanwhile.\n\nvar exposeConcurrentModeAPIs = false;\nvar warnAboutShorthandPropertyCollision = false; // Experimental React Flare event system and event components support.\n\nvar enableFlareAPI = false; // Experimental Host Component support.\n\nvar enableFundamentalAPI = false; // Experimental Scope support.\n\nvar enableScopeAPI = false; // New API for JSX transforms to target - https://github.com/reactjs/rfcs/pull/107\n\n // We will enforce mocking scheduler with scheduler/unstable_mock at some point. (v17?)\n// Till then, we warn about the missing mock, but still fallback to a legacy mode compatible version\n\nvar warnAboutUnmockedScheduler = false; // For tests, we flush suspense fallbacks in an act scope;\n// *except* in some of our own tests, where we test incremental loading states.\n\nvar flushSuspenseFallbacksInTests = true; // Add a callback property to suspense to notify which promises are currently\n// in the update queue. This allows reporting and tracing of what is causing\n// the user to see a loading state.\n// Also allows hydration callbacks to fire when a dehydrated boundary gets\n// hydrated or deleted.\n\nvar enableSuspenseCallback = false; // Part of the simplification of React.createElement so we can eventually move\n// from React.createElement to React.jsx\n// https://github.com/reactjs/rfcs/blob/createlement-rfc/text/0000-create-element-changes.md\n\nvar warnAboutDefaultPropsOnFunctionComponents = false;\nvar warnAboutStringRefs = false;\nvar disableLegacyContext = false;\nvar disableSchedulerTimeoutBasedOnReactExpirationTime = false;\nvar enableTrustedTypesIntegration = false; // Flag to turn event.target and event.currentTarget in ReactNative from a reactTag to a component instance\n\n// the renderer. Such as when we're dispatching events or if third party\n// libraries need to call batchedUpdates. Eventually, this API will go away when\n// everything is batched by default. We'll then have a similar API to opt-out of\n// scheduled work and instead do synchronous work.\n// Defaults\n\nvar batchedUpdatesImpl = function (fn, bookkeeping) {\n return fn(bookkeeping);\n};\n\nvar discreteUpdatesImpl = function (fn, a, b, c) {\n return fn(a, b, c);\n};\n\nvar flushDiscreteUpdatesImpl = function () {};\n\nvar batchedEventUpdatesImpl = batchedUpdatesImpl;\nvar isInsideEventHandler = false;\nvar isBatchingEventUpdates = false;\n\nfunction finishEventHandler() {\n // Here we wait until all updates have propagated, which is important\n // when using controlled components within layers:\n // https://github.com/facebook/react/issues/1698\n // Then we restore state of any controlled component.\n var controlledComponentsHavePendingUpdates = needsStateRestore();\n\n if (controlledComponentsHavePendingUpdates) {\n // If a controlled event was fired, we may need to restore the state of\n // the DOM node back to the controlled value. This is necessary when React\n // bails out of the update without touching the DOM.\n flushDiscreteUpdatesImpl();\n restoreStateIfNeeded();\n }\n}\n\nfunction batchedUpdates(fn, bookkeeping) {\n if (isInsideEventHandler) {\n // If we are currently inside another batch, we need to wait until it\n // fully completes before restoring state.\n return fn(bookkeeping);\n }\n\n isInsideEventHandler = true;\n\n try {\n return batchedUpdatesImpl(fn, bookkeeping);\n } finally {\n isInsideEventHandler = false;\n finishEventHandler();\n }\n}\nfunction batchedEventUpdates(fn, a, b) {\n if (isBatchingEventUpdates) {\n // If we are currently inside another batch, we need to wait until it\n // fully completes before restoring state.\n return fn(a, b);\n }\n\n isBatchingEventUpdates = true;\n\n try {\n return batchedEventUpdatesImpl(fn, a, b);\n } finally {\n isBatchingEventUpdates = false;\n finishEventHandler();\n }\n} // This is for the React Flare event system\n\nfunction executeUserEventHandler(fn, value) {\n var previouslyInEventHandler = isInsideEventHandler;\n\n try {\n isInsideEventHandler = true;\n var type = typeof value === 'object' && value !== null ? value.type : '';\n invokeGuardedCallbackAndCatchFirstError(type, fn, undefined, value);\n } finally {\n isInsideEventHandler = previouslyInEventHandler;\n }\n}\nfunction discreteUpdates(fn, a, b, c) {\n var prevIsInsideEventHandler = isInsideEventHandler;\n isInsideEventHandler = true;\n\n try {\n return discreteUpdatesImpl(fn, a, b, c);\n } finally {\n isInsideEventHandler = prevIsInsideEventHandler;\n\n if (!isInsideEventHandler) {\n finishEventHandler();\n }\n }\n}\nvar lastFlushedEventTimeStamp = 0;\nfunction flushDiscreteUpdatesIfNeeded(timeStamp) {\n // event.timeStamp isn't overly reliable due to inconsistencies in\n // how different browsers have historically provided the time stamp.\n // Some browsers provide high-resolution time stamps for all events,\n // some provide low-resolution time stamps for all events. FF < 52\n // even mixes both time stamps together. Some browsers even report\n // negative time stamps or time stamps that are 0 (iOS9) in some cases.\n // Given we are only comparing two time stamps with equality (!==),\n // we are safe from the resolution differences. If the time stamp is 0\n // we bail-out of preventing the flush, which can affect semantics,\n // such as if an earlier flush removes or adds event listeners that\n // are fired in the subsequent flush. However, this is the same\n // behaviour as we had before this change, so the risks are low.\n if (!isInsideEventHandler && (!enableFlareAPI || timeStamp === 0 || lastFlushedEventTimeStamp !== timeStamp)) {\n lastFlushedEventTimeStamp = timeStamp;\n flushDiscreteUpdatesImpl();\n }\n}\nfunction setBatchingImplementation(_batchedUpdatesImpl, _discreteUpdatesImpl, _flushDiscreteUpdatesImpl, _batchedEventUpdatesImpl) {\n batchedUpdatesImpl = _batchedUpdatesImpl;\n discreteUpdatesImpl = _discreteUpdatesImpl;\n flushDiscreteUpdatesImpl = _flushDiscreteUpdatesImpl;\n batchedEventUpdatesImpl = _batchedEventUpdatesImpl;\n}\n\nvar DiscreteEvent = 0;\nvar UserBlockingEvent = 1;\nvar ContinuousEvent = 2;\n\n// CommonJS interop named imports.\n\nvar UserBlockingPriority = Scheduler.unstable_UserBlockingPriority;\nvar runWithPriority = Scheduler.unstable_runWithPriority;\nvar listenToResponderEventTypesImpl;\nfunction setListenToResponderEventTypes(_listenToResponderEventTypesImpl) {\n listenToResponderEventTypesImpl = _listenToResponderEventTypesImpl;\n}\nvar rootEventTypesToEventResponderInstances = new Map();\nvar DoNotPropagateToNextResponder = 0;\nvar PropagateToNextResponder = 1;\nvar currentTimeStamp = 0;\nvar currentInstance = null;\nvar currentDocument = null;\nvar currentPropagationBehavior = DoNotPropagateToNextResponder;\nvar eventResponderContext = {\n dispatchEvent: function (eventValue, eventListener, eventPriority) {\n validateResponderContext();\n validateEventValue(eventValue);\n\n switch (eventPriority) {\n case DiscreteEvent:\n {\n flushDiscreteUpdatesIfNeeded(currentTimeStamp);\n discreteUpdates(function () {\n return executeUserEventHandler(eventListener, eventValue);\n });\n break;\n }\n\n case UserBlockingEvent:\n {\n runWithPriority(UserBlockingPriority, function () {\n return executeUserEventHandler(eventListener, eventValue);\n });\n break;\n }\n\n case ContinuousEvent:\n {\n executeUserEventHandler(eventListener, eventValue);\n break;\n }\n }\n },\n isTargetWithinResponder: function (target) {\n validateResponderContext();\n\n if (target != null) {\n var fiber = getClosestInstanceFromNode(target);\n var responderFiber = currentInstance.fiber;\n\n while (fiber !== null) {\n if (fiber === responderFiber || fiber.alternate === responderFiber) {\n return true;\n }\n\n fiber = fiber.return;\n }\n }\n\n return false;\n },\n isTargetWithinResponderScope: function (target) {\n validateResponderContext();\n var componentInstance = currentInstance;\n var responder = componentInstance.responder;\n\n if (target != null) {\n var fiber = getClosestInstanceFromNode(target);\n var responderFiber = currentInstance.fiber;\n\n while (fiber !== null) {\n if (fiber === responderFiber || fiber.alternate === responderFiber) {\n return true;\n }\n\n if (doesFiberHaveResponder(fiber, responder)) {\n return false;\n }\n\n fiber = fiber.return;\n }\n }\n\n return false;\n },\n isTargetWithinNode: function (childTarget, parentTarget) {\n validateResponderContext();\n var childFiber = getClosestInstanceFromNode(childTarget);\n var parentFiber = getClosestInstanceFromNode(parentTarget);\n\n if (childFiber != null && parentFiber != null) {\n var parentAlternateFiber = parentFiber.alternate;\n var node = childFiber;\n\n while (node !== null) {\n if (node === parentFiber || node === parentAlternateFiber) {\n return true;\n }\n\n node = node.return;\n }\n\n return false;\n } // Fallback to DOM APIs\n\n\n return parentTarget.contains(childTarget);\n },\n addRootEventTypes: function (rootEventTypes) {\n validateResponderContext();\n listenToResponderEventTypesImpl(rootEventTypes, currentDocument);\n\n for (var i = 0; i < rootEventTypes.length; i++) {\n var rootEventType = rootEventTypes[i];\n var eventResponderInstance = currentInstance;\n registerRootEventType(rootEventType, eventResponderInstance);\n }\n },\n removeRootEventTypes: function (rootEventTypes) {\n validateResponderContext();\n\n for (var i = 0; i < rootEventTypes.length; i++) {\n var rootEventType = rootEventTypes[i];\n var rootEventResponders = rootEventTypesToEventResponderInstances.get(rootEventType);\n var rootEventTypesSet = currentInstance.rootEventTypes;\n\n if (rootEventTypesSet !== null) {\n rootEventTypesSet.delete(rootEventType);\n }\n\n if (rootEventResponders !== undefined) {\n rootEventResponders.delete(currentInstance);\n }\n }\n },\n getActiveDocument: getActiveDocument,\n objectAssign: _assign,\n getTimeStamp: function () {\n validateResponderContext();\n return currentTimeStamp;\n },\n isTargetWithinHostComponent: function (target, elementType) {\n validateResponderContext();\n var fiber = getClosestInstanceFromNode(target);\n\n while (fiber !== null) {\n if (fiber.tag === HostComponent && fiber.type === elementType) {\n return true;\n }\n\n fiber = fiber.return;\n }\n\n return false;\n },\n continuePropagation: function () {\n currentPropagationBehavior = PropagateToNextResponder;\n },\n enqueueStateRestore: enqueueStateRestore,\n getResponderNode: function () {\n validateResponderContext();\n var responderFiber = currentInstance.fiber;\n\n if (responderFiber.tag === ScopeComponent) {\n return null;\n }\n\n return responderFiber.stateNode;\n }\n};\n\nfunction validateEventValue(eventValue) {\n if (typeof eventValue === 'object' && eventValue !== null) {\n var target = eventValue.target,\n type = eventValue.type,\n timeStamp = eventValue.timeStamp;\n\n if (target == null || type == null || timeStamp == null) {\n throw new Error('context.dispatchEvent: \"target\", \"timeStamp\", and \"type\" fields on event object are required.');\n }\n\n var showWarning = function (name) {\n {\n warning$1(false, '%s is not available on event objects created from event responder modules (React Flare). ' + 'Try wrapping in a conditional, i.e. `if (event.type !== \"press\") { event.%s }`', name, name);\n }\n };\n\n eventValue.isDefaultPrevented = function () {\n {\n showWarning('isDefaultPrevented()');\n }\n };\n\n eventValue.isPropagationStopped = function () {\n {\n showWarning('isPropagationStopped()');\n }\n }; // $FlowFixMe: we don't need value, Flow thinks we do\n\n\n Object.defineProperty(eventValue, 'nativeEvent', {\n get: function () {\n {\n showWarning('nativeEvent');\n }\n }\n });\n }\n}\n\nfunction doesFiberHaveResponder(fiber, responder) {\n var tag = fiber.tag;\n\n if (tag === HostComponent || tag === ScopeComponent) {\n var dependencies = fiber.dependencies;\n\n if (dependencies !== null) {\n var respondersMap = dependencies.responders;\n\n if (respondersMap !== null && respondersMap.has(responder)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nfunction getActiveDocument() {\n return currentDocument;\n}\n\nfunction createDOMResponderEvent(topLevelType, nativeEvent, nativeEventTarget, passive, passiveSupported) {\n var _ref = nativeEvent,\n buttons = _ref.buttons,\n pointerType = _ref.pointerType;\n var eventPointerType = '';\n\n if (pointerType !== undefined) {\n eventPointerType = pointerType;\n } else if (nativeEvent.key !== undefined) {\n eventPointerType = 'keyboard';\n } else if (buttons !== undefined) {\n eventPointerType = 'mouse';\n } else if (nativeEvent.changedTouches !== undefined) {\n eventPointerType = 'touch';\n }\n\n return {\n nativeEvent: nativeEvent,\n passive: passive,\n passiveSupported: passiveSupported,\n pointerType: eventPointerType,\n target: nativeEventTarget,\n type: topLevelType\n };\n}\n\nfunction responderEventTypesContainType(eventTypes, type) {\n for (var i = 0, len = eventTypes.length; i < len; i++) {\n if (eventTypes[i] === type) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction validateResponderTargetEventTypes(eventType, responder) {\n var targetEventTypes = responder.targetEventTypes; // Validate the target event type exists on the responder\n\n if (targetEventTypes !== null) {\n return responderEventTypesContainType(targetEventTypes, eventType);\n }\n\n return false;\n}\n\nfunction traverseAndHandleEventResponderInstances(topLevelType, targetFiber, nativeEvent, nativeEventTarget, eventSystemFlags) {\n var isPassiveEvent = (eventSystemFlags & IS_PASSIVE) !== 0;\n var isPassiveSupported = (eventSystemFlags & PASSIVE_NOT_SUPPORTED) === 0;\n var isPassive = isPassiveEvent || !isPassiveSupported;\n var eventType = isPassive ? topLevelType : topLevelType + '_active'; // Trigger event responders in this order:\n // - Bubble target responder phase\n // - Root responder phase\n\n var visitedResponders = new Set();\n var responderEvent = createDOMResponderEvent(topLevelType, nativeEvent, nativeEventTarget, isPassiveEvent, isPassiveSupported);\n var node = targetFiber;\n var insidePortal = false;\n\n while (node !== null) {\n var _node = node,\n dependencies = _node.dependencies,\n tag = _node.tag;\n\n if (tag === HostPortal) {\n insidePortal = true;\n } else if ((tag === HostComponent || tag === ScopeComponent) && dependencies !== null) {\n var respondersMap = dependencies.responders;\n\n if (respondersMap !== null) {\n var responderInstances = Array.from(respondersMap.values());\n\n for (var i = 0, length = responderInstances.length; i < length; i++) {\n var responderInstance = responderInstances[i];\n var props = responderInstance.props,\n responder = responderInstance.responder,\n state = responderInstance.state;\n\n if (!visitedResponders.has(responder) && validateResponderTargetEventTypes(eventType, responder) && (!insidePortal || responder.targetPortalPropagation)) {\n visitedResponders.add(responder);\n var onEvent = responder.onEvent;\n\n if (onEvent !== null) {\n currentInstance = responderInstance;\n onEvent(responderEvent, eventResponderContext, props, state);\n\n if (currentPropagationBehavior === PropagateToNextResponder) {\n visitedResponders.delete(responder);\n currentPropagationBehavior = DoNotPropagateToNextResponder;\n }\n }\n }\n }\n }\n }\n\n node = node.return;\n } // Root phase\n\n\n var rootEventResponderInstances = rootEventTypesToEventResponderInstances.get(eventType);\n\n if (rootEventResponderInstances !== undefined) {\n var _responderInstances = Array.from(rootEventResponderInstances);\n\n for (var _i = 0; _i < _responderInstances.length; _i++) {\n var _responderInstance = _responderInstances[_i];\n var props = _responderInstance.props,\n responder = _responderInstance.responder,\n state = _responderInstance.state;\n var onRootEvent = responder.onRootEvent;\n\n if (onRootEvent !== null) {\n currentInstance = _responderInstance;\n onRootEvent(responderEvent, eventResponderContext, props, state);\n }\n }\n }\n}\n\nfunction mountEventResponder(responder, responderInstance, props, state) {\n var onMount = responder.onMount;\n\n if (onMount !== null) {\n var previousInstance = currentInstance;\n currentInstance = responderInstance;\n\n try {\n batchedEventUpdates(function () {\n onMount(eventResponderContext, props, state);\n });\n } finally {\n currentInstance = previousInstance;\n }\n }\n}\nfunction unmountEventResponder(responderInstance) {\n var responder = responderInstance.responder;\n var onUnmount = responder.onUnmount;\n\n if (onUnmount !== null) {\n var props = responderInstance.props,\n state = responderInstance.state;\n var previousInstance = currentInstance;\n currentInstance = responderInstance;\n\n try {\n batchedEventUpdates(function () {\n onUnmount(eventResponderContext, props, state);\n });\n } finally {\n currentInstance = previousInstance;\n }\n }\n\n var rootEventTypesSet = responderInstance.rootEventTypes;\n\n if (rootEventTypesSet !== null) {\n var rootEventTypes = Array.from(rootEventTypesSet);\n\n for (var i = 0; i < rootEventTypes.length; i++) {\n var topLevelEventType = rootEventTypes[i];\n var rootEventResponderInstances = rootEventTypesToEventResponderInstances.get(topLevelEventType);\n\n if (rootEventResponderInstances !== undefined) {\n rootEventResponderInstances.delete(responderInstance);\n }\n }\n }\n}\n\nfunction validateResponderContext() {\n if (!(currentInstance !== null)) {\n {\n throw Error(\"An event responder context was used outside of an event cycle.\");\n }\n }\n}\n\nfunction dispatchEventForResponderEventSystem(topLevelType, targetFiber, nativeEvent, nativeEventTarget, eventSystemFlags) {\n if (enableFlareAPI) {\n var previousInstance = currentInstance;\n var previousTimeStamp = currentTimeStamp;\n var previousDocument = currentDocument;\n var previousPropagationBehavior = currentPropagationBehavior;\n currentPropagationBehavior = DoNotPropagateToNextResponder; // nodeType 9 is DOCUMENT_NODE\n\n currentDocument = nativeEventTarget.nodeType === 9 ? nativeEventTarget : nativeEventTarget.ownerDocument; // We might want to control timeStamp another way here\n\n currentTimeStamp = nativeEvent.timeStamp;\n\n try {\n batchedEventUpdates(function () {\n traverseAndHandleEventResponderInstances(topLevelType, targetFiber, nativeEvent, nativeEventTarget, eventSystemFlags);\n });\n } finally {\n currentInstance = previousInstance;\n currentTimeStamp = previousTimeStamp;\n currentDocument = previousDocument;\n currentPropagationBehavior = previousPropagationBehavior;\n }\n }\n}\nfunction addRootEventTypesForResponderInstance(responderInstance, rootEventTypes) {\n for (var i = 0; i < rootEventTypes.length; i++) {\n var rootEventType = rootEventTypes[i];\n registerRootEventType(rootEventType, responderInstance);\n }\n}\n\nfunction registerRootEventType(rootEventType, eventResponderInstance) {\n var rootEventResponderInstances = rootEventTypesToEventResponderInstances.get(rootEventType);\n\n if (rootEventResponderInstances === undefined) {\n rootEventResponderInstances = new Set();\n rootEventTypesToEventResponderInstances.set(rootEventType, rootEventResponderInstances);\n }\n\n var rootEventTypesSet = eventResponderInstance.rootEventTypes;\n\n if (rootEventTypesSet === null) {\n rootEventTypesSet = eventResponderInstance.rootEventTypes = new Set();\n }\n\n if (!!rootEventTypesSet.has(rootEventType)) {\n {\n throw Error(\"addRootEventTypes() found a duplicate root event type of \\\"\" + rootEventType + \"\\\". This might be because the event type exists in the event responder \\\"rootEventTypes\\\" array or because of a previous addRootEventTypes() using this root event type.\");\n }\n }\n\n rootEventTypesSet.add(rootEventType);\n rootEventResponderInstances.add(eventResponderInstance);\n}\n\n// A reserved attribute.\n// It is handled by React separately and shouldn't be written to the DOM.\nvar RESERVED = 0; // A simple string attribute.\n// Attributes that aren't in the whitelist are presumed to have this type.\n\nvar STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called\n// \"enumerated\" attributes with \"true\" and \"false\" as possible values.\n// When true, it should be set to a \"true\" string.\n// When false, it should be set to a \"false\" string.\n\nvar BOOLEANISH_STRING = 2; // A real boolean attribute.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n\nvar BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n// For any other value, should be present with that value.\n\nvar OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.\n// When falsy, it should be removed.\n\nvar NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.\n// When falsy, it should be removed.\n\nvar POSITIVE_NUMERIC = 6;\n\n/* eslint-disable max-len */\nvar ATTRIBUTE_NAME_START_CHAR = \":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n/* eslint-enable max-len */\n\nvar ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + \"\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\n\nvar ROOT_ATTRIBUTE_NAME = 'data-reactroot';\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {\n return true;\n }\n\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {\n return false;\n }\n\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n\n illegalAttributeNameCache[attributeName] = true;\n\n {\n warning$1(false, 'Invalid attribute name: `%s`', attributeName);\n }\n\n return false;\n}\nfunction shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) {\n if (propertyInfo !== null) {\n return propertyInfo.type === RESERVED;\n }\n\n if (isCustomComponentTag) {\n return false;\n }\n\n if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {\n return true;\n }\n\n return false;\n}\nfunction shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {\n if (propertyInfo !== null && propertyInfo.type === RESERVED) {\n return false;\n }\n\n switch (typeof value) {\n case 'function': // $FlowIssue symbol is perfectly valid here\n\n case 'symbol':\n // eslint-disable-line\n return true;\n\n case 'boolean':\n {\n if (isCustomComponentTag) {\n return false;\n }\n\n if (propertyInfo !== null) {\n return !propertyInfo.acceptsBooleans;\n } else {\n var prefix = name.toLowerCase().slice(0, 5);\n return prefix !== 'data-' && prefix !== 'aria-';\n }\n }\n\n default:\n return false;\n }\n}\nfunction shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) {\n if (value === null || typeof value === 'undefined') {\n return true;\n }\n\n if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) {\n return true;\n }\n\n if (isCustomComponentTag) {\n return false;\n }\n\n if (propertyInfo !== null) {\n switch (propertyInfo.type) {\n case BOOLEAN:\n return !value;\n\n case OVERLOADED_BOOLEAN:\n return value === false;\n\n case NUMERIC:\n return isNaN(value);\n\n case POSITIVE_NUMERIC:\n return isNaN(value) || value < 1;\n }\n }\n\n return false;\n}\nfunction getPropertyInfo(name) {\n return properties.hasOwnProperty(name) ? properties[name] : null;\n}\n\nfunction PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL) {\n this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;\n this.attributeName = attributeName;\n this.attributeNamespace = attributeNamespace;\n this.mustUseProperty = mustUseProperty;\n this.propertyName = name;\n this.type = type;\n this.sanitizeURL = sanitizeURL;\n} // When adding attributes to this list, be sure to also add them to\n// the `possibleStandardNames` module to ensure casing and incorrect\n// name warnings.\n\n\nvar properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.\n\n['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular\n// elements (not just inputs). Now that ReactDOMInput assigns to the\n// defaultValue property -- do we need this?\n'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // A few React string attributes have a different name.\n// This is a mapping from React prop names to the attribute names.\n\n[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {\n var name = _ref[0],\n attributeName = _ref[1];\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, // attributeName\n null, // attributeNamespace\n false);\n}); // These are \"enumerated\" HTML attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n\n['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n}); // These are \"enumerated\" SVG attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n// Since these are SVG attributes, their attribute names are case-sensitive.\n\n['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML boolean attributes.\n\n['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM\n// on the client side because the browsers are inconsistent. Instead we call focus().\n'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata\n'itemScope'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n}); // These are the few React props that we set as DOM properties\n// rather than attributes. These are all booleans.\n\n['checked', // Note: `option.selected` is not updated if `select.multiple` is\n// disabled with `removeAttribute`. We have special logic for handling this.\n'multiple', 'muted', 'selected'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML attributes that are \"overloaded booleans\": they behave like\n// booleans, but can also accept a string value.\n\n['capture', 'download'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML attributes that must be positive numbers.\n\n['cols', 'rows', 'size', 'span'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML attributes that must be numbers.\n\n['rowSpan', 'start'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n});\nvar CAMELIZE = /[\\-\\:]([a-z])/g;\n\nvar capitalize = function (token) {\n return token[1].toUpperCase();\n}; // This is a list of all SVG attributes that need special casing, namespacing,\n// or boolean value assignment. Regular attributes that just accept strings\n// and have the same names are omitted, just like in the HTML whitelist.\n// Some of these attributes can be hard to find. This list was created by\n// scrapping the MDN documentation.\n\n\n['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height'].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, null, // attributeNamespace\n false);\n}); // String SVG attributes with the xlink namespace.\n\n['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type'].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, 'http://www.w3.org/1999/xlink', false);\n}); // String SVG attributes with the xml namespace.\n\n['xml:base', 'xml:lang', 'xml:space'].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, 'http://www.w3.org/XML/1998/namespace', false);\n}); // These attribute exists both in HTML and SVG.\n// The attribute name is case-sensitive in SVG so we can't just use\n// the React name like we do for attributes that exist only in HTML.\n\n['tabIndex', 'crossOrigin'].forEach(function (attributeName) {\n properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n attributeName.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n}); // These attributes accept URLs. These must not allow javascript: URLS.\n// These will also need to accept Trusted Types object in the future.\n\nvar xlinkHref = 'xlinkHref';\nproperties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty\n'xlink:href', 'http://www.w3.org/1999/xlink', true);\n['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {\n properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n attributeName.toLowerCase(), // attributeName\n null, // attributeNamespace\n true);\n});\n\nvar ReactDebugCurrentFrame$1 = null;\n\n{\n ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n} // A javascript: URL can contain leading C0 control or \\u0020 SPACE,\n// and any newline or tab are filtered out as if they're not part of the URL.\n// https://url.spec.whatwg.org/#url-parsing\n// Tab or newline are defined as \\r\\n\\t:\n// https://infra.spec.whatwg.org/#ascii-tab-or-newline\n// A C0 control is a code point in the range \\u0000 NULL to \\u001F\n// INFORMATION SEPARATOR ONE, inclusive:\n// https://infra.spec.whatwg.org/#c0-control-or-space\n\n/* eslint-disable max-len */\n\n\nvar isJavaScriptProtocol = /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*\\:/i;\nvar didWarn = false;\n\nfunction sanitizeURL(url) {\n if (disableJavaScriptURLs) {\n if (!!isJavaScriptProtocol.test(url)) {\n {\n throw Error(\"React has blocked a javascript: URL as a security precaution.\" + (ReactDebugCurrentFrame$1.getStackAddendum()));\n }\n }\n } else if ( true && !didWarn && isJavaScriptProtocol.test(url)) {\n didWarn = true;\n warning$1(false, 'A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url));\n }\n}\n\n// Flow does not allow string concatenation of most non-string types. To work\n// around this limitation, we use an opaque type that can only be obtained by\n// passing the value through getToStringValue first.\nfunction toString(value) {\n return '' + value;\n}\nfunction getToStringValue(value) {\n switch (typeof value) {\n case 'boolean':\n case 'number':\n case 'object':\n case 'string':\n case 'undefined':\n return value;\n\n default:\n // function, symbol are assigned as empty strings\n return '';\n }\n}\n/** Trusted value is a wrapper for \"safe\" values which can be assigned to DOM execution sinks. */\n\n/**\n * We allow passing objects with toString method as element attributes or in dangerouslySetInnerHTML\n * and we do validations that the value is safe. Once we do validation we want to use the validated\n * value instead of the object (because object.toString may return something else on next call).\n *\n * If application uses Trusted Types we don't stringify trusted values, but preserve them as objects.\n */\nvar toStringOrTrustedType = toString;\n\nif (enableTrustedTypesIntegration && typeof trustedTypes !== 'undefined') {\n toStringOrTrustedType = function (value) {\n if (typeof value === 'object' && (trustedTypes.isHTML(value) || trustedTypes.isScript(value) || trustedTypes.isScriptURL(value) ||\n /* TrustedURLs are deprecated and will be removed soon: https://github.com/WICG/trusted-types/pull/204 */\n trustedTypes.isURL && trustedTypes.isURL(value))) {\n // Pass Trusted Types through.\n return value;\n }\n\n return toString(value);\n };\n}\n\n/**\n * Set attribute for a node. The attribute value can be either string or\n * Trusted value (if application uses Trusted Types).\n */\nfunction setAttribute(node, attributeName, attributeValue) {\n node.setAttribute(attributeName, attributeValue);\n}\n/**\n * Set attribute with namespace for a node. The attribute value can be either string or\n * Trusted value (if application uses Trusted Types).\n */\n\nfunction setAttributeNS(node, attributeNamespace, attributeName, attributeValue) {\n node.setAttributeNS(attributeNamespace, attributeName, attributeValue);\n}\n\n/**\n * Get the value for a property on a node. Only used in DEV for SSR validation.\n * The \"expected\" argument is used as a hint of what the expected value is.\n * Some properties have multiple equivalent values.\n */\nfunction getValueForProperty(node, name, expected, propertyInfo) {\n {\n if (propertyInfo.mustUseProperty) {\n var propertyName = propertyInfo.propertyName;\n return node[propertyName];\n } else {\n if (!disableJavaScriptURLs && propertyInfo.sanitizeURL) {\n // If we haven't fully disabled javascript: URLs, and if\n // the hydration is successful of a javascript: URL, we\n // still want to warn on the client.\n sanitizeURL('' + expected);\n }\n\n var attributeName = propertyInfo.attributeName;\n var stringValue = null;\n\n if (propertyInfo.type === OVERLOADED_BOOLEAN) {\n if (node.hasAttribute(attributeName)) {\n var value = node.getAttribute(attributeName);\n\n if (value === '') {\n return true;\n }\n\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n return value;\n }\n\n if (value === '' + expected) {\n return expected;\n }\n\n return value;\n }\n } else if (node.hasAttribute(attributeName)) {\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n // We had an attribute but shouldn't have had one, so read it\n // for the error message.\n return node.getAttribute(attributeName);\n }\n\n if (propertyInfo.type === BOOLEAN) {\n // If this was a boolean, it doesn't matter what the value is\n // the fact that we have it is the same as the expected.\n return expected;\n } // Even if this property uses a namespace we use getAttribute\n // because we assume its namespaced name is the same as our config.\n // To use getAttributeNS we need the local name which we don't have\n // in our config atm.\n\n\n stringValue = node.getAttribute(attributeName);\n }\n\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n return stringValue === null ? expected : stringValue;\n } else if (stringValue === '' + expected) {\n return expected;\n } else {\n return stringValue;\n }\n }\n }\n}\n/**\n * Get the value for a attribute on a node. Only used in DEV for SSR validation.\n * The third argument is used as a hint of what the expected value is. Some\n * attributes have multiple equivalent values.\n */\n\nfunction getValueForAttribute(node, name, expected) {\n {\n if (!isAttributeNameSafe(name)) {\n return;\n }\n\n if (!node.hasAttribute(name)) {\n return expected === undefined ? undefined : null;\n }\n\n var value = node.getAttribute(name);\n\n if (value === '' + expected) {\n return expected;\n }\n\n return value;\n }\n}\n/**\n * Sets the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n * @param {*} value\n */\n\nfunction setValueForProperty(node, name, value, isCustomComponentTag) {\n var propertyInfo = getPropertyInfo(name);\n\n if (shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag)) {\n return;\n }\n\n if (shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag)) {\n value = null;\n } // If the prop isn't in the special list, treat it as a simple attribute.\n\n\n if (isCustomComponentTag || propertyInfo === null) {\n if (isAttributeNameSafe(name)) {\n var _attributeName = name;\n\n if (value === null) {\n node.removeAttribute(_attributeName);\n } else {\n setAttribute(node, _attributeName, toStringOrTrustedType(value));\n }\n }\n\n return;\n }\n\n var mustUseProperty = propertyInfo.mustUseProperty;\n\n if (mustUseProperty) {\n var propertyName = propertyInfo.propertyName;\n\n if (value === null) {\n var type = propertyInfo.type;\n node[propertyName] = type === BOOLEAN ? false : '';\n } else {\n // Contrary to `setAttribute`, object properties are properly\n // `toString`ed by IE8/9.\n node[propertyName] = value;\n }\n\n return;\n } // The rest are treated as attributes with special cases.\n\n\n var attributeName = propertyInfo.attributeName,\n attributeNamespace = propertyInfo.attributeNamespace;\n\n if (value === null) {\n node.removeAttribute(attributeName);\n } else {\n var _type = propertyInfo.type;\n var attributeValue;\n\n if (_type === BOOLEAN || _type === OVERLOADED_BOOLEAN && value === true) {\n // If attribute type is boolean, we know for sure it won't be an execution sink\n // and we won't require Trusted Type here.\n attributeValue = '';\n } else {\n // `setAttribute` with objects becomes only `[object]` in IE8/9,\n // ('' + value) makes it output the correct toString()-value.\n attributeValue = toStringOrTrustedType(value);\n\n if (propertyInfo.sanitizeURL) {\n sanitizeURL(attributeValue.toString());\n }\n }\n\n if (attributeNamespace) {\n setAttributeNS(node, attributeNamespace, attributeName, attributeValue);\n } else {\n setAttribute(node, attributeName, attributeValue);\n }\n }\n}\n\nvar ReactDebugCurrentFrame$2 = null;\nvar ReactControlledValuePropTypes = {\n checkPropTypes: null\n};\n\n{\n ReactDebugCurrentFrame$2 = ReactSharedInternals.ReactDebugCurrentFrame;\n var hasReadOnlyValue = {\n button: true,\n checkbox: true,\n image: true,\n hidden: true,\n radio: true,\n reset: true,\n submit: true\n };\n var propTypes = {\n value: function (props, propName, componentName) {\n if (hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled || props[propName] == null || enableFlareAPI && props.listeners) {\n return null;\n }\n\n return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n },\n checked: function (props, propName, componentName) {\n if (props.onChange || props.readOnly || props.disabled || props[propName] == null || enableFlareAPI && props.listeners) {\n return null;\n }\n\n return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n }\n };\n /**\n * Provide a linked `value` attribute for controlled forms. You should not use\n * this outside of the ReactDOM controlled form components.\n */\n\n ReactControlledValuePropTypes.checkPropTypes = function (tagName, props) {\n checkPropTypes(propTypes, props, 'prop', tagName, ReactDebugCurrentFrame$2.getStackAddendum);\n };\n}\n\nfunction isCheckable(elem) {\n var type = elem.type;\n var nodeName = elem.nodeName;\n return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio');\n}\n\nfunction getTracker(node) {\n return node._valueTracker;\n}\n\nfunction detachTracker(node) {\n node._valueTracker = null;\n}\n\nfunction getValueFromNode(node) {\n var value = '';\n\n if (!node) {\n return value;\n }\n\n if (isCheckable(node)) {\n value = node.checked ? 'true' : 'false';\n } else {\n value = node.value;\n }\n\n return value;\n}\n\nfunction trackValueOnNode(node) {\n var valueField = isCheckable(node) ? 'checked' : 'value';\n var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);\n var currentValue = '' + node[valueField]; // if someone has already defined a value or Safari, then bail\n // and don't track value will cause over reporting of changes,\n // but it's better then a hard failure\n // (needed for certain tests that spyOn input values and Safari)\n\n if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {\n return;\n }\n\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: true,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n currentValue = '' + value;\n set.call(this, value);\n }\n }); // We could've passed this the first time\n // but it triggers a bug in IE11 and Edge 14/15.\n // Calling defineProperty() again should be equivalent.\n // https://github.com/facebook/react/issues/11768\n\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n var tracker = {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n currentValue = '' + value;\n },\n stopTracking: function () {\n detachTracker(node);\n delete node[valueField];\n }\n };\n return tracker;\n}\n\nfunction track(node) {\n if (getTracker(node)) {\n return;\n } // TODO: Once it's just Fiber we can move this to node._wrapperState\n\n\n node._valueTracker = trackValueOnNode(node);\n}\nfunction updateValueIfChanged(node) {\n if (!node) {\n return false;\n }\n\n var tracker = getTracker(node); // if there is no tracker at this point it's unlikely\n // that trying again will succeed\n\n if (!tracker) {\n return true;\n }\n\n var lastValue = tracker.getValue();\n var nextValue = getValueFromNode(node);\n\n if (nextValue !== lastValue) {\n tracker.setValue(nextValue);\n return true;\n }\n\n return false;\n}\n\n// TODO: direct imports like some-package/src/* are bad. Fix me.\nvar didWarnValueDefaultValue = false;\nvar didWarnCheckedDefaultChecked = false;\nvar didWarnControlledToUncontrolled = false;\nvar didWarnUncontrolledToControlled = false;\n\nfunction isControlled(props) {\n var usesChecked = props.type === 'checkbox' || props.type === 'radio';\n return usesChecked ? props.checked != null : props.value != null;\n}\n/**\n * Implements an host component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\n\n\nfunction getHostProps(element, props) {\n var node = element;\n var checked = props.checked;\n\n var hostProps = _assign({}, props, {\n defaultChecked: undefined,\n defaultValue: undefined,\n value: undefined,\n checked: checked != null ? checked : node._wrapperState.initialChecked\n });\n\n return hostProps;\n}\nfunction initWrapperState(element, props) {\n {\n ReactControlledValuePropTypes.checkPropTypes('input', props);\n\n if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\n warning$1(false, '%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n didWarnCheckedDefaultChecked = true;\n }\n\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n warning$1(false, '%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n didWarnValueDefaultValue = true;\n }\n }\n\n var node = element;\n var defaultValue = props.defaultValue == null ? '' : props.defaultValue;\n node._wrapperState = {\n initialChecked: props.checked != null ? props.checked : props.defaultChecked,\n initialValue: getToStringValue(props.value != null ? props.value : defaultValue),\n controlled: isControlled(props)\n };\n}\nfunction updateChecked(element, props) {\n var node = element;\n var checked = props.checked;\n\n if (checked != null) {\n setValueForProperty(node, 'checked', checked, false);\n }\n}\nfunction updateWrapper(element, props) {\n var node = element;\n\n {\n var controlled = isControlled(props);\n\n if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {\n warning$1(false, 'A component is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n didWarnUncontrolledToControlled = true;\n }\n\n if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {\n warning$1(false, 'A component is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n didWarnControlledToUncontrolled = true;\n }\n }\n\n updateChecked(element, props);\n var value = getToStringValue(props.value);\n var type = props.type;\n\n if (value != null) {\n if (type === 'number') {\n if (value === 0 && node.value === '' || // We explicitly want to coerce to number here if possible.\n // eslint-disable-next-line\n node.value != value) {\n node.value = toString(value);\n }\n } else if (node.value !== toString(value)) {\n node.value = toString(value);\n }\n } else if (type === 'submit' || type === 'reset') {\n // Submit/reset inputs need the attribute removed completely to avoid\n // blank-text buttons.\n node.removeAttribute('value');\n return;\n }\n\n if (disableInputAttributeSyncing) {\n // When not syncing the value attribute, React only assigns a new value\n // whenever the defaultValue React prop has changed. When not present,\n // React does nothing\n if (props.hasOwnProperty('defaultValue')) {\n setDefaultValue(node, props.type, getToStringValue(props.defaultValue));\n }\n } else {\n // When syncing the value attribute, the value comes from a cascade of\n // properties:\n // 1. The value React property\n // 2. The defaultValue React property\n // 3. Otherwise there should be no change\n if (props.hasOwnProperty('value')) {\n setDefaultValue(node, props.type, value);\n } else if (props.hasOwnProperty('defaultValue')) {\n setDefaultValue(node, props.type, getToStringValue(props.defaultValue));\n }\n }\n\n if (disableInputAttributeSyncing) {\n // When not syncing the checked attribute, the attribute is directly\n // controllable from the defaultValue React property. It needs to be\n // updated as new props come in.\n if (props.defaultChecked == null) {\n node.removeAttribute('checked');\n } else {\n node.defaultChecked = !!props.defaultChecked;\n }\n } else {\n // When syncing the checked attribute, it only changes when it needs\n // to be removed, such as transitioning from a checkbox into a text input\n if (props.checked == null && props.defaultChecked != null) {\n node.defaultChecked = !!props.defaultChecked;\n }\n }\n}\nfunction postMountWrapper(element, props, isHydrating) {\n var node = element; // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n\n if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) {\n var type = props.type;\n var isButton = type === 'submit' || type === 'reset'; // Avoid setting value attribute on submit/reset inputs as it overrides the\n // default value provided by the browser. See: #12872\n\n if (isButton && (props.value === undefined || props.value === null)) {\n return;\n }\n\n var initialValue = toString(node._wrapperState.initialValue); // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n\n if (!isHydrating) {\n if (disableInputAttributeSyncing) {\n var value = getToStringValue(props.value); // When not syncing the value attribute, the value property points\n // directly to the React prop. Only assign it if it exists.\n\n if (value != null) {\n // Always assign on buttons so that it is possible to assign an\n // empty string to clear button text.\n //\n // Otherwise, do not re-assign the value property if is empty. This\n // potentially avoids a DOM write and prevents Firefox (~60.0.1) from\n // prematurely marking required inputs as invalid. Equality is compared\n // to the current value in case the browser provided value is not an\n // empty string.\n if (isButton || value !== node.value) {\n node.value = toString(value);\n }\n }\n } else {\n // When syncing the value attribute, the value property should use\n // the wrapperState._initialValue property. This uses:\n //\n // 1. The value React property when present\n // 2. The defaultValue React property when present\n // 3. An empty string\n if (initialValue !== node.value) {\n node.value = initialValue;\n }\n }\n }\n\n if (disableInputAttributeSyncing) {\n // When not syncing the value attribute, assign the value attribute\n // directly from the defaultValue React property (when present)\n var defaultValue = getToStringValue(props.defaultValue);\n\n if (defaultValue != null) {\n node.defaultValue = toString(defaultValue);\n }\n } else {\n // Otherwise, the value attribute is synchronized to the property,\n // so we assign defaultValue to the same thing as the value property\n // assignment step above.\n node.defaultValue = initialValue;\n }\n } // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug\n // this is needed to work around a chrome bug where setting defaultChecked\n // will sometimes influence the value of checked (even after detachment).\n // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416\n // We need to temporarily unset name to avoid disrupting radio button groups.\n\n\n var name = node.name;\n\n if (name !== '') {\n node.name = '';\n }\n\n if (disableInputAttributeSyncing) {\n // When not syncing the checked attribute, the checked property\n // never gets assigned. It must be manually set. We don't want\n // to do this when hydrating so that existing user input isn't\n // modified\n if (!isHydrating) {\n updateChecked(element, props);\n } // Only assign the checked attribute if it is defined. This saves\n // a DOM write when controlling the checked attribute isn't needed\n // (text inputs, submit/reset)\n\n\n if (props.hasOwnProperty('defaultChecked')) {\n node.defaultChecked = !node.defaultChecked;\n node.defaultChecked = !!props.defaultChecked;\n }\n } else {\n // When syncing the checked attribute, both the checked property and\n // attribute are assigned at the same time using defaultChecked. This uses:\n //\n // 1. The checked React property when present\n // 2. The defaultChecked React property when present\n // 3. Otherwise, false\n node.defaultChecked = !node.defaultChecked;\n node.defaultChecked = !!node._wrapperState.initialChecked;\n }\n\n if (name !== '') {\n node.name = name;\n }\n}\nfunction restoreControlledState$1(element, props) {\n var node = element;\n updateWrapper(node, props);\n updateNamedCousins(node, props);\n}\n\nfunction updateNamedCousins(rootNode, props) {\n var name = props.name;\n\n if (props.type === 'radio' && name != null) {\n var queryRoot = rootNode;\n\n while (queryRoot.parentNode) {\n queryRoot = queryRoot.parentNode;\n } // If `rootNode.form` was non-null, then we could try `form.elements`,\n // but that sometimes behaves strangely in IE8. We could also try using\n // `form.getElementsByName`, but that will only return direct children\n // and won't include inputs that use the HTML5 `form=` attribute. Since\n // the input might not even be in a form. It might not even be in the\n // document. Let's just use the local `querySelectorAll` to ensure we don't\n // miss anything.\n\n\n var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n for (var i = 0; i < group.length; i++) {\n var otherNode = group[i];\n\n if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n continue;\n } // This will throw if radio buttons rendered by different copies of React\n // and the same name are rendered into the same form (same as #1939).\n // That's probably okay; we don't support it just as we don't support\n // mixing React radio buttons with non-React ones.\n\n\n var otherProps = getFiberCurrentPropsFromNode$1(otherNode);\n\n if (!otherProps) {\n {\n throw Error(\"ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.\");\n }\n } // We need update the tracked value on the named cousin since the value\n // was changed but the input saw no event or value set\n\n\n updateValueIfChanged(otherNode); // If this is a controlled radio button group, forcing the input that\n // was previously checked to update will cause it to be come re-checked\n // as appropriate.\n\n updateWrapper(otherNode, otherProps);\n }\n }\n} // In Chrome, assigning defaultValue to certain input types triggers input validation.\n// For number inputs, the display value loses trailing decimal points. For email inputs,\n// Chrome raises \"The specified value is not a valid email address\".\n//\n// Here we check to see if the defaultValue has actually changed, avoiding these problems\n// when the user is inputting text\n//\n// https://github.com/facebook/react/issues/7253\n\n\nfunction setDefaultValue(node, type, value) {\n if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js\n type !== 'number' || node.ownerDocument.activeElement !== node) {\n if (value == null) {\n node.defaultValue = toString(node._wrapperState.initialValue);\n } else if (node.defaultValue !== toString(value)) {\n node.defaultValue = toString(value);\n }\n }\n}\n\nvar didWarnSelectedSetOnOption = false;\nvar didWarnInvalidChild = false;\n\nfunction flattenChildren(children) {\n var content = ''; // Flatten children. We'll warn if they are invalid\n // during validateProps() which runs for hydration too.\n // Note that this would throw on non-element objects.\n // Elements are stringified (which is normally irrelevant\n // but matters for ).\n\n React.Children.forEach(children, function (child) {\n if (child == null) {\n return;\n }\n\n content += child; // Note: we don't warn about invalid children here.\n // Instead, this is done separately below so that\n // it happens during the hydration codepath too.\n });\n return content;\n}\n/**\n * Implements an