/* vue-onsenui v3.0.0 - 2022-07-25 */

(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('onsenui'), require('onsenui/esm/elements/ons-toolbar.js'), require('vue'), require('onsenui/esm/elements/ons-bottom-toolbar.js'), require('onsenui/esm/elements/ons-toolbar-button.js'), require('onsenui/esm/elements/ons-alert-dialog-button.js'), require('onsenui/esm/elements/ons-button.js'), require('onsenui/esm/elements/ons-icon.js'), require('onsenui/esm/elements/ons-card.js'), require('onsenui/esm/elements/ons-list.js'), require('onsenui/esm/elements/ons-list-item.js'), require('onsenui/esm/elements/ons-list-title.js'), require('onsenui/esm/elements/ons-list-header.js'), require('onsenui/esm/elements/ons-ripple.js'), require('onsenui/esm/elements/ons-row.js'), require('onsenui/esm/elements/ons-col.js'), require('onsenui/esm/elements/ons-progress-bar.js'), require('onsenui/esm/elements/ons-progress-circular.js'), require('onsenui/esm/elements/ons-carousel-item.js'), require('onsenui/esm/elements/ons-splitter-mask.js'), require('onsenui/esm/elements/ons-splitter-content.js'), require('onsenui/esm/elements/ons-splitter.js'), require('onsenui/esm/elements/ons-switch.js'), require('onsenui/esm/elements/ons-checkbox.js'), require('onsenui/esm/elements/ons-input.js'), require('onsenui/esm/elements/ons-search-input.js'), require('onsenui/esm/elements/ons-range.js'), require('onsenui/esm/elements/ons-radio.js'), require('onsenui/esm/elements/ons-fab.js'), require('onsenui/esm/elements/ons-speed-dial-item.js'), require('onsenui/esm/elements/ons-dialog.js'), require('onsenui/esm/elements/ons-action-sheet.js'), require('onsenui/esm/elements/ons-action-sheet-button.js'), require('onsenui/esm/elements/ons-modal.js'), require('onsenui/esm/elements/ons-toast.js'), require('onsenui/esm/elements/ons-popover.js'), require('onsenui/esm/elements/ons-alert-dialog.js'), require('onsenui/esm/elements/ons-speed-dial.js'), require('onsenui/esm/elements/ons-carousel.js'), require('onsenui/esm/elements/ons-tab.js'), require('onsenui/esm/elements/ons-tabbar.js'), require('onsenui/esm/elements/ons-back-button.js'), require('onsenui/esm/elements/ons-navigator.js'), require('onsenui/esm/elements/ons-splitter-side.js'), require('onsenui/esm/elements/ons-lazy-repeat.js'), require('onsenui/esm/elements/ons-select.js'), require('onsenui/esm/elements/ons-segment.js'), require('onsenui/esm/elements/ons-pull-hook.js'), require('onsenui/esm/elements/ons-page.js')) :
  typeof define === 'function' && define.amd ? define(['onsenui', 'onsenui/esm/elements/ons-toolbar.js', 'vue', 'onsenui/esm/elements/ons-bottom-toolbar.js', 'onsenui/esm/elements/ons-toolbar-button.js', 'onsenui/esm/elements/ons-alert-dialog-button.js', 'onsenui/esm/elements/ons-button.js', 'onsenui/esm/elements/ons-icon.js', 'onsenui/esm/elements/ons-card.js', 'onsenui/esm/elements/ons-list.js', 'onsenui/esm/elements/ons-list-item.js', 'onsenui/esm/elements/ons-list-title.js', 'onsenui/esm/elements/ons-list-header.js', 'onsenui/esm/elements/ons-ripple.js', 'onsenui/esm/elements/ons-row.js', 'onsenui/esm/elements/ons-col.js', 'onsenui/esm/elements/ons-progress-bar.js', 'onsenui/esm/elements/ons-progress-circular.js', 'onsenui/esm/elements/ons-carousel-item.js', 'onsenui/esm/elements/ons-splitter-mask.js', 'onsenui/esm/elements/ons-splitter-content.js', 'onsenui/esm/elements/ons-splitter.js', 'onsenui/esm/elements/ons-switch.js', 'onsenui/esm/elements/ons-checkbox.js', 'onsenui/esm/elements/ons-input.js', 'onsenui/esm/elements/ons-search-input.js', 'onsenui/esm/elements/ons-range.js', 'onsenui/esm/elements/ons-radio.js', 'onsenui/esm/elements/ons-fab.js', 'onsenui/esm/elements/ons-speed-dial-item.js', 'onsenui/esm/elements/ons-dialog.js', 'onsenui/esm/elements/ons-action-sheet.js', 'onsenui/esm/elements/ons-action-sheet-button.js', 'onsenui/esm/elements/ons-modal.js', 'onsenui/esm/elements/ons-toast.js', 'onsenui/esm/elements/ons-popover.js', 'onsenui/esm/elements/ons-alert-dialog.js', 'onsenui/esm/elements/ons-speed-dial.js', 'onsenui/esm/elements/ons-carousel.js', 'onsenui/esm/elements/ons-tab.js', 'onsenui/esm/elements/ons-tabbar.js', 'onsenui/esm/elements/ons-back-button.js', 'onsenui/esm/elements/ons-navigator.js', 'onsenui/esm/elements/ons-splitter-side.js', 'onsenui/esm/elements/ons-lazy-repeat.js', 'onsenui/esm/elements/ons-select.js', 'onsenui/esm/elements/ons-segment.js', 'onsenui/esm/elements/ons-pull-hook.js', 'onsenui/esm/elements/ons-page.js'], factory) :
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.VueOnsen = factory(global.ons, global.ons.elements.Toolbar, global.Vue, global.ons.elements.BottomToolbar, global.ons.elements.ToolbarButton, global.ons.elements.AlertDialogButton, global.ons.elements.Button, global.ons.elements.Icon, global.ons.elements.Card, global.ons.elements.List, global.ons.elements.ListItem, global.ons.elements.ListTitle, global.ons.elements.ListHeader, global.ons.elements.Ripple, global.ons.elements.Row, global.ons.elements.Col, global.ons.elements.ProgressBar, global.ons.elements.ProgressCircular, global.ons.elements.CarouselItem, global.ons.elements.SplitterMask, global.ons.elements.SplitterContent, global.ons.elements.Splitter, global.ons.elements.Switch, global.ons.elements.Checkbox, global.ons.elements.Input, global.ons.elements.SearchInput, global.ons.elements.Range, global.ons.elements.Radio, global.ons.elements.Fab, global.ons.elements.SpeedDialItem, global.ons.elements.Dialog, global.ons.elements.ActionSheet, global.ons.elements.ActionSheetButton, global.ons.elements.Modal, global.ons.elements.Toast, global.ons.elements.Popover, global.ons.elements.AlertDialog, global.ons.elements.SpeedDial, global.ons.elements.Carousel, global.ons.elements.Tab, global.ons.elements.Tabbar, global.ons.elements.BackButton, global.ons.elements.Navigator));
})(this, (function (ons, onsToolbar_js, vue, onsBottomToolbar_js, onsToolbarButton_js, onsAlertDialogButton_js, onsButton_js, onsIcon_js, onsCard_js, onsList_js, onsListItem_js, onsListTitle_js, onsListHeader_js, onsRipple_js, onsRow_js, onsCol_js, onsProgressBar_js, onsProgressCircular_js, onsCarouselItem_js, onsSplitterMask_js, onsSplitterContent_js, onsSplitter_js, onsSwitch_js, onsCheckbox_js, onsInput_js, onsSearchInput_js, onsRange_js, onsRadio_js, onsFab_js, onsSpeedDialItem_js, onsDialog_js, onsActionSheet_js, onsActionSheetButton_js, onsModal_js, onsToast_js, onsPopover_js, onsAlertDialog_js, onsSpeedDial_js, onsCarousel_js, onsTab_js, TabbarElement, onsBackButton_js, NavigatorElement) { 'use strict';

  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }

  var ons__default = /*#__PURE__*/_interopDefaultLegacy(ons);
  var TabbarElement__default = /*#__PURE__*/_interopDefaultLegacy(TabbarElement);
  var NavigatorElement__default = /*#__PURE__*/_interopDefaultLegacy(NavigatorElement);

  function setup (ons) {
    return Object.keys(ons).filter(function (k) {
      return [/^is/, /^disable/, /^enable/, /^mock/, /^open/, /^set/, /animit/, /elements/, /GestureDetector/, /notification/, /orientation/, /platform/, /ready/].some(function (t) {
        return k.match(t);
      });
    }).reduce(function (r, k) {
      r[k] = ons[k];
      return r;
    }, {
      _ons: ons
    });
  }

  function ownKeys(object, enumerableOnly) {
    var keys = Object.keys(object);

    if (Object.getOwnPropertySymbols) {
      var symbols = Object.getOwnPropertySymbols(object);
      enumerableOnly && (symbols = symbols.filter(function (sym) {
        return Object.getOwnPropertyDescriptor(object, sym).enumerable;
      })), keys.push.apply(keys, symbols);
    }

    return keys;
  }

  function _objectSpread2(target) {
    for (var i = 1; i < arguments.length; i++) {
      var source = null != arguments[i] ? arguments[i] : {};
      i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
        _defineProperty(target, key, source[key]);
      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
      });
    }

    return target;
  }

  function _typeof(obj) {
    "@babel/helpers - typeof";

    return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
      return typeof obj;
    } : function (obj) {
      return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
    }, _typeof(obj);
  }

  function _defineProperty(obj, key, value) {
    if (key in obj) {
      Object.defineProperty(obj, key, {
        value: value,
        enumerable: true,
        configurable: true,
        writable: true
      });
    } else {
      obj[key] = value;
    }

    return obj;
  }

  function _objectWithoutPropertiesLoose(source, excluded) {
    if (source == null) return {};
    var target = {};
    var sourceKeys = Object.keys(source);
    var key, i;

    for (i = 0; i < sourceKeys.length; i++) {
      key = sourceKeys[i];
      if (excluded.indexOf(key) >= 0) continue;
      target[key] = source[key];
    }

    return target;
  }

  function _objectWithoutProperties(source, excluded) {
    if (source == null) return {};

    var target = _objectWithoutPropertiesLoose(source, excluded);

    var key, i;

    if (Object.getOwnPropertySymbols) {
      var sourceSymbolKeys = Object.getOwnPropertySymbols(source);

      for (i = 0; i < sourceSymbolKeys.length; i++) {
        key = sourceSymbolKeys[i];
        if (excluded.indexOf(key) >= 0) continue;
        if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
        target[key] = source[key];
      }
    }

    return target;
  }

  function _slicedToArray(arr, i) {
    return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
  }

  function _toConsumableArray(arr) {
    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
  }

  function _arrayWithoutHoles(arr) {
    if (Array.isArray(arr)) return _arrayLikeToArray(arr);
  }

  function _arrayWithHoles(arr) {
    if (Array.isArray(arr)) return arr;
  }

  function _iterableToArray(iter) {
    if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
  }

  function _iterableToArrayLimit(arr, i) {
    var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];

    if (_i == null) return;
    var _arr = [];
    var _n = true;
    var _d = false;

    var _s, _e;

    try {
      for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
        _arr.push(_s.value);

        if (i && _arr.length === i) break;
      }
    } catch (err) {
      _d = true;
      _e = err;
    } finally {
      try {
        if (!_n && _i["return"] != null) _i["return"]();
      } finally {
        if (_d) throw _e;
      }
    }

    return _arr;
  }

  function _unsupportedIterableToArray(o, minLen) {
    if (!o) return;
    if (typeof o === "string") return _arrayLikeToArray(o, minLen);
    var n = Object.prototype.toString.call(o).slice(8, -1);
    if (n === "Object" && o.constructor) n = o.constructor.name;
    if (n === "Map" || n === "Set") return Array.from(o);
    if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
  }

  function _arrayLikeToArray(arr, len) {
    if (len == null || len > arr.length) len = arr.length;

    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];

    return arr2;
  }

  function _nonIterableSpread() {
    throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  }

  function _nonIterableRest() {
    throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  }

  var capitalize = function capitalize(string) {
    return string.charAt(0).toUpperCase() + string.slice(1);
  };
  var camelize = function camelize(string) {
    return string.toLowerCase().replace(/-([a-z])/g, function (m, l) {
      return l.toUpperCase();
    });
  };
  var eventToHandler = function eventToHandler(name) {
    return '_on' + capitalize(name);
  };
  var handlerToProp = function handlerToProp(name) {
    return name.slice(2).charAt(0).toLowerCase() + name.slice(2).slice(1);
  };

  /* Private */

  var _setupDBB = function _setupDBB(component) {
    var dbb = 'onDeviceBackButton'; // Call original handler or parent handler by default

    var handler = component[dbb] || component.$el[dbb] && component.$el[dbb]._callback || function (e) {
      return e.callParentHandler();
    };

    component.$el[dbb] = function (event) {
      var runDefault = true;
      component.$emit(handlerToProp(dbb), _objectSpread2(_objectSpread2({}, event), {}, {
        preventDefault: function preventDefault() {
          return runDefault = false;
        }
      }));
      runDefault && handler(event);
    };

    component._isDBBSetup = true;
  };
  /* Public */
  // Device Back Button Handler


  var deriveDBB = {
    emits: ['deviceBackButton'],
    mounted: function mounted() {
      _setupDBB(this);
    },
    // Core destroys deviceBackButton handlers on disconnectedCallback.
    // This fixes the behavior for <keep-alive> component.
    activated: function activated() {
      this._isDBBSetup === false && _setupDBB(this);
    },
    deactivated: function deactivated() {
      this._isDBBSetup === true && (this._isDBBSetup = false);
    },
    destroyed: function destroyed() {
      this.$el.onDeviceBackButton && this.$el.onDeviceBackButton.destroy();
    }
  };

  var deriveEvents = function deriveEvents(name) {
    var nativeEvents = ons__default["default"].elements[capitalize(camelize(name.slice(6)))].events || [];
    return {
      emits: nativeEvents,
      mounted: function mounted() {
        var _this = this;

        this._handlers = {};
        nativeEvents.forEach(function (key) {
          _this._handlers[eventToHandler(key)] = function (event) {
            // Filter events from different components with the same name
            if (event.target === _this.$el || !/^ons-/i.test(event.target.tagName)) {
              _this.$emit(key, event);
            }
          };

          _this.$el.addEventListener(key, _this._handlers[eventToHandler(key)]);
        });
      },
      beforeDestroy: function beforeDestroy() {
        var _this2 = this;

        Object.keys(this._handlers).forEach(function (key) {
          _this2.$el.removeEventListener(key, _this2._handlers[key]);
        });
        this._handlers = null;
      }
    };
  };

  var unrecognizedListeners = function unrecognizedListeners(nativeElement) {
    return {
      computed: {
        unrecognizedListeners: function unrecognizedListeners() {
          var isListener = function isListener(_ref) {
            var _ref2 = _slicedToArray(_ref, 1),
                attribute = _ref2[0];

            return /^on[^a-z]/.test(attribute);
          };

          var isUnknown = function isUnknown(_ref3) {
            var _ref4 = _slicedToArray(_ref3, 1),
                attribute = _ref4[0];

            return !nativeElement.events.includes(camelize(attribute.slice(2)));
          };

          return Object.fromEntries(Object.entries(this.$attrs).filter(function (attribute) {
            return isListener(attribute) && isUnknown(attribute);
          }));
        }
      }
    };
  };

  /* Private */
  var _toggleVisibility = function _toggleVisibility() {
    if (typeof this.visible === 'boolean' && this.visible !== this.$el.visible) {
      this.$el[this.visible ? 'show' : 'hide'].call(this.$el, this.normalizedOptions || this.options);
    }
  };

  var _teleport = function _teleport() {
    if (!this._isDestroyed && (!this.$el.parentNode || this.$el.parentNode !== document.body)) {
      document.body.appendChild(this.$el);
    }
  };

  var _unmount = function _unmount() {
    var _this = this;

    if (this.$el.visible === true) {
      this.$el.hide().then(function () {
        return _this.$el.remove();
      });
    } else {
      this.$el.remove();
    }
  };
  /* Public */
  // Components that can be shown or hidden


  var hidable = {
    props: {
      visible: {
        type: Boolean,
        "default": undefined // Avoid casting to false

      }
    },
    watch: {
      visible: function visible() {
        _toggleVisibility.call(this);
      }
    },
    mounted: function mounted() {
      var _this2 = this;

      this.$nextTick(function () {
        return _toggleVisibility.call(_this2);
      });
    },
    activated: function activated() {
      var _this3 = this;

      this.$nextTick(function () {
        return _toggleVisibility.call(_this3);
      });
    }
  }; // Components with 'options' property

  var hasOptions = {
    props: {
      options: {
        type: Object,
        "default": function _default() {
          return {};
        }
      }
    }
  }; // Provides itself to its descendants

  var selfProvider = {
    provide: function provide() {
      return _defineProperty({}, this.$options.name.slice(6), this);
    }
  }; // Moves the element to a global position

  var portal = {
    mounted: function mounted() {
      _teleport.call(this);
    },
    updated: function updated() {
      _teleport.call(this);
    },
    activated: function activated() {
      _teleport.call(this);
    },
    deactivated: function deactivated() {
      _unmount.call(this);
    },
    beforeDestroy: function beforeDestroy() {
      _unmount.call(this);
    }
  };
  var modifier = {
    props: {
      modifier: {
        type: [String, Array, Object]
      }
    },
    computed: {
      normalizedModifier: function normalizedModifier() {
        var modifier = this.modifier;

        if (typeof modifier === 'string') {
          return modifier;
        }

        if (Array.isArray(modifier)) {
          return modifier.join(' ');
        }

        if (_typeof(modifier) === 'object') {
          return Object.keys(modifier).reduce(function (acc, key) {
            return acc + (modifier[key] ? " ".concat(key) : '');
          }, '').trim();
        }

        return null;
      }
    }
  };

  // Generic input
  var modelInput = {
    emits: ['update:modelValue'],
    props: {
      modelValue: [Number, String],
      modelEvent: {
        type: String,
        "default": 'input'
      }
    },
    methods: {
      _updateValue: function _updateValue() {
        if (this.modelValue !== undefined && this.$el.value !== this.modelValue) {
          this.$el.value = this.modelValue;
        }
      },
      _onModelEvent: function _onModelEvent(event) {
        this.$emit('update:modelValue', event.target.value);
      }
    },
    watch: {
      modelValue: function modelValue() {
        this._updateValue();
      }
    },
    mounted: function mounted() {
      this._updateValue();

      this.$el.addEventListener(this.modelEvent, this._onModelEvent);
    },
    beforeDestroy: function beforeDestroy() {
      this.$el.removeEventListener(this.modelEvent, this._onModelEvent);
    }
  }; // Input with number value

  var modelInputNumber = {
    mixins: [modelInput],
    methods: {
      _onModelEvent: function _onModelEvent(event) {
        this.$emit('update:modelValue', event.target.valueAsNumber);
      }
    }
  }; // Checkable inputs

  var modelCheckbox = {
    mixins: [modelInput],
    props: {
      modelValue: [Array, Boolean],
      modelEvent: {
        type: String,
        "default": 'change'
      }
    },
    methods: {
      _updateValue: function _updateValue() {
        if (this.modelValue instanceof Array) {
          this.$el.checked = this.modelValue.indexOf(this.$el.value) >= 0;
        } else {
          this.$el.checked = this.modelValue;
        }
      },
      _onModelEvent: function _onModelEvent(event) {
        var _event$target = event.target,
            value = _event$target.value,
            checked = _event$target.checked;
        var newValue;

        if (this.modelValue instanceof Array) {
          // Is Array
          var index = this.modelValue.indexOf(value);
          var included = index >= 0;

          if (included && !checked) {
            newValue = [].concat(_toConsumableArray(this.modelValue.slice(0, index)), _toConsumableArray(this.modelValue.slice(index + 1, this.modelValue.length)));
          }

          if (!included && checked) {
            newValue = [].concat(_toConsumableArray(this.modelValue), [value]);
          }
        } else {
          // Is Boolean
          newValue = checked;
        } // Emit if value changed


        newValue !== undefined && this.$emit('update:modelValue', newValue);
      }
    }
  }; // Radio input

  var modelRadio = {
    mixins: [modelInput],
    props: {
      modelEvent: {
        type: String,
        "default": 'change'
      }
    },
    methods: {
      _updateValue: function _updateValue() {
        this.$el.checked = this.modelValue === this.$el.value;
      },
      _onModelEvent: function _onModelEvent(event) {
        var _event$target2 = event.target,
            value = _event$target2.value,
            checked = _event$target2.checked;
        checked && this.$emit('update:modelValue', value);
      }
    }
  };

  var _excluded = ["visible"];
  // Common event for Dialogs
  var dialogCancel = {
    emits: ['update:visible'],
    mounted: function mounted() {
      var _this = this;

      this._dialogCancelHandler = function () {
        return _this.$emit('update:visible', false);
      };

      this.$el.addEventListener('dialogcancel', this._dialogCancelHandler);
    },
    beforeDestroy: function beforeDestroy() {
      this.$el.removeEventListener('dialogcancel', this._dialogCancelHandler);
    }
  };
  var dialogOrderedProps = {
    inheritAttrs: false,
    computed: {
      orderedProps: function orderedProps() {
        // visible prop should be applied last since it depends on animation and
        // maskColor props being set first
        var _this$$attrs = this.$attrs,
            visible = _this$$attrs.visible,
            rest = _objectWithoutProperties(_this$$attrs, _excluded);

        return _objectSpread2(_objectSpread2({}, rest), {}, {
          visible: visible
        });
      }
    }
  };
  var dialog = {
    mixins: [dialogCancel, dialogOrderedProps]
  };

  const name$G = 'v-ons-toolbar';

    var script$K = {
      name: name$G,
      mixins: [deriveEvents(name$G), modifier],
      props: {
        inline: Boolean
      }
    };

  const _hoisted_1$y = ["modifier", "inline"];

  function render$K(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-toolbar", {
      modifier: _ctx.normalizedModifier,
      inline: $props.inline || null
    }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$y))
  }

  script$K.render = render$K;

  const name$F = 'v-ons-bottom-toolbar';

    var script$J = {
      name: name$F,
      mixins: [deriveEvents(name$F), modifier]
    };

  const _hoisted_1$x = ["modifier"];

  function render$J(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-bottom-toolbar", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$x))
  }

  script$J.render = render$J;

  const name$E = 'v-ons-toolbar-button';

    var script$I = {
      name: name$E,
      mixins: [deriveEvents(name$E), modifier]
    };

  const _hoisted_1$w = ["modifier"];

  function render$I(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-toolbar-button", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$w))
  }

  script$I.render = render$I;

  const name$D = 'v-ons-alert-dialog-button';

    var script$H = {
      name: name$D,
      mixins: [deriveEvents(name$D), modifier]
    };

  const _hoisted_1$v = ["modifier"];

  function render$H(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-alert-dialog-button", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$v))
  }

  script$H.render = render$H;

  const name$C = 'v-ons-button';

    var script$G = {
      name: name$C,
      mixins: [deriveEvents(name$C), modifier]
    };

  const _hoisted_1$u = ["modifier"];

  function render$G(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-button", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$u))
  }

  script$G.render = render$G;

  const name$B = 'v-ons-icon';

    var script$F = {
      name: name$B,
      mixins: [deriveEvents(name$B), modifier]
    };

  const _hoisted_1$t = ["modifier"];

  function render$F(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-icon", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$t))
  }

  script$F.render = render$F;

  const name$A = 'v-ons-card';

    var script$E = {
      name: name$A,
      mixins: [deriveEvents(name$A), modifier]
    };

  const _hoisted_1$s = ["modifier"];

  function render$E(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-card", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$s))
  }

  script$E.render = render$E;

  const name$z = 'v-ons-list';

    var script$D = {
      name: name$z,
      mixins: [deriveEvents(name$z), modifier]
    };

  const _hoisted_1$r = ["modifier"];

  function render$D(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-list", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$r))
  }

  script$D.render = render$D;

  const name$y = 'v-ons-list-item';

    var script$C = {
      name: name$y,
      mixins: [deriveEvents(name$y), modifier],
      emits: ['update:expanded'],
      methods: {
        onExpand() {
          this.$emit('update:expanded', this.$el.expanded);
        }
      }
    };

  const _hoisted_1$q = ["modifier"];

  function render$C(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-list-item", {
      modifier: _ctx.normalizedModifier,
      onExpand: _cache[0] || (_cache[0] = (...args) => ($options.onExpand && $options.onExpand(...args)))
    }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 40, _hoisted_1$q))
  }

  script$C.render = render$C;

  const name$x = 'v-ons-list-title';

    var script$B = {
      name: name$x,
      mixins: [deriveEvents(name$x), modifier]
    };

  const _hoisted_1$p = ["modifier"];

  function render$B(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-list-title", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$p))
  }

  script$B.render = render$B;

  const name$w = 'v-ons-list-header';

    var script$A = {
      name: name$w,
      mixins: [deriveEvents(name$w), modifier]
    };

  const _hoisted_1$o = ["modifier"];

  function render$A(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-list-header", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$o))
  }

  script$A.render = render$A;

  const name$v = 'v-ons-ripple';

    var script$z = {
      name: name$v,
      mixins: [deriveEvents(name$v)]
    };

  function render$z(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-ripple", null, [
      vue.renderSlot(_ctx.$slots, "default")
    ]))
  }

  script$z.render = render$z;

  const name$u = 'v-ons-row';

    var script$y = {
      name: name$u,
      mixins: [deriveEvents(name$u)]
    };

  function render$y(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-row", null, [
      vue.renderSlot(_ctx.$slots, "default")
    ]))
  }

  script$y.render = render$y;

  const name$t = 'v-ons-col';

    var script$x = {
      name: name$t,
      mixins: [deriveEvents(name$t)]
    };

  function render$x(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-col", null, [
      vue.renderSlot(_ctx.$slots, "default")
    ]))
  }

  script$x.render = render$x;

  const name$s = 'v-ons-progress-bar';

    var script$w = {
      name: name$s,
      mixins: [deriveEvents(name$s), modifier]
    };

  const _hoisted_1$n = ["modifier"];

  function render$w(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-progress-bar", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$n))
  }

  script$w.render = render$w;

  const name$r = 'v-ons-progress-circular';

    var script$v = {
      name: name$r,
      mixins: [deriveEvents(name$r), modifier]
    };

  const _hoisted_1$m = ["modifier"];

  function render$v(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-progress-circular", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$m))
  }

  script$v.render = render$v;

  const name$q = 'v-ons-carousel-item';

    var script$u = {
      name: name$q,
      mixins: [deriveEvents(name$q)]
    };

  function render$u(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-carousel-item", null, [
      vue.renderSlot(_ctx.$slots, "default")
    ]))
  }

  script$u.render = render$u;

  const name$p = 'v-ons-splitter-mask';

    var script$t = {
      name: name$p,
      mixins: [deriveEvents(name$p)]
    };

  function render$t(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-splitter-mask", null, [
      vue.renderSlot(_ctx.$slots, "default")
    ]))
  }

  script$t.render = render$t;

  const name$o = 'v-ons-splitter-content';

    var script$s = {
      name: name$o,
      mixins: [deriveEvents(name$o)]
    };

  function render$s(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-splitter-content", null, [
      vue.renderSlot(_ctx.$slots, "default")
    ]))
  }

  script$s.render = render$s;

  const name$n = 'v-ons-splitter';

    var script$r = {
      name: name$n,
      mixins: [deriveEvents(name$n), selfProvider, deriveDBB]
    };

  function render$r(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-splitter", null, [
      vue.renderSlot(_ctx.$slots, "default")
    ]))
  }

  script$r.render = render$r;

  const name$m = 'v-ons-switch';

    var script$q = {
      name: name$m,
      mixins: [deriveEvents(name$m), modelCheckbox, modifier]
    };

  const _hoisted_1$l = ["modifier"];

  function render$q(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-switch", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$l))
  }

  script$q.render = render$q;

  const name$l = 'v-ons-checkbox';

    var script$p = {
      name: name$l,
      mixins: [deriveEvents(name$l), modelCheckbox, modifier]
    };

  const _hoisted_1$k = ["modifier"];

  function render$p(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-checkbox", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$k))
  }

  script$p.render = render$p;

  const name$k = 'v-ons-input';

    var script$o = {
      name: name$k,
      mixins: [deriveEvents(name$k), modelInput, modifier]
    };

  const _hoisted_1$j = ["modifier"];

  function render$o(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-input", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$j))
  }

  script$o.render = render$o;

  const name$j = 'v-ons-search-input';

    var script$n = {
      name: name$j,
      mixins: [deriveEvents(name$j), modelInput, modifier]
    };

  const _hoisted_1$i = ["modifier"];

  function render$n(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-search-input", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$i))
  }

  script$n.render = render$n;

  const name$i = 'v-ons-range';

    var script$m = {
      name: name$i,
      mixins: [deriveEvents(name$i), modelInputNumber, modifier]
    };

  const _hoisted_1$h = ["modifier"];

  function render$m(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-range", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$h))
  }

  script$m.render = render$m;

  const name$h = 'v-ons-radio';

    var script$l = {
      name: name$h,
      mixins: [deriveEvents(name$h), modelRadio, modifier]
    };

  const _hoisted_1$g = ["modifier"];

  function render$l(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-radio", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$g))
  }

  script$l.render = render$l;

  const name$g = 'v-ons-fab';

    var script$k = {
      name: name$g,
      mixins: [deriveEvents(name$g), hidable, modifier]
    };

  const _hoisted_1$f = ["modifier"];

  function render$k(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-fab", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$f))
  }

  script$k.render = render$k;

  const name$f = 'v-ons-speed-dial-item';

    var script$j = {
      name: name$f,
      mixins: [deriveEvents(name$f), modifier]
    };

  const _hoisted_1$e = ["modifier"];

  function render$j(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-speed-dial-item", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$e))
  }

  script$j.render = render$j;

  const name$e = 'v-ons-dialog';

    var script$i = {
      name: name$e,
      mixins: [deriveEvents(name$e), hasOptions, dialog, deriveDBB, portal, modifier]
    };

  const _hoisted_1$d = ["modifier"];

  function render$i(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-dialog", vue.mergeProps({ modifier: _ctx.normalizedModifier }, _ctx.orderedProps), [
      vue.renderSlot(_ctx.$slots, "default")
    ], 16, _hoisted_1$d))
  }

  script$i.render = render$i;

  const name$d = 'v-ons-action-sheet';

    var script$h = {
      name: name$d,
      mixins: [deriveEvents(name$d), hasOptions, dialog, deriveDBB, portal, modifier]
    };

  const _hoisted_1$c = ["modifier"];

  function render$h(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-action-sheet", vue.mergeProps({ modifier: _ctx.normalizedModifier }, _ctx.orderedProps), [
      vue.renderSlot(_ctx.$slots, "default")
    ], 16, _hoisted_1$c))
  }

  script$h.render = render$h;

  const name$c = 'v-ons-action-sheet-button';

    var script$g = {
      name: name$c,
      mixins: [deriveEvents(name$c), modifier]
    };

  const _hoisted_1$b = ["modifier"];

  function render$g(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-action-sheet-button", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$b))
  }

  script$g.render = render$g;

  const name$b = 'v-ons-modal';

    var script$f = {
      name: name$b,
      mixins: [deriveEvents(name$b), hidable, hasOptions, deriveDBB, portal, modifier]
    };

  const _hoisted_1$a = ["modifier"];

  function render$f(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-modal", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$a))
  }

  script$f.render = render$f;

  const name$a = 'v-ons-toast';

    var script$e = {
      name: name$a,
      mixins: [deriveEvents(name$a), hasOptions, deriveDBB, portal, modifier]
    };

  const _hoisted_1$9 = ["modifier"];

  function render$e(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-toast", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$9))
  }

  script$e.render = render$e;

  const name$9 = 'v-ons-popover';

    var script$d = {
      name: name$9,
      mixins: [hidable, hasOptions, dialog, deriveEvents(name$9), deriveDBB, portal],

      props: {
        target: {
          validator(value) {
            return value.__isVue || typeof value === 'string' || value instanceof Event || value instanceof HTMLElement;
          }
        }
      },

      computed: {
        normalizedTarget() {
          return this.target.$el || this.target;
        },
        normalizedOptions() {
          if (this.target) {
            return {
              target: this.normalizedTarget,
              ...this.options
            };
          }
          return this.options;
        }
      }
    };

  function render$d(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-popover", vue.normalizeProps(vue.guardReactiveProps(_ctx.orderedProps)), [
      vue.renderSlot(_ctx.$slots, "default")
    ], 16))
  }

  script$d.render = render$d;

  const name$8 = 'v-ons-alert-dialog';

    var script$c = {
      name: name$8,
      mixins: [hasOptions, dialog, deriveEvents(name$8), deriveDBB, portal, modifier],

      props: {
        title: {
          type: String
        },
        footer: {
          type: Object,
          validator(value) {
            return Object.keys(value).every(key => value[key] instanceof Function);
          }
        }
      }
    };

  const _hoisted_1$8 = ["modifier"];
  const _hoisted_2$1 = { class: "alert-dialog-title" };
  const _hoisted_3$1 = { class: "alert-dialog-content" };
  const _hoisted_4$1 = { class: "alert-dialog-footer" };
  const _hoisted_5 = ["onClick"];

  function render$c(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-alert-dialog", vue.mergeProps({ modifier: _ctx.normalizedModifier }, _ctx.orderedProps), [
      vue.createElementVNode("div", _hoisted_2$1, [
        vue.renderSlot(_ctx.$slots, "title", {}, () => [
          vue.createTextVNode(vue.toDisplayString($props.title), 1)
        ])
      ]),
      vue.createElementVNode("div", _hoisted_3$1, [
        vue.renderSlot(_ctx.$slots, "default")
      ]),
      vue.createElementVNode("div", _hoisted_4$1, [
        vue.renderSlot(_ctx.$slots, "footer", {}, () => [
          (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($props.footer, (handler, key) => {
            return (vue.openBlock(), vue.createElementBlock("ons-alert-dialog-button", {
              key: key,
              onClick: handler
            }, vue.toDisplayString(key), 9, _hoisted_5))
          }), 128))
        ])
      ])
    ], 16, _hoisted_1$8))
  }

  script$c.render = render$c;

  const name$7 = 'v-ons-speed-dial';

    var script$b = {
      name: name$7,
      mixins: [deriveEvents(name$7), hidable],

      emits: ['update:open'],

      props: {
        open: {
          type: Boolean,
          default: undefined
        }
      },

      methods: {
        _shouldUpdate() {
          return this.open !== undefined && this.open !== this.$el.isOpen();
        },
        _updateToggle() {
          this._shouldUpdate() && this.$el[this.open ? 'showItems' : 'hideItems'].call(this.$el);
        }
      },

      watch: {
        open() {
          this._updateToggle();
        }
      },

      mounted() {
        this._updateOpenHandler = () => this._shouldUpdate() && this.$emit('update:open', this.$el.isOpen());

        ['open', 'close'].forEach(event => this.$el.addEventListener(event, this._updateOpenHandler));

        this._updateToggle();
      },

      beforeDestroy() {
        ['open', 'close'].forEach(event => this.$el.removeEventListener(event, this._updateOpenHandler));
      }
    };

  function render$b(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-speed-dial", null, [
      vue.renderSlot(_ctx.$slots, "default")
    ]))
  }

  script$b.render = render$b;

  const name$6 = 'v-ons-carousel';

    var script$a = {
      name: name$6,
      mixins: [deriveEvents(name$6)],
      emits: ['update:activeIndex'],
    };

  const _hoisted_1$7 = /*#__PURE__*/vue.createElementVNode("div", null, null, -1);

  function render$a(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-carousel", {
      onPostchange: _cache[0] || (_cache[0] = vue.withModifiers($event => (_ctx.$emit('update:activeIndex', $event.activeIndex)), ["self"]))
    }, [
      vue.createElementVNode("div", null, [
        vue.renderSlot(_ctx.$slots, "default")
      ]),
      _hoisted_1$7
    ], 32))
  }

  script$a.render = render$a;

  var script$9 = {
      name: 'v-ons-tab',
      inject: ['tabbar'],
      emits: ['click'],

      props: {
        page: { },
        props: { },
        active: {
          type: Boolean
        }
      },

      methods: {
        action(event) {
          let runDefault = true;
          this.$emit('click', { preventDefault: () => runDefault = false });

          if (runDefault) {
            this.tabbar.$el.setActiveTab(this.$el.index, { reject: false, ...this.tabbar.options });
          }
        }
      },

      watch: {
        active() {
          this.$el.setActive(this.active);
        }
      }
    };

  const _hoisted_1$6 = ["active"];

  function render$9(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-tab", {
      active: $props.active || null,
      onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => ($options.action && $options.action(...args)), ["prevent"]))
    }, null, 8, _hoisted_1$6))
  }

  script$9.render = render$9;

  const name$5 = 'v-ons-tabbar';

    var script$8 = {
      name: name$5,
      mixins: [deriveEvents(name$5), hidable, selfProvider, modifier, unrecognizedListeners(TabbarElement__default["default"])],
      emits: ['update:activeIndex'],

      props: {
        tabs: {
          type: Array,
          validator(value) {
            return value.every(tab => ['icon', 'label', 'page'].some(prop => !!Object.getOwnPropertyDescriptor(tab, prop)));
          }
        },
        tabbarStyle: {
          type: null
        }
      },

      methods: {
        _tabKey(tab) {
          return tab.key || tab.label || tab.icon;
        }
      },
    };

  const _hoisted_1$5 = ["modifier"];
  const _hoisted_2 = { class: "tabbar__content" };
  const _hoisted_3 = /*#__PURE__*/vue.createElementVNode("div", null, null, -1);
  const _hoisted_4 = /*#__PURE__*/vue.createElementVNode("div", { class: "tabbar__border" }, null, -1);

  function render$8(_ctx, _cache, $props, $setup, $data, $options) {
    const _component_v_ons_tab = vue.resolveComponent("v-ons-tab");

    return (vue.openBlock(), vue.createElementBlock("ons-tabbar", {
      modifier: _ctx.normalizedModifier,
      onPrechange: _cache[0] || (_cache[0] = vue.withModifiers($event => (_ctx.$nextTick(() => !$event.detail.canceled && _ctx.$emit('update:activeIndex', $event.index))), ["self"]))
    }, [
      vue.createElementVNode("div", _hoisted_2, [
        vue.createElementVNode("div", null, [
          vue.renderSlot(_ctx.$slots, "pages", {}, () => [
            (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($props.tabs, (tab) => {
              return (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(tab.page), vue.mergeProps({ ..._ctx.unrecognizedListeners, ...tab.props }, {
                key: (tab.page.key || tab.page.name || $options._tabKey(tab))
              }), null, 16))
            }), 128))
          ])
        ]),
        _hoisted_3
      ]),
      vue.createElementVNode("div", {
        class: "tabbar",
        style: vue.normalizeStyle($props.tabbarStyle)
      }, [
        vue.renderSlot(_ctx.$slots, "default", {}, () => [
          (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($props.tabs, (tab) => {
            return (vue.openBlock(), vue.createBlock(_component_v_ons_tab, vue.mergeProps(tab, {
              key: $options._tabKey(tab)
            }), null, 16))
          }), 128))
        ]),
        _hoisted_4
      ], 4)
    ], 40, _hoisted_1$5))
  }

  script$8.render = render$8;

  var script$7 = {
      name: 'v-ons-back-button',
      inject: ['navigator'],
      mixins: [modifier]
    };

  const _hoisted_1$4 = ["modifier"];

  function render$7(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-back-button", { modifier: _ctx.normalizedModifier }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$4))
  }

  script$7.render = render$7;

  const name$4 = 'v-ons-navigator';

    var script$6 = {
      name: name$4,
      mixins: [hasOptions, selfProvider, deriveEvents(name$4), deriveDBB, unrecognizedListeners(NavigatorElement__default["default"])],

      emits: ['update:pageStack'],

      props: {
        pageStack: {
          type: Array,
          required: true
        }
      },

      data() {
        return {
          internalPageStack: this.pageStack
        };
      },

      computed: {
        extendsFix() {
          // workaround for Vue bug where extends doesn't work with runtime template compilation
          // https://github.com/vuejs/core/issues/6249
          return this.internalPageStack.map(page =>
            page.extends ?
              {...page, template: page.extends.template} :
              page
          );
        }
      },

      methods: {
        isReady() {
          if (this.hasOwnProperty('_ready') && this._ready instanceof Promise) {
            return this._ready;
          }
          return Promise.resolve();
        },
        onDeviceBackButton(event) {
          if (this.internalPageStack.length > 1) {
            const lastTopPage = this.$el.children[this.internalPageStack.length - 1];
            const scrollElement = this._findScrollPage(lastTopPage);
            const scrollValue = scrollElement.scrollTop || 0;
            this._pageStackUpdate = {
              lastTopPage,
              lastLength: this.internalPageStack.length,
              currentLength: this.internalPageStack.length - 1,
              restoreScroll: () => scrollElement.scrollTop = scrollValue
            };

            this._popPage();
          } else {
            event.callParentHandler();
          }
        },
        _findScrollPage(page) {
          const nextPage = page._contentElement.children.length === 1
            && this.$ons._ons._util.getTopPage(page._contentElement.children[0]);
          return nextPage ? this._findScrollPage(nextPage) : page;
        },
        _eachPage(start, end, cb) {
          for (let i = start; i < end; i++) {
            cb(this.$el.children[i]);
          }
        },
        _reattachPage(pageElement, position = null, restoreScroll) {
          this.$el.insertBefore(pageElement, position);
          restoreScroll instanceof Function && restoreScroll();
          pageElement._isShown = true;
        },
        _redetachPage(pageElement) {
          pageElement._destroy();
          return Promise.resolve();
        },
        _animate({ lastLength, currentLength, lastTopPage, currentTopPage, currentTopPageOptions, restoreScroll }) {
          const pushedOptions = this.internalPageStack[this.internalPageStack.length - 1].onsNavigatorOptions
            || currentTopPageOptions
            || {};

          // Push
          if (currentLength > lastLength) {
            let isReattached = false;
            if (lastTopPage.parentElement !== this.$el) {
              this._reattachPage(lastTopPage, this.$el.children[lastLength - 1], restoreScroll);
              isReattached = true;
              lastLength--;
            }

            this._eachPage(lastLength, currentLength, el => { el.style.visibility = 'hidden'; });
            this._eachPage(lastLength, currentLength - 1, el => { el.pushedOptions = pushedOptions; });

            return this.$el._pushPage({ ...pushedOptions, leavePage: lastTopPage })
              .then(() => {
                setImmediate(() => {
                  this._eachPage(lastLength, currentLength, el => { el.style.visibility = ''; });
                  this._eachPage(lastLength - 1, currentLength - 1, el => { el.style.display = 'none'; });
                });

                if (isReattached) {
                  this._redetachPage(lastTopPage);
                }
              }, () => { // push failed or was canceled
                this._canceled = true;
                this._popPage();
              });
          }

          // Pop
          if (currentLength < lastLength) {
            this._reattachPage(lastTopPage, null, restoreScroll);
            return this.$el._popPage({ }, () => this._redetachPage(lastTopPage));
          }

          // Replace page
          currentTopPage.style.visibility = 'hidden';
          this._reattachPage(lastTopPage, currentTopPage, restoreScroll);
          return this.$el._pushPage({ ...pushedOptions, _replacePage: true })
            .then(() => this._redetachPage(lastTopPage));
        },
        _checkUserInteraction(event) {
          // update the internal page stack in the case where user swiped to pop or clicked ons-back-button
          if (event.swipeToPop || event.onsBackButton) {
            this._popPage();
          }
        },
        _popPage() {
          this.internalPageStack = this.internalPageStack.slice(0, -1);
        }
      },

      watch: {
        pageStack(after, before) {
          if (this.pageStack !== this.internalPageStack) {

            const lastTopPage = this.$el.children[this.internalPageStack.length - 1];
            const scrollElement = this._findScrollPage(lastTopPage);
            const scrollValue = scrollElement.scrollTop || 0;

            this._pageStackUpdate = {
              lastTopPage,
              lastLength: before.length,
              currentLength: after.length,
              restoreScroll: () => scrollElement.scrollTop = scrollValue
            };

            this.internalPageStack = this.pageStack;
          }

          // this.$nextTick(() => { }); // Waits too long, updated() hook is faster and prevents flickerings
        },
        internalPageStack(after, before) {
          this.$emit('update:pageStack', this.internalPageStack);
        }
      },

      updated() {
        if (this._pageStackUpdate) {
          let currentTopPage = this.$el.children[this.internalPageStack.length - 1];
          const currentTopPageOptions = this.internalPageStack[this.internalPageStack.length - 1].onsNavigatorOptions;
          let { lastTopPage } = this._pageStackUpdate;
          const { lastLength, restoreScroll, currentLength } = this._pageStackUpdate;

          if (currentTopPage !== lastTopPage) {
            this._ready = this._animate({ lastLength, currentLength, lastTopPage, currentTopPage, currentTopPageOptions, restoreScroll });
          } else if (currentLength !== lastLength) {
            currentTopPage.updateBackButton(currentLength > 1);
          }

          lastTopPage = currentTopPage = this._pageStackUpdate = null;
        }
      }
    };

  const _hoisted_1$3 = [".options"];

  function render$6(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-navigator", {
      onPostpop: _cache[0] || (_cache[0] = vue.withModifiers((...args) => ($options._checkUserInteraction && $options._checkUserInteraction(...args)), ["self"])),
      ".options": _ctx.options
    }, [
      vue.renderSlot(_ctx.$slots, "default", {}, () => [
        (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($options.extendsFix, (page, index) => {
          return (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(page), vue.mergeProps({ key: index }, { ..._ctx.unrecognizedListeners, ...page.onsNavigatorProps }), null, 16))
        }), 128))
      ])
    ], 40, _hoisted_1$3))
  }

  script$6.render = render$6;

  const name$3 = 'v-ons-splitter-side';

    var script$5 = {
      name: name$3,
      mixins: [hasOptions, deriveEvents(name$3)],

      emits: ['update:open'],

      props: {
        open: {
          type: Boolean,
          default: undefined
        }
      },

      methods: {
        action() {
          this._shouldUpdate() && this.$el[this.open ? 'open' : 'close'].call(this.$el, this.options).catch(() => {});
        },
        _shouldUpdate() {
          return this.open !== undefined && this.open !== this.$el.isOpen;
        }
      },

      watch: {
        open() {
          this.action();
        }
      },

      mounted() {
        this._updateOpenHandler = () => this._shouldUpdate() && this.$emit('update:open', this.$el.isOpen);

        ['postopen', 'postclose', 'modechange']
          .forEach(event => this.$el.addEventListener(event, this._updateOpenHandler));

        this.action();
      },

      beforeDestroy() {
        ['postopen', 'postclose', 'modechange']
          .forEach(event => this.$el.removeEventListener(event, this._updateOpenHandler));
      }
    };

  function render$5(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-splitter-side", null, [
      vue.renderSlot(_ctx.$slots, "default")
    ]))
  }

  script$5.render = render$5;

  var script$4 = {
    name: 'v-ons-lazy-repeat',

    props: {
      renderItem: {
        type: Function,
        required: true
      },
      length: {
        type: Number,
        required: true
      },
      calculateItemHeight: {
        type: Function,
        default: undefined
      }
    },

    data() {
      return {
        provider: null
      };
    },

    methods: {
      _setup() {
        this.provider && this.provider.destroy();

        const delegate = new this.$ons._ons._internal.LazyRepeatDelegate({
          calculateItemHeight: this.calculateItemHeight,
          createItemContent: i => {
            let vnode = vue.createVNode(this.renderItem(i));
            vnode.appContext = this.$ons._app._context;

            let fragment = document.createDocumentFragment();
            vue.render(vnode, fragment);
            let element = fragment.firstChild;

            element.destroy = () => {
              fragment = null;
              vnode = null;
              element = null;
            };

            return fragment.firstChild;
          },
          destroyItem: (i, { element }) => element.destroy(),
          countItems: () => this.length
        }, null);

        this.provider = new this.$ons._ons._internal.LazyRepeatProvider(this.$parent.$el, delegate);
      },
      refresh() {
        return this.provider.refresh();
      }
    },

    watch: {
      renderItem() {
        this._setup();
      },
      length() {
        this._setup();
      },
      calculateItemHeight() {
        this._setup();
      }
    },

    mounted() {
      this._setup();
    },

    beforeDestroy() {
      // This will destroy the provider once the rendered element
      // is detached (detachedCallback). Therefore, animations
      // have time to finish before elements start to disappear.
      // It cannot be set earlier in order to prevent accidental
      // destroys if this element is retached by something else.
      this.$el._lazyRepeatProvider = this.provider;
      this.provider = null;
    }
  };

  function render$4(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-lazy-repeat"))
  }

  script$4.render = render$4;

  var script$3 = {
      name: 'v-ons-select',
      mixins: [modifier],
      emits: ['update:modelValue'],
      props: {
        modelValue: [Number, String]
      },
      computed: {
        selectedValue: {
          get() {
            return this.modelValue;
          },
          set(val) {
            this.$emit('update:modelValue', val);
          }
        }
      }
    };

  const _hoisted_1$2 = ["modifier"];

  function render$3(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-select", { modifier: _ctx.normalizedModifier }, [
      vue.withDirectives(vue.createElementVNode("select", {
        "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($options.selectedValue) = $event))
      }, [
        vue.renderSlot(_ctx.$slots, "default")
      ], 512), [
        [vue.vModelSelect, $options.selectedValue]
      ])
    ], 8, _hoisted_1$2))
  }

  script$3.render = render$3;

  const name$2 = 'v-ons-segment';

    var script$2 = {
      name: name$2,
      mixins: [deriveEvents(name$2)],
      emits: ['update:activeIndex'],
    };

  function render$2(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-segment", {
      onPostchange: _cache[0] || (_cache[0] = vue.withModifiers($event => (_ctx.$emit('update:activeIndex', $event.index)), ["self"]))
    }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 32))
  }

  script$2.render = render$2;

  const name$1 = 'v-ons-pull-hook';

    var script$1 = {
      name: name$1,
      mixins: [deriveEvents(name$1)],

      props: {
        action: {
          type: Function
        }
      }
    };

  const _hoisted_1$1 = [".onAction"];

  function render$1(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-pull-hook", { ".onAction": $props.action }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1$1))
  }

  script$1.render = render$1;

  const name = 'v-ons-page';

    var script = {
      name,
      mixins: [deriveEvents(name), deriveDBB, modifier],

      props: {
        infiniteScroll: {
          type: Function
        }
      }
    };

  const _hoisted_1 = [".onInfiniteScroll", "modifier"];

  function render(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("ons-page", {
      ".onInfiniteScroll": $props.infiniteScroll,
      modifier: _ctx.normalizedModifier
    }, [
      vue.renderSlot(_ctx.$slots, "default")
    ], 8, _hoisted_1))
  }

  script.render = render;

  var components = /*#__PURE__*/Object.freeze({
    __proto__: null,
    VOnsToolbar: script$K,
    VOnsBottomToolbar: script$J,
    VOnsToolbarButton: script$I,
    VOnsAlertDialogButton: script$H,
    VOnsButton: script$G,
    VOnsIcon: script$F,
    VOnsCard: script$E,
    VOnsList: script$D,
    VOnsListItem: script$C,
    VOnsListTitle: script$B,
    VOnsListHeader: script$A,
    VOnsRipple: script$z,
    VOnsRow: script$y,
    VOnsCol: script$x,
    VOnsProgressBar: script$w,
    VOnsProgressCircular: script$v,
    VOnsCarouselItem: script$u,
    VOnsSplitterMask: script$t,
    VOnsSplitterContent: script$s,
    VOnsSplitter: script$r,
    VOnsSwitch: script$q,
    VOnsCheckbox: script$p,
    VOnsInput: script$o,
    VOnsSearchInput: script$n,
    VOnsRange: script$m,
    VOnsRadio: script$l,
    VOnsFab: script$k,
    VOnsSpeedDialItem: script$j,
    VOnsDialog: script$i,
    VOnsActionSheet: script$h,
    VOnsActionSheetButton: script$g,
    VOnsModal: script$f,
    VOnsToast: script$e,
    VOnsPopover: script$d,
    VOnsAlertDialog: script$c,
    VOnsSpeedDial: script$b,
    VOnsCarousel: script$a,
    VOnsTab: script$9,
    VOnsTabbar: script$8,
    VOnsBackButton: script$7,
    VOnsNavigator: script$6,
    VOnsSplitterSide: script$5,
    VOnsLazyRepeat: script$4,
    VOnsSelect: script$3,
    VOnsSegment: script$2,
    VOnsPullHook: script$1,
    VOnsPage: script
  });

  var $ons = setup(ons__default["default"]);

  $ons.install = function (app) {
    /**
     * Register components of vue-onsenui.
     */
    Object.keys(components).forEach(function (key) {
      return app.component(components[key].name, components[key]);
    });
    /**
     * Expose ons object.
     */

    $ons._app = app;
    app.config.globalProperties.$ons = $ons;
  };

  return $ons;

}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnVlLW9uc2VudWkuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9zZXR1cC5qcyIsIi4uL3NyYy9pbnRlcm5hbC91dGlsLmpzIiwiLi4vc3JjL21peGlucy9kZXJpdmUuanMiLCIuLi9zcmMvbWl4aW5zL2NvbW1vbi5qcyIsIi4uL3NyYy9taXhpbnMvbW9kZWwuanMiLCIuLi9zcmMvbWl4aW5zL2RpYWxvZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNUb29sYmFyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNUb29sYmFyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04NDAxMDU3NCZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc0JvdHRvbVRvb2xiYXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc0JvdHRvbVRvb2xiYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQxMGRhYTVhJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zVG9vbGJhckJ1dHRvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zVG9vbGJhckJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2JkYTA1YmUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNBbGVydERpYWxvZ0J1dHRvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zQWxlcnREaWFsb2dCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZlNDNhNmI0JmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zQnV0dG9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI1MmU4YWQ0JmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zSWNvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zSWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDIwNGViYWYmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNDYXJkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNDYXJkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zODEwODgxMCZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc0xpc3QudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc0xpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWI0NGY5ZmFjJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zTGlzdEl0ZW0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc0xpc3RJdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YzlhNDU1YSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc0xpc3RUaXRsZS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zTGlzdFRpdGxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZjBhNGJjNCZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc0xpc3RIZWFkZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc0xpc3RIZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPThjYjc4YTFhJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zUmlwcGxlLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNSaXBwbGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJiMDJiMGY4JmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zUm93LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNSb3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWFiNDYzZTU4JmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zQ29sLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNDb2wudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWI3OGU1YjI0JmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zUHJvZ3Jlc3NCYXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc1Byb2dyZXNzQmFyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00OTk1ZmYzYyZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc1Byb2dyZXNzQ2lyY3VsYXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc1Byb2dyZXNzQ2lyY3VsYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJhYmI0YjBjJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zQ2Fyb3VzZWxJdGVtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNDYXJvdXNlbEl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBkN2I2YTBmJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zU3BsaXR0ZXJNYXNrLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNTcGxpdHRlck1hc2sudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ5MGMzYTYyJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zU3BsaXR0ZXJDb250ZW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNTcGxpdHRlckNvbnRlbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZmY2Q1N2UyJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zU3BsaXR0ZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc1NwbGl0dGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZTcxYjJiZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc1N3aXRjaC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zU3dpdGNoLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NDVjNWNiOCZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc0NoZWNrYm94LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNDaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YTk2NGM3NzImbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNJbnB1dC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zSW5wdXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRlNzNhZTkwJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zU2VhcmNoSW5wdXQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc1NlYXJjaElucHV0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZDRkOWZkOCZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc1JhbmdlLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNSYW5nZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjJiMTI5NDImbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNSYWRpby52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zUmFkaW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJiMzNkMWVlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zRmFiLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNGYWIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFjZDhlZTQzJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zU3BlZWREaWFsSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zU3BlZWREaWFsSXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjFlNzE4NjImbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNEaWFsb2cudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc0RpYWxvZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWRlYTQ3OTgmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNBY3Rpb25TaGVldC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zQWN0aW9uU2hlZXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWE5YWIwYjI2JmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zQWN0aW9uU2hlZXRCdXR0b24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc0FjdGlvblNoZWV0QnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NTAzNTgyZCZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc01vZGFsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNNb2RhbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZTQwNzYyNGEmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNUb2FzdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zVG9hc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAxYjM3YTIzJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zUG9wb3Zlci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zUG9wb3Zlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2I0ZWVlZWUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNBbGVydERpYWxvZy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zQWxlcnREaWFsb2cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWU4MjNhYzg2JmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zU3BlZWREaWFsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNTcGVlZERpYWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZhOTRkZjAwJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zQ2Fyb3VzZWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc0Nhcm91c2VsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04ZDk1ZGY3MiZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc1RhYi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zVGFiLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ODVmNzdjZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc1RhYmJhci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zVGFiYmFyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iNWJmNDQ5NiZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc0JhY2tCdXR0b24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc0JhY2tCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ3MWY0NzJlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zTmF2aWdhdG9yLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNOYXZpZ2F0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI2NjAzMDRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zU3BsaXR0ZXJTaWRlLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNTcGxpdHRlclNpZGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWFmZGU4OWNjJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zTGF6eVJlcGVhdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9WT25zTGF6eVJlcGVhdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDc1ZDQ2OGQmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNTZWxlY3QudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc1NlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2MyZjBlZTkmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNTZWdtZW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNTZWdtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MDQ3MDc2OCZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVk9uc1B1bGxIb29rLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNQdWxsSG9vay52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDc1YzdiNTYmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNQYWdlLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1ZPbnNQYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lZTZhMWZjYSZsYW5nLmpzIiwiLi4vc3JjL2luZGV4LnVtZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvbnMpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9ucylcbiAgICAuZmlsdGVyKGsgPT4gW1xuICAgICAgL15pcy8sXG4gICAgICAvXmRpc2FibGUvLFxuICAgICAgL15lbmFibGUvLFxuICAgICAgL15tb2NrLyxcbiAgICAgIC9eb3Blbi8sXG4gICAgICAvXnNldC8sXG4gICAgICAvYW5pbWl0LyxcbiAgICAgIC9lbGVtZW50cy8sXG4gICAgICAvR2VzdHVyZURldGVjdG9yLyxcbiAgICAgIC9ub3RpZmljYXRpb24vLFxuICAgICAgL29yaWVudGF0aW9uLyxcbiAgICAgIC9wbGF0Zm9ybS8sXG4gICAgICAvcmVhZHkvLFxuICAgIF0uc29tZSh0ID0+IGsubWF0Y2godCkpKVxuICAgIC5yZWR1Y2UoKHIsIGspID0+IHtcbiAgICAgIHJba10gPSBvbnNba107XG4gICAgICByZXR1cm4gcjtcbiAgICB9LCB7IF9vbnM6IG9ucyB9KTtcbn1cbiIsImV4cG9ydCBjb25zdCBoeXBoZW5hdGUgPSBzdHJpbmcgPT4gc3RyaW5nLnJlcGxhY2UoLyhbYS16QS1aXSkoW0EtWl0pL2csICckMS0kMicpLnRvTG93ZXJDYXNlKCk7XG5cbmV4cG9ydCBjb25zdCBjYXBpdGFsaXplID0gc3RyaW5nID0+IHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcblxuZXhwb3J0IGNvbnN0IGNhbWVsaXplID0gc3RyaW5nID0+IHN0cmluZy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLy0oW2Etel0pL2csIChtLCBsKSA9PiBsLnRvVXBwZXJDYXNlKCkpO1xuXG5leHBvcnQgY29uc3QgZXZlbnRUb0hhbmRsZXIgPSBuYW1lID0+ICdfb24nICsgY2FwaXRhbGl6ZShuYW1lKTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZXJUb1Byb3AgPSBuYW1lID0+IG5hbWUuc2xpY2UoMikuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDIpLnNsaWNlKDEpO1xuIiwiaW1wb3J0IG9ucyBmcm9tICdvbnNlbnVpJztcblxuaW1wb3J0IHsgY2FtZWxpemUsIGV2ZW50VG9IYW5kbGVyLCBoYW5kbGVyVG9Qcm9wLCBjYXBpdGFsaXplIH0gZnJvbSAnLi4vaW50ZXJuYWwvdXRpbC5qcyc7XG5cbi8qIFByaXZhdGUgKi9cbmNvbnN0IF9zZXR1cERCQiA9IGNvbXBvbmVudCA9PiB7XG4gIGNvbnN0IGRiYiA9ICdvbkRldmljZUJhY2tCdXR0b24nO1xuICAvLyBDYWxsIG9yaWdpbmFsIGhhbmRsZXIgb3IgcGFyZW50IGhhbmRsZXIgYnkgZGVmYXVsdFxuICBjb25zdCBoYW5kbGVyID0gY29tcG9uZW50W2RiYl0gfHwgKGNvbXBvbmVudC4kZWxbZGJiXSAmJiBjb21wb25lbnQuJGVsW2RiYl0uX2NhbGxiYWNrKSB8fCAoZSA9PiBlLmNhbGxQYXJlbnRIYW5kbGVyKCkpO1xuXG4gIGNvbXBvbmVudC4kZWxbZGJiXSA9IGV2ZW50ID0+IHtcbiAgICBsZXQgcnVuRGVmYXVsdCA9IHRydWU7XG5cbiAgICBjb21wb25lbnQuJGVtaXQoaGFuZGxlclRvUHJvcChkYmIpLCB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiBydW5EZWZhdWx0ID0gZmFsc2VcbiAgICB9KTtcblxuICAgIHJ1bkRlZmF1bHQgJiYgaGFuZGxlcihldmVudCk7XG4gIH07XG5cbiAgY29tcG9uZW50Ll9pc0RCQlNldHVwID0gdHJ1ZTtcbn07XG5cbi8qIFB1YmxpYyAqL1xuLy8gRGV2aWNlIEJhY2sgQnV0dG9uIEhhbmRsZXJcbmNvbnN0IGRlcml2ZURCQiA9IHtcbiAgZW1pdHM6IFsnZGV2aWNlQmFja0J1dHRvbiddLFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgX3NldHVwREJCKHRoaXMpO1xuICB9LFxuXG4gIC8vIENvcmUgZGVzdHJveXMgZGV2aWNlQmFja0J1dHRvbiBoYW5kbGVycyBvbiBkaXNjb25uZWN0ZWRDYWxsYmFjay5cbiAgLy8gVGhpcyBmaXhlcyB0aGUgYmVoYXZpb3IgZm9yIDxrZWVwLWFsaXZlPiBjb21wb25lbnQuXG4gIGFjdGl2YXRlZCgpIHtcbiAgICB0aGlzLl9pc0RCQlNldHVwID09PSBmYWxzZSAmJiBfc2V0dXBEQkIodGhpcyk7XG4gIH0sXG5cbiAgZGVhY3RpdmF0ZWQoKSB7XG4gICAgdGhpcy5faXNEQkJTZXR1cCA9PT0gdHJ1ZSAmJiAodGhpcy5faXNEQkJTZXR1cCA9IGZhbHNlKTtcbiAgfSxcblxuICBkZXN0cm95ZWQoKSB7XG4gICAgdGhpcy4kZWwub25EZXZpY2VCYWNrQnV0dG9uICYmIHRoaXMuJGVsLm9uRGV2aWNlQmFja0J1dHRvbi5kZXN0cm95KCk7XG4gIH1cbn07XG5cbmNvbnN0IGRlcml2ZUV2ZW50cyA9IG5hbWUgPT4ge1xuXG4gIGNvbnN0IG5hdGl2ZUV2ZW50cyA9IG9ucy5lbGVtZW50c1tjYXBpdGFsaXplKGNhbWVsaXplKG5hbWUuc2xpY2UoNikpKV0uZXZlbnRzIHx8IFtdO1xuXG4gIHJldHVybiB7XG4gICAgZW1pdHM6IG5hdGl2ZUV2ZW50cyxcblxuICAgIG1vdW50ZWQoKSB7XG4gICAgICB0aGlzLl9oYW5kbGVycyA9IHt9O1xuXG4gICAgICBuYXRpdmVFdmVudHMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICB0aGlzLl9oYW5kbGVyc1tldmVudFRvSGFuZGxlcihrZXkpXSA9IGV2ZW50ID0+IHtcbiAgICAgICAgICAvLyBGaWx0ZXIgZXZlbnRzIGZyb20gZGlmZmVyZW50IGNvbXBvbmVudHMgd2l0aCB0aGUgc2FtZSBuYW1lXG4gICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy4kZWwgfHwgIS9eb25zLS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRhZ05hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KGtleSwgZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4kZWwuYWRkRXZlbnRMaXN0ZW5lcihrZXksIHRoaXMuX2hhbmRsZXJzW2V2ZW50VG9IYW5kbGVyKGtleSldKTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBiZWZvcmVEZXN0cm95KCkge1xuICAgICAgT2JqZWN0LmtleXModGhpcy5faGFuZGxlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgdGhpcy4kZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihrZXksIHRoaXMuX2hhbmRsZXJzW2tleV0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9oYW5kbGVycyA9IG51bGw7XG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgdW5yZWNvZ25pemVkTGlzdGVuZXJzID0gbmF0aXZlRWxlbWVudCA9PiAoe1xuICBjb21wdXRlZDoge1xuICAgIHVucmVjb2duaXplZExpc3RlbmVycygpIHtcbiAgICAgIGNvbnN0IGlzTGlzdGVuZXIgPSAoW2F0dHJpYnV0ZV0pID0+IC9eb25bXmEtel0vLnRlc3QoYXR0cmlidXRlKTtcbiAgICAgIGNvbnN0IGlzVW5rbm93biA9IChbYXR0cmlidXRlXSkgPT4gIW5hdGl2ZUVsZW1lbnQuZXZlbnRzLmluY2x1ZGVzKGNhbWVsaXplKGF0dHJpYnV0ZS5zbGljZSgyKSkpXG5cbiAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModGhpcy4kYXR0cnMpXG4gICAgICAgIC5maWx0ZXIoYXR0cmlidXRlID0+IGlzTGlzdGVuZXIoYXR0cmlidXRlKSAmJiBpc1Vua25vd24oYXR0cmlidXRlKSkpO1xuICAgIH1cbiAgfVxufSk7XG5cbmV4cG9ydCB7IGRlcml2ZURCQiwgZGVyaXZlRXZlbnRzLCB1bnJlY29nbml6ZWRMaXN0ZW5lcnMgfTtcbiIsIi8qIFByaXZhdGUgKi9cbmNvbnN0IF90b2dnbGVWaXNpYmlsaXR5ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0eXBlb2YgdGhpcy52aXNpYmxlID09PSAnYm9vbGVhbicgJiYgdGhpcy52aXNpYmxlICE9PSB0aGlzLiRlbC52aXNpYmxlKSB7XG4gICAgdGhpcy4kZWxbdGhpcy52aXNpYmxlID8gJ3Nob3cnIDogJ2hpZGUnXS5jYWxsKHRoaXMuJGVsLCB0aGlzLm5vcm1hbGl6ZWRPcHRpb25zIHx8IHRoaXMub3B0aW9ucyk7XG4gIH1cbn07XG5jb25zdCBfdGVsZXBvcnQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9pc0Rlc3Ryb3llZCAmJiAoIXRoaXMuJGVsLnBhcmVudE5vZGUgfHwgdGhpcy4kZWwucGFyZW50Tm9kZSAhPT0gZG9jdW1lbnQuYm9keSkpIHtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuJGVsKTtcbiAgfVxufTtcbmNvbnN0IF91bm1vdW50ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLiRlbC52aXNpYmxlID09PSB0cnVlKSB7XG4gICAgdGhpcy4kZWwuaGlkZSgpLnRoZW4oKCkgPT4gdGhpcy4kZWwucmVtb3ZlKCkpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuJGVsLnJlbW92ZSgpO1xuICB9XG59O1xuXG4vKiBQdWJsaWMgKi9cbi8vIENvbXBvbmVudHMgdGhhdCBjYW4gYmUgc2hvd24gb3IgaGlkZGVuXG5jb25zdCBoaWRhYmxlID0ge1xuICBwcm9wczoge1xuICAgIHZpc2libGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB1bmRlZmluZWQgLy8gQXZvaWQgY2FzdGluZyB0byBmYWxzZVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZpc2libGUoKSB7XG4gICAgICBfdG9nZ2xlVmlzaWJpbGl0eS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IF90b2dnbGVWaXNpYmlsaXR5LmNhbGwodGhpcykpO1xuICB9LFxuXG4gIGFjdGl2YXRlZCgpIHtcbiAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBfdG9nZ2xlVmlzaWJpbGl0eS5jYWxsKHRoaXMpKTtcbiAgfVxufTtcblxuLy8gQ29tcG9uZW50cyB3aXRoICdvcHRpb25zJyBwcm9wZXJ0eVxuY29uc3QgaGFzT3B0aW9ucyA9IHtcbiAgcHJvcHM6IHtcbiAgICBvcHRpb25zOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vLyBQcm92aWRlcyBpdHNlbGYgdG8gaXRzIGRlc2NlbmRhbnRzXG5jb25zdCBzZWxmUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLiRvcHRpb25zLm5hbWUuc2xpY2UoNildOiB0aGlzXG4gICAgfVxuICB9XG59O1xuXG4vLyBNb3ZlcyB0aGUgZWxlbWVudCB0byBhIGdsb2JhbCBwb3NpdGlvblxuY29uc3QgcG9ydGFsID0ge1xuICBtb3VudGVkKCkge1xuICAgIF90ZWxlcG9ydC5jYWxsKHRoaXMpO1xuICB9LFxuICB1cGRhdGVkKCkge1xuICAgIF90ZWxlcG9ydC5jYWxsKHRoaXMpO1xuICB9LFxuICBhY3RpdmF0ZWQoKSB7XG4gICAgX3RlbGVwb3J0LmNhbGwodGhpcyk7XG4gIH0sXG4gIGRlYWN0aXZhdGVkKCkge1xuICAgIF91bm1vdW50LmNhbGwodGhpcyk7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgX3VubW91bnQuY2FsbCh0aGlzKTtcbiAgfVxufTtcblxuY29uc3QgbW9kaWZpZXIgPSB7XG4gIHByb3BzOiB7XG4gICAgbW9kaWZpZXI6IHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEFycmF5LCBPYmplY3RdXG4gICAgfSxcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5vcm1hbGl6ZWRNb2RpZmllcigpIHtcbiAgICAgIGNvbnN0IG1vZGlmaWVyID0gdGhpcy5tb2RpZmllcjtcblxuICAgICAgaWYgKHR5cGVvZiBtb2RpZmllciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICByZXR1cm4gbW9kaWZpZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGlmaWVyKSkge1xuICAgICAgICByZXR1cm4gbW9kaWZpZXIuam9pbignICcpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG1vZGlmaWVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobW9kaWZpZXIpXG4gICAgICAgICAgLnJlZHVjZSgoYWNjLCBrZXkpID0+IChhY2MgKyAobW9kaWZpZXJba2V5XSA/IGAgJHtrZXl9YCA6ICcnKSksICcnKVxuICAgICAgICAgIC50cmltKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IHsgaGlkYWJsZSwgaGFzT3B0aW9ucywgc2VsZlByb3ZpZGVyLCBwb3J0YWwsIG1vZGlmaWVyIH07XG4iLCIvLyBHZW5lcmljIGlucHV0XG5jb25zdCBtb2RlbElucHV0ID0ge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogW051bWJlciwgU3RyaW5nXSxcbiAgICBtb2RlbEV2ZW50OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaW5wdXQnXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfdXBkYXRlVmFsdWUoKSB7XG4gICAgICBpZiAodGhpcy5tb2RlbFZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy4kZWwudmFsdWUgIT09IHRoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbC52YWx1ZSA9IHRoaXMubW9kZWxWYWx1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIF9vbk1vZGVsRXZlbnQoZXZlbnQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKCkge1xuICAgICAgdGhpcy5fdXBkYXRlVmFsdWUoKTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLl91cGRhdGVWYWx1ZSgpO1xuICAgIHRoaXMuJGVsLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5tb2RlbEV2ZW50LCB0aGlzLl9vbk1vZGVsRXZlbnQpO1xuICB9LFxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuJGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5tb2RlbEV2ZW50LCB0aGlzLl9vbk1vZGVsRXZlbnQpO1xuICB9XG59O1xuXG4vLyBJbnB1dCB3aXRoIG51bWJlciB2YWx1ZVxuY29uc3QgbW9kZWxJbnB1dE51bWJlciA9IHtcbiAgbWl4aW5zOiBbbW9kZWxJbnB1dF0sXG4gIG1ldGhvZHM6IHtcbiAgICBfb25Nb2RlbEV2ZW50KGV2ZW50KSB7XG4gICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGV2ZW50LnRhcmdldC52YWx1ZUFzTnVtYmVyKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQ2hlY2thYmxlIGlucHV0c1xuY29uc3QgbW9kZWxDaGVja2JveCA9IHtcbiAgbWl4aW5zOiBbbW9kZWxJbnB1dF0sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiBbQXJyYXksIEJvb2xlYW5dLFxuICAgIG1vZGVsRXZlbnQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdjaGFuZ2UnXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfdXBkYXRlVmFsdWUoKSB7XG4gICAgICBpZiAodGhpcy5tb2RlbFZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgdGhpcy4kZWwuY2hlY2tlZCA9IHRoaXMubW9kZWxWYWx1ZS5pbmRleE9mKHRoaXMuJGVsLnZhbHVlKSA+PSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZWwuY2hlY2tlZCA9IHRoaXMubW9kZWxWYWx1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIF9vbk1vZGVsRXZlbnQoZXZlbnQpIHtcbiAgICAgIGNvbnN0IHsgdmFsdWUsIGNoZWNrZWQgfSA9IGV2ZW50LnRhcmdldDtcbiAgICAgIGxldCBuZXdWYWx1ZTtcblxuICAgICAgaWYgKHRoaXMubW9kZWxWYWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIC8vIElzIEFycmF5XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tb2RlbFZhbHVlLmluZGV4T2YodmFsdWUpO1xuICAgICAgICBjb25zdCBpbmNsdWRlZCA9IGluZGV4ID49IDA7XG5cbiAgICAgICAgaWYgKGluY2x1ZGVkICYmICFjaGVja2VkKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBbXG4gICAgICAgICAgICAuLi50aGlzLm1vZGVsVmFsdWUuc2xpY2UoMCwgaW5kZXgpLFxuICAgICAgICAgICAgLi4udGhpcy5tb2RlbFZhbHVlLnNsaWNlKGluZGV4ICsgMSwgdGhpcy5tb2RlbFZhbHVlLmxlbmd0aClcbiAgICAgICAgICBdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpbmNsdWRlZCAmJiBjaGVja2VkKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBbIC4uLnRoaXMubW9kZWxWYWx1ZSwgdmFsdWUgXTtcbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJcyBCb29sZWFuXG4gICAgICAgIG5ld1ZhbHVlID0gY2hlY2tlZDtcbiAgICAgIH1cblxuICAgICAgLy8gRW1pdCBpZiB2YWx1ZSBjaGFuZ2VkXG4gICAgICBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxufTtcblxuLy8gUmFkaW8gaW5wdXRcbmNvbnN0IG1vZGVsUmFkaW8gPSB7XG4gIG1peGluczogW21vZGVsSW5wdXRdLFxuICBwcm9wczoge1xuICAgIG1vZGVsRXZlbnQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdjaGFuZ2UnXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfdXBkYXRlVmFsdWUoKSB7XG4gICAgICB0aGlzLiRlbC5jaGVja2VkID0gdGhpcy5tb2RlbFZhbHVlID09PSB0aGlzLiRlbC52YWx1ZTtcbiAgICB9LFxuICAgIF9vbk1vZGVsRXZlbnQoZXZlbnQpIHtcbiAgICAgIGNvbnN0IHsgdmFsdWUsIGNoZWNrZWQgfSA9IGV2ZW50LnRhcmdldDtcbiAgICAgIGNoZWNrZWQgJiYgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB2YWx1ZSk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgeyBtb2RlbElucHV0LCBtb2RlbElucHV0TnVtYmVyLCBtb2RlbENoZWNrYm94LCBtb2RlbFJhZGlvIH07XG5cbiIsIi8vIENvbW1vbiBldmVudCBmb3IgRGlhbG9nc1xuY29uc3QgZGlhbG9nQ2FuY2VsID0ge1xuICBlbWl0czogWyd1cGRhdGU6dmlzaWJsZSddLFxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuX2RpYWxvZ0NhbmNlbEhhbmRsZXIgPSAoKSA9PiB0aGlzLiRlbWl0KCd1cGRhdGU6dmlzaWJsZScsIGZhbHNlKTtcbiAgICB0aGlzLiRlbC5hZGRFdmVudExpc3RlbmVyKCdkaWFsb2djYW5jZWwnLCB0aGlzLl9kaWFsb2dDYW5jZWxIYW5kbGVyKTtcbiAgfSxcbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLiRlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdkaWFsb2djYW5jZWwnLCB0aGlzLl9kaWFsb2dDYW5jZWxIYW5kbGVyKTtcbiAgfVxufTtcblxuY29uc3QgZGlhbG9nT3JkZXJlZFByb3BzID0ge1xuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuICBjb21wdXRlZDoge1xuICAgIG9yZGVyZWRQcm9wcygpIHtcbiAgICAgIC8vIHZpc2libGUgcHJvcCBzaG91bGQgYmUgYXBwbGllZCBsYXN0IHNpbmNlIGl0IGRlcGVuZHMgb24gYW5pbWF0aW9uIGFuZFxuICAgICAgLy8gbWFza0NvbG9yIHByb3BzIGJlaW5nIHNldCBmaXJzdFxuICAgICAgY29uc3QgeyB2aXNpYmxlLCAuLi5yZXN0IH0gPSB0aGlzLiRhdHRycztcbiAgICAgIHJldHVybiB7IC4uLnJlc3QsIHZpc2libGUgfTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGRpYWxvZyA9IHtcbiAgbWl4aW5zOiBbZGlhbG9nQ2FuY2VsLCBkaWFsb2dPcmRlcmVkUHJvcHNdXG59O1xuXG5leHBvcnQgeyBkaWFsb2cgfTtcbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy10b29sYmFyIDptb2RpZmllcj1cIm5vcm1hbGl6ZWRNb2RpZmllclwiIDppbmxpbmU9XCJpbmxpbmUgfHwgbnVsbFwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtdG9vbGJhcj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLXRvb2xiYXIuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMsIG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLXRvb2xiYXInO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgbW9kaWZpZXJdLFxuICAgIHByb3BzOiB7XG4gICAgICBpbmxpbmU6IEJvb2xlYW5cbiAgICB9XG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy10b29sYmFyIDptb2RpZmllcj1cIm5vcm1hbGl6ZWRNb2RpZmllclwiIDppbmxpbmU9XCJpbmxpbmUgfHwgbnVsbFwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtdG9vbGJhcj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLXRvb2xiYXIuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMsIG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLXRvb2xiYXInO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgbW9kaWZpZXJdLFxuICAgIHByb3BzOiB7XG4gICAgICBpbmxpbmU6IEJvb2xlYW5cbiAgICB9XG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1ib3R0b20tdG9vbGJhciA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLWJvdHRvbS10b29sYmFyPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtYm90dG9tLXRvb2xiYXIuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMsIG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLWJvdHRvbS10b29sYmFyJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtYm90dG9tLXRvb2xiYXIgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1ib3R0b20tdG9vbGJhcj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLWJvdHRvbS10b29sYmFyLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1ib3R0b20tdG9vbGJhcic7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLXRvb2xiYXItYnV0dG9uIDptb2RpZmllcj1cIm5vcm1hbGl6ZWRNb2RpZmllclwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtdG9vbGJhci1idXR0b24+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy10b29sYmFyLWJ1dHRvbi5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtdG9vbGJhci1idXR0b24nO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgbW9kaWZpZXJdXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy10b29sYmFyLWJ1dHRvbiA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLXRvb2xiYXItYnV0dG9uPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtdG9vbGJhci1idXR0b24uanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMsIG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLXRvb2xiYXItYnV0dG9uJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtYWxlcnQtZGlhbG9nLWJ1dHRvbiA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLWFsZXJ0LWRpYWxvZy1idXR0b24+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1hbGVydC1kaWFsb2ctYnV0dG9uLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1hbGVydC1kaWFsb2ctYnV0dG9uJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtYWxlcnQtZGlhbG9nLWJ1dHRvbiA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLWFsZXJ0LWRpYWxvZy1idXR0b24+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1hbGVydC1kaWFsb2ctYnV0dG9uLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1hbGVydC1kaWFsb2ctYnV0dG9uJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtYnV0dG9uIDptb2RpZmllcj1cIm5vcm1hbGl6ZWRNb2RpZmllclwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtYnV0dG9uPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtYnV0dG9uLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1idXR0b24nO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgbW9kaWZpZXJdXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1idXR0b24gOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1idXR0b24+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1idXR0b24uanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMsIG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLWJ1dHRvbic7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLWljb24gOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1pY29uPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtaWNvbi5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtaWNvbic7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLWljb24gOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1pY29uPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtaWNvbi5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtaWNvbic7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLWNhcmQgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1jYXJkPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtY2FyZC5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtY2FyZCc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLWNhcmQgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1jYXJkPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtY2FyZC5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtY2FyZCc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLWxpc3QgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1saXN0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtbGlzdC5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtbGlzdCc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLWxpc3QgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1saXN0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtbGlzdC5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtbGlzdCc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLWxpc3QtaXRlbSA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIiB2LW9uOmV4cGFuZD1cIm9uRXhwYW5kXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1saXN0LWl0ZW0+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1saXN0LWl0ZW0uanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMsIG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLWxpc3QtaXRlbSc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBtb2RpZmllcl0sXG4gICAgZW1pdHM6IFsndXBkYXRlOmV4cGFuZGVkJ10sXG4gICAgbWV0aG9kczoge1xuICAgICAgb25FeHBhbmQoKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpleHBhbmRlZCcsIHRoaXMuJGVsLmV4cGFuZGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1saXN0LWl0ZW0gOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCIgdi1vbjpleHBhbmQ9XCJvbkV4cGFuZFwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtbGlzdC1pdGVtPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtbGlzdC1pdGVtLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1saXN0LWl0ZW0nO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgbW9kaWZpZXJdLFxuICAgIGVtaXRzOiBbJ3VwZGF0ZTpleHBhbmRlZCddLFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIG9uRXhwYW5kKCkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6ZXhwYW5kZWQnLCB0aGlzLiRlbC5leHBhbmRlZCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtbGlzdC10aXRsZSA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLWxpc3QtdGl0bGU+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1saXN0LXRpdGxlLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1saXN0LXRpdGxlJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtbGlzdC10aXRsZSA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLWxpc3QtdGl0bGU+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1saXN0LXRpdGxlLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1saXN0LXRpdGxlJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtbGlzdC1oZWFkZXIgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1saXN0LWhlYWRlcj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLWxpc3QtaGVhZGVyLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1saXN0LWhlYWRlcic7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLWxpc3QtaGVhZGVyIDptb2RpZmllcj1cIm5vcm1hbGl6ZWRNb2RpZmllclwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtbGlzdC1oZWFkZXI+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1saXN0LWhlYWRlci5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtbGlzdC1oZWFkZXInO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgbW9kaWZpZXJdXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1yaXBwbGU+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1yaXBwbGU+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1yaXBwbGUuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtcmlwcGxlJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSldXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1yaXBwbGU+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1yaXBwbGU+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1yaXBwbGUuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtcmlwcGxlJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSldXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1yb3c+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1yb3c+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1yb3cuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtcm93JztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSldXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1yb3c+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1yb3c+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1yb3cuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtcm93JztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSldXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1jb2w+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1jb2w+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1jb2wuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtY29sJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSldXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1jb2w+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1jb2w+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1jb2wuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtY29sJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSldXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1wcm9ncmVzcy1iYXIgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1wcm9ncmVzcy1iYXI+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1wcm9ncmVzcy1iYXIuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMsIG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLXByb2dyZXNzLWJhcic7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLXByb2dyZXNzLWJhciA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLXByb2dyZXNzLWJhcj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLXByb2dyZXNzLWJhci5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtcHJvZ3Jlc3MtYmFyJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtcHJvZ3Jlc3MtY2lyY3VsYXIgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1wcm9ncmVzcy1jaXJjdWxhcj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLXByb2dyZXNzLWNpcmN1bGFyLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1wcm9ncmVzcy1jaXJjdWxhcic7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLXByb2dyZXNzLWNpcmN1bGFyIDptb2RpZmllcj1cIm5vcm1hbGl6ZWRNb2RpZmllclwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtcHJvZ3Jlc3MtY2lyY3VsYXI+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1wcm9ncmVzcy1jaXJjdWxhci5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtcHJvZ3Jlc3MtY2lyY3VsYXInO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgbW9kaWZpZXJdXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1jYXJvdXNlbC1pdGVtPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtY2Fyb3VzZWwtaXRlbT5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLWNhcm91c2VsLWl0ZW0uanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtY2Fyb3VzZWwtaXRlbSc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtY2Fyb3VzZWwtaXRlbT5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLWNhcm91c2VsLWl0ZW0+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1jYXJvdXNlbC1pdGVtLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLWNhcm91c2VsLWl0ZW0nO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKV1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLXNwbGl0dGVyLW1hc2s+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1zcGxpdHRlci1tYXNrPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtc3BsaXR0ZXItbWFzay5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cyB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1zcGxpdHRlci1tYXNrJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSldXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1zcGxpdHRlci1tYXNrPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtc3BsaXR0ZXItbWFzaz5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLXNwbGl0dGVyLW1hc2suanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtc3BsaXR0ZXItbWFzayc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtc3BsaXR0ZXItY29udGVudD5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLXNwbGl0dGVyLWNvbnRlbnQ+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1zcGxpdHRlci1jb250ZW50LmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLXNwbGl0dGVyLWNvbnRlbnQnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKV1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLXNwbGl0dGVyLWNvbnRlbnQ+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1zcGxpdHRlci1jb250ZW50PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtc3BsaXR0ZXItY29udGVudC5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cyB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1zcGxpdHRlci1jb250ZW50JztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSldXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1zcGxpdHRlcj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLXNwbGl0dGVyPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtc3BsaXR0ZXIuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMsIHNlbGZQcm92aWRlciwgZGVyaXZlREJCIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLXNwbGl0dGVyJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIHNlbGZQcm92aWRlciwgZGVyaXZlREJCXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtc3BsaXR0ZXI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1zcGxpdHRlcj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLXNwbGl0dGVyLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBzZWxmUHJvdmlkZXIsIGRlcml2ZURCQiB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1zcGxpdHRlcic7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBzZWxmUHJvdmlkZXIsIGRlcml2ZURCQl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLXN3aXRjaCA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLXN3aXRjaD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLXN3aXRjaC5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgbW9kZWxDaGVja2JveCwgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtc3dpdGNoJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIG1vZGVsQ2hlY2tib3gsIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtc3dpdGNoIDptb2RpZmllcj1cIm5vcm1hbGl6ZWRNb2RpZmllclwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtc3dpdGNoPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtc3dpdGNoLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBtb2RlbENoZWNrYm94LCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1zd2l0Y2gnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgbW9kZWxDaGVja2JveCwgbW9kaWZpZXJdXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1jaGVja2JveCA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLWNoZWNrYm94PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtY2hlY2tib3guanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMsIG1vZGVsQ2hlY2tib3gsIG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLWNoZWNrYm94JztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIG1vZGVsQ2hlY2tib3gsIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtY2hlY2tib3ggOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1jaGVja2JveD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLWNoZWNrYm94LmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBtb2RlbENoZWNrYm94LCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1jaGVja2JveCc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBtb2RlbENoZWNrYm94LCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLWlucHV0IDptb2RpZmllcj1cIm5vcm1hbGl6ZWRNb2RpZmllclwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtaW5wdXQ+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1pbnB1dC5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgbW9kZWxJbnB1dCwgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtaW5wdXQnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgbW9kZWxJbnB1dCwgbW9kaWZpZXJdXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1pbnB1dCA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLWlucHV0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtaW5wdXQuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMsIG1vZGVsSW5wdXQsIG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLWlucHV0JztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIG1vZGVsSW5wdXQsIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtc2VhcmNoLWlucHV0IDptb2RpZmllcj1cIm5vcm1hbGl6ZWRNb2RpZmllclwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtc2VhcmNoLWlucHV0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtc2VhcmNoLWlucHV0LmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBtb2RlbElucHV0LCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1zZWFyY2gtaW5wdXQnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgbW9kZWxJbnB1dCwgbW9kaWZpZXJdXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1zZWFyY2gtaW5wdXQgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1zZWFyY2gtaW5wdXQ+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1zZWFyY2gtaW5wdXQuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMsIG1vZGVsSW5wdXQsIG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLXNlYXJjaC1pbnB1dCc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBtb2RlbElucHV0LCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLXJhbmdlIDptb2RpZmllcj1cIm5vcm1hbGl6ZWRNb2RpZmllclwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtcmFuZ2U+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1yYW5nZS5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgbW9kZWxJbnB1dE51bWJlciwgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtcmFuZ2UnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgbW9kZWxJbnB1dE51bWJlciwgbW9kaWZpZXJdXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1yYW5nZSA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLXJhbmdlPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtcmFuZ2UuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMsIG1vZGVsSW5wdXROdW1iZXIsIG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLXJhbmdlJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIG1vZGVsSW5wdXROdW1iZXIsIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtcmFkaW8gOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1yYWRpbz5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLXJhZGlvLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBtb2RlbFJhZGlvLCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1yYWRpbyc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBtb2RlbFJhZGlvLCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLXJhZGlvIDptb2RpZmllcj1cIm5vcm1hbGl6ZWRNb2RpZmllclwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtcmFkaW8+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1yYWRpby5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgbW9kZWxSYWRpbywgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtcmFkaW8nO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgbW9kZWxSYWRpbywgbW9kaWZpZXJdXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1mYWIgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1mYWI+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1mYWIuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMsIGhpZGFibGUsIG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLWZhYic7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBoaWRhYmxlLCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLWZhYiA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLWZhYj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLWZhYi5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgaGlkYWJsZSwgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtZmFiJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIGhpZGFibGUsIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtc3BlZWQtZGlhbC1pdGVtIDptb2RpZmllcj1cIm5vcm1hbGl6ZWRNb2RpZmllclwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtc3BlZWQtZGlhbC1pdGVtPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtc3BlZWQtZGlhbC1pdGVtLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1zcGVlZC1kaWFsLWl0ZW0nO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgbW9kaWZpZXJdXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1zcGVlZC1kaWFsLWl0ZW0gOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1zcGVlZC1kaWFsLWl0ZW0+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1zcGVlZC1kaWFsLWl0ZW0uanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMsIG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLXNwZWVkLWRpYWwtaXRlbSc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLWRpYWxvZyA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIiB2LWJpbmQ9XCJvcmRlcmVkUHJvcHNcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLWRpYWxvZz5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLWRpYWxvZy5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgaGFzT3B0aW9ucywgZGlhbG9nLCBkZXJpdmVEQkIsIHBvcnRhbCwgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtZGlhbG9nJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIGhhc09wdGlvbnMsIGRpYWxvZywgZGVyaXZlREJCLCBwb3J0YWwsIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtZGlhbG9nIDptb2RpZmllcj1cIm5vcm1hbGl6ZWRNb2RpZmllclwiIHYtYmluZD1cIm9yZGVyZWRQcm9wc1wiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtZGlhbG9nPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtZGlhbG9nLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBoYXNPcHRpb25zLCBkaWFsb2csIGRlcml2ZURCQiwgcG9ydGFsLCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1kaWFsb2cnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgaGFzT3B0aW9ucywgZGlhbG9nLCBkZXJpdmVEQkIsIHBvcnRhbCwgbW9kaWZpZXJdXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1hY3Rpb24tc2hlZXQgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCIgdi1iaW5kPVwib3JkZXJlZFByb3BzXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1hY3Rpb24tc2hlZXQ+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1hY3Rpb24tc2hlZXQuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMsIGhhc09wdGlvbnMsIGRpYWxvZywgZGVyaXZlREJCLCBwb3J0YWwsIG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLWFjdGlvbi1zaGVldCc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBoYXNPcHRpb25zLCBkaWFsb2csIGRlcml2ZURCQiwgcG9ydGFsLCBtb2RpZmllcl1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLWFjdGlvbi1zaGVldCA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIiB2LWJpbmQ9XCJvcmRlcmVkUHJvcHNcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLWFjdGlvbi1zaGVldD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLWFjdGlvbi1zaGVldC5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgaGFzT3B0aW9ucywgZGlhbG9nLCBkZXJpdmVEQkIsIHBvcnRhbCwgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtYWN0aW9uLXNoZWV0JztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIGhhc09wdGlvbnMsIGRpYWxvZywgZGVyaXZlREJCLCBwb3J0YWwsIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtYWN0aW9uLXNoZWV0LWJ1dHRvbiA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLWFjdGlvbi1zaGVldC1idXR0b24+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1hY3Rpb24tc2hlZXQtYnV0dG9uLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1hY3Rpb24tc2hlZXQtYnV0dG9uJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtYWN0aW9uLXNoZWV0LWJ1dHRvbiA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLWFjdGlvbi1zaGVldC1idXR0b24+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1hY3Rpb24tc2hlZXQtYnV0dG9uLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1hY3Rpb24tc2hlZXQtYnV0dG9uJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtbW9kYWwgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1tb2RhbD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLW1vZGFsLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBoaWRhYmxlLCBoYXNPcHRpb25zLCBkZXJpdmVEQkIsIHBvcnRhbCwgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtbW9kYWwnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgaGlkYWJsZSwgaGFzT3B0aW9ucywgZGVyaXZlREJCLCBwb3J0YWwsIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtbW9kYWwgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1tb2RhbD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLW1vZGFsLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBoaWRhYmxlLCBoYXNPcHRpb25zLCBkZXJpdmVEQkIsIHBvcnRhbCwgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtbW9kYWwnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgaGlkYWJsZSwgaGFzT3B0aW9ucywgZGVyaXZlREJCLCBwb3J0YWwsIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtdG9hc3QgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy10b2FzdD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLXRvYXN0LmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBoYXNPcHRpb25zLCBkZXJpdmVEQkIsIHBvcnRhbCwgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtdG9hc3QnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgaGFzT3B0aW9ucywgZGVyaXZlREJCLCBwb3J0YWwsIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtdG9hc3QgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy10b2FzdD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLXRvYXN0LmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBoYXNPcHRpb25zLCBkZXJpdmVEQkIsIHBvcnRhbCwgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtdG9hc3QnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgaGFzT3B0aW9ucywgZGVyaXZlREJCLCBwb3J0YWwsIG1vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtcG9wb3ZlciB2LWJpbmQ9XCJvcmRlcmVkUHJvcHNcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLXBvcG92ZXI+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1wb3BvdmVyLmpzJztcbiAgaW1wb3J0IHsgaGlkYWJsZSwgaGFzT3B0aW9ucywgZGlhbG9nLCBkZXJpdmVFdmVudHMsIGRlcml2ZURCQiwgcG9ydGFsIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLXBvcG92ZXInO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2hpZGFibGUsIGhhc09wdGlvbnMsIGRpYWxvZywgZGVyaXZlRXZlbnRzKG5hbWUpLCBkZXJpdmVEQkIsIHBvcnRhbF0sXG5cbiAgICBwcm9wczoge1xuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIHZhbGlkYXRvcih2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5fX2lzVnVlIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBFdmVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBub3JtYWxpemVkVGFyZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YXJnZXQuJGVsIHx8IHRoaXMudGFyZ2V0O1xuICAgICAgfSxcbiAgICAgIG5vcm1hbGl6ZWRPcHRpb25zKCkge1xuICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLm5vcm1hbGl6ZWRUYXJnZXQsXG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtcG9wb3ZlciB2LWJpbmQ9XCJvcmRlcmVkUHJvcHNcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLXBvcG92ZXI+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1wb3BvdmVyLmpzJztcbiAgaW1wb3J0IHsgaGlkYWJsZSwgaGFzT3B0aW9ucywgZGlhbG9nLCBkZXJpdmVFdmVudHMsIGRlcml2ZURCQiwgcG9ydGFsIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLXBvcG92ZXInO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2hpZGFibGUsIGhhc09wdGlvbnMsIGRpYWxvZywgZGVyaXZlRXZlbnRzKG5hbWUpLCBkZXJpdmVEQkIsIHBvcnRhbF0sXG5cbiAgICBwcm9wczoge1xuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIHZhbGlkYXRvcih2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5fX2lzVnVlIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBFdmVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBub3JtYWxpemVkVGFyZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YXJnZXQuJGVsIHx8IHRoaXMudGFyZ2V0O1xuICAgICAgfSxcbiAgICAgIG5vcm1hbGl6ZWRPcHRpb25zKCkge1xuICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLm5vcm1hbGl6ZWRUYXJnZXQsXG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtYWxlcnQtZGlhbG9nIDptb2RpZmllcj1cIm5vcm1hbGl6ZWRNb2RpZmllclwiIHYtYmluZD1cIm9yZGVyZWRQcm9wc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJhbGVydC1kaWFsb2ctdGl0bGVcIj5cbiAgICAgIDxzbG90IG5hbWU9XCJ0aXRsZVwiPnt7dGl0bGV9fTwvc2xvdD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYWxlcnQtZGlhbG9nLWNvbnRlbnRcIj5cbiAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYWxlcnQtZGlhbG9nLWZvb3RlclwiPlxuICAgICAgPHNsb3QgbmFtZT1cImZvb3RlclwiPlxuICAgICAgICA8b25zLWFsZXJ0LWRpYWxvZy1idXR0b24gdi1mb3I9XCIoaGFuZGxlciwga2V5KSBpbiBmb290ZXJcIiA6a2V5PVwia2V5XCIgQGNsaWNrPVwiaGFuZGxlclwiPnt7a2V5fX08L29ucy1hbGVydC1kaWFsb2ctYnV0dG9uPlxuICAgICAgPC9zbG90PlxuICAgIDwvZGl2PlxuICA8L29ucy1hbGVydC1kaWFsb2c+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1hbGVydC1kaWFsb2cuanMnO1xuICBpbXBvcnQgeyBoYXNPcHRpb25zLCBkaWFsb2csIGRlcml2ZUV2ZW50cywgZGVyaXZlREJCLCBwb3J0YWwsIG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLWFsZXJ0LWRpYWxvZyc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbaGFzT3B0aW9ucywgZGlhbG9nLCBkZXJpdmVFdmVudHMobmFtZSksIGRlcml2ZURCQiwgcG9ydGFsLCBtb2RpZmllcl0sXG5cbiAgICBwcm9wczoge1xuICAgICAgdGl0bGU6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgICB9LFxuICAgICAgZm9vdGVyOiB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgdmFsaWRhdG9yKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlKS5ldmVyeShrZXkgPT4gdmFsdWVba2V5XSBpbnN0YW5jZW9mIEZ1bmN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLWFsZXJ0LWRpYWxvZyA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIiB2LWJpbmQ9XCJvcmRlcmVkUHJvcHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWxlcnQtZGlhbG9nLXRpdGxlXCI+XG4gICAgICA8c2xvdCBuYW1lPVwidGl0bGVcIj57e3RpdGxlfX08L3Nsb3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImFsZXJ0LWRpYWxvZy1jb250ZW50XCI+XG4gICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImFsZXJ0LWRpYWxvZy1mb290ZXJcIj5cbiAgICAgIDxzbG90IG5hbWU9XCJmb290ZXJcIj5cbiAgICAgICAgPG9ucy1hbGVydC1kaWFsb2ctYnV0dG9uIHYtZm9yPVwiKGhhbmRsZXIsIGtleSkgaW4gZm9vdGVyXCIgOmtleT1cImtleVwiIEBjbGljaz1cImhhbmRsZXJcIj57e2tleX19PC9vbnMtYWxlcnQtZGlhbG9nLWJ1dHRvbj5cbiAgICAgIDwvc2xvdD5cbiAgICA8L2Rpdj5cbiAgPC9vbnMtYWxlcnQtZGlhbG9nPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtYWxlcnQtZGlhbG9nLmpzJztcbiAgaW1wb3J0IHsgaGFzT3B0aW9ucywgZGlhbG9nLCBkZXJpdmVFdmVudHMsIGRlcml2ZURCQiwgcG9ydGFsLCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1hbGVydC1kaWFsb2cnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2hhc09wdGlvbnMsIGRpYWxvZywgZGVyaXZlRXZlbnRzKG5hbWUpLCBkZXJpdmVEQkIsIHBvcnRhbCwgbW9kaWZpZXJdLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgIHRpdGxlOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgICAgfSxcbiAgICAgIGZvb3Rlcjoge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIHZhbGlkYXRvcih2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZSkuZXZlcnkoa2V5ID0+IHZhbHVlW2tleV0gaW5zdGFuY2VvZiBGdW5jdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1zcGVlZC1kaWFsPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtc3BlZWQtZGlhbD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLXNwZWVkLWRpYWwuanMnO1xuICBpbXBvcnQgeyBoaWRhYmxlLCBkZXJpdmVFdmVudHMgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtc3BlZWQtZGlhbCc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBoaWRhYmxlXSxcblxuICAgIGVtaXRzOiBbJ3VwZGF0ZTpvcGVuJ10sXG5cbiAgICBwcm9wczoge1xuICAgICAgb3Blbjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgX3Nob3VsZFVwZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbiAhPT0gdW5kZWZpbmVkICYmIHRoaXMub3BlbiAhPT0gdGhpcy4kZWwuaXNPcGVuKCk7XG4gICAgICB9LFxuICAgICAgX3VwZGF0ZVRvZ2dsZSgpIHtcbiAgICAgICAgdGhpcy5fc2hvdWxkVXBkYXRlKCkgJiYgdGhpcy4kZWxbdGhpcy5vcGVuID8gJ3Nob3dJdGVtcycgOiAnaGlkZUl0ZW1zJ10uY2FsbCh0aGlzLiRlbCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHdhdGNoOiB7XG4gICAgICBvcGVuKCkge1xuICAgICAgICB0aGlzLl91cGRhdGVUb2dnbGUoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbW91bnRlZCgpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZU9wZW5IYW5kbGVyID0gKCkgPT4gdGhpcy5fc2hvdWxkVXBkYXRlKCkgJiYgdGhpcy4kZW1pdCgndXBkYXRlOm9wZW4nLCB0aGlzLiRlbC5pc09wZW4oKSk7XG5cbiAgICAgIFsnb3BlbicsICdjbG9zZSddLmZvckVhY2goZXZlbnQgPT4gdGhpcy4kZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgdGhpcy5fdXBkYXRlT3BlbkhhbmRsZXIpKTtcblxuICAgICAgdGhpcy5fdXBkYXRlVG9nZ2xlKCk7XG4gICAgfSxcblxuICAgIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgICBbJ29wZW4nLCAnY2xvc2UnXS5mb3JFYWNoKGV2ZW50ID0+IHRoaXMuJGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIHRoaXMuX3VwZGF0ZU9wZW5IYW5kbGVyKSk7XG4gICAgfVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtc3BlZWQtZGlhbD5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLXNwZWVkLWRpYWw+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1zcGVlZC1kaWFsLmpzJztcbiAgaW1wb3J0IHsgaGlkYWJsZSwgZGVyaXZlRXZlbnRzIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLXNwZWVkLWRpYWwnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2Rlcml2ZUV2ZW50cyhuYW1lKSwgaGlkYWJsZV0sXG5cbiAgICBlbWl0czogWyd1cGRhdGU6b3BlbiddLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgIG9wZW46IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIF9zaG91bGRVcGRhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZW4gIT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wZW4gIT09IHRoaXMuJGVsLmlzT3BlbigpO1xuICAgICAgfSxcbiAgICAgIF91cGRhdGVUb2dnbGUoKSB7XG4gICAgICAgIHRoaXMuX3Nob3VsZFVwZGF0ZSgpICYmIHRoaXMuJGVsW3RoaXMub3BlbiA/ICdzaG93SXRlbXMnIDogJ2hpZGVJdGVtcyddLmNhbGwodGhpcy4kZWwpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICB3YXRjaDoge1xuICAgICAgb3BlbigpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVG9nZ2xlKCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIG1vdW50ZWQoKSB7XG4gICAgICB0aGlzLl91cGRhdGVPcGVuSGFuZGxlciA9ICgpID0+IHRoaXMuX3Nob3VsZFVwZGF0ZSgpICYmIHRoaXMuJGVtaXQoJ3VwZGF0ZTpvcGVuJywgdGhpcy4kZWwuaXNPcGVuKCkpO1xuXG4gICAgICBbJ29wZW4nLCAnY2xvc2UnXS5mb3JFYWNoKGV2ZW50ID0+IHRoaXMuJGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIHRoaXMuX3VwZGF0ZU9wZW5IYW5kbGVyKSk7XG5cbiAgICAgIHRoaXMuX3VwZGF0ZVRvZ2dsZSgpO1xuICAgIH0sXG5cbiAgICBiZWZvcmVEZXN0cm95KCkge1xuICAgICAgWydvcGVuJywgJ2Nsb3NlJ10uZm9yRWFjaChldmVudCA9PiB0aGlzLiRlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCB0aGlzLl91cGRhdGVPcGVuSGFuZGxlcikpO1xuICAgIH1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLWNhcm91c2VsXG4gICAgQHBvc3RjaGFuZ2Uuc2VsZj1cIiRlbWl0KCd1cGRhdGU6YWN0aXZlSW5kZXgnLCAkZXZlbnQuYWN0aXZlSW5kZXgpXCJcbiAgPlxuICAgIDxkaXY+XG4gICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdj48L2Rpdj5cbiAgPC9vbnMtY2Fyb3VzZWw+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1jYXJvdXNlbC5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cyB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1jYXJvdXNlbCc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpXSxcbiAgICBlbWl0czogWyd1cGRhdGU6YWN0aXZlSW5kZXgnXSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLWNhcm91c2VsXG4gICAgQHBvc3RjaGFuZ2Uuc2VsZj1cIiRlbWl0KCd1cGRhdGU6YWN0aXZlSW5kZXgnLCAkZXZlbnQuYWN0aXZlSW5kZXgpXCJcbiAgPlxuICAgIDxkaXY+XG4gICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdj48L2Rpdj5cbiAgPC9vbnMtY2Fyb3VzZWw+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1jYXJvdXNlbC5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cyB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1jYXJvdXNlbCc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpXSxcbiAgICBlbWl0czogWyd1cGRhdGU6YWN0aXZlSW5kZXgnXSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLXRhYiA6YWN0aXZlPVwiYWN0aXZlIHx8IG51bGxcIiBAY2xpY2sucHJldmVudD1cImFjdGlvblwiPlxuICA8L29ucy10YWI+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy10YWIuanMnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAndi1vbnMtdGFiJyxcbiAgICBpbmplY3Q6IFsndGFiYmFyJ10sXG4gICAgZW1pdHM6IFsnY2xpY2snXSxcblxuICAgIHByb3BzOiB7XG4gICAgICBwYWdlOiB7IH0sXG4gICAgICBwcm9wczogeyB9LFxuICAgICAgYWN0aXZlOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW5cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgYWN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGxldCBydW5EZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2xpY2snLCB7IHByZXZlbnREZWZhdWx0OiAoKSA9PiBydW5EZWZhdWx0ID0gZmFsc2UgfSk7XG5cbiAgICAgICAgaWYgKHJ1bkRlZmF1bHQpIHtcbiAgICAgICAgICB0aGlzLnRhYmJhci4kZWwuc2V0QWN0aXZlVGFiKHRoaXMuJGVsLmluZGV4LCB7IHJlamVjdDogZmFsc2UsIC4uLnRoaXMudGFiYmFyLm9wdGlvbnMgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd2F0Y2g6IHtcbiAgICAgIGFjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy4kZWwuc2V0QWN0aXZlKHRoaXMuYWN0aXZlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy10YWIgOmFjdGl2ZT1cImFjdGl2ZSB8fCBudWxsXCIgQGNsaWNrLnByZXZlbnQ9XCJhY3Rpb25cIj5cbiAgPC9vbnMtdGFiPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtdGFiLmpzJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ3Ytb25zLXRhYicsXG4gICAgaW5qZWN0OiBbJ3RhYmJhciddLFxuICAgIGVtaXRzOiBbJ2NsaWNrJ10sXG5cbiAgICBwcm9wczoge1xuICAgICAgcGFnZTogeyB9LFxuICAgICAgcHJvcHM6IHsgfSxcbiAgICAgIGFjdGl2ZToge1xuICAgICAgICB0eXBlOiBCb29sZWFuXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFjdGlvbihldmVudCkge1xuICAgICAgICBsZXQgcnVuRGVmYXVsdCA9IHRydWU7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2NsaWNrJywgeyBwcmV2ZW50RGVmYXVsdDogKCkgPT4gcnVuRGVmYXVsdCA9IGZhbHNlIH0pO1xuXG4gICAgICAgIGlmIChydW5EZWZhdWx0KSB7XG4gICAgICAgICAgdGhpcy50YWJiYXIuJGVsLnNldEFjdGl2ZVRhYih0aGlzLiRlbC5pbmRleCwgeyByZWplY3Q6IGZhbHNlLCAuLi50aGlzLnRhYmJhci5vcHRpb25zIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHdhdGNoOiB7XG4gICAgICBhY3RpdmUoKSB7XG4gICAgICAgIHRoaXMuJGVsLnNldEFjdGl2ZSh0aGlzLmFjdGl2ZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtdGFiYmFyXG4gICAgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCJcbiAgICBAcHJlY2hhbmdlLnNlbGY9XCIkbmV4dFRpY2soKCkgPT4gISRldmVudC5kZXRhaWwuY2FuY2VsZWQgJiYgJGVtaXQoJ3VwZGF0ZTphY3RpdmVJbmRleCcsICRldmVudC5pbmRleCkpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJiYXJfX2NvbnRlbnRcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxzbG90IG5hbWU9XCJwYWdlc1wiPlxuICAgICAgICAgIDxjb21wb25lbnQgdi1mb3I9XCJ0YWIgaW4gdGFic1wiIHYtYmluZD1cInsgLi4udW5yZWNvZ25pemVkTGlzdGVuZXJzLCAuLi50YWIucHJvcHMgfVwiIDppcz1cInRhYi5wYWdlXCIgOmtleT1cIih0YWIucGFnZS5rZXkgfHwgdGFiLnBhZ2UubmFtZSB8fCBfdGFiS2V5KHRhYikpXCI+PC9jb21wb25lbnQ+XG4gICAgICAgIDwvc2xvdD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidGFiYmFyXCIgOnN0eWxlPVwidGFiYmFyU3R5bGVcIj5cbiAgICAgIDxzbG90PlxuICAgICAgICA8di1vbnMtdGFiIHYtZm9yPVwidGFiIGluIHRhYnNcIiB2LWJpbmQ9XCJ0YWJcIiA6a2V5PVwiX3RhYktleSh0YWIpXCI+PC92LW9ucy10YWI+XG4gICAgICA8L3Nsb3Q+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFiYmFyX19ib3JkZXJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9vbnMtdGFiYmFyPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0IFRhYmJhckVsZW1lbnQgZnJvbSAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLXRhYmJhci5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgaGlkYWJsZSwgc2VsZlByb3ZpZGVyLCBtb2RpZmllciwgdW5yZWNvZ25pemVkTGlzdGVuZXJzIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLXRhYmJhcic7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBoaWRhYmxlLCBzZWxmUHJvdmlkZXIsIG1vZGlmaWVyLCB1bnJlY29nbml6ZWRMaXN0ZW5lcnMoVGFiYmFyRWxlbWVudCldLFxuICAgIGVtaXRzOiBbJ3VwZGF0ZTphY3RpdmVJbmRleCddLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgIHRhYnM6IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIHZhbGlkYXRvcih2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5ldmVyeSh0YWIgPT4gWydpY29uJywgJ2xhYmVsJywgJ3BhZ2UnXS5zb21lKHByb3AgPT4gISFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhYiwgcHJvcCkpKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRhYmJhclN0eWxlOiB7XG4gICAgICAgIHR5cGU6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgX3RhYktleSh0YWIpIHtcbiAgICAgICAgcmV0dXJuIHRhYi5rZXkgfHwgdGFiLmxhYmVsIHx8IHRhYi5pY29uO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy10YWJiYXJcbiAgICA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIlxuICAgIEBwcmVjaGFuZ2Uuc2VsZj1cIiRuZXh0VGljaygoKSA9PiAhJGV2ZW50LmRldGFpbC5jYW5jZWxlZCAmJiAkZW1pdCgndXBkYXRlOmFjdGl2ZUluZGV4JywgJGV2ZW50LmluZGV4KSlcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInRhYmJhcl9fY29udGVudFwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPHNsb3QgbmFtZT1cInBhZ2VzXCI+XG4gICAgICAgICAgPGNvbXBvbmVudCB2LWZvcj1cInRhYiBpbiB0YWJzXCIgdi1iaW5kPVwieyAuLi51bnJlY29nbml6ZWRMaXN0ZW5lcnMsIC4uLnRhYi5wcm9wcyB9XCIgOmlzPVwidGFiLnBhZ2VcIiA6a2V5PVwiKHRhYi5wYWdlLmtleSB8fCB0YWIucGFnZS5uYW1lIHx8IF90YWJLZXkodGFiKSlcIj48L2NvbXBvbmVudD5cbiAgICAgICAgPC9zbG90PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJiYXJcIiA6c3R5bGU9XCJ0YWJiYXJTdHlsZVwiPlxuICAgICAgPHNsb3Q+XG4gICAgICAgIDx2LW9ucy10YWIgdi1mb3I9XCJ0YWIgaW4gdGFic1wiIHYtYmluZD1cInRhYlwiIDprZXk9XCJfdGFiS2V5KHRhYilcIj48L3Ytb25zLXRhYj5cbiAgICAgIDwvc2xvdD5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJiYXJfX2JvcmRlclwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L29ucy10YWJiYXI+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgVGFiYmFyRWxlbWVudCBmcm9tICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtdGFiYmFyLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzLCBoaWRhYmxlLCBzZWxmUHJvdmlkZXIsIG1vZGlmaWVyLCB1bnJlY29nbml6ZWRMaXN0ZW5lcnMgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtdGFiYmFyJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIGhpZGFibGUsIHNlbGZQcm92aWRlciwgbW9kaWZpZXIsIHVucmVjb2duaXplZExpc3RlbmVycyhUYWJiYXJFbGVtZW50KV0sXG4gICAgZW1pdHM6IFsndXBkYXRlOmFjdGl2ZUluZGV4J10sXG5cbiAgICBwcm9wczoge1xuICAgICAgdGFiczoge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgdmFsaWRhdG9yKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLmV2ZXJ5KHRhYiA9PiBbJ2ljb24nLCAnbGFiZWwnLCAncGFnZSddLnNvbWUocHJvcCA9PiAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFiLCBwcm9wKSkpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdGFiYmFyU3R5bGU6IHtcbiAgICAgICAgdHlwZTogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBfdGFiS2V5KHRhYikge1xuICAgICAgICByZXR1cm4gdGFiLmtleSB8fCB0YWIubGFiZWwgfHwgdGFiLmljb247XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLWJhY2stYnV0dG9uIDptb2RpZmllcj1cIm5vcm1hbGl6ZWRNb2RpZmllclwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtYmFjay1idXR0b24+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1iYWNrLWJ1dHRvbi5qcyc7XG4gIGltcG9ydCB7IG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ3Ytb25zLWJhY2stYnV0dG9uJyxcbiAgICBpbmplY3Q6IFsnbmF2aWdhdG9yJ10sXG4gICAgbWl4aW5zOiBbbW9kaWZpZXJdXG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1iYWNrLWJ1dHRvbiA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gIDwvb25zLWJhY2stYnV0dG9uPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtYmFjay1idXR0b24uanMnO1xuICBpbXBvcnQgeyBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICd2LW9ucy1iYWNrLWJ1dHRvbicsXG4gICAgaW5qZWN0OiBbJ25hdmlnYXRvciddLFxuICAgIG1peGluczogW21vZGlmaWVyXVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtbmF2aWdhdG9yIEBwb3N0cG9wLnNlbGY9XCJfY2hlY2tVc2VySW50ZXJhY3Rpb25cIiA6b3B0aW9ucy5wcm9wPVwib3B0aW9uc1wiPlxuICAgIDxzbG90PlxuICAgICAgPGNvbXBvbmVudFxuICAgICAgICB2LWZvcj1cIihwYWdlLCBpbmRleCkgaW4gZXh0ZW5kc0ZpeFwiXG4gICAgICAgIDppcz1cInBhZ2VcIlxuICAgICAgICA6a2V5PVwiaW5kZXhcIlxuICAgICAgICB2LWJpbmQ9XCJ7IC4uLnVucmVjb2duaXplZExpc3RlbmVycywgLi4ucGFnZS5vbnNOYXZpZ2F0b3JQcm9wcyB9XCJcbiAgICAgID48L2NvbXBvbmVudD5cbiAgICA8L3Nsb3Q+XG4gIDwvb25zLW5hdmlnYXRvcj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCBOYXZpZ2F0b3JFbGVtZW50IGZyb20gJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1uYXZpZ2F0b3IuanMnO1xuICBpbXBvcnQgeyBoYXNPcHRpb25zLCBzZWxmUHJvdmlkZXIsIGRlcml2ZUV2ZW50cywgZGVyaXZlREJCLCB1bnJlY29nbml6ZWRMaXN0ZW5lcnMgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtbmF2aWdhdG9yJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtoYXNPcHRpb25zLCBzZWxmUHJvdmlkZXIsIGRlcml2ZUV2ZW50cyhuYW1lKSwgZGVyaXZlREJCLCB1bnJlY29nbml6ZWRMaXN0ZW5lcnMoTmF2aWdhdG9yRWxlbWVudCldLFxuXG4gICAgZW1pdHM6IFsndXBkYXRlOnBhZ2VTdGFjayddLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgIHBhZ2VTdGFjazoge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGludGVybmFsUGFnZVN0YWNrOiB0aGlzLnBhZ2VTdGFja1xuICAgICAgfTtcbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGV4dGVuZHNGaXgoKSB7XG4gICAgICAgIC8vIHdvcmthcm91bmQgZm9yIFZ1ZSBidWcgd2hlcmUgZXh0ZW5kcyBkb2Vzbid0IHdvcmsgd2l0aCBydW50aW1lIHRlbXBsYXRlIGNvbXBpbGF0aW9uXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy9jb3JlL2lzc3Vlcy82MjQ5XG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsUGFnZVN0YWNrLm1hcChwYWdlID0+XG4gICAgICAgICAgcGFnZS5leHRlbmRzID9cbiAgICAgICAgICAgIHsuLi5wYWdlLCB0ZW1wbGF0ZTogcGFnZS5leHRlbmRzLnRlbXBsYXRlfSA6XG4gICAgICAgICAgICBwYWdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGlzUmVhZHkoKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KCdfcmVhZHknKSAmJiB0aGlzLl9yZWFkeSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fcmVhZHk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfSxcbiAgICAgIG9uRGV2aWNlQmFja0J1dHRvbihldmVudCkge1xuICAgICAgICBpZiAodGhpcy5pbnRlcm5hbFBhZ2VTdGFjay5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgY29uc3QgbGFzdFRvcFBhZ2UgPSB0aGlzLiRlbC5jaGlsZHJlblt0aGlzLmludGVybmFsUGFnZVN0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLl9maW5kU2Nyb2xsUGFnZShsYXN0VG9wUGFnZSk7XG4gICAgICAgICAgY29uc3Qgc2Nyb2xsVmFsdWUgPSBzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCB8fCAwO1xuICAgICAgICAgIHRoaXMuX3BhZ2VTdGFja1VwZGF0ZSA9IHtcbiAgICAgICAgICAgIGxhc3RUb3BQYWdlLFxuICAgICAgICAgICAgbGFzdExlbmd0aDogdGhpcy5pbnRlcm5hbFBhZ2VTdGFjay5sZW5ndGgsXG4gICAgICAgICAgICBjdXJyZW50TGVuZ3RoOiB0aGlzLmludGVybmFsUGFnZVN0YWNrLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICByZXN0b3JlU2Nyb2xsOiAoKSA9PiBzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFZhbHVlXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMuX3BvcFBhZ2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBldmVudC5jYWxsUGFyZW50SGFuZGxlcigpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2ZpbmRTY3JvbGxQYWdlKHBhZ2UpIHtcbiAgICAgICAgY29uc3QgbmV4dFBhZ2UgPSBwYWdlLl9jb250ZW50RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPT09IDFcbiAgICAgICAgICAmJiB0aGlzLiRvbnMuX29ucy5fdXRpbC5nZXRUb3BQYWdlKHBhZ2UuX2NvbnRlbnRFbGVtZW50LmNoaWxkcmVuWzBdKTtcbiAgICAgICAgcmV0dXJuIG5leHRQYWdlID8gdGhpcy5fZmluZFNjcm9sbFBhZ2UobmV4dFBhZ2UpIDogcGFnZTtcbiAgICAgIH0sXG4gICAgICBfZWFjaFBhZ2Uoc3RhcnQsIGVuZCwgY2IpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICBjYih0aGlzLiRlbC5jaGlsZHJlbltpXSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfcmVhdHRhY2hQYWdlKHBhZ2VFbGVtZW50LCBwb3NpdGlvbiA9IG51bGwsIHJlc3RvcmVTY3JvbGwpIHtcbiAgICAgICAgdGhpcy4kZWwuaW5zZXJ0QmVmb3JlKHBhZ2VFbGVtZW50LCBwb3NpdGlvbik7XG4gICAgICAgIHJlc3RvcmVTY3JvbGwgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiByZXN0b3JlU2Nyb2xsKCk7XG4gICAgICAgIHBhZ2VFbGVtZW50Ll9pc1Nob3duID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBfcmVkZXRhY2hQYWdlKHBhZ2VFbGVtZW50KSB7XG4gICAgICAgIHBhZ2VFbGVtZW50Ll9kZXN0cm95KCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH0sXG4gICAgICBfYW5pbWF0ZSh7IGxhc3RMZW5ndGgsIGN1cnJlbnRMZW5ndGgsIGxhc3RUb3BQYWdlLCBjdXJyZW50VG9wUGFnZSwgY3VycmVudFRvcFBhZ2VPcHRpb25zLCByZXN0b3JlU2Nyb2xsIH0pIHtcbiAgICAgICAgY29uc3QgcHVzaGVkT3B0aW9ucyA9IHRoaXMuaW50ZXJuYWxQYWdlU3RhY2tbdGhpcy5pbnRlcm5hbFBhZ2VTdGFjay5sZW5ndGggLSAxXS5vbnNOYXZpZ2F0b3JPcHRpb25zXG4gICAgICAgICAgfHwgY3VycmVudFRvcFBhZ2VPcHRpb25zXG4gICAgICAgICAgfHwge307XG5cbiAgICAgICAgLy8gUHVzaFxuICAgICAgICBpZiAoY3VycmVudExlbmd0aCA+IGxhc3RMZW5ndGgpIHtcbiAgICAgICAgICBsZXQgaXNSZWF0dGFjaGVkID0gZmFsc2U7XG4gICAgICAgICAgaWYgKGxhc3RUb3BQYWdlLnBhcmVudEVsZW1lbnQgIT09IHRoaXMuJGVsKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWF0dGFjaFBhZ2UobGFzdFRvcFBhZ2UsIHRoaXMuJGVsLmNoaWxkcmVuW2xhc3RMZW5ndGggLSAxXSwgcmVzdG9yZVNjcm9sbCk7XG4gICAgICAgICAgICBpc1JlYXR0YWNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgbGFzdExlbmd0aC0tO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2VhY2hQYWdlKGxhc3RMZW5ndGgsIGN1cnJlbnRMZW5ndGgsIGVsID0+IHsgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nIH0pO1xuICAgICAgICAgIHRoaXMuX2VhY2hQYWdlKGxhc3RMZW5ndGgsIGN1cnJlbnRMZW5ndGggLSAxLCBlbCA9PiB7IGVsLnB1c2hlZE9wdGlvbnMgPSBwdXNoZWRPcHRpb25zIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuJGVsLl9wdXNoUGFnZSh7IC4uLnB1c2hlZE9wdGlvbnMsIGxlYXZlUGFnZTogbGFzdFRvcFBhZ2UgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lYWNoUGFnZShsYXN0TGVuZ3RoLCBjdXJyZW50TGVuZ3RoLCBlbCA9PiB7IGVsLnN0eWxlLnZpc2liaWxpdHkgPSAnJyB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lYWNoUGFnZShsYXN0TGVuZ3RoIC0gMSwgY3VycmVudExlbmd0aCAtIDEsIGVsID0+IHsgZWwuc3R5bGUuZGlzcGxheSA9ICdub25lJyB9KTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzUmVhdHRhY2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZGV0YWNoUGFnZShsYXN0VG9wUGFnZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sICgpID0+IHsgLy8gcHVzaCBmYWlsZWQgb3Igd2FzIGNhbmNlbGVkXG4gICAgICAgICAgICAgIHRoaXMuX2NhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5fcG9wUGFnZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQb3BcbiAgICAgICAgaWYgKGN1cnJlbnRMZW5ndGggPCBsYXN0TGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5fcmVhdHRhY2hQYWdlKGxhc3RUb3BQYWdlLCBudWxsLCByZXN0b3JlU2Nyb2xsKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy4kZWwuX3BvcFBhZ2UoeyB9LCAoKSA9PiB0aGlzLl9yZWRldGFjaFBhZ2UobGFzdFRvcFBhZ2UpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlcGxhY2UgcGFnZVxuICAgICAgICBjdXJyZW50VG9wUGFnZS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIHRoaXMuX3JlYXR0YWNoUGFnZShsYXN0VG9wUGFnZSwgY3VycmVudFRvcFBhZ2UsIHJlc3RvcmVTY3JvbGwpO1xuICAgICAgICByZXR1cm4gdGhpcy4kZWwuX3B1c2hQYWdlKHsgLi4ucHVzaGVkT3B0aW9ucywgX3JlcGxhY2VQYWdlOiB0cnVlIH0pXG4gICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5fcmVkZXRhY2hQYWdlKGxhc3RUb3BQYWdlKSk7XG4gICAgICB9LFxuICAgICAgX2NoZWNrVXNlckludGVyYWN0aW9uKGV2ZW50KSB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgaW50ZXJuYWwgcGFnZSBzdGFjayBpbiB0aGUgY2FzZSB3aGVyZSB1c2VyIHN3aXBlZCB0byBwb3Agb3IgY2xpY2tlZCBvbnMtYmFjay1idXR0b25cbiAgICAgICAgaWYgKGV2ZW50LnN3aXBlVG9Qb3AgfHwgZXZlbnQub25zQmFja0J1dHRvbikge1xuICAgICAgICAgIHRoaXMuX3BvcFBhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9wb3BQYWdlKCkge1xuICAgICAgICB0aGlzLmludGVybmFsUGFnZVN0YWNrID0gdGhpcy5pbnRlcm5hbFBhZ2VTdGFjay5zbGljZSgwLCAtMSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHdhdGNoOiB7XG4gICAgICBwYWdlU3RhY2soYWZ0ZXIsIGJlZm9yZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlU3RhY2sgIT09IHRoaXMuaW50ZXJuYWxQYWdlU3RhY2spIHtcblxuICAgICAgICAgIGNvbnN0IGxhc3RUb3BQYWdlID0gdGhpcy4kZWwuY2hpbGRyZW5bdGhpcy5pbnRlcm5hbFBhZ2VTdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gdGhpcy5fZmluZFNjcm9sbFBhZ2UobGFzdFRvcFBhZ2UpO1xuICAgICAgICAgIGNvbnN0IHNjcm9sbFZhbHVlID0gc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgfHwgMDtcblxuICAgICAgICAgIHRoaXMuX3BhZ2VTdGFja1VwZGF0ZSA9IHtcbiAgICAgICAgICAgIGxhc3RUb3BQYWdlLFxuICAgICAgICAgICAgbGFzdExlbmd0aDogYmVmb3JlLmxlbmd0aCxcbiAgICAgICAgICAgIGN1cnJlbnRMZW5ndGg6IGFmdGVyLmxlbmd0aCxcbiAgICAgICAgICAgIHJlc3RvcmVTY3JvbGw6ICgpID0+IHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVmFsdWVcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5pbnRlcm5hbFBhZ2VTdGFjayA9IHRoaXMucGFnZVN0YWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcy4kbmV4dFRpY2soKCkgPT4geyB9KTsgLy8gV2FpdHMgdG9vIGxvbmcsIHVwZGF0ZWQoKSBob29rIGlzIGZhc3RlciBhbmQgcHJldmVudHMgZmxpY2tlcmluZ3NcbiAgICAgIH0sXG4gICAgICBpbnRlcm5hbFBhZ2VTdGFjayhhZnRlciwgYmVmb3JlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpwYWdlU3RhY2snLCB0aGlzLmludGVybmFsUGFnZVN0YWNrKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlZCgpIHtcbiAgICAgIGlmICh0aGlzLl9wYWdlU3RhY2tVcGRhdGUpIHtcbiAgICAgICAgbGV0IGN1cnJlbnRUb3BQYWdlID0gdGhpcy4kZWwuY2hpbGRyZW5bdGhpcy5pbnRlcm5hbFBhZ2VTdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgY3VycmVudFRvcFBhZ2VPcHRpb25zID0gdGhpcy5pbnRlcm5hbFBhZ2VTdGFja1t0aGlzLmludGVybmFsUGFnZVN0YWNrLmxlbmd0aCAtIDFdLm9uc05hdmlnYXRvck9wdGlvbnM7XG4gICAgICAgIGxldCB7IGxhc3RUb3BQYWdlIH0gPSB0aGlzLl9wYWdlU3RhY2tVcGRhdGU7XG4gICAgICAgIGNvbnN0IHsgbGFzdExlbmd0aCwgcmVzdG9yZVNjcm9sbCwgY3VycmVudExlbmd0aCB9ID0gdGhpcy5fcGFnZVN0YWNrVXBkYXRlO1xuXG4gICAgICAgIGlmIChjdXJyZW50VG9wUGFnZSAhPT0gbGFzdFRvcFBhZ2UpIHtcbiAgICAgICAgICB0aGlzLl9yZWFkeSA9IHRoaXMuX2FuaW1hdGUoeyBsYXN0TGVuZ3RoLCBjdXJyZW50TGVuZ3RoLCBsYXN0VG9wUGFnZSwgY3VycmVudFRvcFBhZ2UsIGN1cnJlbnRUb3BQYWdlT3B0aW9ucywgcmVzdG9yZVNjcm9sbCB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50TGVuZ3RoICE9PSBsYXN0TGVuZ3RoKSB7XG4gICAgICAgICAgY3VycmVudFRvcFBhZ2UudXBkYXRlQmFja0J1dHRvbihjdXJyZW50TGVuZ3RoID4gMSk7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VG9wUGFnZSA9IGN1cnJlbnRUb3BQYWdlID0gdGhpcy5fcGFnZVN0YWNrVXBkYXRlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1uYXZpZ2F0b3IgQHBvc3Rwb3Auc2VsZj1cIl9jaGVja1VzZXJJbnRlcmFjdGlvblwiIDpvcHRpb25zLnByb3A9XCJvcHRpb25zXCI+XG4gICAgPHNsb3Q+XG4gICAgICA8Y29tcG9uZW50XG4gICAgICAgIHYtZm9yPVwiKHBhZ2UsIGluZGV4KSBpbiBleHRlbmRzRml4XCJcbiAgICAgICAgOmlzPVwicGFnZVwiXG4gICAgICAgIDprZXk9XCJpbmRleFwiXG4gICAgICAgIHYtYmluZD1cInsgLi4udW5yZWNvZ25pemVkTGlzdGVuZXJzLCAuLi5wYWdlLm9uc05hdmlnYXRvclByb3BzIH1cIlxuICAgICAgPjwvY29tcG9uZW50PlxuICAgIDwvc2xvdD5cbiAgPC9vbnMtbmF2aWdhdG9yPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0IE5hdmlnYXRvckVsZW1lbnQgZnJvbSAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLW5hdmlnYXRvci5qcyc7XG4gIGltcG9ydCB7IGhhc09wdGlvbnMsIHNlbGZQcm92aWRlciwgZGVyaXZlRXZlbnRzLCBkZXJpdmVEQkIsIHVucmVjb2duaXplZExpc3RlbmVycyB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1uYXZpZ2F0b3InO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lLFxuICAgIG1peGluczogW2hhc09wdGlvbnMsIHNlbGZQcm92aWRlciwgZGVyaXZlRXZlbnRzKG5hbWUpLCBkZXJpdmVEQkIsIHVucmVjb2duaXplZExpc3RlbmVycyhOYXZpZ2F0b3JFbGVtZW50KV0sXG5cbiAgICBlbWl0czogWyd1cGRhdGU6cGFnZVN0YWNrJ10sXG5cbiAgICBwcm9wczoge1xuICAgICAgcGFnZVN0YWNrOiB7XG4gICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW50ZXJuYWxQYWdlU3RhY2s6IHRoaXMucGFnZVN0YWNrXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgZXh0ZW5kc0ZpeCgpIHtcbiAgICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgVnVlIGJ1ZyB3aGVyZSBleHRlbmRzIGRvZXNuJ3Qgd29yayB3aXRoIHJ1bnRpbWUgdGVtcGxhdGUgY29tcGlsYXRpb25cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL2NvcmUvaXNzdWVzLzYyNDlcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxQYWdlU3RhY2subWFwKHBhZ2UgPT5cbiAgICAgICAgICBwYWdlLmV4dGVuZHMgP1xuICAgICAgICAgICAgey4uLnBhZ2UsIHRlbXBsYXRlOiBwYWdlLmV4dGVuZHMudGVtcGxhdGV9IDpcbiAgICAgICAgICAgIHBhZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgaXNSZWFkeSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoJ19yZWFkeScpICYmIHRoaXMuX3JlYWR5IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9yZWFkeTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9LFxuICAgICAgb25EZXZpY2VCYWNrQnV0dG9uKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmludGVybmFsUGFnZVN0YWNrLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBjb25zdCBsYXN0VG9wUGFnZSA9IHRoaXMuJGVsLmNoaWxkcmVuW3RoaXMuaW50ZXJuYWxQYWdlU3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuX2ZpbmRTY3JvbGxQYWdlKGxhc3RUb3BQYWdlKTtcbiAgICAgICAgICBjb25zdCBzY3JvbGxWYWx1ZSA9IHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIHx8IDA7XG4gICAgICAgICAgdGhpcy5fcGFnZVN0YWNrVXBkYXRlID0ge1xuICAgICAgICAgICAgbGFzdFRvcFBhZ2UsXG4gICAgICAgICAgICBsYXN0TGVuZ3RoOiB0aGlzLmludGVybmFsUGFnZVN0YWNrLmxlbmd0aCxcbiAgICAgICAgICAgIGN1cnJlbnRMZW5ndGg6IHRoaXMuaW50ZXJuYWxQYWdlU3RhY2subGVuZ3RoIC0gMSxcbiAgICAgICAgICAgIHJlc3RvcmVTY3JvbGw6ICgpID0+IHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVmFsdWVcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5fcG9wUGFnZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV2ZW50LmNhbGxQYXJlbnRIYW5kbGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfZmluZFNjcm9sbFBhZ2UocGFnZSkge1xuICAgICAgICBjb25zdCBuZXh0UGFnZSA9IHBhZ2UuX2NvbnRlbnRFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICYmIHRoaXMuJG9ucy5fb25zLl91dGlsLmdldFRvcFBhZ2UocGFnZS5fY29udGVudEVsZW1lbnQuY2hpbGRyZW5bMF0pO1xuICAgICAgICByZXR1cm4gbmV4dFBhZ2UgPyB0aGlzLl9maW5kU2Nyb2xsUGFnZShuZXh0UGFnZSkgOiBwYWdlO1xuICAgICAgfSxcbiAgICAgIF9lYWNoUGFnZShzdGFydCwgZW5kLCBjYikge1xuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgIGNiKHRoaXMuJGVsLmNoaWxkcmVuW2ldKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9yZWF0dGFjaFBhZ2UocGFnZUVsZW1lbnQsIHBvc2l0aW9uID0gbnVsbCwgcmVzdG9yZVNjcm9sbCkge1xuICAgICAgICB0aGlzLiRlbC5pbnNlcnRCZWZvcmUocGFnZUVsZW1lbnQsIHBvc2l0aW9uKTtcbiAgICAgICAgcmVzdG9yZVNjcm9sbCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIHJlc3RvcmVTY3JvbGwoKTtcbiAgICAgICAgcGFnZUVsZW1lbnQuX2lzU2hvd24gPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIF9yZWRldGFjaFBhZ2UocGFnZUVsZW1lbnQpIHtcbiAgICAgICAgcGFnZUVsZW1lbnQuX2Rlc3Ryb3koKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfSxcbiAgICAgIF9hbmltYXRlKHsgbGFzdExlbmd0aCwgY3VycmVudExlbmd0aCwgbGFzdFRvcFBhZ2UsIGN1cnJlbnRUb3BQYWdlLCBjdXJyZW50VG9wUGFnZU9wdGlvbnMsIHJlc3RvcmVTY3JvbGwgfSkge1xuICAgICAgICBjb25zdCBwdXNoZWRPcHRpb25zID0gdGhpcy5pbnRlcm5hbFBhZ2VTdGFja1t0aGlzLmludGVybmFsUGFnZVN0YWNrLmxlbmd0aCAtIDFdLm9uc05hdmlnYXRvck9wdGlvbnNcbiAgICAgICAgICB8fCBjdXJyZW50VG9wUGFnZU9wdGlvbnNcbiAgICAgICAgICB8fCB7fTtcblxuICAgICAgICAvLyBQdXNoXG4gICAgICAgIGlmIChjdXJyZW50TGVuZ3RoID4gbGFzdExlbmd0aCkge1xuICAgICAgICAgIGxldCBpc1JlYXR0YWNoZWQgPSBmYWxzZTtcbiAgICAgICAgICBpZiAobGFzdFRvcFBhZ2UucGFyZW50RWxlbWVudCAhPT0gdGhpcy4kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlYXR0YWNoUGFnZShsYXN0VG9wUGFnZSwgdGhpcy4kZWwuY2hpbGRyZW5bbGFzdExlbmd0aCAtIDFdLCByZXN0b3JlU2Nyb2xsKTtcbiAgICAgICAgICAgIGlzUmVhdHRhY2hlZCA9IHRydWU7XG4gICAgICAgICAgICBsYXN0TGVuZ3RoLS07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fZWFjaFBhZ2UobGFzdExlbmd0aCwgY3VycmVudExlbmd0aCwgZWwgPT4geyBlbC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbicgfSk7XG4gICAgICAgICAgdGhpcy5fZWFjaFBhZ2UobGFzdExlbmd0aCwgY3VycmVudExlbmd0aCAtIDEsIGVsID0+IHsgZWwucHVzaGVkT3B0aW9ucyA9IHB1c2hlZE9wdGlvbnMgfSk7XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy4kZWwuX3B1c2hQYWdlKHsgLi4ucHVzaGVkT3B0aW9ucywgbGVhdmVQYWdlOiBsYXN0VG9wUGFnZSB9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VhY2hQYWdlKGxhc3RMZW5ndGgsIGN1cnJlbnRMZW5ndGgsIGVsID0+IHsgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICcnIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VhY2hQYWdlKGxhc3RMZW5ndGggLSAxLCBjdXJyZW50TGVuZ3RoIC0gMSwgZWwgPT4geyBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnIH0pO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoaXNSZWF0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVkZXRhY2hQYWdlKGxhc3RUb3BQYWdlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgKCkgPT4geyAvLyBwdXNoIGZhaWxlZCBvciB3YXMgY2FuY2VsZWRcbiAgICAgICAgICAgICAgdGhpcy5fY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLl9wb3BQYWdlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBvcFxuICAgICAgICBpZiAoY3VycmVudExlbmd0aCA8IGxhc3RMZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLl9yZWF0dGFjaFBhZ2UobGFzdFRvcFBhZ2UsIG51bGwsIHJlc3RvcmVTY3JvbGwpO1xuICAgICAgICAgIHJldHVybiB0aGlzLiRlbC5fcG9wUGFnZSh7IH0sICgpID0+IHRoaXMuX3JlZGV0YWNoUGFnZShsYXN0VG9wUGFnZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVwbGFjZSBwYWdlXG4gICAgICAgIGN1cnJlbnRUb3BQYWdlLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgdGhpcy5fcmVhdHRhY2hQYWdlKGxhc3RUb3BQYWdlLCBjdXJyZW50VG9wUGFnZSwgcmVzdG9yZVNjcm9sbCk7XG4gICAgICAgIHJldHVybiB0aGlzLiRlbC5fcHVzaFBhZ2UoeyAuLi5wdXNoZWRPcHRpb25zLCBfcmVwbGFjZVBhZ2U6IHRydWUgfSlcbiAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLl9yZWRldGFjaFBhZ2UobGFzdFRvcFBhZ2UpKTtcbiAgICAgIH0sXG4gICAgICBfY2hlY2tVc2VySW50ZXJhY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgLy8gdXBkYXRlIHRoZSBpbnRlcm5hbCBwYWdlIHN0YWNrIGluIHRoZSBjYXNlIHdoZXJlIHVzZXIgc3dpcGVkIHRvIHBvcCBvciBjbGlja2VkIG9ucy1iYWNrLWJ1dHRvblxuICAgICAgICBpZiAoZXZlbnQuc3dpcGVUb1BvcCB8fCBldmVudC5vbnNCYWNrQnV0dG9uKSB7XG4gICAgICAgICAgdGhpcy5fcG9wUGFnZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX3BvcFBhZ2UoKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxQYWdlU3RhY2sgPSB0aGlzLmludGVybmFsUGFnZVN0YWNrLnNsaWNlKDAsIC0xKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd2F0Y2g6IHtcbiAgICAgIHBhZ2VTdGFjayhhZnRlciwgYmVmb3JlKSB7XG4gICAgICAgIGlmICh0aGlzLnBhZ2VTdGFjayAhPT0gdGhpcy5pbnRlcm5hbFBhZ2VTdGFjaykge1xuXG4gICAgICAgICAgY29uc3QgbGFzdFRvcFBhZ2UgPSB0aGlzLiRlbC5jaGlsZHJlblt0aGlzLmludGVybmFsUGFnZVN0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLl9maW5kU2Nyb2xsUGFnZShsYXN0VG9wUGFnZSk7XG4gICAgICAgICAgY29uc3Qgc2Nyb2xsVmFsdWUgPSBzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCB8fCAwO1xuXG4gICAgICAgICAgdGhpcy5fcGFnZVN0YWNrVXBkYXRlID0ge1xuICAgICAgICAgICAgbGFzdFRvcFBhZ2UsXG4gICAgICAgICAgICBsYXN0TGVuZ3RoOiBiZWZvcmUubGVuZ3RoLFxuICAgICAgICAgICAgY3VycmVudExlbmd0aDogYWZ0ZXIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdG9yZVNjcm9sbDogKCkgPT4gc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxWYWx1ZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLmludGVybmFsUGFnZVN0YWNrID0gdGhpcy5wYWdlU3RhY2s7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGlzLiRuZXh0VGljaygoKSA9PiB7IH0pOyAvLyBXYWl0cyB0b28gbG9uZywgdXBkYXRlZCgpIGhvb2sgaXMgZmFzdGVyIGFuZCBwcmV2ZW50cyBmbGlja2VyaW5nc1xuICAgICAgfSxcbiAgICAgIGludGVybmFsUGFnZVN0YWNrKGFmdGVyLCBiZWZvcmUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnBhZ2VTdGFjaycsIHRoaXMuaW50ZXJuYWxQYWdlU3RhY2spO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVkKCkge1xuICAgICAgaWYgKHRoaXMuX3BhZ2VTdGFja1VwZGF0ZSkge1xuICAgICAgICBsZXQgY3VycmVudFRvcFBhZ2UgPSB0aGlzLiRlbC5jaGlsZHJlblt0aGlzLmludGVybmFsUGFnZVN0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBjdXJyZW50VG9wUGFnZU9wdGlvbnMgPSB0aGlzLmludGVybmFsUGFnZVN0YWNrW3RoaXMuaW50ZXJuYWxQYWdlU3RhY2subGVuZ3RoIC0gMV0ub25zTmF2aWdhdG9yT3B0aW9ucztcbiAgICAgICAgbGV0IHsgbGFzdFRvcFBhZ2UgfSA9IHRoaXMuX3BhZ2VTdGFja1VwZGF0ZTtcbiAgICAgICAgY29uc3QgeyBsYXN0TGVuZ3RoLCByZXN0b3JlU2Nyb2xsLCBjdXJyZW50TGVuZ3RoIH0gPSB0aGlzLl9wYWdlU3RhY2tVcGRhdGU7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRUb3BQYWdlICE9PSBsYXN0VG9wUGFnZSkge1xuICAgICAgICAgIHRoaXMuX3JlYWR5ID0gdGhpcy5fYW5pbWF0ZSh7IGxhc3RMZW5ndGgsIGN1cnJlbnRMZW5ndGgsIGxhc3RUb3BQYWdlLCBjdXJyZW50VG9wUGFnZSwgY3VycmVudFRvcFBhZ2VPcHRpb25zLCByZXN0b3JlU2Nyb2xsIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRMZW5ndGggIT09IGxhc3RMZW5ndGgpIHtcbiAgICAgICAgICBjdXJyZW50VG9wUGFnZS51cGRhdGVCYWNrQnV0dG9uKGN1cnJlbnRMZW5ndGggPiAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RUb3BQYWdlID0gY3VycmVudFRvcFBhZ2UgPSB0aGlzLl9wYWdlU3RhY2tVcGRhdGUgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLXNwbGl0dGVyLXNpZGU+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1zcGxpdHRlci1zaWRlPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtc3BsaXR0ZXItc2lkZS5qcyc7XG4gIGltcG9ydCB7IGhhc09wdGlvbnMsIGRlcml2ZUV2ZW50cyB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1zcGxpdHRlci1zaWRlJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtoYXNPcHRpb25zLCBkZXJpdmVFdmVudHMobmFtZSldLFxuXG4gICAgZW1pdHM6IFsndXBkYXRlOm9wZW4nXSxcblxuICAgIHByb3BzOiB7XG4gICAgICBvcGVuOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBhY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX3Nob3VsZFVwZGF0ZSgpICYmIHRoaXMuJGVsW3RoaXMub3BlbiA/ICdvcGVuJyA6ICdjbG9zZSddLmNhbGwodGhpcy4kZWwsIHRoaXMub3B0aW9ucykuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgfSxcbiAgICAgIF9zaG91bGRVcGRhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZW4gIT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wZW4gIT09IHRoaXMuJGVsLmlzT3BlbjtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd2F0Y2g6IHtcbiAgICAgIG9wZW4oKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uKCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIG1vdW50ZWQoKSB7XG4gICAgICB0aGlzLl91cGRhdGVPcGVuSGFuZGxlciA9ICgpID0+IHRoaXMuX3Nob3VsZFVwZGF0ZSgpICYmIHRoaXMuJGVtaXQoJ3VwZGF0ZTpvcGVuJywgdGhpcy4kZWwuaXNPcGVuKTtcblxuICAgICAgWydwb3N0b3BlbicsICdwb3N0Y2xvc2UnLCAnbW9kZWNoYW5nZSddXG4gICAgICAgIC5mb3JFYWNoKGV2ZW50ID0+IHRoaXMuJGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIHRoaXMuX3VwZGF0ZU9wZW5IYW5kbGVyKSk7XG5cbiAgICAgIHRoaXMuYWN0aW9uKCk7XG4gICAgfSxcblxuICAgIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgICBbJ3Bvc3RvcGVuJywgJ3Bvc3RjbG9zZScsICdtb2RlY2hhbmdlJ11cbiAgICAgICAgLmZvckVhY2goZXZlbnQgPT4gdGhpcy4kZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgdGhpcy5fdXBkYXRlT3BlbkhhbmRsZXIpKTtcbiAgICB9XG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1zcGxpdHRlci1zaWRlPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtc3BsaXR0ZXItc2lkZT5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLXNwbGl0dGVyLXNpZGUuanMnO1xuICBpbXBvcnQgeyBoYXNPcHRpb25zLCBkZXJpdmVFdmVudHMgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtc3BsaXR0ZXItc2lkZSc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbaGFzT3B0aW9ucywgZGVyaXZlRXZlbnRzKG5hbWUpXSxcblxuICAgIGVtaXRzOiBbJ3VwZGF0ZTpvcGVuJ10sXG5cbiAgICBwcm9wczoge1xuICAgICAgb3Blbjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgYWN0aW9uKCkge1xuICAgICAgICB0aGlzLl9zaG91bGRVcGRhdGUoKSAmJiB0aGlzLiRlbFt0aGlzLm9wZW4gPyAnb3BlbicgOiAnY2xvc2UnXS5jYWxsKHRoaXMuJGVsLCB0aGlzLm9wdGlvbnMpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIH0sXG4gICAgICBfc2hvdWxkVXBkYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVuICE9PSB1bmRlZmluZWQgJiYgdGhpcy5vcGVuICE9PSB0aGlzLiRlbC5pc09wZW47XG4gICAgICB9XG4gICAgfSxcblxuICAgIHdhdGNoOiB7XG4gICAgICBvcGVuKCkge1xuICAgICAgICB0aGlzLmFjdGlvbigpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBtb3VudGVkKCkge1xuICAgICAgdGhpcy5fdXBkYXRlT3BlbkhhbmRsZXIgPSAoKSA9PiB0aGlzLl9zaG91bGRVcGRhdGUoKSAmJiB0aGlzLiRlbWl0KCd1cGRhdGU6b3BlbicsIHRoaXMuJGVsLmlzT3Blbik7XG5cbiAgICAgIFsncG9zdG9wZW4nLCAncG9zdGNsb3NlJywgJ21vZGVjaGFuZ2UnXVxuICAgICAgICAuZm9yRWFjaChldmVudCA9PiB0aGlzLiRlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCB0aGlzLl91cGRhdGVPcGVuSGFuZGxlcikpO1xuXG4gICAgICB0aGlzLmFjdGlvbigpO1xuICAgIH0sXG5cbiAgICBiZWZvcmVEZXN0cm95KCkge1xuICAgICAgWydwb3N0b3BlbicsICdwb3N0Y2xvc2UnLCAnbW9kZWNoYW5nZSddXG4gICAgICAgIC5mb3JFYWNoKGV2ZW50ID0+IHRoaXMuJGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIHRoaXMuX3VwZGF0ZU9wZW5IYW5kbGVyKSk7XG4gICAgfVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDwhLS0gVGhpcyBlbGVtZW50IGlzIHVzZWxlc3MgZXhjZXB0IGZvciB0aGUgZGVzdHJveSBwYXJ0IC0tPlxuICA8b25zLWxhenktcmVwZWF0Pjwvb25zLWxhenktcmVwZWF0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNyZWF0ZVZOb2RlLCByZW5kZXIgfSBmcm9tICd2dWUnO1xuaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtbGF6eS1yZXBlYXQuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICd2LW9ucy1sYXp5LXJlcGVhdCcsXG5cbiAgcHJvcHM6IHtcbiAgICByZW5kZXJJdGVtOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBsZW5ndGg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBjYWxjdWxhdGVJdGVtSGVpZ2h0OiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZFxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwcm92aWRlcjogbnVsbFxuICAgIH07XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9zZXR1cCgpIHtcbiAgICAgIHRoaXMucHJvdmlkZXIgJiYgdGhpcy5wcm92aWRlci5kZXN0cm95KCk7XG5cbiAgICAgIGNvbnN0IGRlbGVnYXRlID0gbmV3IHRoaXMuJG9ucy5fb25zLl9pbnRlcm5hbC5MYXp5UmVwZWF0RGVsZWdhdGUoe1xuICAgICAgICBjYWxjdWxhdGVJdGVtSGVpZ2h0OiB0aGlzLmNhbGN1bGF0ZUl0ZW1IZWlnaHQsXG4gICAgICAgIGNyZWF0ZUl0ZW1Db250ZW50OiBpID0+IHtcbiAgICAgICAgICBsZXQgdm5vZGUgPSBjcmVhdGVWTm9kZSh0aGlzLnJlbmRlckl0ZW0oaSkpO1xuICAgICAgICAgIHZub2RlLmFwcENvbnRleHQgPSB0aGlzLiRvbnMuX2FwcC5fY29udGV4dDtcblxuICAgICAgICAgIGxldCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICByZW5kZXIodm5vZGUsIGZyYWdtZW50KTtcbiAgICAgICAgICBsZXQgZWxlbWVudCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cbiAgICAgICAgICBlbGVtZW50LmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgICAgICBmcmFnbWVudCA9IG51bGw7XG4gICAgICAgICAgICB2bm9kZSA9IG51bGw7XG4gICAgICAgICAgICBlbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0sXG4gICAgICAgIGRlc3Ryb3lJdGVtOiAoaSwgeyBlbGVtZW50IH0pID0+IGVsZW1lbnQuZGVzdHJveSgpLFxuICAgICAgICBjb3VudEl0ZW1zOiAoKSA9PiB0aGlzLmxlbmd0aFxuICAgICAgfSwgbnVsbCk7XG5cbiAgICAgIHRoaXMucHJvdmlkZXIgPSBuZXcgdGhpcy4kb25zLl9vbnMuX2ludGVybmFsLkxhenlSZXBlYXRQcm92aWRlcih0aGlzLiRwYXJlbnQuJGVsLCBkZWxlZ2F0ZSk7XG4gICAgfSxcbiAgICByZWZyZXNoKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXIucmVmcmVzaCgpO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlbmRlckl0ZW0oKSB7XG4gICAgICB0aGlzLl9zZXR1cCgpO1xuICAgIH0sXG4gICAgbGVuZ3RoKCkge1xuICAgICAgdGhpcy5fc2V0dXAoKTtcbiAgICB9LFxuICAgIGNhbGN1bGF0ZUl0ZW1IZWlnaHQoKSB7XG4gICAgICB0aGlzLl9zZXR1cCgpO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuX3NldHVwKCk7XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICAvLyBUaGlzIHdpbGwgZGVzdHJveSB0aGUgcHJvdmlkZXIgb25jZSB0aGUgcmVuZGVyZWQgZWxlbWVudFxuICAgIC8vIGlzIGRldGFjaGVkIChkZXRhY2hlZENhbGxiYWNrKS4gVGhlcmVmb3JlLCBhbmltYXRpb25zXG4gICAgLy8gaGF2ZSB0aW1lIHRvIGZpbmlzaCBiZWZvcmUgZWxlbWVudHMgc3RhcnQgdG8gZGlzYXBwZWFyLlxuICAgIC8vIEl0IGNhbm5vdCBiZSBzZXQgZWFybGllciBpbiBvcmRlciB0byBwcmV2ZW50IGFjY2lkZW50YWxcbiAgICAvLyBkZXN0cm95cyBpZiB0aGlzIGVsZW1lbnQgaXMgcmV0YWNoZWQgYnkgc29tZXRoaW5nIGVsc2UuXG4gICAgdGhpcy4kZWwuX2xhenlSZXBlYXRQcm92aWRlciA9IHRoaXMucHJvdmlkZXI7XG4gICAgdGhpcy5wcm92aWRlciA9IG51bGw7XG4gIH1cbn07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPCEtLSBUaGlzIGVsZW1lbnQgaXMgdXNlbGVzcyBleGNlcHQgZm9yIHRoZSBkZXN0cm95IHBhcnQgLS0+XG4gIDxvbnMtbGF6eS1yZXBlYXQ+PC9vbnMtbGF6eS1yZXBlYXQ+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY3JlYXRlVk5vZGUsIHJlbmRlciB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1sYXp5LXJlcGVhdC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3Ytb25zLWxhenktcmVwZWF0JyxcblxuICBwcm9wczoge1xuICAgIHJlbmRlckl0ZW06IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGxlbmd0aDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGNhbGN1bGF0ZUl0ZW1IZWlnaHQ6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogdW5kZWZpbmVkXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3ZpZGVyOiBudWxsXG4gICAgfTtcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3NldHVwKCkge1xuICAgICAgdGhpcy5wcm92aWRlciAmJiB0aGlzLnByb3ZpZGVyLmRlc3Ryb3koKTtcblxuICAgICAgY29uc3QgZGVsZWdhdGUgPSBuZXcgdGhpcy4kb25zLl9vbnMuX2ludGVybmFsLkxhenlSZXBlYXREZWxlZ2F0ZSh7XG4gICAgICAgIGNhbGN1bGF0ZUl0ZW1IZWlnaHQ6IHRoaXMuY2FsY3VsYXRlSXRlbUhlaWdodCxcbiAgICAgICAgY3JlYXRlSXRlbUNvbnRlbnQ6IGkgPT4ge1xuICAgICAgICAgIGxldCB2bm9kZSA9IGNyZWF0ZVZOb2RlKHRoaXMucmVuZGVySXRlbShpKSk7XG4gICAgICAgICAgdm5vZGUuYXBwQ29udGV4dCA9IHRoaXMuJG9ucy5fYXBwLl9jb250ZXh0O1xuXG4gICAgICAgICAgbGV0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICAgIHJlbmRlcih2bm9kZSwgZnJhZ21lbnQpO1xuICAgICAgICAgIGxldCBlbGVtZW50ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuICAgICAgICAgIGVsZW1lbnQuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgICAgICAgIGZyYWdtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHZub2RlID0gbnVsbDtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gZnJhZ21lbnQuZmlyc3RDaGlsZDtcbiAgICAgICAgfSxcbiAgICAgICAgZGVzdHJveUl0ZW06IChpLCB7IGVsZW1lbnQgfSkgPT4gZWxlbWVudC5kZXN0cm95KCksXG4gICAgICAgIGNvdW50SXRlbXM6ICgpID0+IHRoaXMubGVuZ3RoXG4gICAgICB9LCBudWxsKTtcblxuICAgICAgdGhpcy5wcm92aWRlciA9IG5ldyB0aGlzLiRvbnMuX29ucy5faW50ZXJuYWwuTGF6eVJlcGVhdFByb3ZpZGVyKHRoaXMuJHBhcmVudC4kZWwsIGRlbGVnYXRlKTtcbiAgICB9LFxuICAgIHJlZnJlc2goKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlci5yZWZyZXNoKCk7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgcmVuZGVySXRlbSgpIHtcbiAgICAgIHRoaXMuX3NldHVwKCk7XG4gICAgfSxcbiAgICBsZW5ndGgoKSB7XG4gICAgICB0aGlzLl9zZXR1cCgpO1xuICAgIH0sXG4gICAgY2FsY3VsYXRlSXRlbUhlaWdodCgpIHtcbiAgICAgIHRoaXMuX3NldHVwKCk7XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5fc2V0dXAoKTtcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIC8vIFRoaXMgd2lsbCBkZXN0cm95IHRoZSBwcm92aWRlciBvbmNlIHRoZSByZW5kZXJlZCBlbGVtZW50XG4gICAgLy8gaXMgZGV0YWNoZWQgKGRldGFjaGVkQ2FsbGJhY2spLiBUaGVyZWZvcmUsIGFuaW1hdGlvbnNcbiAgICAvLyBoYXZlIHRpbWUgdG8gZmluaXNoIGJlZm9yZSBlbGVtZW50cyBzdGFydCB0byBkaXNhcHBlYXIuXG4gICAgLy8gSXQgY2Fubm90IGJlIHNldCBlYXJsaWVyIGluIG9yZGVyIHRvIHByZXZlbnQgYWNjaWRlbnRhbFxuICAgIC8vIGRlc3Ryb3lzIGlmIHRoaXMgZWxlbWVudCBpcyByZXRhY2hlZCBieSBzb21ldGhpbmcgZWxzZS5cbiAgICB0aGlzLiRlbC5fbGF6eVJlcGVhdFByb3ZpZGVyID0gdGhpcy5wcm92aWRlcjtcbiAgICB0aGlzLnByb3ZpZGVyID0gbnVsbDtcbiAgfVxufTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLXNlbGVjdCA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIj5cbiAgICA8c2VsZWN0IHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCI+XG4gICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgPC9zZWxlY3Q+XG4gIDwvb25zLXNlbGVjdD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLXNlbGVjdC5qcyc7XG4gIGltcG9ydCB7IG1vZGlmaWVyIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ3Ytb25zLXNlbGVjdCcsXG4gICAgbWl4aW5zOiBbbW9kaWZpZXJdLFxuICAgIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG4gICAgcHJvcHM6IHtcbiAgICAgIG1vZGVsVmFsdWU6IFtOdW1iZXIsIFN0cmluZ11cbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBzZWxlY3RlZFZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbFZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQodmFsKSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtc2VsZWN0IDptb2RpZmllcj1cIm5vcm1hbGl6ZWRNb2RpZmllclwiPlxuICAgIDxzZWxlY3Qgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIj5cbiAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICA8L3NlbGVjdD5cbiAgPC9vbnMtc2VsZWN0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtc2VsZWN0LmpzJztcbiAgaW1wb3J0IHsgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAndi1vbnMtc2VsZWN0JyxcbiAgICBtaXhpbnM6IFttb2RpZmllcl0sXG4gICAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcbiAgICBwcm9wczoge1xuICAgICAgbW9kZWxWYWx1ZTogW051bWJlciwgU3RyaW5nXVxuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHNlbGVjdGVkVmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVsVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCh2YWwpIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1zZWdtZW50IEBwb3N0Y2hhbmdlLnNlbGY9XCIkZW1pdCgndXBkYXRlOmFjdGl2ZUluZGV4JywgJGV2ZW50LmluZGV4KVwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtc2VnbWVudD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLXNlZ21lbnQuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtc2VnbWVudCc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpXSxcbiAgICBlbWl0czogWyd1cGRhdGU6YWN0aXZlSW5kZXgnXSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLXNlZ21lbnQgQHBvc3RjaGFuZ2Uuc2VsZj1cIiRlbWl0KCd1cGRhdGU6YWN0aXZlSW5kZXgnLCAkZXZlbnQuaW5kZXgpXCI+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1zZWdtZW50PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtc2VnbWVudC5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cyB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1zZWdtZW50JztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSldLFxuICAgIGVtaXRzOiBbJ3VwZGF0ZTphY3RpdmVJbmRleCddLFxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtcHVsbC1ob29rXG4gICAgOm9uQWN0aW9uLnByb3A9XCJhY3Rpb25cIlxuICA+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1wdWxsLWhvb2s+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgJ29uc2VudWkvZXNtL2VsZW1lbnRzL29ucy1wdWxsLWhvb2suanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtcHVsbC1ob29rJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSldLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICB0eXBlOiBGdW5jdGlvblxuICAgICAgfVxuICAgIH1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8b25zLXB1bGwtaG9va1xuICAgIDpvbkFjdGlvbi5wcm9wPVwiYWN0aW9uXCJcbiAgPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtcHVsbC1ob29rPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtcHVsbC1ob29rLmpzJztcbiAgaW1wb3J0IHsgZGVyaXZlRXZlbnRzIH0gZnJvbSAnLi4vbWl4aW5zL2luZGV4LmpzJztcblxuICBjb25zdCBuYW1lID0gJ3Ytb25zLXB1bGwtaG9vayc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpXSxcblxuICAgIHByb3BzOiB7XG4gICAgICBhY3Rpb246IHtcbiAgICAgICAgdHlwZTogRnVuY3Rpb25cbiAgICAgIH1cbiAgICB9XG4gIH07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPG9ucy1wYWdlXG4gICAgOm9uSW5maW5pdGVTY3JvbGwucHJvcD1cImluZmluaXRlU2Nyb2xsXCJcbiAgICA6bW9kaWZpZXI9XCJub3JtYWxpemVkTW9kaWZpZXJcIlxuICA+XG4gICAgPHNsb3Q+PC9zbG90PlxuICA8L29ucy1wYWdlPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0ICdvbnNlbnVpL2VzbS9lbGVtZW50cy9vbnMtcGFnZS5qcyc7XG4gIGltcG9ydCB7IGRlcml2ZUV2ZW50cywgZGVyaXZlREJCLCBtb2RpZmllciB9IGZyb20gJy4uL21peGlucy9pbmRleC5qcyc7XG5cbiAgY29uc3QgbmFtZSA9ICd2LW9ucy1wYWdlJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZSxcbiAgICBtaXhpbnM6IFtkZXJpdmVFdmVudHMobmFtZSksIGRlcml2ZURCQiwgbW9kaWZpZXJdLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgIGluZmluaXRlU2Nyb2xsOiB7XG4gICAgICAgIHR5cGU6IEZ1bmN0aW9uXG4gICAgICB9XG4gICAgfVxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxvbnMtcGFnZVxuICAgIDpvbkluZmluaXRlU2Nyb2xsLnByb3A9XCJpbmZpbml0ZVNjcm9sbFwiXG4gICAgOm1vZGlmaWVyPVwibm9ybWFsaXplZE1vZGlmaWVyXCJcbiAgPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9vbnMtcGFnZT5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnb25zZW51aS9lc20vZWxlbWVudHMvb25zLXBhZ2UuanMnO1xuICBpbXBvcnQgeyBkZXJpdmVFdmVudHMsIGRlcml2ZURCQiwgbW9kaWZpZXIgfSBmcm9tICcuLi9taXhpbnMvaW5kZXguanMnO1xuXG4gIGNvbnN0IG5hbWUgPSAndi1vbnMtcGFnZSc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWUsXG4gICAgbWl4aW5zOiBbZGVyaXZlRXZlbnRzKG5hbWUpLCBkZXJpdmVEQkIsIG1vZGlmaWVyXSxcblxuICAgIHByb3BzOiB7XG4gICAgICBpbmZpbml0ZVNjcm9sbDoge1xuICAgICAgICB0eXBlOiBGdW5jdGlvblxuICAgICAgfVxuICAgIH1cbiAgfTtcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IG9ucyBmcm9tICdvbnNlbnVpJztcbmltcG9ydCBzZXR1cCBmcm9tICcuL3NldHVwLmpzJztcbmltcG9ydCAqIGFzIGNvbXBvbmVudHMgZnJvbSAnLi9jb21wb25lbnRzL2luZGV4LmpzJztcblxuY29uc3QgJG9ucyA9IHNldHVwKG9ucyk7XG5cbiRvbnMuaW5zdGFsbCA9IGFwcCA9PiB7XG4gIC8qKlxuICAgKiBSZWdpc3RlciBjb21wb25lbnRzIG9mIHZ1ZS1vbnNlbnVpLlxuICAgKi9cbiAgT2JqZWN0LmtleXMoY29tcG9uZW50cylcbiAgICAuZm9yRWFjaChrZXkgPT4gYXBwLmNvbXBvbmVudChjb21wb25lbnRzW2tleV0ubmFtZSwgY29tcG9uZW50c1trZXldKSk7XG5cbiAgLyoqXG4gICAqIEV4cG9zZSBvbnMgb2JqZWN0LlxuICAgKi9cbiAgJG9ucy5fYXBwID0gYXBwO1xuICBhcHAuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMuJG9ucyA9ICRvbnM7XG59O1xuXG5leHBvcnQgZGVmYXVsdCAkb25zO1xuIl0sIm5hbWVzIjpbIm9ucyIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJrIiwic29tZSIsInQiLCJtYXRjaCIsInJlZHVjZSIsInIiLCJfb25zIiwiY2FwaXRhbGl6ZSIsInN0cmluZyIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJjYW1lbGl6ZSIsInRvTG93ZXJDYXNlIiwicmVwbGFjZSIsIm0iLCJsIiwiZXZlbnRUb0hhbmRsZXIiLCJuYW1lIiwiaGFuZGxlclRvUHJvcCIsIl9zZXR1cERCQiIsImNvbXBvbmVudCIsImRiYiIsImhhbmRsZXIiLCIkZWwiLCJfY2FsbGJhY2siLCJlIiwiY2FsbFBhcmVudEhhbmRsZXIiLCJldmVudCIsInJ1bkRlZmF1bHQiLCIkZW1pdCIsInByZXZlbnREZWZhdWx0IiwiX2lzREJCU2V0dXAiLCJkZXJpdmVEQkIiLCJlbWl0cyIsIm1vdW50ZWQiLCJhY3RpdmF0ZWQiLCJkZWFjdGl2YXRlZCIsImRlc3Ryb3llZCIsIm9uRGV2aWNlQmFja0J1dHRvbiIsImRlc3Ryb3kiLCJkZXJpdmVFdmVudHMiLCJuYXRpdmVFdmVudHMiLCJlbGVtZW50cyIsImV2ZW50cyIsIl9oYW5kbGVycyIsImZvckVhY2giLCJrZXkiLCJ0YXJnZXQiLCJ0ZXN0IiwidGFnTmFtZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJiZWZvcmVEZXN0cm95IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInVucmVjb2duaXplZExpc3RlbmVycyIsIm5hdGl2ZUVsZW1lbnQiLCJjb21wdXRlZCIsImlzTGlzdGVuZXIiLCJhdHRyaWJ1dGUiLCJpc1Vua25vd24iLCJpbmNsdWRlcyIsImZyb21FbnRyaWVzIiwiZW50cmllcyIsIiRhdHRycyIsIl90b2dnbGVWaXNpYmlsaXR5IiwidmlzaWJsZSIsImNhbGwiLCJub3JtYWxpemVkT3B0aW9ucyIsIm9wdGlvbnMiLCJfdGVsZXBvcnQiLCJfaXNEZXN0cm95ZWQiLCJwYXJlbnROb2RlIiwiZG9jdW1lbnQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJfdW5tb3VudCIsImhpZGUiLCJ0aGVuIiwicmVtb3ZlIiwiaGlkYWJsZSIsInByb3BzIiwidHlwZSIsIkJvb2xlYW4iLCJ1bmRlZmluZWQiLCJ3YXRjaCIsIiRuZXh0VGljayIsImhhc09wdGlvbnMiLCJzZWxmUHJvdmlkZXIiLCJwcm92aWRlIiwiJG9wdGlvbnMiLCJwb3J0YWwiLCJ1cGRhdGVkIiwibW9kaWZpZXIiLCJTdHJpbmciLCJBcnJheSIsIm5vcm1hbGl6ZWRNb2RpZmllciIsImlzQXJyYXkiLCJqb2luIiwiYWNjIiwidHJpbSIsIm1vZGVsSW5wdXQiLCJtb2RlbFZhbHVlIiwiTnVtYmVyIiwibW9kZWxFdmVudCIsIm1ldGhvZHMiLCJfdXBkYXRlVmFsdWUiLCJ2YWx1ZSIsIl9vbk1vZGVsRXZlbnQiLCJtb2RlbElucHV0TnVtYmVyIiwibWl4aW5zIiwidmFsdWVBc051bWJlciIsIm1vZGVsQ2hlY2tib3giLCJjaGVja2VkIiwiaW5kZXhPZiIsIm5ld1ZhbHVlIiwiaW5kZXgiLCJpbmNsdWRlZCIsImxlbmd0aCIsIm1vZGVsUmFkaW8iLCJkaWFsb2dDYW5jZWwiLCJfZGlhbG9nQ2FuY2VsSGFuZGxlciIsImRpYWxvZ09yZGVyZWRQcm9wcyIsImluaGVyaXRBdHRycyIsIm9yZGVyZWRQcm9wcyIsInJlc3QiLCJfb2JqZWN0U3ByZWFkIiwiZGlhbG9nIiwiX2NyZWF0ZUVsZW1lbnRCbG9jayIsIl9yZW5kZXJTbG90IiwiX29wZW5CbG9jayIsIl9tZXJnZVByb3BzIiwiX2hvaXN0ZWRfMiIsIl9ob2lzdGVkXzMiLCJfaG9pc3RlZF80IiwiX2NyZWF0ZUVsZW1lbnRWTm9kZSIsIl9GcmFnbWVudCIsIl9yZW5kZXJMaXN0IiwiX3dpdGhNb2RpZmllcnMiLCJfaG9pc3RlZF8xIiwiVGFiYmFyRWxlbWVudCIsIl9jcmVhdGVCbG9jayIsIl9yZXNvbHZlRHluYW1pY0NvbXBvbmVudCIsIk5hdmlnYXRvckVsZW1lbnQiLCJjcmVhdGVWTm9kZSIsInJlbmRlciIsIiRvbnMiLCJzZXR1cCIsImluc3RhbGwiLCJhcHAiLCJjb21wb25lbnRzIiwiX2FwcCIsImNvbmZpZyIsImdsb2JhbFByb3BlcnRpZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0VBQWUsY0FBQSxFQUFTQSxHQUFULEVBQWM7SUFDM0IsT0FBT0MsTUFBTSxDQUFDQyxJQUFQLENBQVlGLEdBQVosQ0FDSkcsQ0FBQUEsTUFESSxDQUNHLFVBQUFDLENBQUMsRUFBQTtFQUFBLElBQUEsT0FBSSxDQUNYLEtBRFcsRUFFWCxVQUZXLEVBR1gsU0FIVyxFQUlYLE9BSlcsRUFLWCxPQUxXLEVBTVgsTUFOVyxFQU9YLFFBUFcsRUFRWCxVQVJXLEVBU1gsaUJBVFcsRUFVWCxjQVZXLEVBV1gsYUFYVyxFQVlYLFVBWlcsRUFhWCxPQWJXLENBQUEsQ0FjWEMsSUFkVyxDQWNOLFVBQUFDLENBQUMsRUFBQTtFQUFBLE1BQUEsT0FBSUYsQ0FBQyxDQUFDRyxLQUFGLENBQVFELENBQVIsQ0FBSixDQUFBO0VBQUEsS0FkSyxDQUFKLENBQUE7RUFBQSxHQURKLEVBZ0JKRSxNQWhCSSxDQWdCRyxVQUFDQyxDQUFELEVBQUlMLENBQUosRUFBVTtFQUNoQkssSUFBQUEsQ0FBQyxDQUFDTCxDQUFELENBQUQsR0FBT0osR0FBRyxDQUFDSSxDQUFELENBQVYsQ0FBQTtFQUNBLElBQUEsT0FBT0ssQ0FBUCxDQUFBO0VBQ0QsR0FuQkksRUFtQkY7RUFBRUMsSUFBQUEsSUFBSSxFQUFFVixHQUFBQTtFQUFSLEdBbkJFLENBQVAsQ0FBQTtFQW9CRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUNuQk0sSUFBTVcsVUFBVSxHQUFHLFNBQWJBLFVBQWEsQ0FBQUMsTUFBTSxFQUFBO0VBQUEsRUFBQSxPQUFJQSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxDQUFkLENBQUEsQ0FBaUJDLFdBQWpCLEVBQUEsR0FBaUNGLE1BQU0sQ0FBQ0csS0FBUCxDQUFhLENBQWIsQ0FBckMsQ0FBQTtFQUFBLENBQXpCLENBQUE7RUFFQSxJQUFNQyxRQUFRLEdBQUcsU0FBWEEsUUFBVyxDQUFBSixNQUFNLEVBQUE7SUFBQSxPQUFJQSxNQUFNLENBQUNLLFdBQVAsRUFBcUJDLENBQUFBLE9BQXJCLENBQTZCLFdBQTdCLEVBQTBDLFVBQUNDLENBQUQsRUFBSUMsQ0FBSixFQUFBO01BQUEsT0FBVUEsQ0FBQyxDQUFDTixXQUFGLEVBQVYsQ0FBQTtFQUFBLEdBQTFDLENBQUosQ0FBQTtFQUFBLENBQXZCLENBQUE7RUFFQSxJQUFNTyxjQUFjLEdBQUcsU0FBakJBLGNBQWlCLENBQUFDLElBQUksRUFBQTtFQUFBLEVBQUEsT0FBSSxLQUFRWCxHQUFBQSxVQUFVLENBQUNXLElBQUQsQ0FBdEIsQ0FBQTtFQUFBLENBQTNCLENBQUE7RUFFQSxJQUFNQyxhQUFhLEdBQUcsU0FBaEJBLGFBQWdCLENBQUFELElBQUksRUFBQTtJQUFBLE9BQUlBLElBQUksQ0FBQ1AsS0FBTCxDQUFXLENBQVgsQ0FBY0YsQ0FBQUEsTUFBZCxDQUFxQixDQUFyQixDQUFBLENBQXdCSSxXQUF4QixFQUF3Q0ssR0FBQUEsSUFBSSxDQUFDUCxLQUFMLENBQVcsQ0FBWCxDQUFjQSxDQUFBQSxLQUFkLENBQW9CLENBQXBCLENBQTVDLENBQUE7RUFBQSxDQUExQjs7RUNKUDs7RUFDQSxJQUFNUyxTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFBQyxTQUFTLEVBQUk7RUFDN0IsRUFBQSxJQUFNQyxHQUFHLEdBQUcsb0JBQVosQ0FENkI7O0lBRzdCLElBQU1DLE9BQU8sR0FBR0YsU0FBUyxDQUFDQyxHQUFELENBQVQsSUFBbUJELFNBQVMsQ0FBQ0csR0FBVixDQUFjRixHQUFkLENBQXNCRCxJQUFBQSxTQUFTLENBQUNHLEdBQVYsQ0FBY0YsR0FBZCxDQUFtQkcsQ0FBQUEsU0FBNUQsSUFBMkUsVUFBQUMsQ0FBQyxFQUFBO01BQUEsT0FBSUEsQ0FBQyxDQUFDQyxpQkFBRixFQUFKLENBQUE7S0FBNUYsQ0FBQTs7RUFFQU4sRUFBQUEsU0FBUyxDQUFDRyxHQUFWLENBQWNGLEdBQWQsQ0FBcUIsR0FBQSxVQUFBTSxLQUFLLEVBQUk7TUFDNUIsSUFBSUMsVUFBVSxHQUFHLElBQWpCLENBQUE7TUFFQVIsU0FBUyxDQUFDUyxLQUFWLENBQWdCWCxhQUFhLENBQUNHLEdBQUQsQ0FBN0Isb0NBQ0tNLEtBREwsQ0FBQSxFQUFBLEVBQUEsRUFBQTtFQUVFRyxNQUFBQSxjQUFjLEVBQUUsU0FBQSxjQUFBLEdBQUE7VUFBQSxPQUFNRixVQUFVLEdBQUcsS0FBbkIsQ0FBQTtFQUFBLE9BQUE7RUFGbEIsS0FBQSxDQUFBLENBQUEsQ0FBQTtFQUtBQSxJQUFBQSxVQUFVLElBQUlOLE9BQU8sQ0FBQ0ssS0FBRCxDQUFyQixDQUFBO0tBUkYsQ0FBQTs7SUFXQVAsU0FBUyxDQUFDVyxXQUFWLEdBQXdCLElBQXhCLENBQUE7RUFDRCxDQWpCRCxDQUFBO0VBbUJBO0VBQ0E7OztFQUNBLElBQU1DLFNBQVMsR0FBRztJQUNoQkMsS0FBSyxFQUFFLENBQUMsa0JBQUQsQ0FEUztFQUdoQkMsRUFBQUEsT0FIZ0IsRUFHTixTQUFBLE9BQUEsR0FBQTtNQUNSZixTQUFTLENBQUMsSUFBRCxDQUFULENBQUE7S0FKYztFQU9oQjtFQUNBO0VBQ0FnQixFQUFBQSxTQVRnQixFQVNKLFNBQUEsU0FBQSxHQUFBO0VBQ1YsSUFBQSxJQUFBLENBQUtKLFdBQUwsS0FBcUIsS0FBckIsSUFBOEJaLFNBQVMsQ0FBQyxJQUFELENBQXZDLENBQUE7S0FWYztFQWFoQmlCLEVBQUFBLFdBYmdCLEVBYUYsU0FBQSxXQUFBLEdBQUE7RUFDWixJQUFBLElBQUEsQ0FBS0wsV0FBTCxLQUFxQixJQUFyQixLQUE4QixJQUFLQSxDQUFBQSxXQUFMLEdBQW1CLEtBQWpELENBQUEsQ0FBQTtLQWRjO0VBaUJoQk0sRUFBQUEsU0FqQmdCLEVBaUJKLFNBQUEsU0FBQSxHQUFBO01BQ1YsSUFBS2QsQ0FBQUEsR0FBTCxDQUFTZSxrQkFBVCxJQUErQixJQUFBLENBQUtmLEdBQUwsQ0FBU2Usa0JBQVQsQ0FBNEJDLE9BQTVCLEVBQS9CLENBQUE7RUFDRCxHQUFBO0VBbkJlLENBQWxCLENBQUE7O0VBc0JBLElBQU1DLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUF2QixJQUFJLEVBQUk7SUFFM0IsSUFBTXdCLFlBQVksR0FBRzlDLHVCQUFHLENBQUMrQyxRQUFKLENBQWFwQyxVQUFVLENBQUNLLFFBQVEsQ0FBQ00sSUFBSSxDQUFDUCxLQUFMLENBQVcsQ0FBWCxDQUFELENBQVQsQ0FBdkIsQ0FBQSxDQUFrRGlDLE1BQWxELElBQTRELEVBQWpGLENBQUE7SUFFQSxPQUFPO0VBQ0xWLElBQUFBLEtBQUssRUFBRVEsWUFERjtFQUdMUCxJQUFBQSxPQUhLLEVBR0ssU0FBQSxPQUFBLEdBQUE7RUFBQSxNQUFBLElBQUEsS0FBQSxHQUFBLElBQUEsQ0FBQTs7UUFDUixJQUFLVSxDQUFBQSxTQUFMLEdBQWlCLEVBQWpCLENBQUE7RUFFQUgsTUFBQUEsWUFBWSxDQUFDSSxPQUFiLENBQXFCLFVBQUFDLEdBQUcsRUFBSTtVQUMxQixLQUFJLENBQUNGLFNBQUwsQ0FBZTVCLGNBQWMsQ0FBQzhCLEdBQUQsQ0FBN0IsQ0FBQSxHQUFzQyxVQUFBbkIsS0FBSyxFQUFJO0VBQzdDO0VBQ0EsVUFBQSxJQUFJQSxLQUFLLENBQUNvQixNQUFOLEtBQWlCLEtBQUksQ0FBQ3hCLEdBQXRCLElBQTZCLENBQUMsUUFBU3lCLENBQUFBLElBQVQsQ0FBY3JCLEtBQUssQ0FBQ29CLE1BQU4sQ0FBYUUsT0FBM0IsQ0FBbEMsRUFBdUU7RUFDckUsWUFBQSxLQUFJLENBQUNwQixLQUFMLENBQVdpQixHQUFYLEVBQWdCbkIsS0FBaEIsQ0FBQSxDQUFBO0VBQ0QsV0FBQTtXQUpILENBQUE7O0VBTUEsUUFBQSxLQUFJLENBQUNKLEdBQUwsQ0FBUzJCLGdCQUFULENBQTBCSixHQUExQixFQUErQixLQUFJLENBQUNGLFNBQUwsQ0FBZTVCLGNBQWMsQ0FBQzhCLEdBQUQsQ0FBN0IsQ0FBL0IsQ0FBQSxDQUFBO1NBUEYsQ0FBQSxDQUFBO09BTkc7RUFpQkxLLElBQUFBLGFBakJLLEVBaUJXLFNBQUEsYUFBQSxHQUFBO0VBQUEsTUFBQSxJQUFBLE1BQUEsR0FBQSxJQUFBLENBQUE7O1FBQ2R2RCxNQUFNLENBQUNDLElBQVAsQ0FBWSxJQUFLK0MsQ0FBQUEsU0FBakIsRUFBNEJDLE9BQTVCLENBQW9DLFVBQUFDLEdBQUcsRUFBSTtFQUN6QyxRQUFBLE1BQUksQ0FBQ3ZCLEdBQUwsQ0FBUzZCLG1CQUFULENBQTZCTixHQUE3QixFQUFrQyxNQUFJLENBQUNGLFNBQUwsQ0FBZUUsR0FBZixDQUFsQyxDQUFBLENBQUE7U0FERixDQUFBLENBQUE7UUFHQSxJQUFLRixDQUFBQSxTQUFMLEdBQWlCLElBQWpCLENBQUE7RUFDRCxLQUFBO0tBdEJILENBQUE7RUF3QkQsQ0E1QkQsQ0FBQTs7RUE4QkEsSUFBTVMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUF3QixDQUFBQyxhQUFhLEVBQUE7SUFBQSxPQUFLO0VBQzlDQyxJQUFBQSxRQUFRLEVBQUU7RUFDUkYsTUFBQUEscUJBRFEsRUFDZ0IsU0FBQSxxQkFBQSxHQUFBO1VBQ3RCLElBQU1HLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUEsSUFBQSxFQUFBO0VBQUEsVUFBQSxJQUFBLEtBQUEsR0FBQSxjQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQTtFQUFBLGNBQUVDLFNBQUYsR0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUE7O0VBQUEsVUFBQSxPQUFpQixXQUFZVCxDQUFBQSxJQUFaLENBQWlCUyxTQUFqQixDQUFqQixDQUFBO1dBQW5CLENBQUE7O1VBQ0EsSUFBTUMsU0FBUyxHQUFHLFNBQVpBLFNBQVksQ0FBQSxLQUFBLEVBQUE7RUFBQSxVQUFBLElBQUEsS0FBQSxHQUFBLGNBQUEsQ0FBQSxLQUFBLEVBQUEsQ0FBQSxDQUFBO0VBQUEsY0FBRUQsU0FBRixHQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQTs7RUFBQSxVQUFBLE9BQWlCLENBQUNILGFBQWEsQ0FBQ1gsTUFBZCxDQUFxQmdCLFFBQXJCLENBQThCaEQsUUFBUSxDQUFDOEMsU0FBUyxDQUFDL0MsS0FBVixDQUFnQixDQUFoQixDQUFELENBQXRDLENBQWxCLENBQUE7V0FBbEIsQ0FBQTs7RUFFQSxRQUFBLE9BQU9kLE1BQU0sQ0FBQ2dFLFdBQVAsQ0FBbUJoRSxNQUFNLENBQUNpRSxPQUFQLENBQWUsSUFBQSxDQUFLQyxNQUFwQixDQUFBLENBQ3ZCaEUsTUFEdUIsQ0FDaEIsVUFBQTJELFNBQVMsRUFBQTtZQUFBLE9BQUlELFVBQVUsQ0FBQ0MsU0FBRCxDQUFWLElBQXlCQyxTQUFTLENBQUNELFNBQUQsQ0FBdEMsQ0FBQTtFQUFBLFNBRE8sQ0FBbkIsQ0FBUCxDQUFBO0VBRUQsT0FBQTtFQVBPLEtBQUE7S0FEK0IsQ0FBQTtFQUFBLENBQTNDOztFQzlFQTtFQUNBLElBQU1NLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBb0IsR0FBVztFQUNuQyxFQUFBLElBQUksT0FBTyxJQUFBLENBQUtDLE9BQVosS0FBd0IsU0FBeEIsSUFBcUMsSUFBS0EsQ0FBQUEsT0FBTCxLQUFpQixJQUFBLENBQUt6QyxHQUFMLENBQVN5QyxPQUFuRSxFQUE0RTtFQUMxRSxJQUFBLElBQUEsQ0FBS3pDLEdBQUwsQ0FBUyxJQUFBLENBQUt5QyxPQUFMLEdBQWUsTUFBZixHQUF3QixNQUFqQyxDQUFBLENBQXlDQyxJQUF6QyxDQUE4QyxLQUFLMUMsR0FBbkQsRUFBd0QsS0FBSzJDLGlCQUFMLElBQTBCLEtBQUtDLE9BQXZGLENBQUEsQ0FBQTtFQUNELEdBQUE7RUFDRixDQUpELENBQUE7O0VBS0EsSUFBTUMsU0FBUyxHQUFHLFNBQVpBLFNBQVksR0FBVztFQUMzQixFQUFBLElBQUksQ0FBQyxJQUFLQyxDQUFBQSxZQUFOLEtBQXVCLENBQUMsSUFBQSxDQUFLOUMsR0FBTCxDQUFTK0MsVUFBVixJQUF3QixJQUFLL0MsQ0FBQUEsR0FBTCxDQUFTK0MsVUFBVCxLQUF3QkMsUUFBUSxDQUFDQyxJQUFoRixDQUFKLEVBQTJGO0VBQ3pGRCxJQUFBQSxRQUFRLENBQUNDLElBQVQsQ0FBY0MsV0FBZCxDQUEwQixLQUFLbEQsR0FBL0IsQ0FBQSxDQUFBO0VBQ0QsR0FBQTtFQUNGLENBSkQsQ0FBQTs7RUFLQSxJQUFNbUQsUUFBUSxHQUFHLFNBQVhBLFFBQVcsR0FBVztFQUFBLEVBQUEsSUFBQSxLQUFBLEdBQUEsSUFBQSxDQUFBOztFQUMxQixFQUFBLElBQUksS0FBS25ELEdBQUwsQ0FBU3lDLE9BQVQsS0FBcUIsSUFBekIsRUFBK0I7RUFDN0IsSUFBQSxJQUFBLENBQUt6QyxHQUFMLENBQVNvRCxJQUFULEVBQUEsQ0FBZ0JDLElBQWhCLENBQXFCLFlBQUE7RUFBQSxNQUFBLE9BQU0sS0FBSSxDQUFDckQsR0FBTCxDQUFTc0QsTUFBVCxFQUFOLENBQUE7T0FBckIsQ0FBQSxDQUFBO0VBQ0QsR0FGRCxNQUVPO01BQ0wsSUFBS3RELENBQUFBLEdBQUwsQ0FBU3NELE1BQVQsRUFBQSxDQUFBO0VBQ0QsR0FBQTtFQUNGLENBTkQsQ0FBQTtFQVFBO0VBQ0E7OztFQUNBLElBQU1DLE9BQU8sR0FBRztFQUNkQyxFQUFBQSxLQUFLLEVBQUU7RUFDTGYsSUFBQUEsT0FBTyxFQUFFO0VBQ1BnQixNQUFBQSxJQUFJLEVBQUVDLE9BREM7RUFFUCxNQUFBLFNBQUEsRUFBU0MsU0FGRjs7RUFBQSxLQUFBO0tBRkc7RUFRZEMsRUFBQUEsS0FBSyxFQUFFO0VBQ0xuQixJQUFBQSxPQURLLEVBQ0ssU0FBQSxPQUFBLEdBQUE7UUFDUkQsaUJBQWlCLENBQUNFLElBQWxCLENBQXVCLElBQXZCLENBQUEsQ0FBQTtFQUNELEtBQUE7S0FYVztFQWNkL0IsRUFBQUEsT0FkYyxFQWNKLFNBQUEsT0FBQSxHQUFBO0VBQUEsSUFBQSxJQUFBLE1BQUEsR0FBQSxJQUFBLENBQUE7O0VBQ1IsSUFBQSxJQUFBLENBQUtrRCxTQUFMLENBQWUsWUFBQTtFQUFBLE1BQUEsT0FBTXJCLGlCQUFpQixDQUFDRSxJQUFsQixDQUF1QixNQUF2QixDQUFOLENBQUE7T0FBZixDQUFBLENBQUE7S0FmWTtFQWtCZDlCLEVBQUFBLFNBbEJjLEVBa0JGLFNBQUEsU0FBQSxHQUFBO0VBQUEsSUFBQSxJQUFBLE1BQUEsR0FBQSxJQUFBLENBQUE7O0VBQ1YsSUFBQSxJQUFBLENBQUtpRCxTQUFMLENBQWUsWUFBQTtFQUFBLE1BQUEsT0FBTXJCLGlCQUFpQixDQUFDRSxJQUFsQixDQUF1QixNQUF2QixDQUFOLENBQUE7T0FBZixDQUFBLENBQUE7RUFDRCxHQUFBO0VBcEJhLENBQWhCOztFQXdCQSxJQUFNb0IsVUFBVSxHQUFHO0VBQ2pCTixFQUFBQSxLQUFLLEVBQUU7RUFDTFosSUFBQUEsT0FBTyxFQUFFO0VBQ1BhLE1BQUFBLElBQUksRUFBRXBGLE1BREM7UUFBQSxTQUVHLEVBQUEsU0FBQSxRQUFBLEdBQUE7RUFDUixRQUFBLE9BQU8sRUFBUCxDQUFBO0VBQ0QsT0FBQTtFQUpNLEtBQUE7RUFESixHQUFBO0VBRFUsQ0FBbkI7O0VBWUEsSUFBTTBGLFlBQVksR0FBRztFQUNuQkMsRUFBQUEsT0FEbUIsRUFDVCxTQUFBLE9BQUEsR0FBQTtNQUNSLE9BQ0csZUFBQSxDQUFBLEVBQUEsRUFBQSxJQUFBLENBQUtDLFFBQUwsQ0FBY3ZFLElBQWQsQ0FBbUJQLEtBQW5CLENBQXlCLENBQXpCLENBREgsRUFDaUMsSUFEakMsQ0FBQSxDQUFBO0VBR0QsR0FBQTtFQUxrQixDQUFyQjs7RUFTQSxJQUFNK0UsTUFBTSxHQUFHO0VBQ2J2RCxFQUFBQSxPQURhLEVBQ0gsU0FBQSxPQUFBLEdBQUE7TUFDUmtDLFNBQVMsQ0FBQ0gsSUFBVixDQUFlLElBQWYsQ0FBQSxDQUFBO0tBRlc7RUFJYnlCLEVBQUFBLE9BSmEsRUFJSCxTQUFBLE9BQUEsR0FBQTtNQUNSdEIsU0FBUyxDQUFDSCxJQUFWLENBQWUsSUFBZixDQUFBLENBQUE7S0FMVztFQU9iOUIsRUFBQUEsU0FQYSxFQU9ELFNBQUEsU0FBQSxHQUFBO01BQ1ZpQyxTQUFTLENBQUNILElBQVYsQ0FBZSxJQUFmLENBQUEsQ0FBQTtLQVJXO0VBVWI3QixFQUFBQSxXQVZhLEVBVUMsU0FBQSxXQUFBLEdBQUE7TUFDWnNDLFFBQVEsQ0FBQ1QsSUFBVCxDQUFjLElBQWQsQ0FBQSxDQUFBO0tBWFc7RUFhYmQsRUFBQUEsYUFiYSxFQWFHLFNBQUEsYUFBQSxHQUFBO01BQ2R1QixRQUFRLENBQUNULElBQVQsQ0FBYyxJQUFkLENBQUEsQ0FBQTtFQUNELEdBQUE7RUFmWSxDQUFmLENBQUE7RUFrQkEsSUFBTTBCLFFBQVEsR0FBRztFQUNmWixFQUFBQSxLQUFLLEVBQUU7RUFDTFksSUFBQUEsUUFBUSxFQUFFO0VBQ1JYLE1BQUFBLElBQUksRUFBRSxDQUFDWSxNQUFELEVBQVNDLEtBQVQsRUFBZ0JqRyxNQUFoQixDQUFBO0VBREUsS0FBQTtLQUZHO0VBT2YyRCxFQUFBQSxRQUFRLEVBQUU7RUFDUnVDLElBQUFBLGtCQURRLEVBQ2EsU0FBQSxrQkFBQSxHQUFBO1FBQ25CLElBQU1ILFFBQVEsR0FBRyxJQUFBLENBQUtBLFFBQXRCLENBQUE7O0VBRUEsTUFBQSxJQUFJLE9BQU9BLFFBQVAsS0FBb0IsUUFBeEIsRUFBa0M7RUFDakMsUUFBQSxPQUFPQSxRQUFQLENBQUE7RUFDQSxPQUFBOztFQUVELE1BQUEsSUFBSUUsS0FBSyxDQUFDRSxPQUFOLENBQWNKLFFBQWQsQ0FBSixFQUE2QjtFQUMzQixRQUFBLE9BQU9BLFFBQVEsQ0FBQ0ssSUFBVCxDQUFjLEdBQWQsQ0FBUCxDQUFBO0VBQ0QsT0FBQTs7RUFFRCxNQUFBLElBQUksT0FBT0wsQ0FBQUEsUUFBUCxDQUFvQixLQUFBLFFBQXhCLEVBQWtDO1VBQ2hDLE9BQU8vRixNQUFNLENBQUNDLElBQVAsQ0FBWThGLFFBQVosQ0FDSnhGLENBQUFBLE1BREksQ0FDRyxVQUFDOEYsR0FBRCxFQUFNbkQsR0FBTixFQUFBO1lBQUEsT0FBZW1ELEdBQUcsSUFBSU4sUUFBUSxDQUFDN0MsR0FBRCxDQUFSLEdBQW9CQSxHQUFBQSxDQUFBQSxNQUFBQSxDQUFBQSxHQUFwQixDQUE0QixHQUFBLEVBQWhDLENBQWxCLENBQUE7RUFBQSxTQURILEVBQzJELEVBRDNELENBRUpvRCxDQUFBQSxJQUZJLEVBQVAsQ0FBQTtFQUdELE9BQUE7O0VBRUQsTUFBQSxPQUFPLElBQVAsQ0FBQTtFQUNELEtBQUE7RUFuQk8sR0FBQTtFQVBLLENBQWpCOztFQ3BGQTtFQUNBLElBQU1DLFVBQVUsR0FBRztJQUNqQmxFLEtBQUssRUFBRSxDQUFDLG1CQUFELENBRFU7RUFHakI4QyxFQUFBQSxLQUFLLEVBQUU7RUFDTHFCLElBQUFBLFVBQVUsRUFBRSxDQUFDQyxNQUFELEVBQVNULE1BQVQsQ0FEUDtFQUVMVSxJQUFBQSxVQUFVLEVBQUU7RUFDVnRCLE1BQUFBLElBQUksRUFBRVksTUFESTtRQUVWLFNBQVMsRUFBQSxPQUFBO0VBRkMsS0FBQTtLQUxHO0VBV2pCVyxFQUFBQSxPQUFPLEVBQUU7RUFDUEMsSUFBQUEsWUFETyxFQUNRLFNBQUEsWUFBQSxHQUFBO0VBQ2IsTUFBQSxJQUFJLElBQUtKLENBQUFBLFVBQUwsS0FBb0JsQixTQUFwQixJQUFpQyxJQUFBLENBQUszRCxHQUFMLENBQVNrRixLQUFULEtBQW1CLElBQUtMLENBQUFBLFVBQTdELEVBQXlFO0VBQ3ZFLFFBQUEsSUFBQSxDQUFLN0UsR0FBTCxDQUFTa0YsS0FBVCxHQUFpQixLQUFLTCxVQUF0QixDQUFBO0VBQ0QsT0FBQTtPQUpJO01BTVBNLGFBTk8sRUFBQSxTQUFBLGFBQUEsQ0FNTy9FLEtBTlAsRUFNYztRQUNuQixJQUFLRSxDQUFBQSxLQUFMLENBQVcsbUJBQVgsRUFBZ0NGLEtBQUssQ0FBQ29CLE1BQU4sQ0FBYTBELEtBQTdDLENBQUEsQ0FBQTtFQUNELEtBQUE7S0FuQmM7RUFzQmpCdEIsRUFBQUEsS0FBSyxFQUFFO0VBQ0xpQixJQUFBQSxVQURLLEVBQ1EsU0FBQSxVQUFBLEdBQUE7RUFDWCxNQUFBLElBQUEsQ0FBS0ksWUFBTCxFQUFBLENBQUE7RUFDRCxLQUFBO0tBekJjO0VBNEJqQnRFLEVBQUFBLE9BNUJpQixFQTRCUCxTQUFBLE9BQUEsR0FBQTtFQUNSLElBQUEsSUFBQSxDQUFLc0UsWUFBTCxFQUFBLENBQUE7O01BQ0EsSUFBS2pGLENBQUFBLEdBQUwsQ0FBUzJCLGdCQUFULENBQTBCLEtBQUtvRCxVQUEvQixFQUEyQyxLQUFLSSxhQUFoRCxDQUFBLENBQUE7S0E5QmU7RUFnQ2pCdkQsRUFBQUEsYUFoQ2lCLEVBZ0NELFNBQUEsYUFBQSxHQUFBO01BQ2QsSUFBSzVCLENBQUFBLEdBQUwsQ0FBUzZCLG1CQUFULENBQTZCLEtBQUtrRCxVQUFsQyxFQUE4QyxLQUFLSSxhQUFuRCxDQUFBLENBQUE7RUFDRCxHQUFBO0VBbENnQixDQUFuQjs7RUFzQ0EsSUFBTUMsZ0JBQWdCLEdBQUc7SUFDdkJDLE1BQU0sRUFBRSxDQUFDVCxVQUFELENBRGU7RUFFdkJJLEVBQUFBLE9BQU8sRUFBRTtNQUNQRyxhQURPLEVBQUEsU0FBQSxhQUFBLENBQ08vRSxLQURQLEVBQ2M7UUFDbkIsSUFBS0UsQ0FBQUEsS0FBTCxDQUFXLG1CQUFYLEVBQWdDRixLQUFLLENBQUNvQixNQUFOLENBQWE4RCxhQUE3QyxDQUFBLENBQUE7RUFDRCxLQUFBO0VBSE0sR0FBQTtFQUZjLENBQXpCOztFQVVBLElBQU1DLGFBQWEsR0FBRztJQUNwQkYsTUFBTSxFQUFFLENBQUNULFVBQUQsQ0FEWTtFQUdwQnBCLEVBQUFBLEtBQUssRUFBRTtFQUNMcUIsSUFBQUEsVUFBVSxFQUFFLENBQUNQLEtBQUQsRUFBUVosT0FBUixDQURQO0VBRUxxQixJQUFBQSxVQUFVLEVBQUU7RUFDVnRCLE1BQUFBLElBQUksRUFBRVksTUFESTtRQUVWLFNBQVMsRUFBQSxRQUFBO0VBRkMsS0FBQTtLQUxNO0VBV3BCVyxFQUFBQSxPQUFPLEVBQUU7RUFDUEMsSUFBQUEsWUFETyxFQUNRLFNBQUEsWUFBQSxHQUFBO0VBQ2IsTUFBQSxJQUFJLElBQUtKLENBQUFBLFVBQUwsWUFBMkJQLEtBQS9CLEVBQXNDO0VBQ3BDLFFBQUEsSUFBQSxDQUFLdEUsR0FBTCxDQUFTd0YsT0FBVCxHQUFtQixLQUFLWCxVQUFMLENBQWdCWSxPQUFoQixDQUF3QixJQUFLekYsQ0FBQUEsR0FBTCxDQUFTa0YsS0FBakMsS0FBMkMsQ0FBOUQsQ0FBQTtFQUNELE9BRkQsTUFFTztFQUNMLFFBQUEsSUFBQSxDQUFLbEYsR0FBTCxDQUFTd0YsT0FBVCxHQUFtQixLQUFLWCxVQUF4QixDQUFBO0VBQ0QsT0FBQTtPQU5JO01BUVBNLGFBUk8sRUFBQSxTQUFBLGFBQUEsQ0FRTy9FLEtBUlAsRUFRYztRQUNuQixJQUEyQkEsYUFBQUEsR0FBQUEsS0FBSyxDQUFDb0IsTUFBakM7WUFBUTBELEtBQVIsaUJBQVFBLEtBQVI7WUFBZU0sT0FBZixpQkFBZUEsT0FBZixDQUFBO0VBQ0EsTUFBQSxJQUFJRSxRQUFKLENBQUE7O0VBRUEsTUFBQSxJQUFJLElBQUtiLENBQUFBLFVBQUwsWUFBMkJQLEtBQS9CLEVBQXNDO0VBQ3BDO1VBQ0EsSUFBTXFCLEtBQUssR0FBRyxJQUFLZCxDQUFBQSxVQUFMLENBQWdCWSxPQUFoQixDQUF3QlAsS0FBeEIsQ0FBZCxDQUFBO0VBQ0EsUUFBQSxJQUFNVSxRQUFRLEdBQUdELEtBQUssSUFBSSxDQUExQixDQUFBOztFQUVBLFFBQUEsSUFBSUMsUUFBUSxJQUFJLENBQUNKLE9BQWpCLEVBQTBCO1lBQ3hCRSxRQUFRLEdBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSxrQkFBQSxDQUNILElBQUtiLENBQUFBLFVBQUwsQ0FBZ0IxRixLQUFoQixDQUFzQixDQUF0QixFQUF5QndHLEtBQXpCLENBREcsQ0FFSCxFQUFBLGtCQUFBLENBQUEsSUFBQSxDQUFLZCxVQUFMLENBQWdCMUYsS0FBaEIsQ0FBc0J3RyxLQUFLLEdBQUcsQ0FBOUIsRUFBaUMsSUFBQSxDQUFLZCxVQUFMLENBQWdCZ0IsTUFBakQsQ0FGRyxDQUFSLENBQUEsQ0FBQTtFQUlELFNBQUE7O0VBRUQsUUFBQSxJQUFJLENBQUNELFFBQUQsSUFBYUosT0FBakIsRUFBMEI7RUFDeEJFLFVBQUFBLFFBQVEsR0FBUSxFQUFBLENBQUEsTUFBQSxDQUFBLGtCQUFBLENBQUEsSUFBQSxDQUFLYixVQUFiLENBQUEsRUFBQSxDQUF5QkssS0FBekIsQ0FBUixDQUFBLENBQUE7RUFDRCxTQUFBO0VBRUYsT0FoQkQsTUFnQk87RUFDTDtFQUNBUSxRQUFBQSxRQUFRLEdBQUdGLE9BQVgsQ0FBQTtFQUNELE9BdkJrQjs7O1FBMEJuQkUsUUFBUSxLQUFLL0IsU0FBYixJQUEwQixJQUFBLENBQUtyRCxLQUFMLENBQVcsbUJBQVgsRUFBZ0NvRixRQUFoQyxDQUExQixDQUFBO0VBQ0QsS0FBQTtFQW5DTSxHQUFBO0VBWFcsQ0FBdEI7O0VBbURBLElBQU1JLFVBQVUsR0FBRztJQUNqQlQsTUFBTSxFQUFFLENBQUNULFVBQUQsQ0FEUztFQUVqQnBCLEVBQUFBLEtBQUssRUFBRTtFQUNMdUIsSUFBQUEsVUFBVSxFQUFFO0VBQ1Z0QixNQUFBQSxJQUFJLEVBQUVZLE1BREk7UUFFVixTQUFTLEVBQUEsUUFBQTtFQUZDLEtBQUE7S0FIRztFQVNqQlcsRUFBQUEsT0FBTyxFQUFFO0VBQ1BDLElBQUFBLFlBRE8sRUFDUSxTQUFBLFlBQUEsR0FBQTtRQUNiLElBQUtqRixDQUFBQSxHQUFMLENBQVN3RixPQUFULEdBQW1CLElBQUEsQ0FBS1gsVUFBTCxLQUFvQixJQUFBLENBQUs3RSxHQUFMLENBQVNrRixLQUFoRCxDQUFBO09BRks7TUFJUEMsYUFKTyxFQUFBLFNBQUEsYUFBQSxDQUlPL0UsS0FKUCxFQUljO1FBQ25CLElBQTJCQSxjQUFBQSxHQUFBQSxLQUFLLENBQUNvQixNQUFqQztZQUFRMEQsS0FBUixrQkFBUUEsS0FBUjtZQUFlTSxPQUFmLGtCQUFlQSxPQUFmLENBQUE7RUFDQUEsTUFBQUEsT0FBTyxJQUFJLElBQUtsRixDQUFBQSxLQUFMLENBQVcsbUJBQVgsRUFBZ0M0RSxLQUFoQyxDQUFYLENBQUE7RUFDRCxLQUFBO0VBUE0sR0FBQTtFQVRRLENBQW5COzs7RUNwR0E7RUFDQSxJQUFNYSxZQUFZLEdBQUc7SUFDbkJyRixLQUFLLEVBQUUsQ0FBQyxnQkFBRCxDQURZO0VBRW5CQyxFQUFBQSxPQUZtQixFQUVULFNBQUEsT0FBQSxHQUFBO0VBQUEsSUFBQSxJQUFBLEtBQUEsR0FBQSxJQUFBLENBQUE7O0VBQ1IsSUFBQSxJQUFBLENBQUtxRixvQkFBTCxHQUE0QixZQUFBO0VBQUEsTUFBQSxPQUFNLEtBQUksQ0FBQzFGLEtBQUwsQ0FBVyxnQkFBWCxFQUE2QixLQUE3QixDQUFOLENBQUE7T0FBNUIsQ0FBQTs7RUFDQSxJQUFBLElBQUEsQ0FBS04sR0FBTCxDQUFTMkIsZ0JBQVQsQ0FBMEIsY0FBMUIsRUFBMEMsS0FBS3FFLG9CQUEvQyxDQUFBLENBQUE7S0FKaUI7RUFNbkJwRSxFQUFBQSxhQU5tQixFQU1ILFNBQUEsYUFBQSxHQUFBO0VBQ2QsSUFBQSxJQUFBLENBQUs1QixHQUFMLENBQVM2QixtQkFBVCxDQUE2QixjQUE3QixFQUE2QyxLQUFLbUUsb0JBQWxELENBQUEsQ0FBQTtFQUNELEdBQUE7RUFSa0IsQ0FBckIsQ0FBQTtFQVdBLElBQU1DLGtCQUFrQixHQUFHO0VBQ3pCQyxFQUFBQSxZQUFZLEVBQUUsS0FEVztFQUV6QmxFLEVBQUFBLFFBQVEsRUFBRTtFQUNSbUUsSUFBQUEsWUFEUSxFQUNPLFNBQUEsWUFBQSxHQUFBO0VBQ2I7RUFDQTtFQUNBLE1BQUEsSUFBQSxZQUFBLEdBQTZCLEtBQUs1RCxNQUFsQztZQUFRRSxPQUFSLGdCQUFRQSxPQUFSO0VBQUEsVUFBb0IyRCxJQUFwQixHQUFBLHdCQUFBLENBQUEsWUFBQSxFQUFBLFNBQUEsQ0FBQSxDQUFBOztFQUNBLE1BQUEsT0FBQUMsY0FBQSxDQUFBQSxjQUFBLENBQUEsRUFBQSxFQUFZRCxJQUFaLENBQUEsRUFBQSxFQUFBLEVBQUE7RUFBa0IzRCxRQUFBQSxPQUFPLEVBQVBBLE9BQUFBO0VBQWxCLE9BQUEsQ0FBQSxDQUFBO0VBQ0QsS0FBQTtFQU5PLEdBQUE7RUFGZSxDQUEzQixDQUFBO0VBWUEsSUFBTTZELE1BQU0sR0FBRztFQUNiakIsRUFBQUEsTUFBTSxFQUFFLENBQUNVLFlBQUQsRUFBZUUsa0JBQWYsQ0FBQTtFQURLLENBQWY7O0VDZEUsTUFBTXZHLE1BQUssR0FBRSxlQUFlLENBQUE7O0lBRTVCLGVBQWU7WUFDYkEsTUFBSTtFQUNKLElBQUEsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDQSxNQUFJLENBQUMsRUFBRSxRQUFRLENBQUM7RUFDdEMsSUFBQSxLQUFLLEVBQUU7UUFDTCxNQUFNLEVBQUUsT0FBTTtFQUNoQixLQUFBO0tBQ0Q7Ozs7OzZCQ2pCRDZHLHNCQUVhLENBQUEsYUFBQSxFQUFBO0VBRkMsSUFBQSxRQUFRLEVBQUUsSUFBa0IsQ0FBQSxrQkFBQTtFQUFHLElBQUEsTUFBTSxFQUFFLE1BQU8sQ0FBQSxNQUFBLElBQUEsSUFBQTs7TUFDMURDLGNBQVksQ0FBQSxJQUFBLENBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQTs7Ozs7O0VDUWQsTUFBTTlHLE1BQUcsR0FBSSxzQkFBc0IsQ0FBQTs7SUFFbkMsZUFBZTtZQUNiQSxNQUFJO0VBQ0osSUFBQSxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUNBLE1BQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQTtLQUN0Qzs7Ozs7NkJDZEQ2RyxzQkFFb0IsQ0FBQSxvQkFBQSxFQUFBLEVBRkMsUUFBUSxFQUFFLElBQWtCLENBQUEsa0JBQUEsRUFBQSxFQUFBO01BQy9DQyxjQUFZLENBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxTQUFBLENBQUE7Ozs7OztFQ1FkLE1BQU05RyxNQUFHLEdBQUksc0JBQXNCLENBQUE7O0lBRW5DLGVBQWU7WUFDYkEsTUFBSTtFQUNKLElBQUEsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDQSxNQUFJLENBQUMsRUFBRSxRQUFRLENBQUE7S0FDdEM7Ozs7OzZCQ2RENkcsc0JBRW9CLENBQUEsb0JBQUEsRUFBQSxFQUZDLFFBQVEsRUFBRSxJQUFrQixDQUFBLGtCQUFBLEVBQUEsRUFBQTtNQUMvQ0MsY0FBWSxDQUFBLElBQUEsQ0FBQSxNQUFBLEVBQUEsU0FBQSxDQUFBOzs7Ozs7RUNRZCxNQUFNOUcsTUFBSyxHQUFFLDJCQUEyQixDQUFBOztJQUV4QyxlQUFlO1lBQ2JBLE1BQUk7RUFDSixJQUFBLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFBO0tBQ3RDOzs7Ozs2QkNkRDZHLHNCQUV5QixDQUFBLHlCQUFBLEVBQUEsRUFGQyxRQUFRLEVBQUUsSUFBa0IsQ0FBQSxrQkFBQSxFQUFBLEVBQUE7TUFDcERDLGNBQVksQ0FBQSxJQUFBLENBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQTs7Ozs7O0VDUWQsTUFBTTlHLE1BQUssR0FBRSxjQUFjLENBQUE7O0lBRTNCLGVBQWU7WUFDYkEsTUFBSTtFQUNKLElBQUEsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDQSxNQUFJLENBQUMsRUFBRSxRQUFRLENBQUE7S0FDdEM7Ozs7OzZCQ2RENkcsc0JBRVksQ0FBQSxZQUFBLEVBQUEsRUFGQyxRQUFRLEVBQUUsSUFBa0IsQ0FBQSxrQkFBQSxFQUFBLEVBQUE7TUFDdkNDLGNBQVksQ0FBQSxJQUFBLENBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQTs7Ozs7O0VDUWQsTUFBTTlHLFNBQU8sWUFBWSxDQUFBOztJQUV6QixlQUFlO1lBQ2JBLE1BQUk7RUFDSixJQUFBLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFBO0tBQ3RDOzs7Ozs2QkNkRDZHLHNCQUVVLENBQUEsVUFBQSxFQUFBLEVBRkMsUUFBUSxFQUFFLElBQWtCLENBQUEsa0JBQUEsRUFBQSxFQUFBO01BQ3JDQyxjQUFZLENBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxTQUFBLENBQUE7Ozs7OztFQ1FkLE1BQU05RyxTQUFPLFlBQVksQ0FBQTs7SUFFekIsZUFBZTtZQUNiQSxNQUFJO0VBQ0osSUFBQSxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUNBLE1BQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQTtLQUN0Qzs7Ozs7NkJDZEQ2RyxzQkFFVSxDQUFBLFVBQUEsRUFBQSxFQUZDLFFBQVEsRUFBRSxJQUFrQixDQUFBLGtCQUFBLEVBQUEsRUFBQTtNQUNyQ0MsY0FBWSxDQUFBLElBQUEsQ0FBQSxNQUFBLEVBQUEsU0FBQSxDQUFBOzs7Ozs7RUNRZCxNQUFNOUcsU0FBTyxZQUFZLENBQUE7O0lBRXpCLGVBQWU7WUFDYkEsTUFBSTtFQUNKLElBQUEsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDQSxNQUFJLENBQUMsRUFBRSxRQUFRLENBQUE7S0FDdEM7Ozs7OzZCQ2RENkcsc0JBRVUsQ0FBQSxVQUFBLEVBQUEsRUFGQyxRQUFRLEVBQUUsSUFBa0IsQ0FBQSxrQkFBQSxFQUFBLEVBQUE7TUFDckNDLGNBQVksQ0FBQSxJQUFBLENBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQTs7Ozs7O0VDUWQsTUFBTTlHLE1BQUcsR0FBSSxpQkFBaUIsQ0FBQTs7SUFFOUIsZUFBZTtZQUNiQSxNQUFJO0VBQ0osSUFBQSxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUNBLE1BQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQztNQUN0QyxLQUFLLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztFQUMxQixJQUFBLE9BQU8sRUFBRTtRQUNQLFFBQVEsR0FBRztVQUNULElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtFQUNsRCxPQUFBO0VBQ0YsS0FBQTtLQUNEOzs7Ozs2QkNwQkQ2RyxzQkFFZSxDQUFBLGVBQUEsRUFBQTtFQUZDLElBQUEsUUFBUSxFQUFFLElBQWtCLENBQUEsa0JBQUE7RUFBTyxJQUFBLFFBQU0sMENBQUUsUUFBUSxDQUFBLFFBQUEsSUFBQSxRQUFBLENBQUEsUUFBQSxDQUFBLEdBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQTs7TUFDakVDLGNBQVksQ0FBQSxJQUFBLENBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQTs7Ozs7O0VDUWQsTUFBTTlHLE1BQUssR0FBRSxrQkFBa0IsQ0FBQTs7SUFFL0IsZUFBZTtZQUNiQSxNQUFJO0VBQ0osSUFBQSxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUNBLE1BQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQTtLQUN0Qzs7Ozs7NkJDZEQ2RyxzQkFFZ0IsQ0FBQSxnQkFBQSxFQUFBLEVBRkMsUUFBUSxFQUFFLElBQWtCLENBQUEsa0JBQUEsRUFBQSxFQUFBO01BQzNDQyxjQUFZLENBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxTQUFBLENBQUE7Ozs7OztFQ1FkLE1BQU05RyxNQUFLLEdBQUUsbUJBQW1CLENBQUE7O0lBRWhDLGVBQWU7WUFDYkEsTUFBSTtFQUNKLElBQUEsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDQSxNQUFJLENBQUMsRUFBRSxRQUFRLENBQUE7S0FDdEM7Ozs7OzZCQ2RENkcsc0JBRWlCLENBQUEsaUJBQUEsRUFBQSxFQUZDLFFBQVEsRUFBRSxJQUFrQixDQUFBLGtCQUFBLEVBQUEsRUFBQTtNQUM1Q0MsY0FBWSxDQUFBLElBQUEsQ0FBQSxNQUFBLEVBQUEsU0FBQSxDQUFBOzs7Ozs7RUNRZCxNQUFNOUcsTUFBSyxHQUFFLGNBQWMsQ0FBQTs7SUFFM0IsZUFBZTtZQUNiQSxNQUFJO01BQ0osTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDQSxNQUFJLENBQUMsQ0FBQTtLQUM1Qjs7OzZCQ2RENkcsc0JBRVksQ0FBQSxZQUFBLEVBQUEsSUFBQSxFQUFBO01BRFZDLGNBQVksQ0FBQSxJQUFBLENBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQTs7Ozs7O0VDUWQsTUFBTTlHLE1BQUssR0FBRSxXQUFXLENBQUE7O0lBRXhCLGVBQWU7WUFDYkEsTUFBSTtNQUNKLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLENBQUE7S0FDNUI7Ozs2QkNkRDZHLHNCQUVTLENBQUEsU0FBQSxFQUFBLElBQUEsRUFBQTtNQURQQyxjQUFZLENBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxTQUFBLENBQUE7Ozs7OztFQ1FkLE1BQU05RyxNQUFLLEdBQUUsV0FBVyxDQUFBOztJQUV4QixlQUFlO1lBQ2JBLE1BQUk7TUFDSixNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUNBLE1BQUksQ0FBQyxDQUFBO0tBQzVCOzs7NkJDZEQ2RyxzQkFFUyxDQUFBLFNBQUEsRUFBQSxJQUFBLEVBQUE7TUFEUEMsY0FBWSxDQUFBLElBQUEsQ0FBQSxNQUFBLEVBQUEsU0FBQSxDQUFBOzs7Ozs7RUNRZCxNQUFNOUcsTUFBRyxHQUFJLG9CQUFvQixDQUFBOztJQUVqQyxlQUFlO1lBQ2JBLE1BQUk7RUFDSixJQUFBLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFBO0tBQ3RDOzs7Ozs2QkNkRDZHLHNCQUVrQixDQUFBLGtCQUFBLEVBQUEsRUFGQyxRQUFRLEVBQUUsSUFBa0IsQ0FBQSxrQkFBQSxFQUFBLEVBQUE7TUFDN0NDLGNBQVksQ0FBQSxJQUFBLENBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQTs7Ozs7O0VDUWQsTUFBTTlHLE1BQUssR0FBRSx5QkFBeUIsQ0FBQTs7SUFFdEMsZUFBZTtZQUNiQSxNQUFJO0VBQ0osSUFBQSxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUNBLE1BQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQTtLQUN0Qzs7Ozs7NkJDZEQ2RyxzQkFFdUIsQ0FBQSx1QkFBQSxFQUFBLEVBRkMsUUFBUSxFQUFFLElBQWtCLENBQUEsa0JBQUEsRUFBQSxFQUFBO01BQ2xEQyxjQUFZLENBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxTQUFBLENBQUE7Ozs7OztFQ1FkLE1BQU05RyxNQUFHLEdBQUkscUJBQXFCLENBQUE7O0lBRWxDLGVBQWU7WUFDYkEsTUFBSTtNQUNKLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLENBQUE7S0FDNUI7Ozs2QkNkRDZHLHNCQUVtQixDQUFBLG1CQUFBLEVBQUEsSUFBQSxFQUFBO01BRGpCQyxjQUFZLENBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxTQUFBLENBQUE7Ozs7OztFQ1FkLE1BQU05RyxNQUFHLEdBQUkscUJBQXFCLENBQUE7O0lBRWxDLGVBQWU7WUFDYkEsTUFBSTtNQUNKLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLENBQUE7S0FDNUI7Ozs2QkNkRDZHLHNCQUVtQixDQUFBLG1CQUFBLEVBQUEsSUFBQSxFQUFBO01BRGpCQyxjQUFZLENBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxTQUFBLENBQUE7Ozs7OztFQ1FkLE1BQU05RyxNQUFLLEdBQUUsd0JBQXdCLENBQUE7O0lBRXJDLGVBQWU7WUFDYkEsTUFBSTtNQUNKLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLENBQUE7S0FDNUI7Ozs2QkNkRDZHLHNCQUVzQixDQUFBLHNCQUFBLEVBQUEsSUFBQSxFQUFBO01BRHBCQyxjQUFZLENBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxTQUFBLENBQUE7Ozs7OztFQ1FkLE1BQU05RyxNQUFHLEdBQUksZ0JBQWdCLENBQUE7O0lBRTdCLGVBQWU7WUFDYkEsTUFBSTtNQUNKLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQTtLQUNyRDs7OzZCQ2RENkcsc0JBRWMsQ0FBQSxjQUFBLEVBQUEsSUFBQSxFQUFBO01BRFpDLGNBQVksQ0FBQSxJQUFBLENBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQTs7Ozs7O0VDUWQsTUFBTTlHLE1BQUssR0FBRSxjQUFjLENBQUE7O0lBRTNCLGVBQWU7WUFDYkEsTUFBSTtNQUNKLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQTtLQUNyRDs7Ozs7NkJDZEQ2RyxzQkFFWSxDQUFBLFlBQUEsRUFBQSxFQUZDLFFBQVEsRUFBRSxJQUFrQixDQUFBLGtCQUFBLEVBQUEsRUFBQTtNQUN2Q0MsY0FBWSxDQUFBLElBQUEsQ0FBQSxNQUFBLEVBQUEsU0FBQSxDQUFBOzs7Ozs7RUNRZCxNQUFNOUcsTUFBRyxHQUFJLGdCQUFnQixDQUFBOztJQUU3QixlQUFlO1lBQ2JBLE1BQUk7TUFDSixNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUNBLE1BQUksQ0FBQyxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUE7S0FDckQ7Ozs7OzZCQ2RENkcsc0JBRWMsQ0FBQSxjQUFBLEVBQUEsRUFGQyxRQUFRLEVBQUUsSUFBa0IsQ0FBQSxrQkFBQSxFQUFBLEVBQUE7TUFDekNDLGNBQVksQ0FBQSxJQUFBLENBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQTs7Ozs7O0VDUWQsTUFBTTlHLFNBQU8sYUFBYSxDQUFBOztJQUUxQixlQUFlO1lBQ2JBLE1BQUk7TUFDSixNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUNBLE1BQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUE7S0FDbEQ7Ozs7OzZCQ2RENkcsc0JBRVcsQ0FBQSxXQUFBLEVBQUEsRUFGQyxRQUFRLEVBQUUsSUFBa0IsQ0FBQSxrQkFBQSxFQUFBLEVBQUE7TUFDdENDLGNBQVksQ0FBQSxJQUFBLENBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQTs7Ozs7O0VDUWQsTUFBTTlHLE1BQUcsR0FBSSxvQkFBb0IsQ0FBQTs7SUFFakMsZUFBZTtZQUNiQSxNQUFJO01BQ0osTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDQSxNQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFBO0tBQ2xEOzs7Ozs2QkNkRDZHLHNCQUVrQixDQUFBLGtCQUFBLEVBQUEsRUFGQyxRQUFRLEVBQUUsSUFBa0IsQ0FBQSxrQkFBQSxFQUFBLEVBQUE7TUFDN0NDLGNBQVksQ0FBQSxJQUFBLENBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQTs7Ozs7O0VDUWQsTUFBTTlHLFNBQU8sYUFBYSxDQUFBOztJQUUxQixlQUFlO1lBQ2JBLE1BQUk7TUFDSixNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUNBLE1BQUksQ0FBQyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQTtLQUN4RDs7Ozs7NkJDZEQ2RyxzQkFFVyxDQUFBLFdBQUEsRUFBQSxFQUZDLFFBQVEsRUFBRSxJQUFrQixDQUFBLGtCQUFBLEVBQUEsRUFBQTtNQUN0Q0MsY0FBWSxDQUFBLElBQUEsQ0FBQSxNQUFBLEVBQUEsU0FBQSxDQUFBOzs7Ozs7RUNRZCxNQUFNOUcsU0FBTyxhQUFhLENBQUE7O0lBRTFCLGVBQWU7WUFDYkEsTUFBSTtNQUNKLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQTtLQUNsRDs7Ozs7NkJDZEQ2RyxzQkFFVyxDQUFBLFdBQUEsRUFBQSxFQUZDLFFBQVEsRUFBRSxJQUFrQixDQUFBLGtCQUFBLEVBQUEsRUFBQTtNQUN0Q0MsY0FBWSxDQUFBLElBQUEsQ0FBQSxNQUFBLEVBQUEsU0FBQSxDQUFBOzs7Ozs7RUNRZCxNQUFNOUcsTUFBSyxHQUFFLFdBQVcsQ0FBQTs7SUFFeEIsZUFBZTtZQUNiQSxNQUFJO0VBQ0osSUFBQSxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUNBLE1BQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUE7S0FDL0M7Ozs7OzZCQ2RENkcsc0JBRVMsQ0FBQSxTQUFBLEVBQUEsRUFGQyxRQUFRLEVBQUUsSUFBa0IsQ0FBQSxrQkFBQSxFQUFBLEVBQUE7TUFDcENDLGNBQVksQ0FBQSxJQUFBLENBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQTs7Ozs7O0VDUWQsTUFBTTlHLE1BQUcsR0FBSSx1QkFBdUIsQ0FBQTs7SUFFcEMsZUFBZTtZQUNiQSxNQUFJO0VBQ0osSUFBQSxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUNBLE1BQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQTtLQUN0Qzs7Ozs7NkJDZEQ2RyxzQkFFcUIsQ0FBQSxxQkFBQSxFQUFBLEVBRkMsUUFBUSxFQUFFLElBQWtCLENBQUEsa0JBQUEsRUFBQSxFQUFBO01BQ2hEQyxjQUFZLENBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxTQUFBLENBQUE7Ozs7OztFQ1FkLE1BQU05RyxNQUFLLEdBQUUsY0FBYyxDQUFBOztJQUUzQixlQUFlO1lBQ2JBLE1BQUk7RUFDSixJQUFBLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQTtLQUM3RTs7Ozs7RUNkRCxFQUFBLFFBQUErRyxhQUFBLEVBQUEsRUFBQUYsc0JBQUEsQ0FFWSxjQUZaRyxjQUVZLENBQUEsRUFGQyxRQUFRLEVBQUUsSUFBQSxDQUFBLGtCQUFrQixJQUFVLElBQVksQ0FBQSxZQUFBLENBQUEsRUFBQTtNQUM3REYsY0FBWSxDQUFBLElBQUEsQ0FBQSxNQUFBLEVBQUEsU0FBQSxDQUFBOzs7Ozs7RUNRZCxNQUFNOUcsTUFBRyxHQUFJLG9CQUFvQixDQUFBOztJQUVqQyxlQUFlO1lBQ2JBLE1BQUk7RUFDSixJQUFBLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQTtLQUM3RTs7Ozs7RUNkRCxFQUFBLFFBQUErRyxhQUFBLEVBQUEsRUFBQUYsc0JBQUEsQ0FFa0Isb0JBRmxCRyxjQUVrQixDQUFBLEVBRkMsUUFBUSxFQUFFLElBQUEsQ0FBQSxrQkFBa0IsSUFBVSxJQUFZLENBQUEsWUFBQSxDQUFBLEVBQUE7TUFDbkVGLGNBQVksQ0FBQSxJQUFBLENBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQTs7Ozs7O0VDUWQsTUFBTTlHLE1BQUssR0FBRSwyQkFBMkIsQ0FBQTs7SUFFeEMsZUFBZTtZQUNiQSxNQUFJO0VBQ0osSUFBQSxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUNBLE1BQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQTtLQUN0Qzs7Ozs7NkJDZEQ2RyxzQkFFeUIsQ0FBQSx5QkFBQSxFQUFBLEVBRkMsUUFBUSxFQUFFLElBQWtCLENBQUEsa0JBQUEsRUFBQSxFQUFBO01BQ3BEQyxjQUFZLENBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxTQUFBLENBQUE7Ozs7OztFQ1FkLE1BQU05RyxTQUFPLGFBQWEsQ0FBQTs7SUFFMUIsZUFBZTtZQUNiQSxNQUFJO0VBQ0osSUFBQSxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUNBLE1BQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUE7S0FDOUU7Ozs7OzZCQ2RENkcsc0JBRVcsQ0FBQSxXQUFBLEVBQUEsRUFGQyxRQUFRLEVBQUUsSUFBa0IsQ0FBQSxrQkFBQSxFQUFBLEVBQUE7TUFDdENDLGNBQVksQ0FBQSxJQUFBLENBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQTs7Ozs7O0VDUWQsTUFBTTlHLFNBQU8sYUFBYSxDQUFBOztJQUUxQixlQUFlO1lBQ2JBLE1BQUk7RUFDSixJQUFBLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFBO0tBQ3JFOzs7Ozs2QkNkRDZHLHNCQUVXLENBQUEsV0FBQSxFQUFBLEVBRkMsUUFBUSxFQUFFLElBQWtCLENBQUEsa0JBQUEsRUFBQSxFQUFBO01BQ3RDQyxjQUFZLENBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxTQUFBLENBQUE7Ozs7OztFQ1FkLE1BQU05RyxNQUFLLEdBQUUsZUFBZSxDQUFBOztJQUU1QixlQUFlO1lBQ2JBLE1BQUk7RUFDSixJQUFBLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQzs7RUFFNUUsSUFBQSxLQUFLLEVBQUU7RUFDTCxNQUFBLE1BQU0sRUFBRTtFQUNOLFFBQUEsU0FBUyxDQUFDLEtBQUssRUFBRTtFQUNmLFVBQUEsT0FBTyxLQUFLLENBQUMsT0FBTSxJQUFLLE9BQU8sVUFBVSxRQUFPLElBQUssaUJBQWlCLFNBQVMsS0FBTSxZQUFXLFdBQVcsQ0FBQTtFQUM3RyxTQUFBO0VBQ0YsT0FBQTtPQUNEOztFQUVELElBQUEsUUFBUSxFQUFFO0VBQ1IsTUFBQSxnQkFBZ0IsR0FBRztFQUNqQixRQUFBLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFFLElBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQTtTQUN0QztFQUNELE1BQUEsaUJBQWlCLEdBQUc7RUFDbEIsUUFBQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDZixVQUFBLE9BQU87Y0FDTCxNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtFQUM3QixZQUFBLEdBQUcsSUFBSSxDQUFDLE9BQU07YUFDZixDQUFBO0VBQ0gsU0FBQTtFQUNBLFFBQUEsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBO0VBQ3JCLE9BQUE7RUFDRixLQUFBO0tBQ0Q7OztFQ3JDRCxFQUFBLFFBQUErRyxhQUFBLEVBQUEsRUFBQUYsc0JBQUEsQ0FFYSx5REFGUSxJQUFZLENBQUEsWUFBQSxDQUFBLENBQUEsRUFBQTtNQUMvQkMsY0FBWSxDQUFBLElBQUEsQ0FBQSxNQUFBLEVBQUEsU0FBQSxDQUFBOzs7Ozs7RUNrQmQsTUFBTTlHLE1BQUcsR0FBSSxvQkFBb0IsQ0FBQTs7SUFFakMsZUFBZTtZQUNiQSxNQUFJO0VBQ0osSUFBQSxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUM7O0VBRTdFLElBQUEsS0FBSyxFQUFFO0VBQ0wsTUFBQSxLQUFLLEVBQUU7VUFDTCxJQUFJLEVBQUUsTUFBSztTQUNaO0VBQ0QsTUFBQSxNQUFNLEVBQUU7VUFDTixJQUFJLEVBQUUsTUFBTTtFQUNaLFFBQUEsU0FBUyxDQUFDLEtBQUssRUFBRTtFQUNmLFVBQUEsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFFLElBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQSxZQUFhLFFBQVEsQ0FBQyxDQUFBO0VBQ3hFLFNBQUE7RUFDRixPQUFBO0VBQ0YsS0FBQTtLQUNEOzs7RUNuQ00sTUFBQWlILFlBQUEsR0FBQSxFQUFBLEtBQUssRUFBQyxvQkFBb0IsR0FBQTtFQUcxQixNQUFBQyxZQUFBLEdBQUEsRUFBQSxLQUFLLEVBQUMsc0JBQXNCLEdBQUE7RUFHNUIsTUFBQUMsWUFBQSxHQUFBLEVBQUEsS0FBSyxFQUFDLHFCQUFxQixHQUFBOzs7O0VBUGxDLEVBQUEsUUFBQUosYUFBQSxFQUFBLEVBQUFGLHNCQUFBLENBWWtCLG9CQVpsQkcsY0FZa0IsQ0FBQSxFQVpDLFFBQVEsRUFBRSxJQUFBLENBQUEsa0JBQWtCLElBQVUsSUFBWSxDQUFBLFlBQUEsQ0FBQSxFQUFBO0VBQ25FLElBQUFJLHNCQUFBLENBRUssT0FGTEgsWUFFSyxFQUFBO0VBREgsTUFBQUgsY0FBQSxDQUFrQywwQkFBbEMsTUFBa0M7a0RBQWIsTUFBSyxDQUFBLEtBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQTs7O0VBRTVCLElBQUFNLHNCQUFBLENBRUssT0FGTEYsWUFFSyxFQUFBO1FBREhKLGNBQVksQ0FBQSxJQUFBLENBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQTs7RUFFZCxJQUFBTSxzQkFBQSxDQUlLLE9BSkxELFlBSUssRUFBQTtFQUhILE1BQUFMLGNBQUEsQ0FFTSwyQkFGTixNQUVNO0VBREosU0FBQUMsYUFBQSxDQUFBLElBQUEsQ0FBQSxFQUFBRixzQkFBQSxDQUFzSFEsWUFBcEUsRUFBQSxJQUFBLEVBQUFDLGNBQUEsQ0FBQSxNQUFBLENBQUEsTUFBTSxFQUF2QixDQUFBLE9BQU8sRUFBRSxHQUFHLEtBQUE7cUNBQTdDVCxzQkFBc0gsQ0FBQSx5QkFBQSxFQUFBO0VBQTNELFlBQUEsR0FBRyxFQUFFLEdBQUc7RUFBRyxZQUFBLE9BQUssRUFBRSxPQUFPO21DQUFJLEdBQUcsQ0FBQSxFQUFBLENBQUEsRUFBQSxVQUFBLENBQUEsQ0FBQTs7Ozs7Ozs7O0VDQWpHLE1BQU03RyxNQUFLLEdBQUUsa0JBQWtCLENBQUE7O0lBRS9CLGVBQWU7WUFDYkEsTUFBSTtFQUNKLElBQUEsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDQSxNQUFJLENBQUMsRUFBRSxPQUFPLENBQUM7O0VBRXJDLElBQUEsS0FBSyxFQUFFLENBQUMsYUFBYSxDQUFDOztFQUV0QixJQUFBLEtBQUssRUFBRTtRQUNMLElBQUksRUFBRTtVQUNKLElBQUksRUFBRSxPQUFPO0VBQ2IsUUFBQSxPQUFPLEVBQUUsU0FBUTtFQUNuQixPQUFBO09BQ0Q7O0VBRUQsSUFBQSxPQUFPLEVBQUU7RUFDUCxNQUFBLGFBQWEsR0FBRztVQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsU0FBUSxJQUFLLElBQUksQ0FBQyxJQUFHLEtBQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtTQUNsRTtFQUNELE1BQUEsYUFBYSxHQUFHO0VBQ2QsUUFBQSxJQUFJLENBQUMsYUFBYSxFQUFHLElBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBRyxHQUFJLFdBQVUsR0FBSSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0VBQ3hGLE9BQUE7T0FDRDs7RUFFRCxJQUFBLEtBQUssRUFBRTtFQUNMLE1BQUEsSUFBSSxHQUFHO0VBQ0wsUUFBQSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7RUFDdEIsT0FBQTtPQUNEOztFQUVELElBQUEsT0FBTyxHQUFHO0VBQ1IsTUFBQSxJQUFJLENBQUMscUJBQXFCLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRyxJQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTs7RUFFcEcsTUFBQSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFBOztFQUU3RixNQUFBLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtPQUNyQjs7RUFFRCxJQUFBLGFBQWEsR0FBRztFQUNkLE1BQUEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQU0sSUFBRyxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFBO0VBQ2xHLEtBQUE7S0FDRDs7OzZCQ2xERDZHLHNCQUVnQixDQUFBLGdCQUFBLEVBQUEsSUFBQSxFQUFBO01BRGRDLGNBQVksQ0FBQSxJQUFBLENBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQTs7Ozs7O0VDYWQsTUFBTTlHLE1BQUcsR0FBSSxnQkFBZ0IsQ0FBQTs7SUFFN0IsZUFBZTtZQUNiQSxNQUFJO01BQ0osTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDQSxNQUFJLENBQUMsQ0FBQztNQUM1QixLQUFLLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztLQUM5Qjs7b0NDZENvSCxzQkFBVSxDQUFBLEtBQUEsRUFBQSxJQUFBLEVBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxFQUFBOzs7NkJBTlpQLHNCQU9jLENBQUEsY0FBQSxFQUFBO0VBTlgsSUFBQSxZQUFVLEVBQU8sTUFBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsR0FBQVUsaUJBQUEsQ0FBQSxNQUFBLEtBQUEsSUFBQSxDQUFBLEtBQUssQ0FBdUIsb0JBQUEsRUFBQSxNQUFNLENBQUMsV0FBVyxDQUFBLENBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUE7O01BRWhFSCxzQkFFSyxDQUFBLEtBQUEsRUFBQSxJQUFBLEVBQUE7UUFESE4sY0FBWSxDQUFBLElBQUEsQ0FBQSxNQUFBLEVBQUEsU0FBQSxDQUFBOztNQUVkVSxZQUFVOzs7Ozs7QUNDWixpQkFBZTtFQUNiLElBQUEsSUFBSSxFQUFFLFdBQVc7RUFDakIsSUFBQSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDbEIsSUFBQSxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUM7O0VBRWhCLElBQUEsS0FBSyxFQUFFO0VBQ0wsTUFBQSxJQUFJLEVBQUUsR0FBRztFQUNULE1BQUEsS0FBSyxFQUFFLEdBQUc7RUFDVixNQUFBLE1BQU0sRUFBRTtVQUNOLElBQUksRUFBRSxPQUFNO0VBQ2QsT0FBQTtPQUNEOztFQUVELElBQUEsT0FBTyxFQUFFO1FBQ1AsTUFBTSxDQUFDLEtBQUssRUFBRTtFQUNaLFFBQUEsSUFBSSxVQUFXLEdBQUUsSUFBSSxDQUFBO1VBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVyxHQUFFLEtBQU0sRUFBQyxDQUFDLENBQUE7O0VBRWpFLFFBQUEsSUFBSSxVQUFVLEVBQUU7RUFDZCxVQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU0sRUFBRyxDQUFDLENBQUE7RUFDekYsU0FBQTtFQUNGLE9BQUE7T0FDRDs7RUFFRCxJQUFBLEtBQUssRUFBRTtFQUNMLE1BQUEsTUFBTSxHQUFHO0VBQ1AsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7RUFDakMsT0FBQTtFQUNGLEtBQUE7S0FDRDs7Ozs7NkJDcENEWCxzQkFDUyxDQUFBLFNBQUEsRUFBQTtFQURDLElBQUEsTUFBTSxFQUFFLE1BQU8sQ0FBQSxNQUFBLElBQUEsSUFBQTtFQUFVLElBQUEsT0FBSyw0REFBVSxRQUFNLENBQUEsTUFBQSxJQUFBLFFBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxJQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsQ0FBQTs7Ozs7O0VDeUJ4RCxNQUFNN0csTUFBSyxHQUFFLGNBQWMsQ0FBQTs7SUFFM0IsZUFBZTtZQUNiQSxNQUFJO01BQ0osTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDQSxNQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQ3lILGlDQUFhLENBQUMsQ0FBQztNQUNuRyxLQUFLLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzs7RUFFN0IsSUFBQSxLQUFLLEVBQUU7UUFDTCxJQUFJLEVBQUU7VUFDSixJQUFJLEVBQUUsS0FBSztFQUNYLFFBQUEsU0FBUyxDQUFDLEtBQUssRUFBRTtZQUNmLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFFLElBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFLLElBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0VBQ2pILFNBQUE7U0FDRDtRQUNELFdBQVcsRUFBRTtFQUNYLFFBQUEsSUFBSSxFQUFFLElBQUc7RUFDWCxPQUFBO09BQ0Q7O0VBRUQsSUFBQSxPQUFPLEVBQUU7UUFDUCxPQUFPLENBQUMsR0FBRyxFQUFFO0VBQ1gsUUFBQSxPQUFPLEdBQUcsQ0FBQyxHQUFJLElBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQTtFQUN6QyxPQUFBO09BQ0Q7S0FDRjs7O0VDN0NNLE1BQUEsVUFBQSxHQUFBLEVBQUEsS0FBSyxFQUFDLGlCQUFpQixHQUFBO2tDQU0xQkwsc0JBQVUsQ0FBQSxLQUFBLEVBQUEsSUFBQSxFQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsRUFBQTtrQ0FNVkEsc0JBQWlDLENBQUEsS0FBQSxFQUFBLEVBQTVCLEtBQUssRUFBQyxnQkFBZ0IsRUFBQSxFQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsRUFBQTs7Ozs7NkJBaEIvQlAsc0JBa0JZLENBQUEsWUFBQSxFQUFBO0VBakJULElBQUEsUUFBUSxFQUFFLElBQWtCLENBQUEsa0JBQUE7RUFDNUIsSUFBQSxXQUFTLEVBQU8sTUFBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsR0FBQVUsaUJBQUEsQ0FBQSxNQUFBLEtBQUEsSUFBQSxDQUFBLFNBQVMsQ0FBUSxNQUFBLENBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFPLElBQUssSUFBQSxDQUFBLEtBQUssQ0FBdUIsb0JBQUEsRUFBQSxNQUFNLENBQUMsS0FBSyxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQTs7RUFFcEcsSUFBQUgsc0JBQUEsQ0FPSyxPQVBMLFVBT0ssRUFBQTtRQU5IQSxzQkFJSyxDQUFBLEtBQUEsRUFBQSxJQUFBLEVBQUE7RUFISCxRQUFBTixjQUFBLENBRU0sMEJBRk4sTUFFTTtrQ0FESkQsc0JBQW9LLENBQUFRLFlBQUEsRUFBQSxJQUFBLEVBQUFDLGNBQUEsQ0FBM0ksTUFBSSxDQUFBLElBQUEsRUFBQSxDQUFYLEdBQUUsS0FBQTt1Q0FBcEJJLGVBQW9LLENBQUFDLDJCQUFBLENBQTVFLEdBQUcsQ0FBQyxJQUFJLENBQUEsRUFBaEdYLGNBQW9LLENBQUEsRUFBQSxHQUF4SCxJQUFxQixDQUFBLHFCQUFBLEVBQUEsR0FBSyxHQUFHLENBQUM7RUFBeUIsY0FBQSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFFLElBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFLLElBQUcsUUFBQSxDQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUEsQ0FBQTs7Ozs7UUFHekosVUFBVTs7TUFFWkksc0JBS0ssQ0FBQSxLQUFBLEVBQUE7RUFMQSxNQUFBLEtBQUssRUFBQyxRQUFTO0VBQUMsTUFBQSxLQUFLLHFCQUFFLE1BQVcsQ0FBQSxXQUFBLENBQUE7O0VBQ3JDLE1BQUFOLGNBQUEsQ0FFTSw0QkFGTixNQUVNO2dDQURKRCxzQkFBMkUsQ0FBQVEsWUFBQSxFQUFBLElBQUEsRUFBQUMsY0FBQSxDQUFsRCxNQUFJLENBQUEsSUFBQSxFQUFBLENBQVgsR0FBSSxLQUFBO3FDQUF0QkksZUFBMkUsQ0FBQSxvQkFBQSxFQUEzRVYsY0FBdUMsQ0FBb0MsR0FBakMsRUFBQTtjQUFHLEdBQUcsRUFBRSxRQUFPLENBQUEsT0FBQSxDQUFDLEdBQUcsQ0FBQTs7OztRQUUvRCxVQUFpQzs7Ozs7OztBQ1ByQyxpQkFBZTtNQUNiLElBQUksRUFBRSxtQkFBbUI7RUFDekIsSUFBQSxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUM7RUFDckIsSUFBQSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUE7S0FDbEI7Ozs7OzZCQ2JESCxzQkFFaUIsQ0FBQSxpQkFBQSxFQUFBLEVBRkMsUUFBUSxFQUFFLElBQWtCLENBQUEsa0JBQUEsRUFBQSxFQUFBO01BQzVDQyxjQUFZLENBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxTQUFBLENBQUE7Ozs7OztFQ2VkLE1BQU05RyxNQUFHLEdBQUksaUJBQWlCLENBQUE7O0lBRTlCLGVBQWU7WUFDYkEsTUFBSTtNQUNKLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDQSxNQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUscUJBQXFCLENBQUM0SCxvQ0FBZ0IsQ0FBQyxDQUFDOztNQUUxRyxLQUFLLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQzs7RUFFM0IsSUFBQSxLQUFLLEVBQUU7UUFDTCxTQUFTLEVBQUU7VUFDVCxJQUFJLEVBQUUsS0FBSztVQUNYLFFBQVEsRUFBRSxJQUFHO0VBQ2YsT0FBQTtPQUNEOztFQUVELElBQUEsSUFBSSxHQUFHO0VBQ0wsTUFBQSxPQUFPO0VBQ0wsUUFBQSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUTtTQUNqQyxDQUFBO09BQ0Y7O0VBRUQsSUFBQSxRQUFRLEVBQUU7UUFDUixVQUFVLEdBQUc7RUFDWDtFQUNBO0VBQ0EsUUFBQSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUM7WUFDaEMsSUFBSSxDQUFDLE9BQVE7RUFDWCxZQUFBLENBQUMsR0FBRyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFFO0VBQzNDLFlBQUEsSUFBRztXQUNOLENBQUE7RUFDSCxPQUFBO09BQ0Q7O0VBRUQsSUFBQSxPQUFPLEVBQUU7RUFDUCxNQUFBLE9BQU8sR0FBRztFQUNSLFFBQUEsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBRSxJQUFHLElBQUksQ0FBQyxNQUFLLFlBQWEsT0FBTyxFQUFFO0VBQ25FLFVBQUEsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFBO0VBQ3BCLFNBQUE7VUFDQSxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtTQUN6QjtRQUNELGtCQUFrQixDQUFDLEtBQUssRUFBRTtFQUN4QixRQUFBLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU8sR0FBRSxDQUFDLEVBQUU7RUFDckMsVUFBQSxNQUFNLFdBQVUsR0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTyxHQUFFLENBQUMsQ0FBQyxDQUFBO1lBQ3hFLE1BQU0sYUFBYyxHQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUE7RUFDdkQsVUFBQSxNQUFNLGNBQWMsYUFBYSxDQUFDLFNBQVUsSUFBRyxDQUFDLENBQUE7WUFDaEQsSUFBSSxDQUFDLG1CQUFtQjtjQUN0QixXQUFXO0VBQ1gsWUFBQSxVQUFVLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU07RUFDekMsWUFBQSxhQUFhLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQUssR0FBSSxDQUFDO2NBQ2hELGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQyxTQUFVLEdBQUUsV0FBVTthQUMxRCxDQUFBOztFQUVELFVBQUEsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO1dBQ2YsTUFBSztZQUNMLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO0VBQzNCLFNBQUE7U0FDRDtFQUNELE1BQUEsZUFBZSxDQUFDLElBQUksRUFBRTtVQUNwQixNQUFNLFdBQVcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBSyxLQUFNLENBQUE7RUFDeEQsYUFBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7VUFDdEUsT0FBTyxRQUFTLEdBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFBO1NBQ3hEO1FBQ0QsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO1VBQ3hCLEtBQUssSUFBSSxDQUFBLEdBQUksS0FBSyxFQUFFLENBQUUsR0FBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7RUFDMUIsU0FBQTtTQUNEO1FBQ0QsYUFBYSxDQUFDLFdBQVcsRUFBRSxRQUFPLEdBQUksSUFBSSxFQUFFLGFBQWEsRUFBRTtFQUN6RCxRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQTtVQUM1QyxhQUFjLFlBQVcsWUFBWSxhQUFhLEVBQUUsQ0FBQTtVQUNwRCxXQUFXLENBQUMsV0FBVyxJQUFJLENBQUE7U0FDNUI7UUFDRCxhQUFhLENBQUMsV0FBVyxFQUFFO1VBQ3pCLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtVQUN0QixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtTQUN6QjtRQUNELFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxhQUFjLEVBQUMsRUFBRTtFQUN6RyxRQUFBLE1BQU0sYUFBYyxHQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxtQkFBa0I7ZUFDN0YscUJBQW9CO2VBQ3BCLEVBQUUsQ0FBQTs7O1VBR1AsSUFBSSxhQUFjLEdBQUUsVUFBVSxFQUFFO0VBQzlCLFVBQUEsSUFBSSxZQUFhLEdBQUUsS0FBSyxDQUFBO0VBQ3hCLFVBQUEsSUFBSSxXQUFXLENBQUMsa0JBQWtCLElBQUksQ0FBQyxHQUFHLEVBQUU7RUFDMUMsWUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFXLEdBQUUsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUE7RUFDakYsWUFBQSxZQUFhLEdBQUUsSUFBSSxDQUFBO2NBQ25CLFVBQVUsRUFBRSxDQUFBO0VBQ2QsV0FBQTs7RUFFQSxVQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxFQUFHLElBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsU0FBTyxFQUFHLENBQUMsQ0FBQTtFQUNuRixVQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLGFBQVksR0FBSSxDQUFDLEVBQUUsRUFBQyxJQUFLLEVBQUUsRUFBRSxDQUFDLGFBQWMsR0FBRSxjQUFZLEVBQUcsQ0FBQyxDQUFBOztFQUV6RixVQUFBLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLGFBQWEsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFBO2VBQ25FLElBQUksQ0FBQyxNQUFNO0VBQ1YsY0FBQSxZQUFZLENBQUMsTUFBTTtFQUNqQixnQkFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsRUFBRyxJQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFXLEdBQUUsR0FBQyxFQUFHLENBQUMsQ0FBQTtFQUM3RSxnQkFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLGFBQVksR0FBSSxDQUFDLEVBQUUsRUFBQyxJQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFNLEdBQUksT0FBSyxFQUFHLENBQUMsQ0FBQTtFQUN4RixlQUFDLENBQUMsQ0FBQTs7RUFFRixjQUFBLElBQUksWUFBWSxFQUFFO0VBQ2hCLGdCQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUE7RUFDakMsZUFBQTtFQUNGLGFBQUMsRUFBRSxNQUFNO0VBQ1AsY0FBQSxJQUFJLENBQUMsU0FBUSxHQUFJLElBQUksQ0FBQTtFQUNyQixjQUFBLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtFQUNqQixhQUFDLENBQUMsQ0FBQTtFQUNOLFNBQUE7OztVQUdBLElBQUksYUFBYyxHQUFFLFVBQVUsRUFBRTtZQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUE7RUFDcEQsVUFBQSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtFQUN0RSxTQUFBOzs7RUFHQSxRQUFBLGNBQWMsQ0FBQyxLQUFLLENBQUMsVUFBVyxHQUFFLFFBQVEsQ0FBQTtVQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUE7VUFDOUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsYUFBYSxFQUFFLFlBQVksRUFBRSxJQUFHLEVBQUcsQ0FBQTtFQUNoRSxXQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtTQUMvQztRQUNELHFCQUFxQixDQUFDLEtBQUssRUFBRTtFQUMzQjtFQUNBLFFBQUEsSUFBSSxLQUFLLENBQUMsVUFBVyxJQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUU7RUFDM0MsVUFBQSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7RUFDakIsU0FBQTtTQUNEO1FBQ0QsUUFBUSxHQUFHO1VBQ1QsSUFBSSxDQUFDLGlCQUFnQixHQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7RUFDOUQsT0FBQTtPQUNEOztFQUVELElBQUEsS0FBSyxFQUFFO1FBQ0wsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7RUFDdkIsUUFBQSxJQUFJLElBQUksQ0FBQyxTQUFVLEtBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFOztFQUU3QyxVQUFBLE1BQU0sV0FBVSxHQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFPLEdBQUUsQ0FBQyxDQUFDLENBQUE7WUFDeEUsTUFBTSxhQUFjLEdBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQTtFQUN2RCxVQUFBLE1BQU0sY0FBYyxhQUFhLENBQUMsU0FBVSxJQUFHLENBQUMsQ0FBQTs7WUFFaEQsSUFBSSxDQUFDLG1CQUFtQjtjQUN0QixXQUFXO2NBQ1gsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNO2NBQ3pCLGFBQWEsRUFBRSxLQUFLLENBQUMsTUFBTTtjQUMzQixhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUMsU0FBVSxHQUFFLFdBQVU7YUFDMUQsQ0FBQTs7RUFFRCxVQUFBLElBQUksQ0FBQyxpQkFBa0IsR0FBRSxJQUFJLENBQUMsU0FBUyxDQUFBO0VBQ3pDLFNBQUE7O0VBRUE7U0FDRDtFQUNELE1BQUEsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtVQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0VBQ3hELE9BQUE7T0FDRDs7RUFFRCxJQUFBLE9BQU8sR0FBRztRQUNSLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO0VBQ3pCLFFBQUEsSUFBSSxjQUFlLEdBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU8sR0FBRSxDQUFDLENBQUMsQ0FBQTtVQUN6RSxNQUFNLHdCQUF3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU8sR0FBRSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQTtFQUMzRyxRQUFBLElBQUksRUFBRSxXQUFZLEVBQUEsR0FBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUE7RUFDM0MsUUFBQSxNQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxhQUFjLEVBQUEsR0FBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUE7O0VBRTFFLFFBQUEsSUFBSSxjQUFlLEtBQUksV0FBVyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxNQUFLLEdBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxhQUFjLEVBQUMsQ0FBQyxDQUFBO0VBQy9ILFNBQUEsTUFBTyxJQUFJLGFBQVksS0FBTSxVQUFVLEVBQUU7WUFDdkMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLGFBQVksR0FBSSxDQUFDLENBQUMsQ0FBQTtFQUNwRCxTQUFBOztVQUVBLFdBQVksR0FBRSxjQUFhLEdBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUE7RUFDN0QsT0FBQTtFQUNGLEtBQUE7S0FDRDs7Ozs7NkJDN0xEZixzQkFTZSxDQUFBLGVBQUEsRUFBQTtFQVRDLElBQUEsU0FBTyw0REFBTyxRQUFxQixDQUFBLHFCQUFBLElBQUEsUUFBQSxDQUFBLHFCQUFBLENBQUEsR0FBQSxJQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQTtFQUFHLElBQUEsVUFBTyxFQUFPLElBQU8sQ0FBQSxPQUFBOztFQUN6RSxJQUFBQyxjQUFBLENBT00sNEJBUE4sTUFPTTtFQU5KLE9BQUFDLGFBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQUYsc0JBQUEsQ0FLWVEsWUFKYyxFQUFBLElBQUEsRUFBQUMsY0FBQSxDQUFBLFFBQUEsQ0FBQSxVQUFVLEVBQTFCLENBQUEsSUFBSSxFQUFFLEtBQUssS0FBQTtFQURyQixRQUFBLFFBQUFQLGFBQUEsRUFBQSxFQUFBVyxlQUFBLENBS1lDLDJCQUhMLENBQUEsSUFBSSxDQUZYLEVBQUFYLGNBQUEsQ0FLWSxFQUZULEdBQUcsRUFBRSxLQUFLLEVBQ0UsRUFBQSxFQUFBLEdBQUEsSUFBQSxDQUFBLHFCQUFxQixFQUFLLEdBQUEsSUFBSSxDQUFDLGlCQUFnQixFQUFBLENBQUEsRUFBQSxJQUFBLEVBQUEsRUFBQSxDQUFBLENBQUE7Ozs7Ozs7O0VDR2xFLE1BQU1oSCxNQUFHLEdBQUkscUJBQXFCLENBQUE7O0lBRWxDLGVBQWU7WUFDYkEsTUFBSTtFQUNKLElBQUEsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLENBQUM7O0VBRXhDLElBQUEsS0FBSyxFQUFFLENBQUMsYUFBYSxDQUFDOztFQUV0QixJQUFBLEtBQUssRUFBRTtRQUNMLElBQUksRUFBRTtVQUNKLElBQUksRUFBRSxPQUFPO0VBQ2IsUUFBQSxPQUFPLEVBQUUsU0FBUTtFQUNuQixPQUFBO09BQ0Q7O0VBRUQsSUFBQSxPQUFPLEVBQUU7RUFDUCxNQUFBLE1BQU0sR0FBRztVQUNQLElBQUksQ0FBQyxhQUFhLEVBQUMsSUFBSyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLE1BQUssR0FBSSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7U0FDNUc7RUFDRCxNQUFBLGFBQWEsR0FBRztVQUNkLE9BQU8sSUFBSSxDQUFDLElBQUssS0FBSSxTQUFVLElBQUcsSUFBSSxDQUFDLElBQUcsS0FBTSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQTtFQUNqRSxPQUFBO09BQ0Q7O0VBRUQsSUFBQSxLQUFLLEVBQUU7RUFDTCxNQUFBLElBQUksR0FBRztVQUNMLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtFQUNmLE9BQUE7T0FDRDs7RUFFRCxJQUFBLE9BQU8sR0FBRztFQUNSLE1BQUEsSUFBSSxDQUFDLGtCQUFtQixHQUFFLE1BQU0sSUFBSSxDQUFDLGFBQWEsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBOztFQUVsRyxNQUFBLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUE7RUFDcEMsU0FBQyxPQUFPLENBQUMsS0FBSSxJQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUE7O1FBRTlFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtPQUNkOztFQUVELElBQUEsYUFBYSxHQUFHO0VBQ2QsTUFBQSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFBO0VBQ3BDLFNBQUMsT0FBTyxDQUFDLEtBQU0sSUFBRyxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFBO0VBQ25GLEtBQUE7S0FDRDs7OzZCQ3BERDZHLHNCQUVtQixDQUFBLG1CQUFBLEVBQUEsSUFBQSxFQUFBO01BRGpCQyxjQUFZLENBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxTQUFBLENBQUE7Ozs7OztBQ09oQixpQkFBZTtJQUNiLElBQUksRUFBRSxtQkFBbUI7O0VBRXpCLEVBQUEsS0FBSyxFQUFFO01BQ0wsVUFBVSxFQUFFO1FBQ1YsSUFBSSxFQUFFLFFBQVE7UUFDZCxRQUFRLEVBQUUsSUFBRztPQUNkO0VBQ0QsSUFBQSxNQUFNLEVBQUU7UUFDTixJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFHO09BQ2Q7RUFDRCxJQUFBLG1CQUFtQixFQUFFO1FBQ25CLElBQUksRUFBRSxRQUFRO0VBQ2QsTUFBQSxPQUFPLEVBQUUsU0FBUTtFQUNuQixLQUFBO0tBQ0Q7O0VBRUQsRUFBQSxJQUFJLEdBQUc7RUFDTCxJQUFBLE9BQU87UUFDTCxRQUFRLEVBQUUsSUFBRztPQUNkLENBQUE7S0FDRjs7RUFFRCxFQUFBLE9BQU8sRUFBRTtFQUNQLElBQUEsTUFBTSxHQUFHO0VBQ1AsTUFBQSxJQUFJLENBQUMsUUFBUyxJQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUE7O1FBRXhDLE1BQU0sUUFBUyxHQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDO0VBQy9ELFFBQUEsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtFQUM3QyxRQUFBLGlCQUFpQixFQUFFLENBQUEsSUFBSztFQUN0QixVQUFBLElBQUksS0FBTSxHQUFFZSxlQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0VBQzNDLFVBQUEsS0FBSyxDQUFDLFVBQVcsR0FBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUE7O0VBRTFDLFVBQUEsSUFBSSxXQUFXLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFBO1lBQ2hEQyxVQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0VBQ3ZCLFVBQUEsSUFBSSxPQUFRLEdBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQTs7RUFFakMsVUFBQSxPQUFPLENBQUMsT0FBTSxHQUFJLE1BQU07Y0FDdEIsUUFBTyxHQUFJLElBQUksQ0FBQTtjQUNmLEtBQUksR0FBSSxJQUFJLENBQUE7Y0FDWixVQUFVLElBQUksQ0FBQTthQUNmLENBQUE7O1lBRUQsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFBO1dBQzNCO0VBQ0QsUUFBQSxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFRLEVBQUMsS0FBSyxPQUFPLENBQUMsT0FBTyxFQUFFO1VBQ2xELFVBQVUsRUFBRSxNQUFNLElBQUksQ0FBQyxNQUFLO0VBQzlCLE9BQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTs7RUFFUixNQUFBLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFBO09BQzVGO0VBQ0QsSUFBQSxPQUFPLEdBQUc7UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUE7RUFDaEMsS0FBQTtLQUNEOztFQUVELEVBQUEsS0FBSyxFQUFFO01BQ0wsVUFBVSxHQUFHO1FBQ1gsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFBO09BQ2Q7RUFDRCxJQUFBLE1BQU0sR0FBRztRQUNQLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtPQUNkO0VBQ0QsSUFBQSxtQkFBbUIsR0FBRztRQUNwQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7RUFDZixLQUFBO0tBQ0Q7O0VBRUQsRUFBQSxPQUFPLEdBQUc7TUFDUixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7S0FDZDs7RUFFRCxFQUFBLGFBQWEsR0FBRzs7Ozs7O0VBTWQsSUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFvQixHQUFFLElBQUksQ0FBQyxRQUFRLENBQUE7RUFDNUMsSUFBQSxJQUFJLENBQUMsUUFBUyxHQUFFLElBQUksQ0FBQTtFQUN0QixHQUFBO0VBQ0YsQ0FBQzs7OzZCQ3pGQ2pCLHNCQUFrQyxDQUFBLGlCQUFBLENBQUEsQ0FBQTs7Ozs7QUNVbEMsaUJBQWU7RUFDYixJQUFBLElBQUksRUFBRSxjQUFjO0VBQ3BCLElBQUEsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDO01BQ2xCLEtBQUssRUFBRSxDQUFDLG1CQUFtQixDQUFDO0VBQzVCLElBQUEsS0FBSyxFQUFFO1FBQ0wsVUFBVSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQTtPQUM1QjtFQUNELElBQUEsUUFBUSxFQUFFO0VBQ1IsTUFBQSxhQUFhLEVBQUU7VUFDYixHQUFHLEdBQUc7RUFDSixVQUFBLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQTtXQUN2QjtFQUNELFFBQUEsR0FBRyxDQUFDLEdBQUcsRUFBRTtFQUNQLFVBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQTtFQUN0QyxTQUFBO0VBQ0YsT0FBQTtFQUNGLEtBQUE7S0FDRDs7Ozs7NkJDNUJEQSxzQkFJWSxDQUFBLFlBQUEsRUFBQSxFQUpDLFFBQVEsRUFBRSxJQUFrQixDQUFBLGtCQUFBLEVBQUEsRUFBQTt5QkFDdkNPLHNCQUVRLENBQUEsUUFBQSxFQUFBO3FFQUZTLFFBQWEsQ0FBQSxhQUFBLElBQUEsTUFBQSxDQUFBLENBQUE7O1FBQzVCTixjQUFZLENBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxTQUFBLENBQUE7OzJCQURHLFFBQWEsQ0FBQSxhQUFBLENBQUE7Ozs7Ozs7RUNRaEMsTUFBTTlHLE1BQUssR0FBRSxlQUFlLENBQUE7O0lBRTVCLGVBQWU7WUFDYkEsTUFBSTtNQUNKLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLENBQUM7TUFDNUIsS0FBSyxFQUFFLENBQUMsb0JBQW9CLENBQUM7S0FDOUI7Ozs2QkNmRDZHLHNCQUVhLENBQUEsYUFBQSxFQUFBO0VBRkMsSUFBQSxZQUFVLEVBQU8sTUFBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsR0FBQVUsaUJBQUEsQ0FBQSxNQUFBLEtBQUEsSUFBQSxDQUFBLEtBQUssQ0FBdUIsb0JBQUEsRUFBQSxNQUFNLENBQUMsS0FBSyxDQUFBLENBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUE7O01BQ3JFVCxjQUFZLENBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxTQUFBLENBQUE7Ozs7OztFQ1VkLE1BQU05RyxNQUFHLEdBQUksaUJBQWlCLENBQUE7O0lBRTlCLGVBQWU7WUFDYkEsTUFBSTtNQUNKLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQ0EsTUFBSSxDQUFDLENBQUM7O0VBRTVCLElBQUEsS0FBSyxFQUFFO0VBQ0wsTUFBQSxNQUFNLEVBQUU7VUFDTixJQUFJLEVBQUUsUUFBTztFQUNmLE9BQUE7RUFDRixLQUFBO0tBQ0Q7Ozs7OzZCQ3RCRDZHLHNCQUllLENBQUEsZUFBQSxFQUFBLEVBSFosV0FBUSxFQUFPLE1BQU0sQ0FBQSxNQUFBLEVBQUEsRUFBQTtNQUV0QkMsY0FBWSxDQUFBLElBQUEsQ0FBQSxNQUFBLEVBQUEsU0FBQSxDQUFBOzs7Ozs7RUNTZCxNQUFNLE9BQU8sWUFBWSxDQUFBOztJQUV6QixhQUFlO01BQ2IsSUFBSTtNQUNKLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDOztFQUVqRCxJQUFBLEtBQUssRUFBRTtFQUNMLE1BQUEsY0FBYyxFQUFFO1VBQ2QsSUFBSSxFQUFFLFFBQU87RUFDZixPQUFBO0VBQ0YsS0FBQTtLQUNEOzs7Ozs2QkN2QkRELHNCQUtVLENBQUEsVUFBQSxFQUFBO0VBSlAsSUFBQSxtQkFBZ0IsRUFBTyxNQUFjLENBQUEsY0FBQTtFQUNyQyxJQUFBLFFBQVEsRUFBRSxJQUFrQixDQUFBLGtCQUFBOztNQUU3QkMsY0FBWSxDQUFBLElBQUEsQ0FBQSxNQUFBLEVBQUEsU0FBQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNEaEIsTUFBTWlCLElBQUksR0FBR0MsS0FBSyxDQUFDdEosdUJBQUQsRUFBbEI7O0VBRUFxSixJQUFJLENBQUNFLE9BQUwsR0FBZSxVQUFBQyxHQUFHLEVBQUk7RUFDcEI7RUFDRjtFQUNBO0lBQ0V2SixNQUFNLENBQUNDLElBQVAsQ0FBWXVKLFVBQVosRUFDR3ZHLE9BREgsQ0FDVyxVQUFBQyxHQUFHLEVBQUE7RUFBQSxJQUFBLE9BQUlxRyxHQUFHLENBQUMvSCxTQUFKLENBQWNnSSxVQUFVLENBQUN0RyxHQUFELENBQVYsQ0FBZ0I3QixJQUE5QixFQUFvQ21JLFVBQVUsQ0FBQ3RHLEdBQUQsQ0FBOUMsQ0FBSixDQUFBO0tBRGQsQ0FBQSxDQUFBO0VBR0E7RUFDRjtFQUNBOztJQUNFa0csSUFBSSxDQUFDSyxJQUFMLEdBQVlGLEdBQVosQ0FBQTtFQUNBQSxFQUFBQSxHQUFHLENBQUNHLE1BQUosQ0FBV0MsZ0JBQVgsQ0FBNEJQLElBQTVCLEdBQW1DQSxJQUFuQyxDQUFBO0VBQ0QsQ0FaRDs7Ozs7Ozs7In0=
