dist/ember-template-compiler.js in ember-source-2.9.0.beta.1 vs dist/ember-template-compiler.js in ember-source-2.9.0.beta.2
- old
+ new
@@ -4,11 +4,11 @@
* @copyright Copyright 2011-2016 Tilde Inc. and contributors
* Portions Copyright 2006-2011 Strobe Inc.
* Portions Copyright 2008-2011 Apple Inc. All rights reserved.
* @license Licensed under MIT license
* See https://raw.github.com/emberjs/ember.js/master/LICENSE
- * @version 2.9.0-beta.1
+ * @version 2.9.0-beta.2
*/
var enifed, requireModule, require, Ember;
var mainContext = this;
@@ -1198,1368 +1198,10 @@
exports['default'] = Backburner;
Object.defineProperty(exports, '__esModule', { value: true });
});
-enifed('container/container', ['exports', 'ember-environment', 'ember-metal', 'container/owner'], function (exports, _emberEnvironment, _emberMetal, _containerOwner) {
- 'use strict';
-
- exports.default = Container;
- exports.buildFakeContainerWithDeprecations = buildFakeContainerWithDeprecations;
-
- var CONTAINER_OVERRIDE = _emberMetal.symbol('CONTAINER_OVERRIDE');
-
- /**
- A container used to instantiate and cache objects.
-
- Every `Container` must be associated with a `Registry`, which is referenced
- to determine the factory and options that should be used to instantiate
- objects.
-
- The public API for `Container` is still in flux and should not be considered
- stable.
-
- @private
- @class Container
- */
-
- function Container(registry, options) {
- this.registry = registry;
- this.owner = options && options.owner ? options.owner : null;
- this.cache = _emberMetal.dictionary(options && options.cache ? options.cache : null);
- this.factoryCache = _emberMetal.dictionary(options && options.factoryCache ? options.factoryCache : null);
- this.validationCache = _emberMetal.dictionary(options && options.validationCache ? options.validationCache : null);
- this._fakeContainerToInject = buildFakeContainerWithDeprecations(this);
- this[CONTAINER_OVERRIDE] = undefined;
- this.isDestroyed = false;
- }
-
- Container.prototype = {
- /**
- @private
- @property owner
- @type Object
- */
- owner: null,
-
- /**
- @private
- @property registry
- @type Registry
- @since 1.11.0
- */
- registry: null,
-
- /**
- @private
- @property cache
- @type InheritingDict
- */
- cache: null,
-
- /**
- @private
- @property factoryCache
- @type InheritingDict
- */
- factoryCache: null,
-
- /**
- @private
- @property validationCache
- @type InheritingDict
- */
- validationCache: null,
-
- /**
- Given a fullName return a corresponding instance.
- The default behaviour is for lookup to return a singleton instance.
- The singleton is scoped to the container, allowing multiple containers
- to all have their own locally scoped singletons.
- ```javascript
- let registry = new Registry();
- let container = registry.container();
- registry.register('api:twitter', Twitter);
- let twitter = container.lookup('api:twitter');
- twitter instanceof Twitter; // => true
- // by default the container will return singletons
- let twitter2 = container.lookup('api:twitter');
- twitter2 instanceof Twitter; // => true
- twitter === twitter2; //=> true
- ```
- If singletons are not wanted, an optional flag can be provided at lookup.
- ```javascript
- let registry = new Registry();
- let container = registry.container();
- registry.register('api:twitter', Twitter);
- let twitter = container.lookup('api:twitter', { singleton: false });
- let twitter2 = container.lookup('api:twitter', { singleton: false });
- twitter === twitter2; //=> false
- ```
- @private
- @method lookup
- @param {String} fullName
- @param {Object} [options]
- @param {String} [options.source] The fullname of the request source (used for local lookup)
- @return {any}
- */
- lookup: function (fullName, options) {
- _emberMetal.assert('fullName must be a proper full name', this.registry.validateFullName(fullName));
- return lookup(this, this.registry.normalize(fullName), options);
- },
-
- /**
- Given a fullName, return the corresponding factory.
- @private
- @method lookupFactory
- @param {String} fullName
- @param {Object} [options]
- @param {String} [options.source] The fullname of the request source (used for local lookup)
- @return {any}
- */
- lookupFactory: function (fullName, options) {
- _emberMetal.assert('fullName must be a proper full name', this.registry.validateFullName(fullName));
- return factoryFor(this, this.registry.normalize(fullName), options);
- },
-
- /**
- A depth first traversal, destroying the container, its descendant containers and all
- their managed objects.
- @private
- @method destroy
- */
- destroy: function () {
- eachDestroyable(this, function (item) {
- if (item.destroy) {
- item.destroy();
- }
- });
-
- this.isDestroyed = true;
- },
-
- /**
- Clear either the entire cache or just the cache for a particular key.
- @private
- @method reset
- @param {String} fullName optional key to reset; if missing, resets everything
- */
- reset: function (fullName) {
- if (arguments.length > 0) {
- resetMember(this, this.registry.normalize(fullName));
- } else {
- resetCache(this);
- }
- },
-
- /**
- Returns an object that can be used to provide an owner to a
- manually created instance.
- @private
- @method ownerInjection
- @returns { Object }
- */
- ownerInjection: function () {
- var _ref;
-
- return _ref = {}, _ref[_containerOwner.OWNER] = this.owner, _ref;
- }
- };
-
- function isSingleton(container, fullName) {
- return container.registry.getOption(fullName, 'singleton') !== false;
- }
-
- function lookup(container, fullName) {
- var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
-
- if (options.source) {
- fullName = container.registry.expandLocalLookup(fullName, options);
-
- // if expandLocalLookup returns falsey, we do not support local lookup
- if (!fullName) {
- return;
- }
- }
-
- if (container.cache[fullName] !== undefined && options.singleton !== false) {
- return container.cache[fullName];
- }
-
- var value = instantiate(container, fullName);
-
- if (value === undefined) {
- return;
- }
-
- if (isSingleton(container, fullName) && options.singleton !== false) {
- container.cache[fullName] = value;
- }
-
- return value;
- }
-
- function markInjectionsAsDynamic(injections) {
- injections._dynamic = true;
- }
-
- function areInjectionsDynamic(injections) {
- return !!injections._dynamic;
- }
-
- function buildInjections() /* container, ...injections */{
- var hash = {};
-
- if (arguments.length > 1) {
- var container = arguments[0];
- var injections = [];
- var injection = undefined;
-
- for (var i = 1; i < arguments.length; i++) {
- if (arguments[i]) {
- injections = injections.concat(arguments[i]);
- }
- }
-
- container.registry.validateInjections(injections);
-
- for (var i = 0; i < injections.length; i++) {
- injection = injections[i];
- hash[injection.property] = lookup(container, injection.fullName);
- if (!isSingleton(container, injection.fullName)) {
- markInjectionsAsDynamic(hash);
- }
- }
- }
-
- return hash;
- }
-
- function factoryFor(container, fullName) {
- var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
-
- var registry = container.registry;
-
- if (options.source) {
- fullName = registry.expandLocalLookup(fullName, options);
-
- // if expandLocalLookup returns falsey, we do not support local lookup
- if (!fullName) {
- return;
- }
- }
-
- var cache = container.factoryCache;
- if (cache[fullName]) {
- return cache[fullName];
- }
- var factory = registry.resolve(fullName);
- if (factory === undefined) {
- return;
- }
-
- var type = fullName.split(':')[0];
- if (!factory || typeof factory.extend !== 'function' || !_emberEnvironment.ENV.MODEL_FACTORY_INJECTIONS && type === 'model') {
- if (factory && typeof factory._onLookup === 'function') {
- factory._onLookup(fullName);
- }
-
- // TODO: think about a 'safe' merge style extension
- // for now just fallback to create time injection
- cache[fullName] = factory;
- return factory;
- } else {
- var injections = injectionsFor(container, fullName);
- var factoryInjections = factoryInjectionsFor(container, fullName);
- var cacheable = !areInjectionsDynamic(injections) && !areInjectionsDynamic(factoryInjections);
-
- factoryInjections._toString = registry.makeToString(factory, fullName);
-
- var injectedFactory = factory.extend(injections);
-
- // TODO - remove all `container` injections when Ember reaches v3.0.0
- injectDeprecatedContainer(injectedFactory.prototype, container);
- injectedFactory.reopenClass(factoryInjections);
-
- if (factory && typeof factory._onLookup === 'function') {
- factory._onLookup(fullName);
- }
-
- if (cacheable) {
- cache[fullName] = injectedFactory;
- }
-
- return injectedFactory;
- }
- }
-
- function injectionsFor(container, fullName) {
- var registry = container.registry;
- var splitName = fullName.split(':');
- var type = splitName[0];
-
- var injections = buildInjections(container, registry.getTypeInjections(type), registry.getInjections(fullName));
- injections._debugContainerKey = fullName;
-
- _containerOwner.setOwner(injections, container.owner);
-
- return injections;
- }
-
- function factoryInjectionsFor(container, fullName) {
- var registry = container.registry;
- var splitName = fullName.split(':');
- var type = splitName[0];
-
- var factoryInjections = buildInjections(container, registry.getFactoryTypeInjections(type), registry.getFactoryInjections(fullName));
- factoryInjections._debugContainerKey = fullName;
-
- return factoryInjections;
- }
-
- function instantiate(container, fullName) {
- var factory = factoryFor(container, fullName);
- var lazyInjections = undefined,
- validationCache = undefined;
-
- if (container.registry.getOption(fullName, 'instantiate') === false) {
- return factory;
- }
-
- if (factory) {
- if (typeof factory.create !== 'function') {
- throw new Error('Failed to create an instance of \'' + fullName + '\'. Most likely an improperly defined class or' + ' an invalid module export.');
- }
-
- validationCache = container.validationCache;
-
- _emberMetal.runInDebug(function () {
- // Ensure that all lazy injections are valid at instantiation time
- if (!validationCache[fullName] && typeof factory._lazyInjections === 'function') {
- lazyInjections = factory._lazyInjections();
- lazyInjections = container.registry.normalizeInjectionsHash(lazyInjections);
-
- container.registry.validateInjections(lazyInjections);
- }
- });
-
- validationCache[fullName] = true;
-
- var obj = undefined;
-
- if (typeof factory.extend === 'function') {
- // assume the factory was extendable and is already injected
- obj = factory.create();
- } else {
- // assume the factory was extendable
- // to create time injections
- // TODO: support new'ing for instantiation and merge injections for pure JS Functions
- var injections = injectionsFor(container, fullName);
-
- // Ensure that a container is available to an object during instantiation.
- // TODO - remove when Ember reaches v3.0.0
- // This "fake" container will be replaced after instantiation with a
- // property that raises deprecations every time it is accessed.
- injections.container = container._fakeContainerToInject;
- obj = factory.create(injections);
-
- // TODO - remove when Ember reaches v3.0.0
- if (!Object.isFrozen(obj) && 'container' in obj) {
- injectDeprecatedContainer(obj, container);
- }
- }
-
- return obj;
- }
- }
-
- // TODO - remove when Ember reaches v3.0.0
- function injectDeprecatedContainer(object, container) {
- Object.defineProperty(object, 'container', {
- configurable: true,
- enumerable: false,
- get: function () {
- _emberMetal.deprecate('Using the injected `container` is deprecated. Please use the `getOwner` helper instead to access the owner of this object.', false, { id: 'ember-application.injected-container', until: '3.0.0', url: 'http://emberjs.com/deprecations/v2.x#toc_injected-container-access' });
- return this[CONTAINER_OVERRIDE] || container;
- },
-
- set: function (value) {
- _emberMetal.deprecate('Providing the `container` property to ' + this + ' is deprecated. Please use `Ember.setOwner` or `owner.ownerInjection()` instead to provide an owner to the instance being created.', false, { id: 'ember-application.injected-container', until: '3.0.0', url: 'http://emberjs.com/deprecations/v2.x#toc_injected-container-access' });
-
- this[CONTAINER_OVERRIDE] = value;
-
- return value;
- }
- });
- }
-
- function eachDestroyable(container, callback) {
- var cache = container.cache;
- var keys = Object.keys(cache);
-
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- var value = cache[key];
-
- if (container.registry.getOption(key, 'instantiate') !== false) {
- callback(value);
- }
- }
- }
-
- function resetCache(container) {
- eachDestroyable(container, function (value) {
- if (value.destroy) {
- value.destroy();
- }
- });
-
- container.cache.dict = _emberMetal.dictionary(null);
- }
-
- function resetMember(container, fullName) {
- var member = container.cache[fullName];
-
- delete container.factoryCache[fullName];
-
- if (member) {
- delete container.cache[fullName];
-
- if (member.destroy) {
- member.destroy();
- }
- }
- }
-
- function buildFakeContainerWithDeprecations(container) {
- var fakeContainer = {};
- var propertyMappings = {
- lookup: 'lookup',
- lookupFactory: '_lookupFactory'
- };
-
- for (var containerProperty in propertyMappings) {
- fakeContainer[containerProperty] = buildFakeContainerFunction(container, containerProperty, propertyMappings[containerProperty]);
- }
-
- return fakeContainer;
- }
-
- function buildFakeContainerFunction(container, containerProperty, ownerProperty) {
- return function () {
- _emberMetal.deprecate('Using the injected `container` is deprecated. Please use the `getOwner` helper to access the owner of this object and then call `' + ownerProperty + '` instead.', false, {
- id: 'ember-application.injected-container',
- until: '3.0.0',
- url: 'http://emberjs.com/deprecations/v2.x#toc_injected-container-access'
- });
- return container[containerProperty].apply(container, arguments);
- };
- }
-});
-enifed('container/index', ['exports', 'container/registry', 'container/container', 'container/owner'], function (exports, _containerRegistry, _containerContainer, _containerOwner) {
- /*
- Public API for the container is still in flux.
- The public API, specified on the application namespace should be considered the stable API.
- // @module container
- @private
- */
-
- 'use strict';
-
- exports.Registry = _containerRegistry.default;
- exports.privatize = _containerRegistry.privatize;
- exports.Container = _containerContainer.default;
- exports.buildFakeContainerWithDeprecations = _containerContainer.buildFakeContainerWithDeprecations;
- exports.OWNER = _containerOwner.OWNER;
- exports.getOwner = _containerOwner.getOwner;
- exports.setOwner = _containerOwner.setOwner;
-});
-enifed('container/owner', ['exports', 'ember-metal'], function (exports, _emberMetal) {
- /**
- @module ember
- @submodule ember-runtime
- */
-
- 'use strict';
-
- exports.getOwner = getOwner;
- exports.setOwner = setOwner;
- var OWNER = _emberMetal.symbol('OWNER');
-
- exports.OWNER = OWNER;
- /**
- Framework objects in an Ember application (components, services, routes, etc.)
- are created via a factory and dependency injection system. Each of these
- objects is the responsibility of an "owner", which handled its
- instantiation and manages its lifetime.
-
- `getOwner` fetches the owner object responsible for an instance. This can
- be used to lookup or resolve other class instances, or register new factories
- into the owner.
-
- For example, this component dynamically looks up a service based on the
- `audioType` passed as an attribute:
-
- ```
- // app/components/play-audio.js
- import Ember from 'ember';
-
- // Usage:
- //
- // {{play-audio audioType=model.audioType audioFile=model.file}}
- //
- export default Ember.Component.extend({
- audioService: Ember.computed('audioType', function() {
- let owner = Ember.getOwner(this);
- return owner.lookup(`service:${this.get('audioType')}`);
- }),
- click() {
- let player = this.get('audioService');
- player.play(this.get('audioFile'));
- }
- });
- ```
-
- @method getOwner
- @for Ember
- @param {Object} object An object with an owner.
- @return {Object} An owner object.
- @since 2.3.0
- @public
- */
-
- function getOwner(object) {
- return object[OWNER];
- }
-
- /**
- `setOwner` forces a new owner on a given object instance. This is primarily
- useful in some testing cases.
-
- @method setOwner
- @for Ember
- @param {Object} object An object with an owner.
- @return {Object} An owner object.
- @since 2.3.0
- @public
- */
-
- function setOwner(object, owner) {
- object[OWNER] = owner;
- }
-});
-enifed('container/registry', ['exports', 'ember-metal', 'container/container'], function (exports, _emberMetal, _containerContainer) {
- 'use strict';
-
- exports.default = Registry;
- exports.privatize = privatize;
-
- var VALID_FULL_NAME_REGEXP = /^[^:]+:[^:]+$/;
-
- /**
- A registry used to store factory and option information keyed
- by type.
-
- A `Registry` stores the factory and option information needed by a
- `Container` to instantiate and cache objects.
-
- The API for `Registry` is still in flux and should not be considered stable.
-
- @private
- @class Registry
- @since 1.11.0
- */
-
- function Registry(options) {
- this.fallback = options && options.fallback ? options.fallback : null;
-
- if (options && options.resolver) {
- this.resolver = options.resolver;
-
- if (typeof this.resolver === 'function') {
- deprecateResolverFunction(this);
- }
- }
-
- this.registrations = _emberMetal.dictionary(options && options.registrations ? options.registrations : null);
-
- this._typeInjections = _emberMetal.dictionary(null);
- this._injections = _emberMetal.dictionary(null);
- this._factoryTypeInjections = _emberMetal.dictionary(null);
- this._factoryInjections = _emberMetal.dictionary(null);
-
- this._localLookupCache = new _emberMetal.EmptyObject();
- this._normalizeCache = _emberMetal.dictionary(null);
- this._resolveCache = _emberMetal.dictionary(null);
- this._failCache = _emberMetal.dictionary(null);
-
- this._options = _emberMetal.dictionary(null);
- this._typeOptions = _emberMetal.dictionary(null);
- }
-
- Registry.prototype = {
- /**
- A backup registry for resolving registrations when no matches can be found.
- @private
- @property fallback
- @type Registry
- */
- fallback: null,
-
- /**
- An object that has a `resolve` method that resolves a name.
- @private
- @property resolver
- @type Resolver
- */
- resolver: null,
-
- /**
- @private
- @property registrations
- @type InheritingDict
- */
- registrations: null,
-
- /**
- @private
- @property _typeInjections
- @type InheritingDict
- */
- _typeInjections: null,
-
- /**
- @private
- @property _injections
- @type InheritingDict
- */
- _injections: null,
-
- /**
- @private
- @property _factoryTypeInjections
- @type InheritingDict
- */
- _factoryTypeInjections: null,
-
- /**
- @private
- @property _factoryInjections
- @type InheritingDict
- */
- _factoryInjections: null,
-
- /**
- @private
- @property _normalizeCache
- @type InheritingDict
- */
- _normalizeCache: null,
-
- /**
- @private
- @property _resolveCache
- @type InheritingDict
- */
- _resolveCache: null,
-
- /**
- @private
- @property _options
- @type InheritingDict
- */
- _options: null,
-
- /**
- @private
- @property _typeOptions
- @type InheritingDict
- */
- _typeOptions: null,
-
- /**
- Creates a container based on this registry.
- @private
- @method container
- @param {Object} options
- @return {Container} created container
- */
- container: function (options) {
- return new _containerContainer.default(this, options);
- },
-
- /**
- Registers a factory for later injection.
- Example:
- ```javascript
- let registry = new Registry();
- registry.register('model:user', Person, {singleton: false });
- registry.register('fruit:favorite', Orange);
- registry.register('communication:main', Email, {singleton: false});
- ```
- @private
- @method register
- @param {String} fullName
- @param {Function} factory
- @param {Object} options
- */
- register: function (fullName, factory) {
- var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
-
- _emberMetal.assert('fullName must be a proper full name', this.validateFullName(fullName));
-
- if (factory === undefined) {
- throw new TypeError('Attempting to register an unknown factory: \'' + fullName + '\'');
- }
-
- var normalizedName = this.normalize(fullName);
-
- if (this._resolveCache[normalizedName]) {
- throw new Error('Cannot re-register: \'' + fullName + '\', as it has already been resolved.');
- }
-
- delete this._failCache[normalizedName];
- this.registrations[normalizedName] = factory;
- this._options[normalizedName] = options;
- },
-
- /**
- Unregister a fullName
- ```javascript
- let registry = new Registry();
- registry.register('model:user', User);
- registry.resolve('model:user').create() instanceof User //=> true
- registry.unregister('model:user')
- registry.resolve('model:user') === undefined //=> true
- ```
- @private
- @method unregister
- @param {String} fullName
- */
- unregister: function (fullName) {
- _emberMetal.assert('fullName must be a proper full name', this.validateFullName(fullName));
-
- var normalizedName = this.normalize(fullName);
-
- this._localLookupCache = new _emberMetal.EmptyObject();
-
- delete this.registrations[normalizedName];
- delete this._resolveCache[normalizedName];
- delete this._failCache[normalizedName];
- delete this._options[normalizedName];
- },
-
- /**
- Given a fullName return the corresponding factory.
- By default `resolve` will retrieve the factory from
- the registry.
- ```javascript
- let registry = new Registry();
- registry.register('api:twitter', Twitter);
- registry.resolve('api:twitter') // => Twitter
- ```
- Optionally the registry can be provided with a custom resolver.
- If provided, `resolve` will first provide the custom resolver
- the opportunity to resolve the fullName, otherwise it will fallback
- to the registry.
- ```javascript
- let registry = new Registry();
- registry.resolver = function(fullName) {
- // lookup via the module system of choice
- };
- // the twitter factory is added to the module system
- registry.resolve('api:twitter') // => Twitter
- ```
- @private
- @method resolve
- @param {String} fullName
- @param {Object} [options]
- @param {String} [options.source] the fullname of the request source (used for local lookups)
- @return {Function} fullName's factory
- */
- resolve: function (fullName, options) {
- _emberMetal.assert('fullName must be a proper full name', this.validateFullName(fullName));
- var factory = resolve(this, this.normalize(fullName), options);
- if (factory === undefined && this.fallback) {
- var _fallback;
-
- factory = (_fallback = this.fallback).resolve.apply(_fallback, arguments);
- }
- return factory;
- },
-
- /**
- A hook that can be used to describe how the resolver will
- attempt to find the factory.
- For example, the default Ember `.describe` returns the full
- class name (including namespace) where Ember's resolver expects
- to find the `fullName`.
- @private
- @method describe
- @param {String} fullName
- @return {string} described fullName
- */
- describe: function (fullName) {
- if (this.resolver && this.resolver.lookupDescription) {
- return this.resolver.lookupDescription(fullName);
- } else if (this.fallback) {
- return this.fallback.describe(fullName);
- } else {
- return fullName;
- }
- },
-
- /**
- A hook to enable custom fullName normalization behaviour
- @private
- @method normalizeFullName
- @param {String} fullName
- @return {string} normalized fullName
- */
- normalizeFullName: function (fullName) {
- if (this.resolver && this.resolver.normalize) {
- return this.resolver.normalize(fullName);
- } else if (this.fallback) {
- return this.fallback.normalizeFullName(fullName);
- } else {
- return fullName;
- }
- },
-
- /**
- Normalize a fullName based on the application's conventions
- @private
- @method normalize
- @param {String} fullName
- @return {string} normalized fullName
- */
- normalize: function (fullName) {
- return this._normalizeCache[fullName] || (this._normalizeCache[fullName] = this.normalizeFullName(fullName));
- },
-
- /**
- @method makeToString
- @private
- @param {any} factory
- @param {string} fullName
- @return {function} toString function
- */
- makeToString: function (factory, fullName) {
- if (this.resolver && this.resolver.makeToString) {
- return this.resolver.makeToString(factory, fullName);
- } else if (this.fallback) {
- return this.fallback.makeToString(factory, fullName);
- } else {
- return factory.toString();
- }
- },
-
- /**
- Given a fullName check if the container is aware of its factory
- or singleton instance.
- @private
- @method has
- @param {String} fullName
- @param {Object} [options]
- @param {String} [options.source] the fullname of the request source (used for local lookups)
- @return {Boolean}
- */
- has: function (fullName, options) {
- if (!this.isValidFullName(fullName)) {
- return false;
- }
-
- var source = options && options.source && this.normalize(options.source);
-
- return has(this, this.normalize(fullName), source);
- },
-
- /**
- Allow registering options for all factories of a type.
- ```javascript
- let registry = new Registry();
- let container = registry.container();
- // if all of type `connection` must not be singletons
- registry.optionsForType('connection', { singleton: false });
- registry.register('connection:twitter', TwitterConnection);
- registry.register('connection:facebook', FacebookConnection);
- let twitter = container.lookup('connection:twitter');
- let twitter2 = container.lookup('connection:twitter');
- twitter === twitter2; // => false
- let facebook = container.lookup('connection:facebook');
- let facebook2 = container.lookup('connection:facebook');
- facebook === facebook2; // => false
- ```
- @private
- @method optionsForType
- @param {String} type
- @param {Object} options
- */
- optionsForType: function (type, options) {
- this._typeOptions[type] = options;
- },
-
- getOptionsForType: function (type) {
- var optionsForType = this._typeOptions[type];
- if (optionsForType === undefined && this.fallback) {
- optionsForType = this.fallback.getOptionsForType(type);
- }
- return optionsForType;
- },
-
- /**
- @private
- @method options
- @param {String} fullName
- @param {Object} options
- */
- options: function (fullName) {
- var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
-
- var normalizedName = this.normalize(fullName);
- this._options[normalizedName] = options;
- },
-
- getOptions: function (fullName) {
- var normalizedName = this.normalize(fullName);
- var options = this._options[normalizedName];
-
- if (options === undefined && this.fallback) {
- options = this.fallback.getOptions(fullName);
- }
- return options;
- },
-
- getOption: function (fullName, optionName) {
- var options = this._options[fullName];
-
- if (options && options[optionName] !== undefined) {
- return options[optionName];
- }
-
- var type = fullName.split(':')[0];
- options = this._typeOptions[type];
-
- if (options && options[optionName] !== undefined) {
- return options[optionName];
- } else if (this.fallback) {
- return this.fallback.getOption(fullName, optionName);
- }
- },
-
- /**
- Used only via `injection`.
- Provides a specialized form of injection, specifically enabling
- all objects of one type to be injected with a reference to another
- object.
- For example, provided each object of type `controller` needed a `router`.
- one would do the following:
- ```javascript
- let registry = new Registry();
- let container = registry.container();
- registry.register('router:main', Router);
- registry.register('controller:user', UserController);
- registry.register('controller:post', PostController);
- registry.typeInjection('controller', 'router', 'router:main');
- let user = container.lookup('controller:user');
- let post = container.lookup('controller:post');
- user.router instanceof Router; //=> true
- post.router instanceof Router; //=> true
- // both controllers share the same router
- user.router === post.router; //=> true
- ```
- @private
- @method typeInjection
- @param {String} type
- @param {String} property
- @param {String} fullName
- */
- typeInjection: function (type, property, fullName) {
- _emberMetal.assert('fullName must be a proper full name', this.validateFullName(fullName));
-
- var fullNameType = fullName.split(':')[0];
- if (fullNameType === type) {
- throw new Error('Cannot inject a \'' + fullName + '\' on other ' + type + '(s).');
- }
-
- var injections = this._typeInjections[type] || (this._typeInjections[type] = []);
-
- injections.push({
- property: property,
- fullName: fullName
- });
- },
-
- /**
- Defines injection rules.
- These rules are used to inject dependencies onto objects when they
- are instantiated.
- Two forms of injections are possible:
- * Injecting one fullName on another fullName
- * Injecting one fullName on a type
- Example:
- ```javascript
- let registry = new Registry();
- let container = registry.container();
- registry.register('source:main', Source);
- registry.register('model:user', User);
- registry.register('model:post', Post);
- // injecting one fullName on another fullName
- // eg. each user model gets a post model
- registry.injection('model:user', 'post', 'model:post');
- // injecting one fullName on another type
- registry.injection('model', 'source', 'source:main');
- let user = container.lookup('model:user');
- let post = container.lookup('model:post');
- user.source instanceof Source; //=> true
- post.source instanceof Source; //=> true
- user.post instanceof Post; //=> true
- // and both models share the same source
- user.source === post.source; //=> true
- ```
- @private
- @method injection
- @param {String} factoryName
- @param {String} property
- @param {String} injectionName
- */
- injection: function (fullName, property, injectionName) {
- this.validateFullName(injectionName);
- var normalizedInjectionName = this.normalize(injectionName);
-
- if (fullName.indexOf(':') === -1) {
- return this.typeInjection(fullName, property, normalizedInjectionName);
- }
-
- _emberMetal.assert('fullName must be a proper full name', this.validateFullName(fullName));
- var normalizedName = this.normalize(fullName);
-
- var injections = this._injections[normalizedName] || (this._injections[normalizedName] = []);
-
- injections.push({
- property: property,
- fullName: normalizedInjectionName
- });
- },
-
- /**
- Used only via `factoryInjection`.
- Provides a specialized form of injection, specifically enabling
- all factory of one type to be injected with a reference to another
- object.
- For example, provided each factory of type `model` needed a `store`.
- one would do the following:
- ```javascript
- let registry = new Registry();
- registry.register('store:main', SomeStore);
- registry.factoryTypeInjection('model', 'store', 'store:main');
- let store = registry.lookup('store:main');
- let UserFactory = registry.lookupFactory('model:user');
- UserFactory.store instanceof SomeStore; //=> true
- ```
- @private
- @method factoryTypeInjection
- @param {String} type
- @param {String} property
- @param {String} fullName
- */
- factoryTypeInjection: function (type, property, fullName) {
- var injections = this._factoryTypeInjections[type] || (this._factoryTypeInjections[type] = []);
-
- injections.push({
- property: property,
- fullName: this.normalize(fullName)
- });
- },
-
- /**
- Defines factory injection rules.
- Similar to regular injection rules, but are run against factories, via
- `Registry#lookupFactory`.
- These rules are used to inject objects onto factories when they
- are looked up.
- Two forms of injections are possible:
- * Injecting one fullName on another fullName
- * Injecting one fullName on a type
- Example:
- ```javascript
- let registry = new Registry();
- let container = registry.container();
- registry.register('store:main', Store);
- registry.register('store:secondary', OtherStore);
- registry.register('model:user', User);
- registry.register('model:post', Post);
- // injecting one fullName on another type
- registry.factoryInjection('model', 'store', 'store:main');
- // injecting one fullName on another fullName
- registry.factoryInjection('model:post', 'secondaryStore', 'store:secondary');
- let UserFactory = container.lookupFactory('model:user');
- let PostFactory = container.lookupFactory('model:post');
- let store = container.lookup('store:main');
- UserFactory.store instanceof Store; //=> true
- UserFactory.secondaryStore instanceof OtherStore; //=> false
- PostFactory.store instanceof Store; //=> true
- PostFactory.secondaryStore instanceof OtherStore; //=> true
- // and both models share the same source instance
- UserFactory.store === PostFactory.store; //=> true
- ```
- @private
- @method factoryInjection
- @param {String} factoryName
- @param {String} property
- @param {String} injectionName
- */
- factoryInjection: function (fullName, property, injectionName) {
- var normalizedName = this.normalize(fullName);
- var normalizedInjectionName = this.normalize(injectionName);
-
- this.validateFullName(injectionName);
-
- if (fullName.indexOf(':') === -1) {
- return this.factoryTypeInjection(normalizedName, property, normalizedInjectionName);
- }
-
- var injections = this._factoryInjections[normalizedName] || (this._factoryInjections[normalizedName] = []);
-
- injections.push({
- property: property,
- fullName: normalizedInjectionName
- });
- },
-
- /**
- @private
- @method knownForType
- @param {String} type the type to iterate over
- */
- knownForType: function (type) {
- var fallbackKnown = undefined,
- resolverKnown = undefined;
-
- var localKnown = _emberMetal.dictionary(null);
- var registeredNames = Object.keys(this.registrations);
- for (var index = 0; index < registeredNames.length; index++) {
- var fullName = registeredNames[index];
- var itemType = fullName.split(':')[0];
-
- if (itemType === type) {
- localKnown[fullName] = true;
- }
- }
-
- if (this.fallback) {
- fallbackKnown = this.fallback.knownForType(type);
- }
-
- if (this.resolver && this.resolver.knownForType) {
- resolverKnown = this.resolver.knownForType(type);
- }
-
- return _emberMetal.assign({}, fallbackKnown, localKnown, resolverKnown);
- },
-
- validateFullName: function (fullName) {
- if (!this.isValidFullName(fullName)) {
- throw new TypeError('Invalid Fullname, expected: \'type:name\' got: ' + fullName);
- }
-
- return true;
- },
-
- isValidFullName: function (fullName) {
- return !!VALID_FULL_NAME_REGEXP.test(fullName);
- },
-
- validateInjections: function (injections) {
- if (!injections) {
- return;
- }
-
- var fullName = undefined;
-
- for (var i = 0; i < injections.length; i++) {
- fullName = injections[i].fullName;
-
- if (!this.has(fullName)) {
- throw new Error('Attempting to inject an unknown injection: \'' + fullName + '\'');
- }
- }
- },
-
- normalizeInjectionsHash: function (hash) {
- var injections = [];
-
- for (var key in hash) {
- if (hash.hasOwnProperty(key)) {
- _emberMetal.assert('Expected a proper full name, given \'' + hash[key] + '\'', this.validateFullName(hash[key]));
-
- injections.push({
- property: key,
- fullName: hash[key]
- });
- }
- }
-
- return injections;
- },
-
- getInjections: function (fullName) {
- var injections = this._injections[fullName] || [];
- if (this.fallback) {
- injections = injections.concat(this.fallback.getInjections(fullName));
- }
- return injections;
- },
-
- getTypeInjections: function (type) {
- var injections = this._typeInjections[type] || [];
- if (this.fallback) {
- injections = injections.concat(this.fallback.getTypeInjections(type));
- }
- return injections;
- },
-
- getFactoryInjections: function (fullName) {
- var injections = this._factoryInjections[fullName] || [];
- if (this.fallback) {
- injections = injections.concat(this.fallback.getFactoryInjections(fullName));
- }
- return injections;
- },
-
- getFactoryTypeInjections: function (type) {
- var injections = this._factoryTypeInjections[type] || [];
- if (this.fallback) {
- injections = injections.concat(this.fallback.getFactoryTypeInjections(type));
- }
- return injections;
- }
- };
-
- function deprecateResolverFunction(registry) {
- _emberMetal.deprecate('Passing a `resolver` function into a Registry is deprecated. Please pass in a Resolver object with a `resolve` method.', false, { id: 'ember-application.registry-resolver-as-function', until: '3.0.0', url: 'http://emberjs.com/deprecations/v2.x#toc_registry-resolver-as-function' });
- registry.resolver = {
- resolve: registry.resolver
- };
- }
-
- /**
- Given a fullName and a source fullName returns the fully resolved
- fullName. Used to allow for local lookup.
-
- ```javascript
- let registry = new Registry();
-
- // the twitter factory is added to the module system
- registry.expandLocalLookup('component:post-title', { source: 'template:post' }) // => component:post/post-title
- ```
-
- @private
- @method expandLocalLookup
- @param {String} fullName
- @param {Object} [options]
- @param {String} [options.source] the fullname of the request source (used for local lookups)
- @return {String} fullName
- */
- Registry.prototype.expandLocalLookup = function Registry_expandLocalLookup(fullName, options) {
- if (this.resolver && this.resolver.expandLocalLookup) {
- _emberMetal.assert('fullName must be a proper full name', this.validateFullName(fullName));
- _emberMetal.assert('options.source must be provided to expandLocalLookup', options && options.source);
- _emberMetal.assert('options.source must be a proper full name', this.validateFullName(options.source));
-
- var normalizedFullName = this.normalize(fullName);
- var normalizedSource = this.normalize(options.source);
-
- return expandLocalLookup(this, normalizedFullName, normalizedSource);
- } else if (this.fallback) {
- return this.fallback.expandLocalLookup(fullName, options);
- } else {
- return null;
- }
- };
-
- function expandLocalLookup(registry, normalizedName, normalizedSource) {
- var cache = registry._localLookupCache;
- var normalizedNameCache = cache[normalizedName];
-
- if (!normalizedNameCache) {
- normalizedNameCache = cache[normalizedName] = new _emberMetal.EmptyObject();
- }
-
- var cached = normalizedNameCache[normalizedSource];
-
- if (cached !== undefined) {
- return cached;
- }
-
- var expanded = registry.resolver.expandLocalLookup(normalizedName, normalizedSource);
-
- return normalizedNameCache[normalizedSource] = expanded;
- }
-
- function resolve(registry, normalizedName, options) {
- if (options && options.source) {
- // when `source` is provided expand normalizedName
- // and source into the full normalizedName
- normalizedName = registry.expandLocalLookup(normalizedName, options);
-
- // if expandLocalLookup returns falsey, we do not support local lookup
- if (!normalizedName) {
- return;
- }
- }
-
- var cached = registry._resolveCache[normalizedName];
- if (cached !== undefined) {
- return cached;
- }
- if (registry._failCache[normalizedName]) {
- return;
- }
-
- var resolved = undefined;
-
- if (registry.resolver) {
- resolved = registry.resolver.resolve(normalizedName);
- }
-
- if (resolved === undefined) {
- resolved = registry.registrations[normalizedName];
- }
-
- if (resolved === undefined) {
- registry._failCache[normalizedName] = true;
- } else {
- registry._resolveCache[normalizedName] = resolved;
- }
-
- return resolved;
- }
-
- function has(registry, fullName, source) {
- return registry.resolve(fullName, { source: source }) !== undefined;
- }
-
- var privateNames = _emberMetal.dictionary(null);
- var privateSuffix = '' + Math.random() + Date.now();
-
- function privatize(_ref) {
- var fullName = _ref[0];
-
- var name = privateNames[fullName];
- if (name) {
- return name;
- }
-
- var _fullName$split = fullName.split(':');
-
- var type = _fullName$split[0];
- var rawName = _fullName$split[1];
-
- return privateNames[fullName] = _emberMetal.intern(type + ':' + rawName + '-' + privateSuffix);
- }
-});
enifed('ember-console/index', ['exports', 'ember-environment'], function (exports, _emberEnvironment) {
'use strict';
function K() {}
@@ -3424,11 +2066,11 @@
Function: defaultTrue(obj.Function)
};
}
}
});
-enifed('ember-metal/alias', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/error', 'ember-metal/properties', 'ember-metal/computed', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/dependent_keys'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalError, _emberMetalProperties, _emberMetalComputed, _emberMetalUtils, _emberMetalMeta, _emberMetalDependent_keys) {
+enifed('ember-metal/alias', ['exports', 'ember-utils', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/error', 'ember-metal/properties', 'ember-metal/computed', 'ember-metal/meta', 'ember-metal/dependent_keys'], function (exports, _emberUtils, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalError, _emberMetalProperties, _emberMetalComputed, _emberMetalMeta, _emberMetalDependent_keys) {
'use strict';
exports.default = alias;
exports.AliasedProperty = AliasedProperty;
@@ -3479,11 +2121,11 @@
this.set = AliasedProperty_readOnlySet;
return this;
};
function AliasedProperty_readOnlySet(obj, keyName, value) {
- throw new _emberMetalError.default('Cannot set read-only property \'' + keyName + '\' on object: ' + _emberMetalUtils.inspect(obj));
+ throw new _emberMetalError.default('Cannot set read-only property \'' + keyName + '\' on object: ' + _emberUtils.inspect(obj));
}
AliasedProperty.prototype.oneWay = function () {
this.set = AliasedProperty_oneWaySet;
return this;
@@ -3496,55 +2138,11 @@
// Backwards compatibility with Ember Data.
AliasedProperty.prototype._meta = undefined;
AliasedProperty.prototype.meta = _emberMetalComputed.ComputedProperty.prototype.meta;
});
-enifed("ember-metal/assign", ["exports"], function (exports) {
- /**
- Copy properties from a source object to a target object.
-
- ```javascript
- var a = { first: 'Yehuda' };
- var b = { last: 'Katz' };
- var c = { company: 'Tilde Inc.' };
- Ember.assign(a, b, c); // a === { first: 'Yehuda', last: 'Katz', company: 'Tilde Inc.' }, b === { last: 'Katz' }, c === { company: 'Tilde Inc.' }
- ```
-
- @method assign
- @for Ember
- @param {Object} original The object to assign into
- @param {Object} ...args The objects to copy properties from
- @return {Object}
- @public
- */
- "use strict";
-
- exports.default = assign;
-
- function assign(original) {
- for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- args[_key - 1] = arguments[_key];
- }
-
- for (var i = 0; i < args.length; i++) {
- var arg = args[i];
- if (!arg) {
- continue;
- }
-
- var updates = Object.keys(arg);
-
- for (var _i = 0; _i < updates.length; _i++) {
- var prop = updates[_i];
- original[prop] = arg[prop];
- }
- }
-
- return original;
- }
-});
-enifed('ember-metal/binding', ['exports', 'ember-console', 'ember-environment', 'ember-metal/run_loop', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/utils', 'ember-metal/events', 'ember-metal/observer', 'ember-metal/path_cache'], function (exports, _emberConsole, _emberEnvironment, _emberMetalRun_loop, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalUtils, _emberMetalEvents, _emberMetalObserver, _emberMetalPath_cache) {
+enifed('ember-metal/binding', ['exports', 'ember-utils', 'ember-console', 'ember-environment', 'ember-metal/run_loop', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/events', 'ember-metal/observer', 'ember-metal/path_cache'], function (exports, _emberUtils, _emberConsole, _emberEnvironment, _emberMetalRun_loop, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalEvents, _emberMetalObserver, _emberMetalPath_cache) {
'use strict';
exports.bind = bind;
/**
@@ -3649,11 +2247,11 @@
@return {String} string representation of binding
@public
*/
toString: function () {
var oneWay = this._oneWay ? '[oneWay]' : '';
- return 'Ember.Binding<' + _emberMetalUtils.guidFor(this) + '>(' + this._from + ' -> ' + this._to + ')' + oneWay;
+ return 'Ember.Binding<' + _emberUtils.guidFor(this) + '>(' + this._from + ' -> ' + this._to + ')' + oneWay;
},
// ..........................................................
// CONNECT AND SYNC
//
@@ -4016,11 +2614,11 @@
return new Binding(to, from).connect(obj);
}
exports.Binding = Binding;
});
-enifed('ember-metal/cache', ['exports', 'ember-metal/empty_object'], function (exports, _emberMetalEmpty_object) {
+enifed('ember-metal/cache', ['exports', 'ember-utils'], function (exports, _emberUtils) {
'use strict';
var Cache = (function () {
function Cache(limit, func, key, store) {
babelHelpers.classCallCheck(this, Cache);
@@ -4085,11 +2683,11 @@
var DefaultStore = (function () {
function DefaultStore() {
babelHelpers.classCallCheck(this, DefaultStore);
- this.data = new _emberMetalEmpty_object.default();
+ this.data = new _emberUtils.EmptyObject();
}
DefaultStore.prototype.get = function get(key) {
return this.data[key];
};
@@ -4097,17 +2695,17 @@
DefaultStore.prototype.set = function set(key, value) {
this.data[key] = value;
};
DefaultStore.prototype.clear = function clear() {
- this.data = new _emberMetalEmpty_object.default();
+ this.data = new _emberUtils.EmptyObject();
};
return DefaultStore;
})();
});
-enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-metal/meta', 'ember-metal/watch_key', 'ember-metal/empty_object', 'ember-metal/watch_path'], function (exports, _emberMetalProperty_get, _emberMetalMeta, _emberMetalWatch_key, _emberMetalEmpty_object, _emberMetalWatch_path) {
+enifed('ember-metal/chains', ['exports', 'ember-utils', 'ember-metal/property_get', 'ember-metal/meta', 'ember-metal/watch_key', 'ember-metal/watch_path'], function (exports, _emberUtils, _emberMetalProperty_get, _emberMetalMeta, _emberMetalWatch_key, _emberMetalWatch_path) {
'use strict';
exports.finishChains = finishChains;
var FIRST_KEY = /^([^\.]+)/;
@@ -4126,11 +2724,11 @@
function ChainWatchers() {
// chain nodes that reference a key in this obj by key
// we only create ChainWatchers when we are going to add them
// so create this upfront
- this.chains = new _emberMetalEmpty_object.default();
+ this.chains = new _emberUtils.EmptyObject();
}
ChainWatchers.prototype = {
add: function (key, node) {
var nodes = this.chains[key];
@@ -4358,11 +2956,11 @@
chain: function (key, path) {
var chains = this._chains;
var node = undefined;
if (chains === undefined) {
- chains = this._chains = new _emberMetalEmpty_object.default();
+ chains = this._chains = new _emberUtils.EmptyObject();
} else {
node = chains[key];
}
if (node === undefined) {
@@ -4461,11 +3059,11 @@
}
exports.removeChainWatcher = removeChainWatcher;
exports.ChainNode = ChainNode;
});
-enifed('ember-metal/computed', ['exports', 'ember-metal/debug', 'ember-metal/property_set', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/expand_properties', 'ember-metal/error', 'ember-metal/properties', 'ember-metal/property_events', 'ember-metal/dependent_keys'], function (exports, _emberMetalDebug, _emberMetalProperty_set, _emberMetalUtils, _emberMetalMeta, _emberMetalExpand_properties, _emberMetalError, _emberMetalProperties, _emberMetalProperty_events, _emberMetalDependent_keys) {
+enifed('ember-metal/computed', ['exports', 'ember-utils', 'ember-metal/debug', 'ember-metal/property_set', 'ember-metal/meta', 'ember-metal/expand_properties', 'ember-metal/error', 'ember-metal/properties', 'ember-metal/property_events', 'ember-metal/dependent_keys'], function (exports, _emberUtils, _emberMetalDebug, _emberMetalProperty_set, _emberMetalMeta, _emberMetalExpand_properties, _emberMetalError, _emberMetalProperties, _emberMetalProperty_events, _emberMetalDependent_keys) {
'use strict';
exports.default = computed;
/**
@@ -4812,11 +3410,11 @@
return this.setWithSuspend(obj, keyName, value);
};
ComputedPropertyPrototype._throwReadOnlyError = function computedPropertyThrowReadOnlyError(obj, keyName) {
- throw new _emberMetalError.default('Cannot set read-only property "' + keyName + '" on object: ' + _emberMetalUtils.inspect(obj));
+ throw new _emberMetalError.default('Cannot set read-only property "' + keyName + '" on object: ' + _emberUtils.inspect(obj));
};
ComputedPropertyPrototype.clobberSet = function computedPropertyClobberSet(obj, keyName, value) {
var cachedValue = cacheFor(obj, keyName);
_emberMetalProperties.defineProperty(obj, keyName, null, cachedValue);
@@ -5283,56 +3881,10 @@
Descriptor.prototype.teardown = function teardown(obj, key) {};
return Descriptor;
})(_emberMetalProperties.Descriptor);
});
-enifed('ember-metal/dictionary', ['exports', 'ember-metal/empty_object'], function (exports, _emberMetalEmpty_object) {
- 'use strict';
-
- exports.default = makeDictionary;
-
- // the delete is meant to hint at runtimes that this object should remain in
- // dictionary mode. This is clearly a runtime specific hack, but currently it
- // appears worthwhile in some usecases. Please note, these deletes do increase
- // the cost of creation dramatically over a plain Object.create. And as this
- // only makes sense for long-lived dictionaries that aren't instantiated often.
-
- function makeDictionary(parent) {
- var dict = undefined;
- if (parent === null) {
- dict = new _emberMetalEmpty_object.default();
- } else {
- dict = Object.create(parent);
- }
- dict['_dict'] = null;
- delete dict['_dict'];
- return dict;
- }
-});
-enifed("ember-metal/empty_object", ["exports"], function (exports) {
- // This exists because `Object.create(null)` is absurdly slow compared
- // to `new EmptyObject()`. In either case, you want a null prototype
- // when you're treating the object instances as arbitrary dictionaries
- // and don't want your keys colliding with build-in methods on the
- // default object prototype.
-
- "use strict";
-
- var proto = Object.create(null, {
- // without this, we will always still end up with (new
- // EmptyObject()).constructor === Object
- constructor: {
- value: undefined,
- enumerable: false,
- writable: true
- }
- });
-
- function EmptyObject() {}
- EmptyObject.prototype = proto;
- exports.default = EmptyObject;
-});
enifed("ember-metal/error", ["exports"], function (exports) {
/**
A subclass of the JavaScript Error object for use in Ember.
@@ -5429,11 +3981,11 @@
} else {
_emberConsole.default.error(getStack(error));
}
}
});
-enifed('ember-metal/events', ['exports', 'ember-metal/debug', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/meta_listeners'], function (exports, _emberMetalDebug, _emberMetalUtils, _emberMetalMeta, _emberMetalMeta_listeners) {
+enifed('ember-metal/events', ['exports', 'ember-utils', 'ember-metal/debug', 'ember-metal/meta', 'ember-metal/meta_listeners'], function (exports, _emberUtils, _emberMetalDebug, _emberMetalMeta, _emberMetalMeta_listeners) {
'no use strict';
// Remove "use strict"; from transpiled module until
// https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
/**
@@ -5676,11 +4228,11 @@
if (!target) {
target = obj;
}
if ('string' === typeof method) {
if (params) {
- _emberMetalUtils.applyStr(target, method, params);
+ _emberUtils.applyStr(target, method, params);
} else {
target[method]();
}
} else {
if (params) {
@@ -5843,11 +4395,11 @@
});
return all;
}
});
-enifed('ember-metal/features', ['exports', 'ember-environment', 'ember-metal/assign', 'ember/features'], function (exports, _emberEnvironment, _emberMetalAssign, _emberFeatures) {
+enifed('ember-metal/features', ['exports', 'ember-utils', 'ember-environment', 'ember/features'], function (exports, _emberUtils, _emberEnvironment, _emberFeatures) {
'use strict';
exports.default = isEnabled;
/**
@@ -5861,11 +4413,11 @@
@namespace Ember
@static
@since 1.1.0
@public
*/
- var FEATURES = _emberMetalAssign.default(_emberFeatures.default, _emberEnvironment.ENV.FEATURES);
+ var FEATURES = _emberUtils.assign(_emberFeatures.default, _emberEnvironment.ENV.FEATURES);
exports.FEATURES = FEATURES;
/**
Determine whether the specified `feature` is enabled. Used by Ember's
build tools to exclude experimental features from beta/stable builds.
@@ -5939,11 +4491,11 @@
ret[propertyNames[i]] = _emberMetalProperty_get.get(obj, propertyNames[i]);
}
return ret;
}
});
-enifed('ember-metal/index', ['exports', 'require', 'ember-metal/core', 'ember-metal/computed', 'ember-metal/alias', 'ember-metal/assign', 'ember-metal/merge', 'ember-metal/debug', 'ember-metal/instrumentation', 'ember-metal/utils', 'ember-metal/testing', 'ember-metal/error_handler', 'ember-metal/meta', 'ember-metal/error', 'ember-metal/cache', 'ember-metal/features', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/weak_map', 'ember-metal/events', 'ember-metal/is_none', 'ember-metal/is_empty', 'ember-metal/is_blank', 'ember-metal/is_present', 'ember-metal/run_loop', 'ember-metal/observer_set', 'ember-metal/property_events', 'ember-metal/properties', 'ember-metal/watch_key', 'ember-metal/chains', 'ember-metal/watch_path', 'ember-metal/watching', 'ember-metal/libraries', 'ember-metal/map', 'ember-metal/get_properties', 'ember-metal/set_properties', 'ember-metal/expand_properties', 'ember-metal/observer', 'ember-metal/mixin', 'ember-metal/binding', 'ember-metal/path_cache', 'ember-metal/symbol', 'ember-metal/dictionary', 'ember-metal/empty_object', 'ember-metal/injected_property', 'ember-metal/tags', 'ember-metal/replace', 'ember-metal/transaction', 'ember-metal/descriptor'], function (exports, _require, _emberMetalCore, _emberMetalComputed, _emberMetalAlias, _emberMetalAssign, _emberMetalMerge, _emberMetalDebug, _emberMetalInstrumentation, _emberMetalUtils, _emberMetalTesting, _emberMetalError_handler, _emberMetalMeta, _emberMetalError, _emberMetalCache, _emberMetalFeatures, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalWeak_map, _emberMetalEvents, _emberMetalIs_none, _emberMetalIs_empty, _emberMetalIs_blank, _emberMetalIs_present, _emberMetalRun_loop, _emberMetalObserver_set, _emberMetalProperty_events, _emberMetalProperties, _emberMetalWatch_key, _emberMetalChains, _emberMetalWatch_path, _emberMetalWatching, _emberMetalLibraries, _emberMetalMap, _emberMetalGet_properties, _emberMetalSet_properties, _emberMetalExpand_properties, _emberMetalObserver, _emberMetalMixin, _emberMetalBinding, _emberMetalPath_cache, _emberMetalSymbol, _emberMetalDictionary, _emberMetalEmpty_object, _emberMetalInjected_property, _emberMetalTags, _emberMetalReplace, _emberMetalTransaction, _emberMetalDescriptor) {
+enifed('ember-metal/index', ['exports', 'require', 'ember-metal/core', 'ember-metal/computed', 'ember-metal/alias', 'ember-metal/merge', 'ember-metal/debug', 'ember-metal/instrumentation', 'ember-metal/testing', 'ember-metal/error_handler', 'ember-metal/meta', 'ember-metal/error', 'ember-metal/cache', 'ember-metal/features', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/weak_map', 'ember-metal/events', 'ember-metal/is_none', 'ember-metal/is_empty', 'ember-metal/is_blank', 'ember-metal/is_present', 'ember-metal/run_loop', 'ember-metal/observer_set', 'ember-metal/property_events', 'ember-metal/properties', 'ember-metal/watch_key', 'ember-metal/chains', 'ember-metal/watch_path', 'ember-metal/watching', 'ember-metal/libraries', 'ember-metal/map', 'ember-metal/get_properties', 'ember-metal/set_properties', 'ember-metal/expand_properties', 'ember-metal/observer', 'ember-metal/mixin', 'ember-metal/binding', 'ember-metal/path_cache', 'ember-metal/injected_property', 'ember-metal/tags', 'ember-metal/replace', 'ember-metal/transaction', 'ember-metal/descriptor'], function (exports, _require, _emberMetalCore, _emberMetalComputed, _emberMetalAlias, _emberMetalMerge, _emberMetalDebug, _emberMetalInstrumentation, _emberMetalTesting, _emberMetalError_handler, _emberMetalMeta, _emberMetalError, _emberMetalCache, _emberMetalFeatures, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalWeak_map, _emberMetalEvents, _emberMetalIs_none, _emberMetalIs_empty, _emberMetalIs_blank, _emberMetalIs_present, _emberMetalRun_loop, _emberMetalObserver_set, _emberMetalProperty_events, _emberMetalProperties, _emberMetalWatch_key, _emberMetalChains, _emberMetalWatch_path, _emberMetalWatching, _emberMetalLibraries, _emberMetalMap, _emberMetalGet_properties, _emberMetalSet_properties, _emberMetalExpand_properties, _emberMetalObserver, _emberMetalMixin, _emberMetalBinding, _emberMetalPath_cache, _emberMetalInjected_property, _emberMetalTags, _emberMetalReplace, _emberMetalTransaction, _emberMetalDescriptor) {
/**
@module ember
@submodule ember-metal
*/
@@ -5953,11 +4505,10 @@
// reexports
exports.computed = _emberMetalComputed.default;
exports.cacheFor = _emberMetalComputed.cacheFor;
exports.ComputedProperty = _emberMetalComputed.ComputedProperty;
exports.alias = _emberMetalAlias.default;
- exports.assign = _emberMetalAssign.default;
exports.merge = _emberMetalMerge.default;
exports.assert = _emberMetalDebug.assert;
exports.info = _emberMetalDebug.info;
exports.warn = _emberMetalDebug.warn;
exports.debug = _emberMetalDebug.debug;
@@ -5970,22 +4521,10 @@
exports.flaggedInstrument = _emberMetalInstrumentation.flaggedInstrument;
exports._instrumentStart = _emberMetalInstrumentation._instrumentStart;
exports.instrumentationReset = _emberMetalInstrumentation.reset;
exports.instrumentationSubscribe = _emberMetalInstrumentation.subscribe;
exports.instrumentationUnsubscribe = _emberMetalInstrumentation.unsubscribe;
- exports.intern = _emberMetalUtils.intern;
- exports.GUID_KEY = _emberMetalUtils.GUID_KEY;
- exports.GUID_KEY_PROPERTY = _emberMetalUtils.GUID_KEY_PROPERTY;
- exports.applyStr = _emberMetalUtils.applyStr;
- exports.canInvoke = _emberMetalUtils.canInvoke;
- exports.generateGuid = _emberMetalUtils.generateGuid;
- exports.guidFor = _emberMetalUtils.guidFor;
- exports.inspect = _emberMetalUtils.inspect;
- exports.makeArray = _emberMetalUtils.makeArray;
- exports.tryInvoke = _emberMetalUtils.tryInvoke;
- exports.uuid = _emberMetalUtils.uuid;
- exports.wrap = _emberMetalUtils.wrap;
exports.isTesting = _emberMetalTesting.isTesting;
exports.setTesting = _emberMetalTesting.setTesting;
exports.getOnerror = _emberMetalError_handler.getOnerror;
exports.setOnerror = _emberMetalError_handler.setOnerror;
exports.dispatchError = _emberMetalError_handler.dispatchError;
@@ -6069,13 +4608,10 @@
exports.clearUnprocessedMixins = _emberMetalMixin.clearUnprocessedMixins;
exports.detectBinding = _emberMetalMixin.detectBinding;
exports.Binding = _emberMetalBinding.Binding;
exports.bind = _emberMetalBinding.bind;
exports.isGlobalPath = _emberMetalPath_cache.isGlobalPath;
- exports.symbol = _emberMetalSymbol.default;
- exports.dictionary = _emberMetalDictionary.default;
- exports.EmptyObject = _emberMetalEmpty_object.default;
exports.InjectedProperty = _emberMetalInjected_property.default;
exports.setHasViews = _emberMetalTags.setHasViews;
exports.tagFor = _emberMetalTags.tagFor;
exports.markObjectAsDirty = _emberMetalTags.markObjectAsDirty;
exports.replace = _emberMetalReplace.default;
@@ -6091,11 +4627,11 @@
if (_require.has('ember-debug')) {
_require.default('ember-debug');
}
});
-enifed('ember-metal/injected_property', ['exports', 'ember-metal/debug', 'ember-metal/computed', 'ember-metal/alias', 'ember-metal/properties', 'container'], function (exports, _emberMetalDebug, _emberMetalComputed, _emberMetalAlias, _emberMetalProperties, _container) {
+enifed('ember-metal/injected_property', ['exports', 'ember-utils', 'ember-metal/debug', 'ember-metal/computed', 'ember-metal/alias', 'ember-metal/properties'], function (exports, _emberUtils, _emberMetalDebug, _emberMetalComputed, _emberMetalAlias, _emberMetalProperties) {
'use strict';
exports.default = InjectedProperty;
/**
@@ -6118,11 +4654,11 @@
AliasedPropertyPrototype.oneWay.call(this);
}
function injectedPropertyGet(keyName) {
var desc = this[keyName];
- var owner = _container.getOwner(this) || this.container; // fallback to `container` for backwards compat
+ var owner = _emberUtils.getOwner(this) || this.container; // fallback to `container` for backwards compat
_emberMetalDebug.assert('InjectedProperties should be defined with the Ember.inject computed property macros.', desc && desc.isDescriptor && desc.type);
_emberMetalDebug.assert('Attempting to lookup an injected property on an object without a container, ensure that the object was instantiated via a container.', owner);
return owner.lookup(desc.type + ':' + (desc.name || keyName));
@@ -6649,11 +5185,11 @@
};
}
exports.default = new Libraries();
});
-enifed('ember-metal/map', ['exports', 'ember-metal/utils', 'ember-metal/empty_object'], function (exports, _emberMetalUtils, _emberMetalEmpty_object) {
+enifed('ember-metal/map', ['exports', 'ember-utils'], function (exports, _emberUtils) {
/**
@module ember
@submodule ember-metal
*/
@@ -6683,11 +5219,11 @@
function missingNew(name) {
throw new TypeError('Constructor ' + name + ' requires \'new\'');
}
function copyNull(obj) {
- var output = new _emberMetalEmpty_object.default();
+ var output = new _emberUtils.EmptyObject();
for (var prop in obj) {
// hasOwnPropery is not needed because obj is new EmptyObject();
output[prop] = obj[prop];
}
@@ -6742,11 +5278,11 @@
/**
@method clear
@private
*/
clear: function () {
- this.presenceSet = new _emberMetalEmpty_object.default();
+ this.presenceSet = new _emberUtils.EmptyObject();
this.list = [];
this.size = 0;
},
/**
@@ -6755,11 +5291,11 @@
@param guid (optional, and for internal use)
@return {Ember.OrderedSet}
@private
*/
add: function (obj, _guid) {
- var guid = _guid || _emberMetalUtils.guidFor(obj);
+ var guid = _guid || _emberUtils.guidFor(obj);
var presenceSet = this.presenceSet;
var list = this.list;
if (presenceSet[guid] !== true) {
presenceSet[guid] = true;
@@ -6776,11 +5312,11 @@
@param _guid (optional and for internal use only)
@return {Boolean}
@private
*/
delete: function (obj, _guid) {
- var guid = _guid || _emberMetalUtils.guidFor(obj);
+ var guid = _guid || _emberUtils.guidFor(obj);
var presenceSet = this.presenceSet;
var list = this.list;
if (presenceSet[guid] === true) {
delete presenceSet[guid];
@@ -6813,11 +5349,11 @@
has: function (obj) {
if (this.size === 0) {
return false;
}
- var guid = _emberMetalUtils.guidFor(obj);
+ var guid = _emberUtils.guidFor(obj);
var presenceSet = this.presenceSet;
return presenceSet[guid] === true;
},
@@ -6898,11 +5434,11 @@
*/
function Map() {
if (this instanceof Map) {
this._keys = OrderedSet.create();
this._keys._silenceRemoveDeprecation = true;
- this._values = new _emberMetalEmpty_object.default();
+ this._values = new _emberUtils.EmptyObject();
this.size = 0;
} else {
missingNew('Map');
}
}
@@ -6941,11 +5477,11 @@
if (this.size === 0) {
return;
}
var values = this._values;
- var guid = _emberMetalUtils.guidFor(key);
+ var guid = _emberUtils.guidFor(key);
return values[guid];
},
/**
@@ -6958,11 +5494,11 @@
@private
*/
set: function (key, value) {
var keys = this._keys;
var values = this._values;
- var guid = _emberMetalUtils.guidFor(key);
+ var guid = _emberUtils.guidFor(key);
// ensure we don't store -0
var k = key === -0 ? 0 : key;
keys.add(k, guid);
@@ -6988,11 +5524,11 @@
}
// don't use ES6 "delete" because it will be annoying
// to use in browsers that are not ES6 friendly;
var keys = this._keys;
var values = this._values;
- var guid = _emberMetalUtils.guidFor(key);
+ var guid = _emberUtils.guidFor(key);
if (keys.delete(key, guid)) {
delete values[guid];
this.size = keys.size;
return true;
@@ -7054,11 +5590,11 @@
@method clear
@private
*/
clear: function () {
this._keys.clear();
- this._values = new _emberMetalEmpty_object.default();
+ this._values = new _emberUtils.EmptyObject();
this.size = 0;
},
/**
@method copy
@@ -7179,11 +5715,11 @@
}
return original;
}
});
-enifed('ember-metal/meta', ['exports', 'ember-metal/features', 'ember-metal/meta_listeners', 'ember-metal/empty_object', 'ember-metal/utils', 'ember-metal/symbol'], function (exports, _emberMetalFeatures, _emberMetalMeta_listeners, _emberMetalEmpty_object, _emberMetalUtils, _emberMetalSymbol) {
+enifed('ember-metal/meta', ['exports', 'ember-utils', 'ember-metal/features', 'ember-metal/meta_listeners'], function (exports, _emberUtils, _emberMetalFeatures, _emberMetalMeta_listeners) {
'no use strict';
// Remove "use strict"; from transpiled module until
// https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
exports.meta = meta;
@@ -7294,11 +5830,11 @@
}
Meta.prototype._getOrCreateOwnMap = function (key) {
var ret = this[key];
if (!ret) {
- ret = this[key] = new _emberMetalEmpty_object.default();
+ ret = this[key] = new _emberUtils.EmptyObject();
}
return ret;
};
// Implements a member that is a lazily created POJO with inheritable
@@ -7316,11 +5852,11 @@
return this._findInherited(key, subkey);
};
Meta.prototype['forEach' + capitalized] = function (fn) {
var pointer = this;
- var seen = new _emberMetalEmpty_object.default();
+ var seen = new _emberUtils.EmptyObject();
while (pointer !== undefined) {
var map = pointer[key];
if (map) {
for (var _key in map) {
if (!seen[_key]) {
@@ -7368,11 +5904,11 @@
}
pointer = pointer.parent;
}
};
- var UNDEFINED = _emberMetalSymbol.default('undefined');
+ var UNDEFINED = _emberUtils.symbol('undefined');
exports.UNDEFINED = UNDEFINED;
// Implements a member that provides a lazily created map of maps,
// with inheritance at both levels.
function inheritedMapOfMaps(name, Meta) {
@@ -7381,11 +5917,11 @@
Meta.prototype['write' + capitalized] = function (subkey, itemkey, value) {
var outerMap = this._getOrCreateOwnMap(key);
var innerMap = outerMap[subkey];
if (!innerMap) {
- innerMap = outerMap[subkey] = new _emberMetalEmpty_object.default();
+ innerMap = outerMap[subkey] = new _emberUtils.EmptyObject();
}
innerMap[itemkey] = value;
};
Meta.prototype['peek' + capitalized] = function (subkey, itemkey) {
@@ -7420,11 +5956,11 @@
};
}
Meta.prototype._forEachIn = function (key, subkey, fn) {
var pointer = this;
- var seen = new _emberMetalEmpty_object.default();
+ var seen = new _emberUtils.EmptyObject();
var calls = [];
while (pointer !== undefined) {
var map = pointer[key];
if (map) {
var innerMap = map[subkey];
@@ -7531,11 +6067,11 @@
return UNDEFINED;
};
Meta.prototype.writeValue = function (obj, key, value) {
- var descriptor = _emberMetalUtils.lookupDescriptor(obj, key);
+ var descriptor = _emberUtils.lookupDescriptor(obj, key);
var isMandatorySetter = descriptor && descriptor.set && descriptor.set.isMandatorySetter;
if (isMandatorySetter) {
this.writeValues(key, value);
} else {
@@ -7777,11 +6313,11 @@
}
}
destination.push(target, method, source[index + 3]);
}
});
-enifed('ember-metal/mixin', ['exports', 'ember-metal/error', 'ember-metal/debug', 'ember-metal/assign', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/expand_properties', 'ember-metal/properties', 'ember-metal/computed', 'ember-metal/binding', 'ember-metal/observer', 'ember-metal/events'], function (exports, _emberMetalError, _emberMetalDebug, _emberMetalAssign, _emberMetalUtils, _emberMetalMeta, _emberMetalExpand_properties, _emberMetalProperties, _emberMetalComputed, _emberMetalBinding, _emberMetalObserver, _emberMetalEvents) {
+enifed('ember-metal/mixin', ['exports', 'ember-utils', 'ember-metal/error', 'ember-metal/debug', 'ember-metal/meta', 'ember-metal/expand_properties', 'ember-metal/properties', 'ember-metal/computed', 'ember-metal/binding', 'ember-metal/observer', 'ember-metal/events'], function (exports, _emberUtils, _emberMetalError, _emberMetalDebug, _emberMetalMeta, _emberMetalExpand_properties, _emberMetalProperties, _emberMetalComputed, _emberMetalBinding, _emberMetalObserver, _emberMetalEvents) {
'no use strict';
// Remove "use strict"; from transpiled module until
// https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
/**
@@ -7812,11 +6348,11 @@
function mixinProperties(mixinsMeta, mixin) {
var guid = undefined;
if (mixin instanceof Mixin) {
- guid = _emberMetalUtils.guidFor(mixin);
+ guid = _emberUtils.guidFor(mixin);
if (mixinsMeta.peekMixins(guid)) {
return CONTINUE;
}
mixinsMeta.writeMixins(guid, mixin);
return mixin.properties;
@@ -7861,14 +6397,14 @@
// Since multiple mixins may inherit from the same parent, we need
// to clone the computed property so that other mixins do not receive
// the wrapped version.
property = Object.create(property);
- property._getter = _emberMetalUtils.wrap(property._getter, superProperty._getter);
+ property._getter = _emberUtils.wrap(property._getter, superProperty._getter);
if (superProperty._setter) {
if (property._setter) {
- property._setter = _emberMetalUtils.wrap(property._setter, superProperty._setter);
+ property._setter = _emberUtils.wrap(property._setter, superProperty._setter);
} else {
property._setter = superProperty._setter;
}
}
@@ -7891,11 +6427,11 @@
// Only wrap the new method if the original method was a function
if (superMethod === undefined || 'function' !== typeof superMethod) {
return method;
}
- return _emberMetalUtils.wrap(method, superMethod);
+ return _emberUtils.wrap(method, superMethod);
}
function applyConcatenatedProperties(obj, key, value, values) {
var baseValue = values[key] || obj[key];
@@ -7905,14 +6441,14 @@
return baseValue;
} else {
return baseValue.concat(value);
}
} else {
- return _emberMetalUtils.makeArray(baseValue).concat(value);
+ return _emberUtils.makeArray(baseValue).concat(value);
}
} else {
- return _emberMetalUtils.makeArray(value);
+ return _emberUtils.makeArray(value);
}
}
function applyMergedProperties(obj, key, value, values) {
var baseValue = values[key] || obj[key];
@@ -7926,11 +6462,11 @@
if (!baseValue) {
return value;
}
- var newBase = _emberMetalAssign.default({}, baseValue);
+ var newBase = _emberUtils.assign({}, baseValue);
var hasFunction = false;
for (var prop in value) {
if (!value.hasOwnProperty(prop)) {
continue;
@@ -7984,12 +6520,11 @@
function mergeMixins(mixins, m, descs, values, base, keys) {
var currentMixin = undefined,
props = undefined,
key = undefined,
concats = undefined,
- mergings = undefined,
- meta = undefined;
+ mergings = undefined;
function removeKeys(keyName) {
delete descs[keyName];
delete values[keyName];
}
@@ -8002,11 +6537,10 @@
if (props === CONTINUE) {
continue;
}
if (props) {
- meta = _emberMetalMeta.meta(base);
if (base.willMergeMixin) {
base.willMergeMixin(props);
}
concats = concatenatedMixinProperties('concatenatedProperties', props, values, base);
mergings = concatenatedMixinProperties('mergedProperties', props, values, base);
@@ -8014,11 +6548,11 @@
for (key in props) {
if (!props.hasOwnProperty(key)) {
continue;
}
keys.push(key);
- addNormalizedProperty(base, key, props[key], meta, descs, values, concats, mergings);
+ addNormalizedProperty(base, key, props[key], m, descs, values, concats, mergings);
}
// manually copy toString() because some JS engines do not enumerate it
if (props.hasOwnProperty('toString')) {
base.toString = props.toString;
@@ -8187,11 +6721,11 @@
applyMixin(obj, args, false);
return obj;
}
- var NAME_KEY = _emberMetalUtils.GUID_KEY + '_name';
+ var NAME_KEY = _emberUtils.GUID_KEY + '_name';
exports.NAME_KEY = NAME_KEY;
/**
The `Ember.Mixin` class allows you to create mixins, whose properties can be
added to other classes. For instance,
@@ -8271,11 +6805,11 @@
} else {
this.mixins = undefined;
}
this.ownerConstructor = undefined;
this._without = undefined;
- this[_emberMetalUtils.GUID_KEY] = null;
+ this[_emberUtils.GUID_KEY] = null;
this[NAME_KEY] = null;
_emberMetalDebug.debugSeal(this);
}
Mixin._apply = applyMixin;
@@ -8365,11 +6899,11 @@
};
MixinPrototype.toString = Object.toString;
function _detect(curMixin, targetMixin, seen) {
- var guid = _emberMetalUtils.guidFor(curMixin);
+ var guid = _emberUtils.guidFor(curMixin);
if (seen[guid]) {
return false;
}
seen[guid] = true;
@@ -8402,11 +6936,11 @@
}
var m = _emberMetalMeta.peekMeta(obj);
if (!m) {
return false;
}
- return !!m.peekMixins(_emberMetalUtils.guidFor(this));
+ return !!m.peekMixins(_emberUtils.guidFor(this));
};
MixinPrototype.without = function () {
var ret = new Mixin([this]);
@@ -8417,14 +6951,14 @@
ret._without = args;
return ret;
};
function _keys(ret, mixin, seen) {
- if (seen[_emberMetalUtils.guidFor(mixin)]) {
+ if (seen[_emberUtils.guidFor(mixin)]) {
return;
}
- seen[_emberMetalUtils.guidFor(mixin)] = true;
+ seen[_emberUtils.guidFor(mixin)] = true;
if (mixin.properties) {
var props = Object.keys(mixin.properties);
for (var i = 0; i < props.length; i++) {
var key = props[i];
@@ -8785,11 +7319,11 @@
_emberMetalEvents.removeListener(obj, beforeEvent(path), target, method);
return this;
}
});
-enifed('ember-metal/observer_set', ['exports', 'ember-metal/utils', 'ember-metal/events'], function (exports, _emberMetalUtils, _emberMetalEvents) {
+enifed('ember-metal/observer_set', ['exports', 'ember-utils', 'ember-metal/events'], function (exports, _emberUtils, _emberMetalEvents) {
'use strict';
exports.default = ObserverSet;
/*
@@ -8816,11 +7350,11 @@
}
ObserverSet.prototype.add = function (sender, keyName, eventName) {
var observerSet = this.observerSet;
var observers = this.observers;
- var senderGuid = _emberMetalUtils.guidFor(sender);
+ var senderGuid = _emberUtils.guidFor(sender);
var keySet = observerSet[senderGuid];
var index = undefined;
if (!keySet) {
observerSet[senderGuid] = keySet = {};
@@ -9161,14 +7695,14 @@
// https://github.com/ariya/phantomjs/issues/11856
Object.defineProperty(obj, keyName, { configurable: true, writable: true, value: 'iCry' });
Object.defineProperty(obj, keyName, desc);
}
});
-enifed('ember-metal/property_events', ['exports', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/events', 'ember-metal/tags', 'ember-metal/observer_set', 'ember-metal/symbol', 'ember-metal/features', 'ember-metal/transaction'], function (exports, _emberMetalUtils, _emberMetalMeta, _emberMetalEvents, _emberMetalTags, _emberMetalObserver_set, _emberMetalSymbol, _emberMetalFeatures, _emberMetalTransaction) {
+enifed('ember-metal/property_events', ['exports', 'ember-utils', 'ember-metal/meta', 'ember-metal/events', 'ember-metal/tags', 'ember-metal/observer_set', 'ember-metal/features', 'ember-metal/transaction'], function (exports, _emberUtils, _emberMetalMeta, _emberMetalEvents, _emberMetalTags, _emberMetalObserver_set, _emberMetalFeatures, _emberMetalTransaction) {
'use strict';
- var PROPERTY_DID_CHANGE = _emberMetalSymbol.default('PROPERTY_DID_CHANGE');
+ var PROPERTY_DID_CHANGE = _emberUtils.symbol('PROPERTY_DID_CHANGE');
exports.PROPERTY_DID_CHANGE = PROPERTY_DID_CHANGE;
var beforeObserverSet = new _emberMetalObserver_set.default();
var observerSet = new _emberMetalObserver_set.default();
var deferred = 0;
@@ -9317,11 +7851,11 @@
}
function iterDeps(method, obj, depKey, seen, meta) {
var possibleDesc = undefined,
desc = undefined;
- var guid = _emberMetalUtils.guidFor(obj);
+ var guid = _emberUtils.guidFor(obj);
var current = seen[guid];
if (!current) {
current = seen[guid] = {};
}
@@ -9589,11 +8123,11 @@
return value;
}
exports.default = get;
});
-enifed('ember-metal/property_set', ['exports', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/property_get', 'ember-metal/property_events', 'ember-metal/error', 'ember-metal/path_cache', 'ember-metal/meta', 'ember-metal/utils'], function (exports, _emberMetalDebug, _emberMetalFeatures, _emberMetalProperty_get, _emberMetalProperty_events, _emberMetalError, _emberMetalPath_cache, _emberMetalMeta, _emberMetalUtils) {
+enifed('ember-metal/property_set', ['exports', 'ember-utils', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/property_get', 'ember-metal/property_events', 'ember-metal/error', 'ember-metal/path_cache', 'ember-metal/meta'], function (exports, _emberUtils, _emberMetalDebug, _emberMetalFeatures, _emberMetalProperty_get, _emberMetalProperty_events, _emberMetalError, _emberMetalPath_cache, _emberMetalMeta) {
'use strict';
exports.set = set;
exports.trySet = trySet;
@@ -9615,11 +8149,11 @@
function set(obj, keyName, value, tolerant) {
_emberMetalDebug.assert('Set must be called with three or four arguments; an object, a property key, a value and tolerant true/false', arguments.length === 3 || arguments.length === 4);
_emberMetalDebug.assert('Cannot call set with \'' + keyName + '\' on an undefined object.', obj && typeof obj === 'object' || typeof obj === 'function');
_emberMetalDebug.assert('The key provided to set must be a string, you passed ' + keyName, typeof keyName === 'string');
_emberMetalDebug.assert('\'this\' in paths is not supported', !_emberMetalPath_cache.hasThis(keyName));
- _emberMetalDebug.assert('calling set on destroyed object: ' + _emberMetalUtils.toString(obj) + '.' + keyName + ' = ' + _emberMetalUtils.toString(value), !obj.isDestroyed);
+ _emberMetalDebug.assert('calling set on destroyed object: ' + _emberUtils.toString(obj) + '.' + keyName + ' = ' + _emberUtils.toString(value), !obj.isDestroyed);
if (_emberMetalPath_cache.isPath(keyName)) {
return setPath(obj, keyName, value, tolerant);
}
@@ -9757,11 +8291,11 @@
ret = ret.concat(splice.apply(array, chunk));
}
return ret;
}
});
-enifed('ember-metal/run_loop', ['exports', 'ember-metal/debug', 'ember-metal/testing', 'ember-metal/error_handler', 'ember-metal/utils', 'ember-metal/property_events', 'backburner'], function (exports, _emberMetalDebug, _emberMetalTesting, _emberMetalError_handler, _emberMetalUtils, _emberMetalProperty_events, _backburner) {
+enifed('ember-metal/run_loop', ['exports', 'ember-utils', 'ember-metal/debug', 'ember-metal/testing', 'ember-metal/error_handler', 'ember-metal/property_events', 'backburner'], function (exports, _emberUtils, _emberMetalDebug, _emberMetalTesting, _emberMetalError_handler, _emberMetalProperty_events, _backburner) {
'use strict';
exports.default = run;
function onBegin(current) {
@@ -9780,11 +8314,11 @@
return _emberMetalError_handler.setOnerror(handler);
}
};
var backburner = new _backburner.default(['sync', 'actions', 'destroy'], {
- GUID_KEY: _emberMetalUtils.GUID_KEY,
+ GUID_KEY: _emberUtils.GUID_KEY,
sync: {
before: _emberMetalProperty_events.beginPropertyChanges,
after: _emberMetalProperty_events.endPropertyChanges
},
defaultQueue: 'actions',
@@ -10483,23 +9017,10 @@
}
});
return properties;
}
});
-enifed('ember-metal/symbol', ['exports', 'ember-metal/utils'], function (exports, _emberMetalUtils) {
- 'use strict';
-
- exports.default = symbol;
-
- function symbol(debugName) {
- // TODO: Investigate using platform symbols, but we do not
- // want to require non-enumerability for this API, which
- // would introduce a large cost.
-
- return _emberMetalUtils.intern(debugName + ' [id=' + _emberMetalUtils.GUID_KEY + Math.floor(Math.random() * new Date()) + ']');
- }
-});
enifed('ember-metal/tags', ['exports', 'ember-metal/meta', 'require'], function (exports, _emberMetalMeta, _require2) {
'use strict';
exports.setHasViews = setHasViews;
exports.tagFor = tagFor;
@@ -10682,551 +9203,11 @@
exports.default = runInTransaction;
exports.didRender = didRender;
exports.assertNotRendered = assertNotRendered;
});
-enifed('ember-metal/utils', ['exports'], function (exports) {
- 'no use strict';
- // Remove "use strict"; from transpiled module until
- // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
-
- /**
- @module ember-metal
- */
-
- /**
- Previously we used `Ember.$.uuid`, however `$.uuid` has been removed from
- jQuery master. We'll just bootstrap our own uuid now.
-
- @private
- @return {Number} the uuid
- */
- exports.uuid = uuid;
- exports.intern = intern;
- exports.generateGuid = generateGuid;
- exports.guidFor = guidFor;
- exports.wrap = wrap;
- exports.tryInvoke = tryInvoke;
- exports.makeArray = makeArray;
- exports.inspect = inspect;
- exports.applyStr = applyStr;
- exports.lookupDescriptor = lookupDescriptor;
- exports.toString = toString;
- var _uuid = 0;
-
- /**
- Generates a universally unique identifier. This method
- is used internally by Ember for assisting with
- the generation of GUID's and other unique identifiers.
-
- @public
- @return {Number} [description]
- */
-
- function uuid() {
- return ++_uuid;
- }
-
- /**
- Prefix used for guids through out Ember.
- @private
- @property GUID_PREFIX
- @for Ember
- @type String
- @final
- */
- var GUID_PREFIX = 'ember';
-
- // Used for guid generation...
- var numberCache = [];
- var stringCache = {};
-
- /**
- Strongly hint runtimes to intern the provided string.
-
- When do I need to use this function?
-
- For the most part, never. Pre-mature optimization is bad, and often the
- runtime does exactly what you need it to, and more often the trade-off isn't
- worth it.
-
- Why?
-
- Runtimes store strings in at least 2 different representations:
- Ropes and Symbols (interned strings). The Rope provides a memory efficient
- data-structure for strings created from concatenation or some other string
- manipulation like splitting.
-
- Unfortunately checking equality of different ropes can be quite costly as
- runtimes must resort to clever string comparison algorithms. These
- algorithms typically cost in proportion to the length of the string.
- Luckily, this is where the Symbols (interned strings) shine. As Symbols are
- unique by their string content, equality checks can be done by pointer
- comparison.
-
- How do I know if my string is a rope or symbol?
-
- Typically (warning general sweeping statement, but truthy in runtimes at
- present) static strings created as part of the JS source are interned.
- Strings often used for comparisons can be interned at runtime if some
- criteria are met. One of these criteria can be the size of the entire rope.
- For example, in chrome 38 a rope longer then 12 characters will not
- intern, nor will segments of that rope.
-
- Some numbers: http://jsperf.com/eval-vs-keys/8
-
- Known Trickâ„¢
-
- @private
- @return {String} interned version of the provided string
- */
-
- function intern(str) {
- var obj = {};
- obj[str] = 1;
- for (var key in obj) {
- if (key === str) {
- return key;
- }
- }
- return str;
- }
-
- /**
- A unique key used to assign guids and other private metadata to objects.
- If you inspect an object in your browser debugger you will often see these.
- They can be safely ignored.
-
- On browsers that support it, these properties are added with enumeration
- disabled so they won't show up when you iterate over your properties.
-
- @private
- @property GUID_KEY
- @for Ember
- @type String
- @final
- */
- var GUID_KEY = intern('__ember' + +new Date());
-
- var GUID_DESC = {
- writable: true,
- configurable: true,
- enumerable: false,
- value: null
- };
-
- exports.GUID_DESC = GUID_DESC;
- var nullDescriptor = {
- configurable: true,
- writable: true,
- enumerable: false,
- value: null
- };
-
- var GUID_KEY_PROPERTY = {
- name: GUID_KEY,
- descriptor: nullDescriptor
- };
-
- exports.GUID_KEY_PROPERTY = GUID_KEY_PROPERTY;
- /**
- Generates a new guid, optionally saving the guid to the object that you
- pass in. You will rarely need to use this method. Instead you should
- call `Ember.guidFor(obj)`, which return an existing guid if available.
-
- @private
- @method generateGuid
- @for Ember
- @param {Object} [obj] Object the guid will be used for. If passed in, the guid will
- be saved on the object and reused whenever you pass the same object
- again.
-
- If no object is passed, just generate a new guid.
- @param {String} [prefix] Prefix to place in front of the guid. Useful when you want to
- separate the guid into separate namespaces.
- @return {String} the guid
- */
-
- function generateGuid(obj, prefix) {
- if (!prefix) {
- prefix = GUID_PREFIX;
- }
-
- var ret = prefix + uuid();
- if (obj) {
- if (obj[GUID_KEY] === null) {
- obj[GUID_KEY] = ret;
- } else {
- GUID_DESC.value = ret;
- if (obj.__defineNonEnumerable) {
- obj.__defineNonEnumerable(GUID_KEY_PROPERTY);
- } else {
- Object.defineProperty(obj, GUID_KEY, GUID_DESC);
- }
- }
- }
- return ret;
- }
-
- /**
- Returns a unique id for the object. If the object does not yet have a guid,
- one will be assigned to it. You can call this on any object,
- `Ember.Object`-based or not, but be aware that it will add a `_guid`
- property.
-
- You can also use this method on DOM Element objects.
-
- @public
- @method guidFor
- @for Ember
- @param {Object} obj any object, string, number, Element, or primitive
- @return {String} the unique guid for this instance.
- */
-
- function guidFor(obj) {
- var type = typeof obj;
- var isObject = type === 'object' && obj !== null;
- var isFunction = type === 'function';
-
- if ((isObject || isFunction) && obj[GUID_KEY]) {
- return obj[GUID_KEY];
- }
-
- // special cases where we don't want to add a key to object
- if (obj === undefined) {
- return '(undefined)';
- }
-
- if (obj === null) {
- return '(null)';
- }
-
- var ret = undefined;
-
- // Don't allow prototype changes to String etc. to change the guidFor
- switch (type) {
- case 'number':
- ret = numberCache[obj];
-
- if (!ret) {
- ret = numberCache[obj] = 'nu' + obj;
- }
-
- return ret;
-
- case 'string':
- ret = stringCache[obj];
-
- if (!ret) {
- ret = stringCache[obj] = 'st' + uuid();
- }
-
- return ret;
-
- case 'boolean':
- return obj ? '(true)' : '(false)';
-
- default:
- if (obj === Object) {
- return '(Object)';
- }
-
- if (obj === Array) {
- return '(Array)';
- }
-
- ret = GUID_PREFIX + uuid();
-
- if (obj[GUID_KEY] === null) {
- obj[GUID_KEY] = ret;
- } else {
- GUID_DESC.value = ret;
-
- if (obj.__defineNonEnumerable) {
- obj.__defineNonEnumerable(GUID_KEY_PROPERTY);
- } else {
- Object.defineProperty(obj, GUID_KEY, GUID_DESC);
- }
- }
- return ret;
- }
- }
-
- var HAS_SUPER_PATTERN = /\.(_super|call\(this|apply\(this)/;
- var fnToString = Function.prototype.toString;
-
- var checkHasSuper = (function () {
- var sourceAvailable = fnToString.call(function () {
- return this;
- }).indexOf('return this') > -1;
-
- if (sourceAvailable) {
- return function checkHasSuper(func) {
- return HAS_SUPER_PATTERN.test(fnToString.call(func));
- };
- }
-
- return function checkHasSuper() {
- return true;
- };
- })();
-
- exports.checkHasSuper = checkHasSuper;
- function ROOT() {}
- ROOT.__hasSuper = false;
-
- function hasSuper(func) {
- if (func.__hasSuper === undefined) {
- func.__hasSuper = checkHasSuper(func);
- }
- return func.__hasSuper;
- }
-
- /**
- Wraps the passed function so that `this._super` will point to the superFunc
- when the function is invoked. This is the primitive we use to implement
- calls to super.
-
- @private
- @method wrap
- @for Ember
- @param {Function} func The function to call
- @param {Function} superFunc The super function.
- @return {Function} wrapped function.
- */
-
- function wrap(func, superFunc) {
- if (!hasSuper(func)) {
- return func;
- }
- // ensure an unwrapped super that calls _super is wrapped with a terminal _super
- if (!superFunc.wrappedFunction && hasSuper(superFunc)) {
- return _wrap(func, _wrap(superFunc, ROOT));
- }
- return _wrap(func, superFunc);
- }
-
- function _wrap(func, superFunc) {
- function superWrapper() {
- var orig = this._super;
- this._super = superFunc;
- var ret = func.apply(this, arguments);
- this._super = orig;
- return ret;
- }
-
- superWrapper.wrappedFunction = func;
- superWrapper.__ember_observes__ = func.__ember_observes__;
- superWrapper.__ember_observesBefore__ = func.__ember_observesBefore__;
- superWrapper.__ember_listens__ = func.__ember_listens__;
-
- return superWrapper;
- }
-
- /**
- Checks to see if the `methodName` exists on the `obj`.
-
- ```javascript
- let foo = { bar: function() { return 'bar'; }, baz: null };
-
- Ember.canInvoke(foo, 'bar'); // true
- Ember.canInvoke(foo, 'baz'); // false
- Ember.canInvoke(foo, 'bat'); // false
- ```
-
- @method canInvoke
- @for Ember
- @param {Object} obj The object to check for the method
- @param {String} methodName The method name to check for
- @return {Boolean}
- @private
- */
- function canInvoke(obj, methodName) {
- return !!(obj && typeof obj[methodName] === 'function');
- }
-
- /**
- Checks to see if the `methodName` exists on the `obj`,
- and if it does, invokes it with the arguments passed.
-
- ```javascript
- let d = new Date('03/15/2013');
-
- Ember.tryInvoke(d, 'getTime'); // 1363320000000
- Ember.tryInvoke(d, 'setFullYear', [2014]); // 1394856000000
- Ember.tryInvoke(d, 'noSuchMethod', [2014]); // undefined
- ```
-
- @method tryInvoke
- @for Ember
- @param {Object} obj The object to check for the method
- @param {String} methodName The method name to check for
- @param {Array} [args] The arguments to pass to the method
- @return {*} the return value of the invoked method or undefined if it cannot be invoked
- @public
- */
-
- function tryInvoke(obj, methodName, args) {
- if (canInvoke(obj, methodName)) {
- return args ? applyStr(obj, methodName, args) : applyStr(obj, methodName);
- }
- }
-
- // ........................................
- // TYPING & ARRAY MESSAGING
- //
-
- var objectToString = Object.prototype.toString;
-
- /**
- Forces the passed object to be part of an array. If the object is already
- an array, it will return the object. Otherwise, it will add the object to
- an array. If obj is `null` or `undefined`, it will return an empty array.
-
- ```javascript
- Ember.makeArray(); // []
- Ember.makeArray(null); // []
- Ember.makeArray(undefined); // []
- Ember.makeArray('lindsay'); // ['lindsay']
- Ember.makeArray([1, 2, 42]); // [1, 2, 42]
-
- let controller = Ember.ArrayProxy.create({ content: [] });
-
- Ember.makeArray(controller) === controller; // true
- ```
-
- @method makeArray
- @for Ember
- @param {Object} obj the object
- @return {Array}
- @private
- */
-
- function makeArray(obj) {
- if (obj === null || obj === undefined) {
- return [];
- }
- return Array.isArray(obj) ? obj : [obj];
- }
-
- /**
- Convenience method to inspect an object. This method will attempt to
- convert the object into a useful string description.
-
- It is a pretty simple implementation. If you want something more robust,
- use something like JSDump: https://github.com/NV/jsDump
-
- @method inspect
- @for Ember
- @param {Object} obj The object you want to inspect.
- @return {String} A description of the object
- @since 1.4.0
- @private
- */
-
- function inspect(obj) {
- if (obj === null) {
- return 'null';
- }
- if (obj === undefined) {
- return 'undefined';
- }
- if (Array.isArray(obj)) {
- return '[' + obj + ']';
- }
- // for non objects
- var type = typeof obj;
- if (type !== 'object' && type !== 'symbol') {
- return '' + obj;
- }
- // overridden toString
- if (typeof obj.toString === 'function' && obj.toString !== objectToString) {
- return obj.toString();
- }
-
- // Object.prototype.toString === {}.toString
- var v = undefined;
- var ret = [];
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- v = obj[key];
- if (v === 'toString') {
- continue;
- } // ignore useless items
- if (typeof v === 'function') {
- v = 'function() { ... }';
- }
-
- if (v && typeof v.toString !== 'function') {
- ret.push(key + ': ' + objectToString.call(v));
- } else {
- ret.push(key + ': ' + v);
- }
- }
- }
- return '{' + ret.join(', ') + '}';
- }
-
- /**
- @param {Object} t target
- @param {String} m method
- @param {Array} a args
- @private
- */
-
- function applyStr(t, m, a) {
- var l = a && a.length;
- if (!a || !l) {
- return t[m]();
- }
- switch (l) {
- case 1:
- return t[m](a[0]);
- case 2:
- return t[m](a[0], a[1]);
- case 3:
- return t[m](a[0], a[1], a[2]);
- case 4:
- return t[m](a[0], a[1], a[2], a[3]);
- case 5:
- return t[m](a[0], a[1], a[2], a[3], a[4]);
- default:
- return t[m].apply(t, a);
- }
- }
-
- function lookupDescriptor(obj, keyName) {
- var current = obj;
- while (current) {
- var descriptor = Object.getOwnPropertyDescriptor(current, keyName);
-
- if (descriptor) {
- return descriptor;
- }
-
- current = Object.getPrototypeOf(current);
- }
-
- return null;
- }
-
- // A `toString` util function that supports objects without a `toString`
- // method, e.g. an object created with `Object.create(null)`.
-
- function toString(obj) {
- if (obj && obj.toString) {
- return obj.toString();
- } else {
- return objectToString.call(obj);
- }
- }
-
- exports.GUID_KEY = GUID_KEY;
- exports.makeArray = makeArray;
- exports.canInvoke = canInvoke;
-});
-enifed('ember-metal/watch_key', ['exports', 'ember-metal/features', 'ember-metal/meta', 'ember-metal/properties', 'ember-metal/utils'], function (exports, _emberMetalFeatures, _emberMetalMeta, _emberMetalProperties, _emberMetalUtils) {
+enifed('ember-metal/watch_key', ['exports', 'ember-utils', 'ember-metal/features', 'ember-metal/meta', 'ember-metal/properties'], function (exports, _emberUtils, _emberMetalFeatures, _emberMetalMeta, _emberMetalProperties) {
'use strict';
exports.watchKey = watchKey;
exports.unwatchKey = unwatchKey;
@@ -11270,11 +9251,11 @@
// Future traveler, although this code looks scary. It merely exists in
// development to aid in development asertions. Production builds of
// ember strip this entire block out
handleMandatorySetter = function handleMandatorySetter(m, obj, keyName) {
- var descriptor = _emberMetalUtils.lookupDescriptor(obj, keyName);
+ var descriptor = _emberUtils.lookupDescriptor(obj, keyName);
var configurable = descriptor ? descriptor.configurable : true;
var isWritable = descriptor ? descriptor.writable : true;
var hasValue = descriptor ? 'value' in descriptor : true;
var possibleDesc = descriptor && descriptor.value;
var isDescriptor = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor;
@@ -11330,11 +9311,11 @@
// Some further context: Once a property is watched by ember, bypassing `set`
// for mutation, will bypass observation. This code exists to assert when
// that occurs, and attempt to provide more helpful feedback. The alternative
// is tricky to debug partially observable properties.
if (!desc && keyName in obj) {
- var maybeMandatoryDescriptor = _emberMetalUtils.lookupDescriptor(obj, keyName);
+ var maybeMandatoryDescriptor = _emberUtils.lookupDescriptor(obj, keyName);
if (maybeMandatoryDescriptor.set && maybeMandatoryDescriptor.set.isMandatorySetter) {
if (maybeMandatoryDescriptor.get && maybeMandatoryDescriptor.get.isInheritingGetter) {
var possibleValue = m.readInheritedValue('values', keyName);
if (possibleValue === _emberMetalMeta.UNDEFINED) {
@@ -11501,11 +9482,11 @@
}
}
}
}
});
-enifed('ember-metal/weak_map', ['exports', 'ember-metal/utils', 'ember-metal/meta'], function (exports, _emberMetalUtils, _emberMetalMeta) {
+enifed('ember-metal/weak_map', ['exports', 'ember-utils', 'ember-metal/meta'], function (exports, _emberUtils, _emberMetalMeta) {
'use strict';
exports.default = WeakMap;
var id = 0;
@@ -11533,11 +9514,11 @@
function WeakMap(iterable) {
if (!(this instanceof WeakMap)) {
throw new TypeError('Constructor WeakMap requires \'new\'');
}
- this._id = _emberMetalUtils.GUID_KEY + id++;
+ this._id = _emberUtils.GUID_KEY + id++;
if (iterable === null || iterable === undefined) {
return;
} else if (Array.isArray(iterable)) {
for (var i = 0; i < iterable.length; i++) {
@@ -11647,11 +9628,11 @@
EmberHTMLBars.precompile = EmberHandlebars.precompile = _emberTemplateCompilerSystemPrecompile.default;
EmberHTMLBars.compile = EmberHandlebars.compile = _emberTemplateCompilerSystemCompile.default;
EmberHTMLBars.registerPlugin = _emberTemplateCompilerSystemCompileOptions.registerPlugin;
});
// reexports
-enifed('ember-template-compiler/index', ['exports', 'container', 'ember-metal', 'ember-environment', 'ember/version', 'ember-template-compiler/compat', 'ember-template-compiler/system/bootstrap', 'ember-template-compiler/system/precompile', 'ember-template-compiler/system/compile', 'ember-template-compiler/system/compile-options', 'ember-template-compiler/plugins'], function (exports, _container, _emberMetal, _emberEnvironment, _emberVersion, _emberTemplateCompilerCompat, _emberTemplateCompilerSystemBootstrap, _emberTemplateCompilerSystemPrecompile, _emberTemplateCompilerSystemCompile, _emberTemplateCompilerSystemCompileOptions, _emberTemplateCompilerPlugins) {
+enifed('ember-template-compiler/index', ['exports', 'ember-metal', 'ember-environment', 'ember/version', 'ember-template-compiler/compat', 'ember-template-compiler/system/bootstrap', 'ember-template-compiler/system/precompile', 'ember-template-compiler/system/compile', 'ember-template-compiler/system/compile-options', 'ember-template-compiler/plugins'], function (exports, _emberMetal, _emberEnvironment, _emberVersion, _emberTemplateCompilerCompat, _emberTemplateCompilerSystemBootstrap, _emberTemplateCompilerSystemPrecompile, _emberTemplateCompilerSystemCompile, _emberTemplateCompilerSystemCompileOptions, _emberTemplateCompilerPlugins) {
'use strict';
// private API used by ember-cli-htmlbars to setup ENV and FEATURES
if (!_emberMetal.default.ENV) {
_emberMetal.default.ENV = _emberEnvironment.ENV;
@@ -12710,28 +10691,26 @@
}
return moduleInfo;
}
});
-enifed('ember-template-compiler/system/compile-options', ['exports', 'ember-template-compiler/plugins', 'ember-metal'], function (exports, _emberTemplateCompilerPlugins, _emberMetal) {
+enifed('ember-template-compiler/system/compile-options', ['exports', 'ember-utils', 'ember-template-compiler/plugins'], function (exports, _emberUtils, _emberTemplateCompilerPlugins) {
'use strict';
exports.default = compileOptions;
exports.registerPlugin = registerPlugin;
exports.removePlugin = removePlugin;
var USER_PLUGINS = [];
function compileOptions(_options) {
- var options = _emberMetal.assign({ meta: {} }, _options);
+ var options = _emberUtils.assign({ meta: {} }, _options);
// move `moduleName` into `meta` property
if (options.moduleName) {
var meta = options.meta;
meta.moduleName = options.moduleName;
-
- delete options.moduleName;
}
if (!options.plugins) {
options.plugins = { ast: [].concat(USER_PLUGINS, _emberTemplateCompilerPlugins.default) };
} else {
@@ -12834,19 +10813,794 @@
}
return glimmerPrecompile(templateString, _emberTemplateCompilerSystemCompileOptions.default(options));
}
});
+enifed("ember-utils/apply-str", ["exports"], function (exports) {
+ /**
+ @param {Object} t target
+ @param {String} m method
+ @param {Array} a args
+ @private
+ */
+ "use strict";
+
+ exports.default = applyStr;
+
+ function applyStr(t, m, a) {
+ var l = a && a.length;
+ if (!a || !l) {
+ return t[m]();
+ }
+ switch (l) {
+ case 1:
+ return t[m](a[0]);
+ case 2:
+ return t[m](a[0], a[1]);
+ case 3:
+ return t[m](a[0], a[1], a[2]);
+ case 4:
+ return t[m](a[0], a[1], a[2], a[3]);
+ case 5:
+ return t[m](a[0], a[1], a[2], a[3], a[4]);
+ default:
+ return t[m].apply(t, a);
+ }
+ }
+});
+enifed("ember-utils/assign", ["exports"], function (exports) {
+ /**
+ Copy properties from a source object to a target object.
+
+ ```javascript
+ var a = { first: 'Yehuda' };
+ var b = { last: 'Katz' };
+ var c = { company: 'Tilde Inc.' };
+ Ember.assign(a, b, c); // a === { first: 'Yehuda', last: 'Katz', company: 'Tilde Inc.' }, b === { last: 'Katz' }, c === { company: 'Tilde Inc.' }
+ ```
+
+ @method assign
+ @for Ember
+ @param {Object} original The object to assign into
+ @param {Object} ...args The objects to copy properties from
+ @return {Object}
+ @public
+ */
+ "use strict";
+
+ exports.default = assign;
+
+ function assign(original) {
+ for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ args[_key - 1] = arguments[_key];
+ }
+
+ for (var i = 0; i < args.length; i++) {
+ var arg = args[i];
+ if (!arg) {
+ continue;
+ }
+
+ var updates = Object.keys(arg);
+
+ for (var _i = 0; _i < updates.length; _i++) {
+ var prop = updates[_i];
+ original[prop] = arg[prop];
+ }
+ }
+
+ return original;
+ }
+});
+enifed('ember-utils/dictionary', ['exports', 'ember-utils/empty-object'], function (exports, _emberUtilsEmptyObject) {
+ 'use strict';
+
+ exports.default = makeDictionary;
+
+ // the delete is meant to hint at runtimes that this object should remain in
+ // dictionary mode. This is clearly a runtime specific hack, but currently it
+ // appears worthwhile in some usecases. Please note, these deletes do increase
+ // the cost of creation dramatically over a plain Object.create. And as this
+ // only makes sense for long-lived dictionaries that aren't instantiated often.
+
+ function makeDictionary(parent) {
+ var dict = undefined;
+ if (parent === null) {
+ dict = new _emberUtilsEmptyObject.default();
+ } else {
+ dict = Object.create(parent);
+ }
+ dict['_dict'] = null;
+ delete dict['_dict'];
+ return dict;
+ }
+});
+enifed("ember-utils/empty-object", ["exports"], function (exports) {
+ // This exists because `Object.create(null)` is absurdly slow compared
+ // to `new EmptyObject()`. In either case, you want a null prototype
+ // when you're treating the object instances as arbitrary dictionaries
+ // and don't want your keys colliding with build-in methods on the
+ // default object prototype.
+
+ "use strict";
+
+ var proto = Object.create(null, {
+ // without this, we will always still end up with (new
+ // EmptyObject()).constructor === Object
+ constructor: {
+ value: undefined,
+ enumerable: false,
+ writable: true
+ }
+ });
+
+ function EmptyObject() {}
+ EmptyObject.prototype = proto;
+ exports.default = EmptyObject;
+});
+enifed('ember-utils/guid', ['exports', 'ember-utils/intern'], function (exports, _emberUtilsIntern) {
+ 'use strict';
+
+ exports.uuid = uuid;
+ exports.generateGuid = generateGuid;
+ exports.guidFor = guidFor;
+
+ /**
+ Previously we used `Ember.$.uuid`, however `$.uuid` has been removed from
+ jQuery master. We'll just bootstrap our own uuid now.
+
+ @private
+ @return {Number} the uuid
+ */
+ var _uuid = 0;
+
+ /**
+ Generates a universally unique identifier. This method
+ is used internally by Ember for assisting with
+ the generation of GUID's and other unique identifiers.
+
+ @public
+ @return {Number} [description]
+ */
+
+ function uuid() {
+ return ++_uuid;
+ }
+
+ /**
+ Prefix used for guids through out Ember.
+ @private
+ @property GUID_PREFIX
+ @for Ember
+ @type String
+ @final
+ */
+ var GUID_PREFIX = 'ember';
+
+ // Used for guid generation...
+ var numberCache = [];
+ var stringCache = {};
+
+ /**
+ A unique key used to assign guids and other private metadata to objects.
+ If you inspect an object in your browser debugger you will often see these.
+ They can be safely ignored.
+
+ On browsers that support it, these properties are added with enumeration
+ disabled so they won't show up when you iterate over your properties.
+
+ @private
+ @property GUID_KEY
+ @for Ember
+ @type String
+ @final
+ */
+ var GUID_KEY = _emberUtilsIntern.default('__ember' + +new Date());
+
+ exports.GUID_KEY = GUID_KEY;
+ var GUID_DESC = {
+ writable: true,
+ configurable: true,
+ enumerable: false,
+ value: null
+ };
+
+ exports.GUID_DESC = GUID_DESC;
+ var nullDescriptor = {
+ configurable: true,
+ writable: true,
+ enumerable: false,
+ value: null
+ };
+
+ var GUID_KEY_PROPERTY = {
+ name: GUID_KEY,
+ descriptor: nullDescriptor
+ };
+
+ exports.GUID_KEY_PROPERTY = GUID_KEY_PROPERTY;
+ /**
+ Generates a new guid, optionally saving the guid to the object that you
+ pass in. You will rarely need to use this method. Instead you should
+ call `Ember.guidFor(obj)`, which return an existing guid if available.
+
+ @private
+ @method generateGuid
+ @for Ember
+ @param {Object} [obj] Object the guid will be used for. If passed in, the guid will
+ be saved on the object and reused whenever you pass the same object
+ again.
+
+ If no object is passed, just generate a new guid.
+ @param {String} [prefix] Prefix to place in front of the guid. Useful when you want to
+ separate the guid into separate namespaces.
+ @return {String} the guid
+ */
+
+ function generateGuid(obj, prefix) {
+ if (!prefix) {
+ prefix = GUID_PREFIX;
+ }
+
+ var ret = prefix + uuid();
+ if (obj) {
+ if (obj[GUID_KEY] === null) {
+ obj[GUID_KEY] = ret;
+ } else {
+ GUID_DESC.value = ret;
+ if (obj.__defineNonEnumerable) {
+ obj.__defineNonEnumerable(GUID_KEY_PROPERTY);
+ } else {
+ Object.defineProperty(obj, GUID_KEY, GUID_DESC);
+ }
+ }
+ }
+ return ret;
+ }
+
+ /**
+ Returns a unique id for the object. If the object does not yet have a guid,
+ one will be assigned to it. You can call this on any object,
+ `Ember.Object`-based or not, but be aware that it will add a `_guid`
+ property.
+
+ You can also use this method on DOM Element objects.
+
+ @public
+ @method guidFor
+ @for Ember
+ @param {Object} obj any object, string, number, Element, or primitive
+ @return {String} the unique guid for this instance.
+ */
+
+ function guidFor(obj) {
+ var type = typeof obj;
+ var isObject = type === 'object' && obj !== null;
+ var isFunction = type === 'function';
+
+ if ((isObject || isFunction) && obj[GUID_KEY]) {
+ return obj[GUID_KEY];
+ }
+
+ // special cases where we don't want to add a key to object
+ if (obj === undefined) {
+ return '(undefined)';
+ }
+
+ if (obj === null) {
+ return '(null)';
+ }
+
+ var ret = undefined;
+
+ // Don't allow prototype changes to String etc. to change the guidFor
+ switch (type) {
+ case 'number':
+ ret = numberCache[obj];
+
+ if (!ret) {
+ ret = numberCache[obj] = 'nu' + obj;
+ }
+
+ return ret;
+
+ case 'string':
+ ret = stringCache[obj];
+
+ if (!ret) {
+ ret = stringCache[obj] = 'st' + uuid();
+ }
+
+ return ret;
+
+ case 'boolean':
+ return obj ? '(true)' : '(false)';
+
+ default:
+ if (obj === Object) {
+ return '(Object)';
+ }
+
+ if (obj === Array) {
+ return '(Array)';
+ }
+
+ ret = GUID_PREFIX + uuid();
+
+ if (obj[GUID_KEY] === null) {
+ obj[GUID_KEY] = ret;
+ } else {
+ GUID_DESC.value = ret;
+
+ if (obj.__defineNonEnumerable) {
+ obj.__defineNonEnumerable(GUID_KEY_PROPERTY);
+ } else {
+ Object.defineProperty(obj, GUID_KEY, GUID_DESC);
+ }
+ }
+ return ret;
+ }
+ }
+});
+enifed('ember-utils/index', ['exports', 'ember-utils/symbol', 'ember-utils/owner', 'ember-utils/assign', 'ember-utils/empty-object', 'ember-utils/dictionary', 'ember-utils/guid', 'ember-utils/intern', 'ember-utils/super', 'ember-utils/inspect', 'ember-utils/lookup-descriptor', 'ember-utils/invoke', 'ember-utils/make-array', 'ember-utils/apply-str', 'ember-utils/to-string'], function (exports, _emberUtilsSymbol, _emberUtilsOwner, _emberUtilsAssign, _emberUtilsEmptyObject, _emberUtilsDictionary, _emberUtilsGuid, _emberUtilsIntern, _emberUtilsSuper, _emberUtilsInspect, _emberUtilsLookupDescriptor, _emberUtilsInvoke, _emberUtilsMakeArray, _emberUtilsApplyStr, _emberUtilsToString) {
+ /*
+ This package will be eagerly parsed and should have no dependencies on external
+ packages.
+
+ It is intended to be used to share utility methods that will be needed
+ by every Ember application (and is **not** a dumping ground of useful utilities).
+
+ Utility methods that are needed in < 80% of cases should be placed
+ elsewhere (so they can be lazily evaluated / parsed).
+ */
+ 'use strict';
+
+ exports.symbol = _emberUtilsSymbol.default;
+ exports.getOwner = _emberUtilsOwner.getOwner;
+ exports.setOwner = _emberUtilsOwner.setOwner;
+ exports.OWNER = _emberUtilsOwner.OWNER;
+ exports.assign = _emberUtilsAssign.default;
+ exports.EmptyObject = _emberUtilsEmptyObject.default;
+ exports.dictionary = _emberUtilsDictionary.default;
+ exports.uuid = _emberUtilsGuid.uuid;
+ exports.GUID_KEY = _emberUtilsGuid.GUID_KEY;
+ exports.GUID_DESC = _emberUtilsGuid.GUID_DESC;
+ exports.GUID_KEY_PROPERTY = _emberUtilsGuid.GUID_KEY_PROPERTY;
+ exports.generateGuid = _emberUtilsGuid.generateGuid;
+ exports.guidFor = _emberUtilsGuid.guidFor;
+ exports.intern = _emberUtilsIntern.default;
+ exports.checkHasSuper = _emberUtilsSuper.checkHasSuper;
+ exports.ROOT = _emberUtilsSuper.ROOT;
+ exports.wrap = _emberUtilsSuper.wrap;
+ exports.inspect = _emberUtilsInspect.default;
+ exports.lookupDescriptor = _emberUtilsLookupDescriptor.default;
+ exports.canInvoke = _emberUtilsInvoke.canInvoke;
+ exports.tryInvoke = _emberUtilsInvoke.tryInvoke;
+ exports.makeArray = _emberUtilsMakeArray.default;
+ exports.applyStr = _emberUtilsApplyStr.default;
+ exports.toString = _emberUtilsToString.default;
+});
+enifed('ember-utils/inspect', ['exports'], function (exports) {
+ 'use strict';
+
+ exports.default = inspect;
+ var objectToString = Object.prototype.toString;
+
+ /**
+ Convenience method to inspect an object. This method will attempt to
+ convert the object into a useful string description.
+
+ It is a pretty simple implementation. If you want something more robust,
+ use something like JSDump: https://github.com/NV/jsDump
+
+ @method inspect
+ @for Ember
+ @param {Object} obj The object you want to inspect.
+ @return {String} A description of the object
+ @since 1.4.0
+ @private
+ */
+
+ function inspect(obj) {
+ if (obj === null) {
+ return 'null';
+ }
+ if (obj === undefined) {
+ return 'undefined';
+ }
+ if (Array.isArray(obj)) {
+ return '[' + obj + ']';
+ }
+ // for non objects
+ var type = typeof obj;
+ if (type !== 'object' && type !== 'symbol') {
+ return '' + obj;
+ }
+ // overridden toString
+ if (typeof obj.toString === 'function' && obj.toString !== objectToString) {
+ return obj.toString();
+ }
+
+ // Object.prototype.toString === {}.toString
+ var v = undefined;
+ var ret = [];
+ for (var key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ v = obj[key];
+ if (v === 'toString') {
+ continue;
+ } // ignore useless items
+ if (typeof v === 'function') {
+ v = 'function() { ... }';
+ }
+
+ if (v && typeof v.toString !== 'function') {
+ ret.push(key + ': ' + objectToString.call(v));
+ } else {
+ ret.push(key + ': ' + v);
+ }
+ }
+ }
+ return '{' + ret.join(', ') + '}';
+ }
+});
+enifed("ember-utils/intern", ["exports"], function (exports) {
+ /**
+ Strongly hint runtimes to intern the provided string.
+
+ When do I need to use this function?
+
+ For the most part, never. Pre-mature optimization is bad, and often the
+ runtime does exactly what you need it to, and more often the trade-off isn't
+ worth it.
+
+ Why?
+
+ Runtimes store strings in at least 2 different representations:
+ Ropes and Symbols (interned strings). The Rope provides a memory efficient
+ data-structure for strings created from concatenation or some other string
+ manipulation like splitting.
+
+ Unfortunately checking equality of different ropes can be quite costly as
+ runtimes must resort to clever string comparison algorithms. These
+ algorithms typically cost in proportion to the length of the string.
+ Luckily, this is where the Symbols (interned strings) shine. As Symbols are
+ unique by their string content, equality checks can be done by pointer
+ comparison.
+
+ How do I know if my string is a rope or symbol?
+
+ Typically (warning general sweeping statement, but truthy in runtimes at
+ present) static strings created as part of the JS source are interned.
+ Strings often used for comparisons can be interned at runtime if some
+ criteria are met. One of these criteria can be the size of the entire rope.
+ For example, in chrome 38 a rope longer then 12 characters will not
+ intern, nor will segments of that rope.
+
+ Some numbers: http://jsperf.com/eval-vs-keys/8
+
+ Known Trickâ„¢
+
+ @private
+ @return {String} interned version of the provided string
+ */
+ "use strict";
+
+ exports.default = intern;
+
+ function intern(str) {
+ var obj = {};
+ obj[str] = 1;
+ for (var key in obj) {
+ if (key === str) {
+ return key;
+ }
+ }
+ return str;
+ }
+});
+enifed('ember-utils/invoke', ['exports', 'ember-utils/apply-str'], function (exports, _emberUtilsApplyStr) {
+ 'use strict';
+
+ exports.canInvoke = canInvoke;
+ exports.tryInvoke = tryInvoke;
+
+ /**
+ Checks to see if the `methodName` exists on the `obj`.
+
+ ```javascript
+ let foo = { bar: function() { return 'bar'; }, baz: null };
+
+ Ember.canInvoke(foo, 'bar'); // true
+ Ember.canInvoke(foo, 'baz'); // false
+ Ember.canInvoke(foo, 'bat'); // false
+ ```
+
+ @method canInvoke
+ @for Ember
+ @param {Object} obj The object to check for the method
+ @param {String} methodName The method name to check for
+ @return {Boolean}
+ @private
+ */
+
+ function canInvoke(obj, methodName) {
+ return !!(obj && typeof obj[methodName] === 'function');
+ }
+
+ /**
+ Checks to see if the `methodName` exists on the `obj`,
+ and if it does, invokes it with the arguments passed.
+
+ ```javascript
+ let d = new Date('03/15/2013');
+
+ Ember.tryInvoke(d, 'getTime'); // 1363320000000
+ Ember.tryInvoke(d, 'setFullYear', [2014]); // 1394856000000
+ Ember.tryInvoke(d, 'noSuchMethod', [2014]); // undefined
+ ```
+
+ @method tryInvoke
+ @for Ember
+ @param {Object} obj The object to check for the method
+ @param {String} methodName The method name to check for
+ @param {Array} [args] The arguments to pass to the method
+ @return {*} the return value of the invoked method or undefined if it cannot be invoked
+ @public
+ */
+
+ function tryInvoke(obj, methodName, args) {
+ if (canInvoke(obj, methodName)) {
+ return args ? _emberUtilsApplyStr.default(obj, methodName, args) : _emberUtilsApplyStr.default(obj, methodName);
+ }
+ }
+});
+enifed("ember-utils/lookup-descriptor", ["exports"], function (exports) {
+ "use strict";
+
+ exports.default = lookupDescriptor;
+
+ function lookupDescriptor(obj, keyName) {
+ var current = obj;
+ while (current) {
+ var descriptor = Object.getOwnPropertyDescriptor(current, keyName);
+
+ if (descriptor) {
+ return descriptor;
+ }
+
+ current = Object.getPrototypeOf(current);
+ }
+
+ return null;
+ }
+});
+enifed("ember-utils/make-array", ["exports"], function (exports) {
+ /**
+ Forces the passed object to be part of an array. If the object is already
+ an array, it will return the object. Otherwise, it will add the object to
+ an array. If obj is `null` or `undefined`, it will return an empty array.
+
+ ```javascript
+ Ember.makeArray(); // []
+ Ember.makeArray(null); // []
+ Ember.makeArray(undefined); // []
+ Ember.makeArray('lindsay'); // ['lindsay']
+ Ember.makeArray([1, 2, 42]); // [1, 2, 42]
+
+ let controller = Ember.ArrayProxy.create({ content: [] });
+
+ Ember.makeArray(controller) === controller; // true
+ ```
+
+ @method makeArray
+ @for Ember
+ @param {Object} obj the object
+ @return {Array}
+ @private
+ */
+ "use strict";
+
+ exports.default = makeArray;
+
+ function makeArray(obj) {
+ if (obj === null || obj === undefined) {
+ return [];
+ }
+ return Array.isArray(obj) ? obj : [obj];
+ }
+});
+enifed('ember-utils/owner', ['exports', 'ember-utils/symbol'], function (exports, _emberUtilsSymbol) {
+ /**
+ @module ember
+ @submodule ember-runtime
+ */
+
+ 'use strict';
+
+ exports.getOwner = getOwner;
+ exports.setOwner = setOwner;
+ var OWNER = _emberUtilsSymbol.default('OWNER');
+
+ exports.OWNER = OWNER;
+ /**
+ Framework objects in an Ember application (components, services, routes, etc.)
+ are created via a factory and dependency injection system. Each of these
+ objects is the responsibility of an "owner", which handled its
+ instantiation and manages its lifetime.
+
+ `getOwner` fetches the owner object responsible for an instance. This can
+ be used to lookup or resolve other class instances, or register new factories
+ into the owner.
+
+ For example, this component dynamically looks up a service based on the
+ `audioType` passed as an attribute:
+
+ ```
+ // app/components/play-audio.js
+ import Ember from 'ember';
+
+ // Usage:
+ //
+ // {{play-audio audioType=model.audioType audioFile=model.file}}
+ //
+ export default Ember.Component.extend({
+ audioService: Ember.computed('audioType', function() {
+ let owner = Ember.getOwner(this);
+ return owner.lookup(`service:${this.get('audioType')}`);
+ }),
+ click() {
+ let player = this.get('audioService');
+ player.play(this.get('audioFile'));
+ }
+ });
+ ```
+
+ @method getOwner
+ @for Ember
+ @param {Object} object An object with an owner.
+ @return {Object} An owner object.
+ @since 2.3.0
+ @public
+ */
+
+ function getOwner(object) {
+ return object[OWNER];
+ }
+
+ /**
+ `setOwner` forces a new owner on a given object instance. This is primarily
+ useful in some testing cases.
+
+ @method setOwner
+ @for Ember
+ @param {Object} object An object with an owner.
+ @return {Object} An owner object.
+ @since 2.3.0
+ @public
+ */
+
+ function setOwner(object, owner) {
+ object[OWNER] = owner;
+ }
+});
+enifed('ember-utils/super', ['exports'], function (exports) {
+ 'use strict';
+
+ exports.wrap = wrap;
+ var HAS_SUPER_PATTERN = /\.(_super|call\(this|apply\(this)/;
+ var fnToString = Function.prototype.toString;
+
+ var checkHasSuper = (function () {
+ var sourceAvailable = fnToString.call(function () {
+ return this;
+ }).indexOf('return this') > -1;
+
+ if (sourceAvailable) {
+ return function checkHasSuper(func) {
+ return HAS_SUPER_PATTERN.test(fnToString.call(func));
+ };
+ }
+
+ return function checkHasSuper() {
+ return true;
+ };
+ })();
+
+ exports.checkHasSuper = checkHasSuper;
+ function ROOT() {}
+ ROOT.__hasSuper = false;
+
+ function hasSuper(func) {
+ if (func.__hasSuper === undefined) {
+ func.__hasSuper = checkHasSuper(func);
+ }
+ return func.__hasSuper;
+ }
+
+ /**
+ Wraps the passed function so that `this._super` will point to the superFunc
+ when the function is invoked. This is the primitive we use to implement
+ calls to super.
+
+ @private
+ @method wrap
+ @for Ember
+ @param {Function} func The function to call
+ @param {Function} superFunc The super function.
+ @return {Function} wrapped function.
+ */
+
+ function wrap(func, superFunc) {
+ if (!hasSuper(func)) {
+ return func;
+ }
+ // ensure an unwrapped super that calls _super is wrapped with a terminal _super
+ if (!superFunc.wrappedFunction && hasSuper(superFunc)) {
+ return _wrap(func, _wrap(superFunc, ROOT));
+ }
+ return _wrap(func, superFunc);
+ }
+
+ function _wrap(func, superFunc) {
+ function superWrapper() {
+ var orig = this._super;
+ this._super = superFunc;
+ var ret = func.apply(this, arguments);
+ this._super = orig;
+ return ret;
+ }
+
+ superWrapper.wrappedFunction = func;
+ superWrapper.__ember_observes__ = func.__ember_observes__;
+ superWrapper.__ember_observesBefore__ = func.__ember_observesBefore__;
+ superWrapper.__ember_listens__ = func.__ember_listens__;
+
+ return superWrapper;
+ }
+});
+enifed('ember-utils/symbol', ['exports', 'ember-utils/guid', 'ember-utils/intern'], function (exports, _emberUtilsGuid, _emberUtilsIntern) {
+ 'use strict';
+
+ exports.default = symbol;
+
+ function symbol(debugName) {
+ // TODO: Investigate using platform symbols, but we do not
+ // want to require non-enumerability for this API, which
+ // would introduce a large cost.
+
+ return _emberUtilsIntern.default(debugName + ' [id=' + _emberUtilsGuid.GUID_KEY + Math.floor(Math.random() * new Date()) + ']');
+ }
+});
+enifed("ember-utils/to-string", ["exports"], function (exports) {
+ "use strict";
+
+ exports.default = toString;
+ var objectToString = Object.prototype.toString;
+
+ /*
+ A `toString` util function that supports objects without a `toString`
+ method, e.g. an object created with `Object.create(null)`.
+ */
+
+ function toString(obj) {
+ if (obj && obj.toString) {
+ return obj.toString();
+ } else {
+ return objectToString.call(obj);
+ }
+ }
+});
enifed("ember/features", ["exports"], function (exports) {
"use strict";
exports.default = { "features-stripped-test": false, "ember-routing-route-configured-query-params": false, "ember-libraries-isregistered": false, "ember-runtime-computed-uniq-by": true, "ember-improved-instrumentation": false, "ember-runtime-enumerable-includes": true, "ember-string-ishtmlsafe": true, "ember-testing-check-waiters": true, "ember-metal-weakmap": false, "ember-glimmer-allow-backtracking-rerender": false, "mandatory-setter": true, "ember-glimmer-detect-backtracking-rerender": true };
});
enifed("ember/version", ["exports"], function (exports) {
"use strict";
- exports.default = "2.9.0-beta.1";
+ exports.default = "2.9.0-beta.2";
});
enifed("glimmer-compiler/index", ["exports", "glimmer-compiler/lib/compiler", "glimmer-compiler/lib/template-visitor"], function (exports, _glimmerCompilerLibCompiler, _glimmerCompilerLibTemplateVisitor) {
"use strict";
exports.precompile = _glimmerCompilerLibCompiler.precompile;
@@ -14516,11 +13270,11 @@
function isModified(value) {
return value !== NOT_MODIFIED;
}
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcmVmZXJlbmNlL2xpYi92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBa0JPLFFBQU0sUUFBUSxHQUFhLENBQUMsQ0FBQzs7QUFDN0IsUUFBTSxPQUFPLEdBQWMsQ0FBQyxDQUFDOztBQUM3QixRQUFNLFFBQVEsR0FBYSxHQUFHLENBQUM7OztRQUVoQyxXQUFBO2lCQUFBLFdBQUE7O0FBQUEsbUJBQUEsV0FHSixRQUFRLEdBQUEsa0JBQUMsUUFBa0IsRUFBQTtBQUN6QixtQkFBTyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssUUFBUSxDQUFDO1NBQ2xDOztlQUxHLFdBQUE7Ozs7O0FBUU4sUUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDOztRQUVsQixZQUFvQjs4QkFBcEIsWUFBb0I7O0FBR3hCLGlCQUhJLFlBQW9CLEdBR1E7Z0JBQXBCLFFBQVEseURBQUcsU0FBUzs7QUFDOUIsbUNBQU8sQ0FBQztBQUNSLGdCQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztTQUMxQjs7QUFORyxvQkFBb0IsV0FReEIsS0FBSyxHQUFBLGlCQUFBO0FBQ0gsbUJBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN0Qjs7QUFWRyxvQkFBb0IsV0FZeEIsS0FBSyxHQUFBLGlCQUFBO0FBQ0gsZ0JBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxTQUFTLENBQUM7U0FDN0I7O2VBZEcsWUFBb0I7T0FBUSxXQUFXOzs7O0FBaUJ2QyxhQUFBLGFBQUEsQ0FBd0IsTUFBMEIsRUFBQTtBQUN0RCxZQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFFbkIsYUFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxnQkFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN4QixnQkFB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LFNBQVM7O0FBQ2YsZ0JBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM5QixnQkFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLE9BQU8sWUFBWSxDQUFDO0FBQzdDLGdCQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUV2QixtQkFBTyxLQUFLLENBQUM7U0FDZDs7QUF0Q0csc0JBQUEsV0F3Q0ksVUFBVSxHQUFBLHNCQUFBO2dCQUNWLFNBQVMsR0FBSyxJQUFJLENBQWxCLFNBQVM7O0FBRWYsZ0JBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9DLGdCQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUMsZ0JBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBRXhCLG1CQUFPLEtBQUssQ0FBQztTQUNkOztlQWhERyxjQUFBOzs7OztBQXVETixRQUFNLFlBQVksR0FBZ0Isc0NBQXNDLENBQUM7O0FBRW5FLGFBQUEsVUFBQSxDQUF3QixLQUFvQixFQUFBO0FBQ2hELGVBQU8sS0FBSyxLQUFLLFlBQVksQ0FBQztLQUMvQiIsImZpbGUiOiJ2YWxpZGF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlZmVyZW5jZSwgeyBQYXRoUmVmZXJlbmNlIH0gZnJvbSAnLi9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgT3BhcXVlLCBTbGljZSwgTGlua2VkTGlzdE5vZGUgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VGFnPFQ+IGV4dGVuZHMgUmVmZXJlbmNlPFQ+IHtcbiAgdmFsdWUoKTogVDtcbiAgdmFsaWRhdGUoc25hcHNob3Q6IFQpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZ2dlZDxUPiB7XG4gIHRhZzogRW50aXR5VGFnPFQ+O1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFJldmlzaW9uID0gbnVtYmVyO1xuXG5leHBvcnQgY29uc3QgQ09OU1RBTlQ6IFJldmlzaW9uID0gMDtcbmV4cG9ydCBjb25zdCBJTklUSUFMOiAgUmV2aXNpb24gPSAxO1xuZXhwb3J0IGNvbnN0IFZPTEFUSUxFOiBSZXZpc2lvbiA9IE5hTjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJldmlzaW9uVGFnIGltcGxlbWVudHMgUmV2aXNpb25UYWcge1xuICBhYnN0cmFjdCB2YWx1ZSgpOiBSZXZpc2lvbjtcblxuICB2YWxpZGF0ZShzbmFwc2hvdDogUmV2aXNpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSgpID09PSBzbmFwc2hvdDtcbiAgfVxufVxuXG5sZXQgJFJFVklTSU9OID0gSU5JVElBTDtcblxuZXhwb3J0IGNsYXNzIERpcnR5YWJsZVRhZyBleHRlbmRzIFJldmlzaW9uVGFnIHtcbiAgcHJpdmF0ZSByZXZpc2lvbjogUmV2aXNpb247XG5cbiAgY29uc3RydWN0b3IocmV2aXNpb24gPSAkUkVWSVNJT04pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucmV2aXNpb24gPSByZXZpc2lvbjtcbiAgfVxuXG4gIHZhbHVlKCk6IFJldmlzaW9uIHtcbiAgICByZXR1cm4gdGhpcy5yZXZpc2lvbjtcbiAgfVxuXG4gIGRpcnR5KCkge1xuICAgIHRoaXMucmV2aXNpb24gPSArKyRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZVRhZ2dlZCh0YWdnZWQ6IFRhZ2dlZDxSZXZpc2lvbj5bXSk6IFJldmlzaW9uVGFnIHtcbiAgbGV0IG9wdGltaXplZCA9IFtdO1xuXG4gIGZvciAobGV0IGk9MCwgbD10YWdnZWQubGVuZ3RoOyBpPGw7IGkrKykge1xuICAgIGxldCB0YWcgPSB0YWdnZWRbaV0udGFnO1xuICAgIGlmICh0YWcgPT09IFZPTEFUSUxFX1RBRykgcmV0dXJuIFZPTEFUSUxFX1RBRztcbiAgICBpZiAodGFnID09PSBDT05TVEFOVF9UQUcpIGNvbnRpbnVlO1xuICAgIG9wdGltaXplZC5wdXNoKHRhZyk7XG4gIH1cblxuICByZXR1cm4gX2NvbWJpbmUob3B0aW1pemVkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVTbGljZShzbGljZTogU2xpY2U8VGFnZ2VkPFJldmlzaW9uPiAmIExpbmtlZExpc3ROb2RlPik6IFJldmlzaW9uVGFnIHtcbiAgbGV0IG9wdGltaXplZCA9IFtdO1xuXG4gIGxldCBub2RlID0gc2xpY2UuaGVhZCgpO1xuXG4gIHdoaWxlKG5vZGUgIT09IG51bGwpIHtcbiAgICBsZXQgdGFnID0gbm9kZS50YWc7XG5cbiAgICBpZiAodGFnID09PSBWT0xBVElMRV9UQUcpIHJldHVybiBWT0xBVElMRV9UQUc7XG4gICAgaWYgKHRhZyAhPT0gQ09OU1RBTlRfVEFHKSBvcHRpbWl6ZWQucHVzaCh0YWcpO1xuXG4gICAgbm9kZSA9IHNsaWNlLm5leHROb2RlKG5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIF9jb21iaW5lKG9wdGltaXplZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhZ3M6IFJldmlzaW9uVGFnW10pOiBSZXZpc2lvblRhZyB7XG4gIGxldCBvcHRpbWl6ZWQgPSBbXTtcblxuICBmb3IgKGxldCBpPTAsIGw9dGFncy5sZW5ndGg7IGk8bDsgaSsrKSB7XG4gICAgbGV0IHRhZyA9IHRhZ3NbaV07XG4gICAgaWYgKHRhZyA9PT0gVk9MQVRJTEVfVEFHKSByZXR1cm4gVk9MQVRJTEVfVEFHO1xuICAgIGlmICh0YWcgPT09IENPTlNUQU5UX1RBRykgY29udGludWU7XG4gICAgb3B0aW1pemVkLnB1c2godGFnKTtcbiAgfVxuXG4gIHJldHVybiBfY29tYmluZShvcHRpbWl6ZWQpO1xufVxuXG5mdW5jdGlvbiBfY29tYmluZSh0YWdzOiBSZXZpc2lvblRhZ1tdKTogUmV2aXNpb25UYWcge1xuICBzd2l0Y2ggKHRhZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gdGFnc1swXTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gbmV3IFRhZ3NQYWlyKHRhZ3NbMF0sIHRhZ3NbMV0pO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbmV3IFRhZ3NDb21iaW5hdG9yKHRhZ3MpO1xuICB9O1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2FjaGVkVGFnIGV4dGVuZHMgUmV2aXNpb25UYWcge1xuICBwcml2YXRlIGxhc3RDaGVja2VkOiBSZXZpc2lvbiA9IG51bGw7XG4gIHByaXZhdGUgbGFzdFZhbHVlOiBSZXZpc2lvbiA9IG51bGw7XG5cbiAgdmFsdWUoKTogUmV2aXNpb24ge1xuICAgIGxldCB7IGxhc3RDaGVja2VkLCBsYXN0VmFsdWUgfSA9IHRoaXM7XG5cbiAgICBpZiAobGFzdENoZWNrZWQgIT09ICRSRVZJU0lPTikge1xuICAgICAgdGhpcy5sYXN0Q2hlY2tlZCA9ICRSRVZJU0lPTjtcbiAgICAgIHRoaXMubGFzdFZhbHVlID0gbGFzdFZhbHVlID0gdGhpcy5jb21wdXRlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubGFzdFZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGludmFsaWRhdGUoKSB7XG4gICAgdGhpcy5sYXN0Q2hlY2tlZCA9IG51bGw7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY29tcHV0ZSgpOiBSZXZpc2lvbjtcbn1cblxuY2xhc3MgVGFnc1BhaXIgZXh0ZW5kcyBDYWNoZWRUYWcge1xuICBwcml2YXRlIGZpcnN0OiBSZXZpc2lvblRhZztcbiAgcHJpdmF0ZSBzZWNvbmQ6IFJldmlzaW9uVGFnO1xuXG4gIGNvbnN0cnVjdG9yKGZpcnN0OiBSZXZpc2lvblRhZywgc2Vjb25kOiBSZXZpc2lvblRhZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5maXJzdCA9IGZpcnN0O1xuICAgIHRoaXMuc2Vjb25kID0gc2Vjb25kO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbXB1dGUoKTogUmV2aXNpb24ge1xuICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmZpcnN0LnZhbHVlKCksIHRoaXMuc2Vjb25kLnZhbHVlKCkpO1xuICB9XG59XG5cbmNsYXNzIFRhZ3NDb21iaW5hdG9yIGV4dGVuZHMgQ2FjaGVkVGFnIHtcbiAgcHJpdmF0ZSB0YWdzOiBSZXZpc2lvblRhZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHRhZ3M6IFJldmlzaW9uVGFnW10pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFncyA9IHRhZ3M7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZSgpOiBSZXZpc2lvbiB7XG4gICAgbGV0IHsgdGFncyB9ID0gdGhpcztcblxuICAgIGxldCBtYXggPSAtMTtcblxuICAgIGZvciAobGV0IGk9MDsgaTx0YWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgdmFsdWUgPSB0YWdzW2ldLnZhbHVlKCk7XG4gICAgICBtYXggPSBNYXRoLm1heCh2YWx1ZSwgbWF4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF4O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGFibGVUYWcgZXh0ZW5kcyBDYWNoZWRUYWcge1xuICBwcml2YXRlIHRhZzogUmV2aXNpb25UYWc7XG4gIHByaXZhdGUgbGFzdFVwZGF0ZWQ6IFJldmlzaW9uO1xuXG4gIGNvbnN0cnVjdG9yKHRhZzogUmV2aXNpb25UYWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gdGFnO1xuICAgIHRoaXMubGFzdFVwZGF0ZWQgPSBJTklUSUFMO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbXB1dGUoKTogUmV2aXNpb24ge1xuICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmxhc3RVcGRhdGVkLCB0aGlzLnRhZy52YWx1ZSgpKTtcbiAgfVxuXG4gIHVwZGF0ZSh0YWc6IFJldmlzaW9uVGFnKSB7XG4gICAgaWYgKHRhZyAhPT0gdGhpcy50YWcpIHtcbiAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgdGhpcy5sYXN0VXBkYXRlZCA9ICRSRVZJU0lPTjtcbiAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgIH1cbiAgfVxufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT05TVEFOVF9UQUc6IFJldmlzaW9uVGFnID0gbmV3IChcbiAgY2xhc3MgQ29uc3RhbnRUYWcgZXh0ZW5kcyBSZXZpc2lvblRhZyB7XG4gICAgdmFsdWUoKTogUmV2aXNpb24ge1xuICAgICAgcmV0dXJuIENPTlNUQU5UO1xuICAgIH1cbiAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IFZPTEFUSUxFX1RBRzogUmV2aXNpb25UYWcgPSBuZXcgKFxuICBjbGFzcyBWb2xhdGlsZVRhZyBleHRlbmRzIFJldmlzaW9uVGFnIHtcbiAgICB2YWx1ZSgpOiBSZXZpc2lvbiB7XG4gICAgICByZXR1cm4gVk9MQVRJTEU7XG4gICAgfVxuICB9XG4pO1xuXG5leHBvcnQgY29uc3QgQ1VSUkVOVF9UQUc6IERpcnR5YWJsZVRhZyA9IG5ldyAoXG4gIGNsYXNzIEN1cnJlbnRUYWcgZXh0ZW5kcyBEaXJ0eWFibGVUYWcge1xuICAgIHZhbHVlKCk6IFJldmlzaW9uIHtcbiAgICAgIHJldHVybiAkUkVWSVNJT047XG4gICAgfVxuICB9XG4pO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbmVkUmVmZXJlbmNlPFQ+IGV4dGVuZHMgUmVmZXJlbmNlPFQ+LCBUYWdnZWQ8UmV2aXNpb24+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxUPiBleHRlbmRzIFBhdGhSZWZlcmVuY2U8VD4sIFRhZ2dlZDxSZXZpc2lvbj4ge1xuICBnZXQocHJvcGVydHk6IHN0cmluZyk6IFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENhY2hlZFJlZmVyZW5jZTxUPiBpbXBsZW1lbnRzIFZlcnNpb25lZFJlZmVyZW5jZTxUPiB7XG4gIHB1YmxpYyBhYnN0cmFjdCB0YWc6IFJldmlzaW9uVGFnO1xuXG4gIHByaXZhdGUgbGFzdFJldmlzaW9uOiBSZXZpc2lvbiA9IG51bGw7XG4gIHByaXZhdGUgbGFzdFZhbHVlOiBUID0gbnVsbDtcblxuICB2YWx1ZSgpOiBUIHtcbiAgICBsZXQgeyB0YWcsIGxhc3RSZXZpc2lvbiwgbGFzdFZhbHVlIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFsYXN0UmV2aXNpb24gfHwgIXRhZy52YWxpZGF0ZShsYXN0UmV2aXNpb24pKSB7XG4gICAgICBsYXN0VmFsdWUgPSB0aGlzLmxhc3RWYWx1ZSA9IHRoaXMuY29tcHV0ZSgpO1xuICAgICAgdGhpcy5sYXN0UmV2aXNpb24gPSB0YWcudmFsdWUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdFZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNvbXB1dGUoKTogVDtcblxuICBwcm90ZWN0ZWQgaW52YWxpZGF0ZSgpIHtcbiAgICB0aGlzLmxhc3RSZXZpc2lvbiA9IG51bGw7XG4gIH1cbn1cblxuLy8vLy8vLy8vL1xuXG50eXBlIE1hcHBlcjxULCBVPiA9ICh2YWx1ZTogVCkgPT4gVTtcblxuY2xhc3MgTWFwcGVyUmVmZXJlbmNlPFQsIFU+IGV4dGVuZHMgQ2FjaGVkUmVmZXJlbmNlPFU+IHtcbiAgcHVibGljIHRhZzogUmV2aXNpb25UYWc7XG5cbiAgcHJpdmF0ZSByZWZlcmVuY2U6IFZlcnNpb25lZFJlZmVyZW5jZTxUPjtcbiAgcHJpdmF0ZSBtYXBwZXI6IE1hcHBlcjxULCBVPjtcblxuICBjb25zdHJ1Y3RvcihyZWZlcmVuY2U6IFZlcnNpb25lZFJlZmVyZW5jZTxUPiwgbWFwcGVyOiBNYXBwZXI8VCwgVT4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gcmVmZXJlbmNlLnRhZztcbiAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgICB0aGlzLm1hcHBlciA9IG1hcHBlcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb21wdXRlKCk6IFUge1xuICAgIGxldCB7IHJlZmVyZW5jZSwgbWFwcGVyIH0gPSB0aGlzO1xuICAgIHJldHVybiBtYXBwZXIocmVmZXJlbmNlLnZhbHVlKCkpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXA8VCwgVT4ocmVmZXJlbmNlOiBWZXJzaW9uZWRSZWZlcmVuY2U8VD4sIG1hcHBlcjogTWFwcGVyPFQsIFU+KSB7XG4gIHJldHVybiBuZXcgTWFwcGVyUmVmZXJlbmNlKHJlZmVyZW5jZSwgbWFwcGVyKTtcbn1cblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgY2xhc3MgUmVmZXJlbmNlQ2FjaGU8VD4gaW1wbGVtZW50cyBUYWdnZWQ8UmV2aXNpb24+IHtcbiAgcHVibGljIHRhZzogUmV2aXNpb25UYWc7XG5cbiAgcHJpdmF0ZSByZWZlcmVuY2U6IFZlcnNpb25lZFJlZmVyZW5jZTxUPjtcbiAgcHJpdmF0ZSBsYXN0VmFsdWU6IFQgPSBudWxsO1xuICBwcml2YXRlIGxhc3RSZXZpc2lvbjogUmV2aXNpb24gPSBudWxsO1xuICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocmVmZXJlbmNlOiBWZXJzaW9uZWRSZWZlcmVuY2U8VD4pIHtcbiAgICB0aGlzLnRhZyA9IHJlZmVyZW5jZS50YWc7XG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gIH1cblxuICBwZWVrKCk6IFQge1xuICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxhc3RWYWx1ZTtcbiAgfVxuXG4gIHJldmFsaWRhdGUoKTogVmFsaWRhdGlvbjxUPiB7XG4gICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplKCk7XG4gICAgfVxuXG4gICAgbGV0IHsgcmVmZXJlbmNlLCBsYXN0UmV2aXNpb24gfSA9IHRoaXM7XG4gICAgbGV0IHRhZyA9IHJlZmVyZW5jZS50YWc7XG5cbiAgICBpZiAodGFnLnZhbGlkYXRlKGxhc3RSZXZpc2lvbikpIHJldHVybiBOT1RfTU9ESUZJRUQ7XG4gICAgdGhpcy5sYXN0UmV2aXNpb24gPSB0YWcudmFsdWUoKTtcblxuICAgIGxldCB7IGxhc3RWYWx1ZSB9ID0gdGhpcztcbiAgICBsZXQgdmFsdWUgPSByZWZlcmVuY2UudmFsdWUoKTtcbiAgICBpZiAodmFsdWUgPT09IGxhc3RWYWx1ZSkgcmV0dXJuIE5PVF9NT0RJRklFRDtcbiAgICB0aGlzLmxhc3RWYWx1ZSA9IHZhbHVlO1xuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplKCk6IFQge1xuICAgIGxldCB7IHJlZmVyZW5jZSB9ID0gdGhpcztcblxuICAgIGxldCB2YWx1ZSA9IHRoaXMubGFzdFZhbHVlID0gcmVmZXJlbmNlLnZhbHVlKCk7XG4gICAgdGhpcy5sYXN0UmV2aXNpb24gPSByZWZlcmVuY2UudGFnLnZhbHVlKCk7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbjxUPiA9IFQgfCBOb3RNb2RpZmllZDtcblxudHlwZSBOb3RNb2RpZmllZCA9IFwiYWRiM2I3OGUtM2QyMi00ZTRiLTg3N2EtNjMxN2MyYzVjMTQ1XCI7XG5cbmNvbnN0IE5PVF9NT0RJRklFRDogTm90TW9kaWZpZWQgPSBcImFkYjNiNzhlLTNkMjItNGU0Yi04NzdhLTYzMTdjMmM1YzE0NVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNNb2RpZmllZDxUPih2YWx1ZTogVmFsaWRhdGlvbjxUPik6IHZhbHVlIGlzIFQge1xuICByZXR1cm4gdmFsdWUgIT09IE5PVF9NT0RJRklFRDtcbn1cbiIsImV4cG9ydCBjb25zdCBDT05TVEFOVCA9IDA7XG5leHBvcnQgY29uc3QgSU5JVElBTCA9IDE7XG5leHBvcnQgY29uc3QgVk9MQVRJTEUgPSBOYU47XG5leHBvcnQgY2xhc3MgUmV2aXNpb25UYWcge1xuICAgIHZhbGlkYXRlKHNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlKCkgPT09IHNuYXBzaG90O1xuICAgIH1cbn1cbmxldCAkUkVWSVNJT04gPSBJTklUSUFMO1xuZXhwb3J0IGNsYXNzIERpcnR5YWJsZVRhZyBleHRlbmRzIFJldmlzaW9uVGFnIHtcbiAgICBjb25zdHJ1Y3RvcihyZXZpc2lvbiA9ICRSRVZJU0lPTikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnJldmlzaW9uID0gcmV2aXNpb247XG4gICAgfVxuICAgIHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXZpc2lvbjtcbiAgICB9XG4gICAgZGlydHkoKSB7XG4gICAgICAgIHRoaXMucmV2aXNpb24gPSArKyRSRVZJU0lPTjtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gY29tYmluZVRhZ2dlZCh0YWdnZWQpIHtcbiAgICBsZXQgb3B0aW1pemVkID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSB0YWdnZWQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGxldCB0YWcgPSB0YWdnZWRbaV0udGFnO1xuICAgICAgICBpZiAodGFnID09PSBWT0xBVElMRV9UQUcpXG4gICAgICAgICAgICByZXR1cm4gVk9MQVRJTEVfVEFHO1xuICAgICAgICBpZiAodGFnID09PSBDT05TVEFOVF9UQUcpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgb3B0aW1pemVkLnB1c2godGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIF9jb21iaW5lKG9wdGltaXplZCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY29tYmluZVNsaWNlKHNsaWNlKSB7XG4gICAgbGV0IG9wdGltaXplZCA9IFtdO1xuICAgIGxldCBub2RlID0gc2xpY2UuaGVhZCgpO1xuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgIGxldCB0YWcgPSBub2RlLnRhZztcbiAgICAgICAgaWYgKHRhZyA9PT0gVk9MQVRJTEVfVEFHKVxuICAgICAgICAgICAgcmV0dXJuIFZPTEFUSUxFX1RBRztcbiAgICAgICAgaWYgKHRhZyAhPT0gQ09OU1RBTlRfVEFHKVxuICAgICAgICAgICAgb3B0aW1pemVkLnB1c2godGFnKTtcbiAgICAgICAgbm9kZSA9IHNsaWNlLm5leHROb2RlKG5vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gX2NvbWJpbmUob3B0aW1pemVkKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhZ3MpIHtcbiAgICBsZXQgb3B0aW1pemVkID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBsZXQgdGFnID0gdGFnc1tpXTtcbiAgICAgICAgaWYgKHRhZyA9PT0gVk9MQVRJTEVfVEFHKVxuICAgICAgICAgICAgcmV0dXJuIFZPTEFUSUxFX1RBRztcbiAgICAgICAgaWYgKHRhZyA9PT0gQ09OU1RBTlRfVEFHKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIG9wdGltaXplZC5wdXNoKHRhZyk7XG4gICAgfVxuICAgIHJldHVybiBfY29tYmluZShvcHRpbWl6ZWQpO1xufVxuZnVuY3Rpb24gX2NvbWJpbmUodGFncykge1xuICAgIHN3aXRjaCAodGFncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIHRhZ3NbMF07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGFnc1BhaXIodGFnc1swXSwgdGFnc1sxXSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRhZ3NDb21iaW5hdG9yKHRhZ3MpO1xuICAgIH1cbiAgICA7XG59XG5leHBvcnQgY2xhc3MgQ2FjaGVkVGFnIGV4dGVuZHMgUmV2aXNpb25UYWcge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmxhc3RDaGVja2VkID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXN0VmFsdWUgPSBudWxsO1xuICAgIH1cbiAgICB2YWx1ZSgpIHtcbiAgICAgICAgbGV0IHsgbGFzdENoZWNrZWQsIGxhc3RWYWx1ZSB9ID0gdGhpcztcbiAgICAgICAgaWYgKGxhc3RDaGVja2VkICE9PSAkUkVWSVNJT04pIHtcbiAgICAgICAgICAgIHRoaXMubGFzdENoZWNrZWQgPSAkUkVWSVNJT047XG4gICAgICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IGxhc3RWYWx1ZSA9IHRoaXMuY29tcHV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxhc3RWYWx1ZTtcbiAgICB9XG4gICAgaW52YWxpZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5sYXN0Q2hlY2tlZCA9IG51bGw7XG4gICAgfVxufVxuY2xhc3MgVGFnc1BhaXIgZXh0ZW5kcyBDYWNoZWRUYWcge1xuICAgIGNvbnN0cnVjdG9yKGZpcnN0LCBzZWNvbmQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5maXJzdCA9IGZpcnN0O1xuICAgICAgICB0aGlzLnNlY29uZCA9IHNlY29uZDtcbiAgICB9XG4gICAgY29tcHV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuZmlyc3QudmFsdWUoKSwgdGhpcy5zZWNvbmQudmFsdWUoKSk7XG4gICAgfVxufVxuY2xhc3MgVGFnc0NvbWJpbmF0b3IgZXh0ZW5kcyBDYWNoZWRUYWcge1xuICAgIGNvbnN0cnVjdG9yKHRhZ3MpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy50YWdzID0gdGFncztcbiAgICB9XG4gICAgY29tcHV0ZSgpIHtcbiAgICAgICAgbGV0IHsgdGFncyB9ID0gdGhpcztcbiAgICAgICAgbGV0IG1heCA9IC0xO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHRhZ3NbaV0udmFsdWUoKTtcbiAgICAgICAgICAgIG1heCA9IE1hdGgubWF4KHZhbHVlLCBtYXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFVwZGF0YWJsZVRhZyBleHRlbmRzIENhY2hlZFRhZyB7XG4gICAgY29uc3RydWN0b3IodGFnKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgICB0aGlzLmxhc3RVcGRhdGVkID0gSU5JVElBTDtcbiAgICB9XG4gICAgY29tcHV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMubGFzdFVwZGF0ZWQsIHRoaXMudGFnLnZhbHVlKCkpO1xuICAgIH1cbiAgICB1cGRhdGUodGFnKSB7XG4gICAgICAgIGlmICh0YWcgIT09IHRoaXMudGFnKSB7XG4gICAgICAgICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgICAgICAgIHRoaXMubGFzdFVwZGF0ZWQgPSAkUkVWSVNJT047XG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vLy8vLy8vLy9cbmV4cG9ydCBjb25zdCBDT05TVEFOVF9UQUcgPSBuZXcgKGNsYXNzIENvbnN0YW50VGFnIGV4dGVuZHMgUmV2aXNpb25UYWcge1xuICAgIHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gQ09OU1RBTlQ7XG4gICAgfVxufSk7XG5leHBvcnQgY29uc3QgVk9MQVRJTEVfVEFHID0gbmV3IChjbGFzcyBWb2xhdGlsZVRhZyBleHRlbmRzIFJldmlzaW9uVGFnIHtcbiAgICB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIFZPTEFUSUxFO1xuICAgIH1cbn0pO1xuZXhwb3J0IGNvbnN0IENVUlJFTlRfVEFHID0gbmV3IChjbGFzcyBDdXJyZW50VGFnIGV4dGVuZHMgRGlydHlhYmxlVGFnIHtcbiAgICB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuICRSRVZJU0lPTjtcbiAgICB9XG59KTtcbmV4cG9ydCBjbGFzcyBDYWNoZWRSZWZlcmVuY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmxhc3RSZXZpc2lvbiA9IG51bGw7XG4gICAgICAgIHRoaXMubGFzdFZhbHVlID0gbnVsbDtcbiAgICB9XG4gICAgdmFsdWUoKSB7XG4gICAgICAgIGxldCB7IHRhZywgbGFzdFJldmlzaW9uLCBsYXN0VmFsdWUgfSA9IHRoaXM7XG4gICAgICAgIGlmICghbGFzdFJldmlzaW9uIHx8ICF0YWcudmFsaWRhdGUobGFzdFJldmlzaW9uKSkge1xuICAgICAgICAgICAgbGFzdFZhbHVlID0gdGhpcy5sYXN0VmFsdWUgPSB0aGlzLmNvbXB1dGUoKTtcbiAgICAgICAgICAgIHRoaXMubGFzdFJldmlzaW9uID0gdGFnLnZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhc3RWYWx1ZTtcbiAgICB9XG4gICAgaW52YWxpZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5sYXN0UmV2aXNpb24gPSBudWxsO1xuICAgIH1cbn1cbmNsYXNzIE1hcHBlclJlZmVyZW5jZSBleHRlbmRzIENhY2hlZFJlZmVyZW5jZSB7XG4gICAgY29uc3RydWN0b3IocmVmZXJlbmNlLCBtYXBwZXIpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy50YWcgPSByZWZlcmVuY2UudGFnO1xuICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgICAgICAgdGhpcy5tYXBwZXIgPSBtYXBwZXI7XG4gICAgfVxuICAgIGNvbXB1dGUoKSB7XG4gICAgICAgIGxldCB7IHJlZmVyZW5jZSwgbWFwcGVyIH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gbWFwcGVyKHJlZmVyZW5jZS52YWx1ZSgpKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gbWFwKHJlZmVyZW5jZSwgbWFwcGVyKSB7XG4gICAgcmV0dXJuIG5ldyBNYXBwZXJSZWZlcmVuY2UocmVmZXJlbmNlLCBtYXBwZXIpO1xufVxuLy8vLy8vLy8vL1xuZXhwb3J0IGNsYXNzIFJlZmVyZW5jZUNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvcihyZWZlcmVuY2UpIHtcbiAgICAgICAgdGhpcy5sYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmxhc3RSZXZpc2lvbiA9IG51bGw7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50YWcgPSByZWZlcmVuY2UudGFnO1xuICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgICB9XG4gICAgcGVlaygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFZhbHVlO1xuICAgIH1cbiAgICByZXZhbGlkYXRlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemUoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgeyByZWZlcmVuY2UsIGxhc3RSZXZpc2lvbiB9ID0gdGhpcztcbiAgICAgICAgbGV0IHRhZyA9IHJlZmVyZW5jZS50YWc7XG4gICAgICAgIGlmICh0YWcudmFsaWRhdGUobGFzdFJldmlzaW9uKSlcbiAgICAgICAgICAgIHJldHVybiBOT1RfTU9ESUZJRUQ7XG4gICAgICAgIHRoaXMubGFzdFJldmlzaW9uID0gdGFnLnZhbHVlKCk7XG4gICAgICAgIGxldCB7IGxhc3RWYWx1ZSB9ID0gdGhpcztcbiAgICAgICAgbGV0IHZhbHVlID0gcmVmZXJlbmNlLnZhbHVlKCk7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbGFzdFZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuIE5PVF9NT0RJRklFRDtcbiAgICAgICAgdGhpcy5sYXN0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICBsZXQgeyByZWZlcmVuY2UgfSA9IHRoaXM7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMubGFzdFZhbHVlID0gcmVmZXJlbmNlLnZhbHVlKCk7XG4gICAgICAgIHRoaXMubGFzdFJldmlzaW9uID0gcmVmZXJlbmNlLnRhZy52YWx1ZSgpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn1cbmNvbnN0IE5PVF9NT0RJRklFRCA9IFwiYWRiM2I3OGUtM2QyMi00ZTRiLTg3N2EtNjMxN2MyYzVjMTQ1XCI7XG5leHBvcnQgZnVuY3Rpb24gaXNNb2RpZmllZCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gTk9UX01PRElGSUVEO1xufVxuIl19
-enifed('glimmer-runtime/index', ['exports', 'glimmer-runtime/lib/dom/interfaces', 'glimmer-runtime/lib/syntax', 'glimmer-runtime/lib/template', 'glimmer-runtime/lib/symbol-table', 'glimmer-runtime/lib/references', 'glimmer-runtime/lib/syntax/core', 'glimmer-runtime/lib/compiler', 'glimmer-runtime/lib/opcode-builder', 'glimmer-runtime/lib/compiled/opcodes/builder', 'glimmer-runtime/lib/compiled/blocks', 'glimmer-runtime/lib/opcodes', 'glimmer-runtime/lib/compiled/opcodes/vm', 'glimmer-runtime/lib/compiled/opcodes/component', 'glimmer-runtime/lib/compiled/opcodes/dom', 'glimmer-runtime/lib/dom/change-lists', 'glimmer-runtime/lib/compiled/opcodes/content', 'glimmer-runtime/lib/compiled/expressions', 'glimmer-runtime/lib/compiled/expressions/args', 'glimmer-runtime/lib/compiled/expressions/value', 'glimmer-runtime/lib/compiled/expressions/function', 'glimmer-runtime/lib/compiled/opcodes/lists', 'glimmer-runtime/lib/helpers/get-dynamic-var', 'glimmer-runtime/lib/syntax/builtins/with-dynamic-vars', 'glimmer-runtime/lib/vm', 'glimmer-runtime/lib/upsert', 'glimmer-runtime/lib/environment', 'glimmer-runtime/lib/partial', 'glimmer-runtime/lib/component/interfaces', 'glimmer-runtime/lib/modifier/interfaces', 'glimmer-runtime/lib/dom/helper', 'glimmer-runtime/lib/builder', 'glimmer-runtime/lib/bounds'], function (exports, _glimmerRuntimeLibDomInterfaces, _glimmerRuntimeLibSyntax, _glimmerRuntimeLibTemplate, _glimmerRuntimeLibSymbolTable, _glimmerRuntimeLibReferences, _glimmerRuntimeLibSyntaxCore, _glimmerRuntimeLibCompiler, _glimmerRuntimeLibOpcodeBuilder, _glimmerRuntimeLibCompiledOpcodesBuilder, _glimmerRuntimeLibCompiledBlocks, _glimmerRuntimeLibOpcodes, _glimmerRuntimeLibCompiledOpcodesVm, _glimmerRuntimeLibCompiledOpcodesComponent, _glimmerRuntimeLibCompiledOpcodesDom, _glimmerRuntimeLibDomChangeLists, _glimmerRuntimeLibCompiledOpcodesContent, _glimmerRuntimeLibCompiledExpressions, _glimmerRuntimeLibCompiledExpressionsArgs, _glimmerRuntimeLibCompiledExpressionsValue, _glimmerRuntimeLibCompiledExpressionsFunction, _glimmerRuntimeLibCompiledOpcodesLists, _glimmerRuntimeLibHelpersGetDynamicVar, _glimmerRuntimeLibSyntaxBuiltinsWithDynamicVars, _glimmerRuntimeLibVm, _glimmerRuntimeLibUpsert, _glimmerRuntimeLibEnvironment, _glimmerRuntimeLibPartial, _glimmerRuntimeLibComponentInterfaces, _glimmerRuntimeLibModifierInterfaces, _glimmerRuntimeLibDomHelper, _glimmerRuntimeLibBuilder, _glimmerRuntimeLibBounds) {
+enifed('glimmer-runtime/index', ['exports', 'glimmer-runtime/lib/dom/interfaces', 'glimmer-runtime/lib/syntax', 'glimmer-runtime/lib/template', 'glimmer-runtime/lib/symbol-table', 'glimmer-runtime/lib/references', 'glimmer-runtime/lib/syntax/core', 'glimmer-runtime/lib/compiled/opcodes/builder', 'glimmer-runtime/lib/compiler', 'glimmer-runtime/lib/opcode-builder', 'glimmer-runtime/lib/compiled/blocks', 'glimmer-runtime/lib/dom/change-lists', 'glimmer-runtime/lib/compiled/opcodes/content', 'glimmer-runtime/lib/compiled/expressions', 'glimmer-runtime/lib/compiled/expressions/args', 'glimmer-runtime/lib/compiled/expressions/value', 'glimmer-runtime/lib/compiled/expressions/function', 'glimmer-runtime/lib/helpers/get-dynamic-var', 'glimmer-runtime/lib/syntax/builtins/with-dynamic-vars', 'glimmer-runtime/lib/vm', 'glimmer-runtime/lib/upsert', 'glimmer-runtime/lib/environment', 'glimmer-runtime/lib/partial', 'glimmer-runtime/lib/component/interfaces', 'glimmer-runtime/lib/modifier/interfaces', 'glimmer-runtime/lib/dom/helper', 'glimmer-runtime/lib/builder', 'glimmer-runtime/lib/bounds'], function (exports, _glimmerRuntimeLibDomInterfaces, _glimmerRuntimeLibSyntax, _glimmerRuntimeLibTemplate, _glimmerRuntimeLibSymbolTable, _glimmerRuntimeLibReferences, _glimmerRuntimeLibSyntaxCore, _glimmerRuntimeLibCompiledOpcodesBuilder, _glimmerRuntimeLibCompiler, _glimmerRuntimeLibOpcodeBuilder, _glimmerRuntimeLibCompiledBlocks, _glimmerRuntimeLibDomChangeLists, _glimmerRuntimeLibCompiledOpcodesContent, _glimmerRuntimeLibCompiledExpressions, _glimmerRuntimeLibCompiledExpressionsArgs, _glimmerRuntimeLibCompiledExpressionsValue, _glimmerRuntimeLibCompiledExpressionsFunction, _glimmerRuntimeLibHelpersGetDynamicVar, _glimmerRuntimeLibSyntaxBuiltinsWithDynamicVars, _glimmerRuntimeLibVm, _glimmerRuntimeLibUpsert, _glimmerRuntimeLibEnvironment, _glimmerRuntimeLibPartial, _glimmerRuntimeLibComponentInterfaces, _glimmerRuntimeLibModifierInterfaces, _glimmerRuntimeLibDomHelper, _glimmerRuntimeLibBuilder, _glimmerRuntimeLibBounds) {
'use strict';
exports.ATTRIBUTE_SYNTAX = _glimmerRuntimeLibSyntax.ATTRIBUTE;
exports.StatementSyntax = _glimmerRuntimeLibSyntax.Statement;
exports.ExpressionSyntax = _glimmerRuntimeLibSyntax.Expression;
@@ -14552,49 +13306,23 @@
exports.OpenElement = _glimmerRuntimeLibSyntaxCore.OpenElement;
exports.HelperSyntax = _glimmerRuntimeLibSyntaxCore.Helper;
exports.BlockSyntax = _glimmerRuntimeLibSyntaxCore.Block;
exports.OpenPrimitiveElementSyntax = _glimmerRuntimeLibSyntaxCore.OpenPrimitiveElement;
exports.CloseElementSyntax = _glimmerRuntimeLibSyntaxCore.CloseElement;
+ exports.OpcodeBuilderDSL = _glimmerRuntimeLibCompiledOpcodesBuilder.default;
exports.Compiler = _glimmerRuntimeLibCompiler.default;
exports.Compilable = _glimmerRuntimeLibCompiler.Compilable;
exports.CompileIntoList = _glimmerRuntimeLibCompiler.CompileIntoList;
exports.compileLayout = _glimmerRuntimeLibCompiler.compileLayout;
exports.ComponentBuilder = _glimmerRuntimeLibOpcodeBuilder.ComponentBuilder;
exports.StaticDefinition = _glimmerRuntimeLibOpcodeBuilder.StaticDefinition;
exports.DynamicDefinition = _glimmerRuntimeLibOpcodeBuilder.DynamicDefinition;
- exports.OpcodeBuilderDSL = _glimmerRuntimeLibCompiledOpcodesBuilder.default;
exports.Block = _glimmerRuntimeLibCompiledBlocks.Block;
exports.CompiledBlock = _glimmerRuntimeLibCompiledBlocks.CompiledBlock;
exports.Layout = _glimmerRuntimeLibCompiledBlocks.Layout;
exports.InlineBlock = _glimmerRuntimeLibCompiledBlocks.InlineBlock;
exports.EntryPoint = _glimmerRuntimeLibCompiledBlocks.EntryPoint;
- exports.Opcode = _glimmerRuntimeLibOpcodes.Opcode;
- exports.OpSeq = _glimmerRuntimeLibOpcodes.OpSeq;
- exports.OpSeqBuilder = _glimmerRuntimeLibOpcodes.OpSeqBuilder;
- exports.inspectOpcodes = _glimmerRuntimeLibOpcodes.inspect;
- exports.PushChildScopeOpcode = _glimmerRuntimeLibCompiledOpcodesVm.PushChildScopeOpcode;
- exports.PopScopeOpcode = _glimmerRuntimeLibCompiledOpcodesVm.PopScopeOpcode;
- exports.PushDynamicScopeOpcode = _glimmerRuntimeLibCompiledOpcodesVm.PushDynamicScopeOpcode;
- exports.PopDynamicScopeOpcode = _glimmerRuntimeLibCompiledOpcodesVm.PopDynamicScopeOpcode;
- exports.PutValueOpcode = _glimmerRuntimeLibCompiledOpcodesVm.PutValueOpcode;
- exports.PutNullOpcode = _glimmerRuntimeLibCompiledOpcodesVm.PutNullOpcode;
- exports.PutArgsOpcode = _glimmerRuntimeLibCompiledOpcodesVm.PutArgsOpcode;
- exports.LabelOpcode = _glimmerRuntimeLibCompiledOpcodesVm.LabelOpcode;
- exports.EnterOpcode = _glimmerRuntimeLibCompiledOpcodesVm.EnterOpcode;
- exports.ExitOpcode = _glimmerRuntimeLibCompiledOpcodesVm.ExitOpcode;
- exports.EvaluateOpcode = _glimmerRuntimeLibCompiledOpcodesVm.EvaluateOpcode;
- exports.TestOpcode = _glimmerRuntimeLibCompiledOpcodesVm.TestOpcode;
- exports.JumpOpcode = _glimmerRuntimeLibCompiledOpcodesVm.JumpOpcode;
- exports.JumpIfOpcode = _glimmerRuntimeLibCompiledOpcodesVm.JumpIfOpcode;
- exports.JumpUnlessOpcode = _glimmerRuntimeLibCompiledOpcodesVm.JumpUnlessOpcode;
- exports.BindNamedArgsOpcode = _glimmerRuntimeLibCompiledOpcodesVm.BindNamedArgsOpcode;
- exports.BindDynamicScopeOpcode = _glimmerRuntimeLibCompiledOpcodesVm.BindDynamicScopeOpcode;
- exports.OpenComponentOpcode = _glimmerRuntimeLibCompiledOpcodesComponent.OpenComponentOpcode;
- exports.CloseComponentOpcode = _glimmerRuntimeLibCompiledOpcodesComponent.CloseComponentOpcode;
- exports.ShadowAttributesOpcode = _glimmerRuntimeLibCompiledOpcodesComponent.ShadowAttributesOpcode;
- exports.OpenPrimitiveElementOpcode = _glimmerRuntimeLibCompiledOpcodesDom.OpenPrimitiveElementOpcode;
- exports.CloseElementOpcode = _glimmerRuntimeLibCompiledOpcodesDom.CloseElementOpcode;
exports.IChangeList = _glimmerRuntimeLibDomChangeLists.IChangeList;
exports.AttributeChangeList = _glimmerRuntimeLibDomChangeLists.AttributeChangeList;
exports.PropertyChangeList = _glimmerRuntimeLibDomChangeLists.PropertyChangeList;
exports.SafeHrefAttributeChangeList = _glimmerRuntimeLibDomChangeLists.SafeHrefAttributeChangeList;
exports.SafeHrefPropertyChangeList = _glimmerRuntimeLibDomChangeLists.SafeHrefPropertyChangeList;
@@ -14611,14 +13339,10 @@
exports.EvaluatedArgs = _glimmerRuntimeLibCompiledExpressionsArgs.EvaluatedArgs;
exports.EvaluatedNamedArgs = _glimmerRuntimeLibCompiledExpressionsArgs.EvaluatedNamedArgs;
exports.EvaluatedPositionalArgs = _glimmerRuntimeLibCompiledExpressionsArgs.EvaluatedPositionalArgs;
exports.ValueReference = _glimmerRuntimeLibCompiledExpressionsValue.ValueReference;
exports.FunctionExpression = _glimmerRuntimeLibCompiledExpressionsFunction.FunctionExpression;
- exports.EnterListOpcode = _glimmerRuntimeLibCompiledOpcodesLists.EnterListOpcode;
- exports.ExitListOpcode = _glimmerRuntimeLibCompiledOpcodesLists.ExitListOpcode;
- exports.EnterWithKeyOpcode = _glimmerRuntimeLibCompiledOpcodesLists.EnterWithKeyOpcode;
- exports.NextIterOpcode = _glimmerRuntimeLibCompiledOpcodesLists.NextIterOpcode;
exports.getDynamicVar = _glimmerRuntimeLibHelpersGetDynamicVar.default;
exports.WithDynamicVarsSyntax = _glimmerRuntimeLibSyntaxBuiltinsWithDynamicVars.default;
exports.VM = _glimmerRuntimeLibVm.PublicVM;
exports.UpdatingVM = _glimmerRuntimeLibVm.UpdatingVM;
exports.RenderResult = _glimmerRuntimeLibVm.RenderResult;
@@ -14646,11 +13370,11 @@
exports.Simple = _glimmerRuntimeLibDomInterfaces;
exports.ElementStack = _glimmerRuntimeLibBuilder.ElementStack;
exports.ElementOperations = _glimmerRuntimeLibBuilder.ElementOperations;
exports.Bounds = _glimmerRuntimeLibBounds.default;
});
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7VUFDZSxnQkFBZ0IsNEJBQTdCLFNBQVM7VUFDSSxlQUFlLDRCQUE1QixTQUFTO1VBQ0ssZ0JBQWdCLDRCQUE5QixVQUFVO1VBQ0csZUFBZSw0QkFBNUIsU0FBUztVQUNULDBCQUEwQiw0QkFBMUIsMEJBQTBCO1VBQzFCLFlBQVksNEJBQVosWUFBWTtVQUNaLFdBQVcsNEJBQVgsV0FBVztVQUNYLFdBQVcsNEJBQVgsV0FBVztVQUdPLGVBQWUsOEJBQTFCLE9BQU87VUFBcUIsZUFBZSw4QkFBZixlQUFlO1VBQUUsUUFBUSw4QkFBUixRQUFRO1VBRTFDLFdBQVcsaUNBQXRCLE9BQU87VUFFUCxvQkFBb0IsZ0NBQXBCLG9CQUFvQjtVQUFFLGNBQWMsZ0NBQWQsY0FBYztVQUFFLG1CQUFtQixnQ0FBbkIsbUJBQW1CO1VBR2hFLFNBQVMsZ0NBQVQsU0FBUztVQUNULGVBQWUsZ0NBQWYsZUFBZTtVQUNmLGlCQUFpQixnQ0FBakIsaUJBQWlCO1VBQ2pCLE9BQU8sZ0NBQVAsT0FBTztVQUNQLFVBQVUsZ0NBQVYsVUFBVTtVQUNWLFdBQVcsZ0NBQVgsV0FBVztVQUNILFVBQVUsZ0NBQWxCLElBQUk7VUFDUyxlQUFlLGdDQUE1QixTQUFTO1VBQ1Msb0JBQW9CLGdDQUF0QyxjQUFjO1VBQ1AsU0FBUyxnQ0FBaEIsR0FBRztVQUNZLHVCQUF1QixnQ0FBdEMsV0FBVztVQUNKLFNBQVMsZ0NBQWhCLEdBQUc7VUFDTSxXQUFXLGdDQUFwQixLQUFLO1VBQ0wsV0FBVyxnQ0FBWCxXQUFXO1VBQ0QsWUFBWSxnQ0FBdEIsTUFBTTtVQUNHLFdBQVcsZ0NBQXBCLEtBQUs7VUFDbUIsMEJBQTBCLGdDQUFsRCxvQkFBb0I7VUFDSixrQkFBa0IsZ0NBQWxDLFlBQVk7VUFJRCxRQUFRLDhCQUFuQixPQUFPO1VBQ1AsVUFBVSw4QkFBVixVQUFVO1VBQ1YsZUFBZSw4QkFBZixlQUFlO1VBQ2YsYUFB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Qix5Q0FBbkIsbUJBQW1CO1VBQ25CLHNCQUFzQix5Q0FBdEIsc0JBQXNCO1VBQ3RCLHFCQUFxQix5Q0FBckIscUJBQXFCO1VBQ3JCLHFCQUFxQix5Q0FBckIscUJBQXFCO1VBSXJCLGVBQWUsd0NBQWYsZUFBZTtVQUdHLFVBQVUsK0JBQXJCLE9BQU87VUFBOEIsV0FBVywrQkFBekIsVUFBVTtVQUFpQixtQkFBbUIsK0JBQW5CLG1CQUFtQjtVQUFFLFlBQVksK0JBQVosWUFBWTtVQUFFLGdCQUFnQiwrQkFBaEIsZ0JBQWdCO1VBRXJHLE1BQU07VUFDTixZQUFZLDZCQUFaLFlBQVk7VUFBRSxpQkFBaUIsNkJBQWpCLGlCQUFpQjtVQUNwQixNQUFNLDRCQUFqQixPQUFPIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgQVRUUklCVVRFIGFzIEFUVFJJQlVURV9TWU5UQVgsXG4gIFN0YXRlbWVudCBhcyBTdGF0ZW1lbnRTeW50YXgsXG4gIEV4cHJlc3Npb24gYXMgRXhwcmVzc2lvblN5bnRheCxcbiAgQXR0cmlidXRlIGFzIEF0dHJpYnV0ZVN5bnRheCxcbiAgU3RhdGVtZW50Q29tcGlsYXRpb25CdWZmZXIsXG4gIFN5bWJvbExvb2t1cCxcbiAgQ29tcGlsZUludG8sXG4gIGlzQXR0cmlidXRlXG59IGZyb20gJy4vbGliL3N5bnRheCc7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGVtcGxhdGVGYWN0b3J5LCBUZW1wbGF0ZUZhY3RvcnksIFRlbXBsYXRlIH0gZnJvbSAnLi9saWIvdGVtcGxhdGUnO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFN5bWJvbFRhYmxlIH0gZnJvbSAnLi9saWIvc3ltYm9sLXRhYmxlJztcblxuZXhwb3J0IHsgQ29uZGl0aW9uYWxSZWZlcmVuY2UsIE5VTExfUkVGRVJFTkNFLCBVTkRFRklORURfUkVGRVJFTkNFIH0gZnJvbSAnLi9saWIvcmVmZXJlbmNlcyc7XG5cbmV4cG9ydCB7XG4gIFRlbXBsYXRlcyxcbiAgT3B0aW1pemVkQXBwZW5kLFxuICBVbm9wdGltaXplZEFwcGVuZCxcbiAgVW5rbm93bixcbiAgU3RhdGljQXR0cixcbiAgRHluYW1pY0F0dHIsXG4gIEFyZ3MgYXMgQXJnc1N5bnRheCxcbiAgTmFtZWRBcmdzIGFzIE5hbWVkQXJnc1N5bnRheCxcbiAgUG9zaXRpb25hbEFyZ3MgYXMgUG9zaXRpb25hbEFyZ3NTeW50YXgsXG4gIFJlZiBhcyBSZWZTeW50YXgsXG4gIEdldEFyZ3VtZW50IGFzIEdldE5hbWVkUGFyYW1ldGVyU3ludGF4LFxuICBHZXQgYXMgR2V0U3ludGF4LFxuICBWYWx1ZSBhcyBWYWx1ZVN5bnRheCxcbiAgT3BlbkVsZW1lbnQsXG4gIEhlbHBlciBhcyBIZWxwZXJTeW50YXgsXG4gIEJsb2NrIGFzIEJsb2NrU3ludGF4LFxuICBPcGVuUHJpbWl0aXZlRWxlbWVudCBhcyBPcGVuUHJpbWl0aXZlRWxlbWVudFN5bnRheCxcbiAgQ2xvc2VFbGVtZW50IGFzIENsb3NlRWxlbWVudFN5bnRheFxufSBmcm9tICcuL2xpYi9zeW50YXgvY29yZSc7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgQ29tcGlsZXIsXG4gIENvbXBpbGFibGUsXG4gIENvbXBpbGVJbnRvTGlzdCxcbiAgY29tcGlsZUxheW91dFxufSBmcm9tICcuL2xpYi9jb21waWxlcic7XG5cbmV4cG9ydCB7XG4gIENvbXBvbmVudEJ1aWxkZXIsXG4gIFN0YXRpY0RlZmluaXRpb24sXG4gIER5bmFtaWNEZWZpbml0aW9uXG59IGZyb20gJy4vbGliL29wY29kZS1idWlsZGVyJztcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBPcGNvZGVCdWlsZGVyRFNMXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL29wY29kZXMvYnVpbGRlcic7XG5cbmV4cG9ydCB7XG4gIEJsb2NrLFxuICBDb21waWxlZEJsb2NrLFxuICBMYXlvdXQsXG4gIElubGluZUJsb2NrLFxuICBFbnRyeVBvaW50XG59IGZyb20gJy4vbGliL2NvbXBpbGVkL2Jsb2Nrcyc7XG5cbmV4cG9ydCB7XG4gIE9wY29kZSxcbiAgT3BTZXEsXG4gIE9wU2VxQnVpbGRlcixcbiAgaW5zcGVjdCBhcyBpbnNwZWN0T3Bjb2Rlc1xufSBmcm9tICcuL2xpYi9vcGNvZGVzJztcblxuZXhwb3J0IHtcbiAgUHVzaENoaWxkU2NvcGVPcGNvZGUsXG4gIFBvcFNjb3BlT3Bjb2RlLFxuICBQdXNoRHluYW1pY1Njb3BlT3Bjb2RlLFxuICBQb3BEeW5hbWljU2NvcGVPcGNvZGUsXG4gIFB1dFZhbHVlT3Bjb2RlLFxuICBQdXROdWxsT3Bjb2RlLFxuICBQdXRBcmdzT3Bjb2RlLFxuICBMYWJlbE9wY29kZSxcbiAgRW50ZXJPcGNvZGUsXG4gIEV4aXRPcGNvZGUsXG4gIEV2YWx1YXRlT3Bjb2RlLFxuICBUZXN0T3Bjb2RlLFxuICBKdW1wT3Bjb2RlLFxuICBKdW1wSWZPcGNvZGUsXG4gIEp1bXBVbmxlc3NPcGNvZGUsXG4gIEJpbmROYW1lZEFyZ3NPcGNvZGUsXG4gIEJpbmREeW5hbWljU2NvcGVPcGNvZGVcbn0gZnJvbSAnLi9saWIvY29tcGlsZWQvb3Bjb2Rlcy92bSc7XG5cbmV4cG9ydCB7XG4gIE9wZW5Db21wb25lbnRPcGNvZGUsXG4gIENsb3NlQ29tcG9uZW50T3Bjb2RlLFxuICBTaGFkb3dBdHRyaWJ1dGVzT3Bjb2RlXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL29wY29kZXMvY29tcG9uZW50JztcblxuZXhwb3J0IHtcbiAgT3BlblByaW1pdGl2ZUVsZW1lbnRPcGNvZGUsXG4gIENsb3NlRWxlbWVudE9wY29kZVxufSBmcm9tICcuL2xpYi9jb21waWxlZC9vcGNvZGVzL2RvbSc7XG5cbmV4cG9ydCB7XG4gIElDaGFuZ2VMaXN0LFxuICBBdHRyaWJ1dGVDaGFuZ2VMaXN0LFxuICBQcm9wZXJ0eUNoYW5nZUxpc3QsXG4gIFNhZmVIcmVmQXR0cmlidXRlQ2hhbmdlTGlzdCxcbiAgU2FmZUhyZWZQcm9wZXJ0eUNoYW5nZUxpc3QsXG4gIElucHV0VmFsdWVQcm9wZXJ0eUNoYW5nZUxpc3QsXG4gIGRlZmF1bHRDaGFuZ2VMaXN0cyxcbiAgZGVmYXVsdEF0dHJpYnV0ZUNoYW5nZUxpc3RzLFxuICBkZWZhdWx0UHJvcGVydHlDaGFuZ2VMaXN0cyxcbiAgcmVhZERPTUF0dHJcbn0gZnJvbSAnLi9saWIvZG9tL2NoYW5nZS1saXN0cyc7XG5cbmV4cG9ydCB7XG4gIG5vcm1hbGl6ZVRleHRWYWx1ZVxufSBmcm9tICcuL2xpYi9jb21waWxlZC9vcGNvZGVzL2NvbnRlbnQnO1xuXG5leHBvcnQge1xuICBDb21waWxlZEV4cHJlc3Npb25cbn0gZnJvbSAnLi9saWIvY29tcGlsZWQvZXhwcmVzc2lvbnMnO1xuXG5leHBvcnQge1xuICBDb21waWxlZEFyZ3MsXG4gIENvbXBpbGVkTmFtZWRBcmdzLFxuICBDb21waWxlZFBvc2l0aW9uYWxBcmdzLFxuICBFdmFsdWF0ZWRBcmdzLFxuICBFdmFsdWF0ZWROYW1lZEFyZ3MsXG4gIEV2YWx1YXRlZFBvc2l0aW9uYWxBcmdzXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL2V4cHJlc3Npb25zL2FyZ3MnO1xuXG5leHBvcnQge1xuICBWYWx1ZVJlZmVyZW5jZVxufSBmcm9tICcuL2xpYi9jb21waWxlZC9leHByZXNzaW9ucy92YWx1ZSc7XG5cbmV4cG9ydCB7XG4gIEZ1bmN0aW9uRXhwcmVzc2lvblxufSBmcm9tICcuL2xpYi9jb21waWxlZC9leHByZXNzaW9ucy9mdW5jdGlvbic7XG5cbmV4cG9ydCB7XG4gIEVudGVyTGlzdE9wY29kZSxcbiAgRXhpdExpc3RPcGNvZGUsXG4gIEVudGVyV2l0aEtleU9wY29kZSxcbiAgTmV4dEl0ZXJPcGNvZGVcbn0gZnJvbSAnLi9saWIvY29tcGlsZWQvb3Bjb2Rlcy9saXN0cyc7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgZ2V0RHluYW1pY1ZhclxufSBmcm9tICcuL2xpYi9oZWxwZXJzL2dldC1keW5hbWljLXZhcic7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgV2l0aER5bmFtaWNWYXJzU3ludGF4XG59IGZyb20gJy4vbGliL3N5bnRheC9idWlsdGlucy93aXRoLWR5bmFtaWMtdmFycyc7XG5cbmV4cG9ydCB7IFB1YmxpY1ZNIGFzIFZNLCBVcGRhdGluZ1ZNLCBSZW5kZXJSZXN1bHQgfSBmcm9tICcuL2xpYi92bSc7XG5cbmV4cG9ydCB7IFNhZmVTdHJpbmcsIGlzU2FmZVN0cmluZyB9IGZyb20gJy4vbGliL3Vwc2VydCc7XG5cbmV4cG9ydCB7XG4gIFNjb3BlLFxuICBkZWZhdWx0IGFzIEVudmlyb25tZW50LFxuICBIZWxwZXIsXG4gIFBhcnNlZFN0YXRlbWVudCxcbiAgRHluYW1pY1Njb3BlLFxufSBmcm9tICcuL2xpYi9lbnZpcm9ubWVudCc7XG5cbmV4cG9ydCB7XG4gIFBhcnRpYWxEZWZpbml0aW9uXG59IGZyb20gJy4vbGliL3BhcnRpYWwnO1xuXG5leHBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbXBvbmVudENsYXNzLFxuICBDb21wb25lbnRNYW5hZ2VyLFxuICBDb21wb25lbnREZWZpbml0aW9uLFxuICBDb21wb25lbnRMYXlvdXRCdWlsZGVyLFxuICBDb21wb25lbnRBdHRyc0J1aWxkZXIsXG4gIGlzQ29tcG9uZW50RGVmaW5pdGlvblxufSBmcm9tICcuL2xpYi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCB7XG4gIE1vZGlmaWVyTWFuYWdlclxufSBmcm9tICcuL2xpYi9tb2RpZmllci9pbnRlcmZhY2VzJztcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBET01DaGFuZ2VzLCBET01DaGFuZ2VzIGFzIElET01DaGFuZ2VzLCBET01UcmVlQ29uc3RydWN0aW9uLCBpc1doaXRlc3BhY2UsIGluc2VydEhUTUxCZWZvcmUgfSBmcm9tICcuL2xpYi9kb20vaGVscGVyJztcbmltcG9ydCAgKiBhcyBTaW1wbGUgZnJvbSAnLi9saWIvZG9tL2ludGVyZmFjZXMnO1xuZXhwb3J0IHsgU2ltcGxlIH07XG5leHBvcnQgeyBFbGVtZW50U3RhY2ssIEVsZW1lbnRPcGVyYXRpb25zIH0gZnJvbSAnLi9saWIvYnVpbGRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvdW5kcyB9IGZyb20gJy4vbGliL2JvdW5kcyc7XG4iXX0=
+//# sourceMappingURL=data:application/json;base64,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LEtBQUs7VUFDTSxXQUFXLGlDQUF0QixPQUFPO1VBQ1AsTUFBTSxpQ0FBTixNQUFNO1VBQ04sZUFBZSxpQ0FBZixlQUFlO1VBQ2YsWUFBWSxpQ0FBWixZQUFZO1VBSVosaUJBQWlCLDZCQUFqQixpQkFBaUI7VUFJakIsU0FBUyx5Q0FBVCxTQUFTO1VBQ1QsY0FBYyx5Q0FBZCxjQUFjO1VBQ2QsZ0JBQWdCLHlDQUFoQixnQkFBZ0I7VUFDaEIsbUJBQW1CLHlDQUFuQixtQkFBbUI7VUFDbkIsc0JBQXNCLHlDQUF0QixzQkFBc0I7VUFDdEIscUJBQXFCLHlDQUFyQixxQkFBcUI7VUFDckIscUJBQXFCLHlDQUFyQixxQkFBcUI7VUFJckIsZUFBZSx3Q0FBZixlQUFlO1VBR0csVUFBVSwrQkFBckIsT0FBTztVQUE4QixXQUFXLCtCQUF6QixVQUFVO1VBQWlCLG1CQUFtQiwrQkFBbkIsbUJBQW1CO1VBQUUsWUFBWSwrQkFBWixZQUFZO1VBQUUsZ0JBQWdCLCtCQUFoQixnQkFBZ0I7VUFFckcsTUFBTTtVQUNOLFlBQVksNkJBQVosWUFBWTtVQUFFLGlCQUFpQiw2QkFBakIsaUJBQWlCO1VBQ3BCLE1BQU0sNEJBQWpCLE9BQU8iLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICBBVFRSSUJVVEUgYXMgQVRUUklCVVRFX1NZTlRBWCxcbiAgU3RhdGVtZW50IGFzIFN0YXRlbWVudFN5bnRheCxcbiAgRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uU3ludGF4LFxuICBBdHRyaWJ1dGUgYXMgQXR0cmlidXRlU3ludGF4LFxuICBTdGF0ZW1lbnRDb21waWxhdGlvbkJ1ZmZlcixcbiAgU3ltYm9sTG9va3VwLFxuICBDb21waWxlSW50byxcbiAgaXNBdHRyaWJ1dGVcbn0gZnJvbSAnLi9saWIvc3ludGF4JztcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyB0ZW1wbGF0ZUZhY3RvcnksIFRlbXBsYXRlRmFjdG9yeSwgVGVtcGxhdGUgfSBmcm9tICcuL2xpYi90ZW1wbGF0ZSc7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3ltYm9sVGFibGUgfSBmcm9tICcuL2xpYi9zeW1ib2wtdGFibGUnO1xuXG5leHBvcnQgeyBDb25kaXRpb25hbFJlZmVyZW5jZSwgTlVMTF9SRUZFUkVOQ0UsIFVOREVGSU5FRF9SRUZFUkVOQ0UgfSBmcm9tICcuL2xpYi9yZWZlcmVuY2VzJztcblxuZXhwb3J0IHtcbiAgVGVtcGxhdGVzLFxuICBPcHRpbWl6ZWRBcHBlbmQsXG4gIFVub3B0aW1pemVkQXBwZW5kLFxuICBVbmtub3duLFxuICBTdGF0aWNBdHRyLFxuICBEeW5hbWljQXR0cixcbiAgQXJncyBhcyBBcmdzU3ludGF4LFxuICBOYW1lZEFyZ3MgYXMgTmFtZWRBcmdzU3ludGF4LFxuICBQb3NpdGlvbmFsQXJncyBhcyBQb3NpdGlvbmFsQXJnc1N5bnRheCxcbiAgUmVmIGFzIFJlZlN5bnRheCxcbiAgR2V0QXJndW1lbnQgYXMgR2V0TmFtZWRQYXJhbWV0ZXJTeW50YXgsXG4gIEdldCBhcyBHZXRTeW50YXgsXG4gIFZhbHVlIGFzIFZhbHVlU3ludGF4LFxuICBPcGVuRWxlbWVudCxcbiAgSGVscGVyIGFzIEhlbHBlclN5bnRheCxcbiAgQmxvY2sgYXMgQmxvY2tTeW50YXgsXG4gIE9wZW5QcmltaXRpdmVFbGVtZW50IGFzIE9wZW5QcmltaXRpdmVFbGVtZW50U3ludGF4LFxuICBDbG9zZUVsZW1lbnQgYXMgQ2xvc2VFbGVtZW50U3ludGF4XG59IGZyb20gJy4vbGliL3N5bnRheC9jb3JlJztcblxuZXhwb3J0IHtcbiAgIGRlZmF1bHQgYXMgT3Bjb2RlQnVpbGRlckRTTFxufSBmcm9tICcuL2xpYi9jb21waWxlZC9vcGNvZGVzL2J1aWxkZXInO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIENvbXBpbGVyLFxuICBDb21waWxhYmxlLFxuICBDb21waWxlSW50b0xpc3QsXG4gIGNvbXBpbGVMYXlvdXRcbn0gZnJvbSAnLi9saWIvY29tcGlsZXInO1xuXG5leHBvcnQge1xuICBDb21wb25lbnRCdWlsZGVyLFxuICBTdGF0aWNEZWZpbml0aW9uLFxuICBEeW5hbWljRGVmaW5pdGlvblxufSBmcm9tICcuL2xpYi9vcGNvZGUtYnVpbGRlcic7XG5cbmV4cG9ydCB7XG4gIEJsb2NrLFxuICBDb21waWxlZEJsb2NrLFxuICBMYXlvdXQsXG4gIElubGluZUJsb2NrLFxuICBFbnRyeVBvaW50XG59IGZyb20gJy4vbGliL2NvbXBpbGVkL2Jsb2Nrcyc7XG5cbmV4cG9ydCB7XG4gIElDaGFuZ2VMaXN0LFxuICBBdHRyaWJ1dGVDaGFuZ2VMaXN0LFxuICBQcm9wZXJ0eUNoYW5nZUxpc3QsXG4gIFNhZmVIcmVmQXR0cmlidXRlQ2hhbmdlTGlzdCxcbiAgU2FmZUhyZWZQcm9wZXJ0eUNoYW5nZUxpc3QsXG4gIElucHV0VmFsdWVQcm9wZXJ0eUNoYW5nZUxpc3QsXG4gIGRlZmF1bHRDaGFuZ2VMaXN0cyxcbiAgZGVmYXVsdEF0dHJpYnV0ZUNoYW5nZUxpc3RzLFxuICBkZWZhdWx0UHJvcGVydHlDaGFuZ2VMaXN0cyxcbiAgcmVhZERPTUF0dHJcbn0gZnJvbSAnLi9saWIvZG9tL2NoYW5nZS1saXN0cyc7XG5cbmV4cG9ydCB7XG4gIG5vcm1hbGl6ZVRleHRWYWx1ZVxufSBmcm9tICcuL2xpYi9jb21waWxlZC9vcGNvZGVzL2NvbnRlbnQnO1xuXG5leHBvcnQge1xuICBDb21waWxlZEV4cHJlc3Npb25cbn0gZnJvbSAnLi9saWIvY29tcGlsZWQvZXhwcmVzc2lvbnMnO1xuXG5leHBvcnQge1xuICBDb21waWxlZEFyZ3MsXG4gIENvbXBpbGVkTmFtZWRBcmdzLFxuICBDb21waWxlZFBvc2l0aW9uYWxBcmdzLFxuICBFdmFsdWF0ZWRBcmdzLFxuICBFdmFsdWF0ZWROYW1lZEFyZ3MsXG4gIEV2YWx1YXRlZFBvc2l0aW9uYWxBcmdzXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL2V4cHJlc3Npb25zL2FyZ3MnO1xuXG5leHBvcnQge1xuICBWYWx1ZVJlZmVyZW5jZVxufSBmcm9tICcuL2xpYi9jb21waWxlZC9leHByZXNzaW9ucy92YWx1ZSc7XG5cbmV4cG9ydCB7XG4gIEZ1bmN0aW9uRXhwcmVzc2lvblxufSBmcm9tICcuL2xpYi9jb21waWxlZC9leHByZXNzaW9ucy9mdW5jdGlvbic7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgZ2V0RHluYW1pY1ZhclxufSBmcm9tICcuL2xpYi9oZWxwZXJzL2dldC1keW5hbWljLXZhcic7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgV2l0aER5bmFtaWNWYXJzU3ludGF4XG59IGZyb20gJy4vbGliL3N5bnRheC9idWlsdGlucy93aXRoLWR5bmFtaWMtdmFycyc7XG5cbmV4cG9ydCB7IFB1YmxpY1ZNIGFzIFZNLCBVcGRhdGluZ1ZNLCBSZW5kZXJSZXN1bHQgfSBmcm9tICcuL2xpYi92bSc7XG5cbmV4cG9ydCB7IFNhZmVTdHJpbmcsIGlzU2FmZVN0cmluZyB9IGZyb20gJy4vbGliL3Vwc2VydCc7XG5cbmV4cG9ydCB7XG4gIFNjb3BlLFxuICBkZWZhdWx0IGFzIEVudmlyb25tZW50LFxuICBIZWxwZXIsXG4gIFBhcnNlZFN0YXRlbWVudCxcbiAgRHluYW1pY1Njb3BlLFxufSBmcm9tICcuL2xpYi9lbnZpcm9ubWVudCc7XG5cbmV4cG9ydCB7XG4gIFBhcnRpYWxEZWZpbml0aW9uXG59IGZyb20gJy4vbGliL3BhcnRpYWwnO1xuXG5leHBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbXBvbmVudENsYXNzLFxuICBDb21wb25lbnRNYW5hZ2VyLFxuICBDb21wb25lbnREZWZpbml0aW9uLFxuICBDb21wb25lbnRMYXlvdXRCdWlsZGVyLFxuICBDb21wb25lbnRBdHRyc0J1aWxkZXIsXG4gIGlzQ29tcG9uZW50RGVmaW5pdGlvblxufSBmcm9tICcuL2xpYi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCB7XG4gIE1vZGlmaWVyTWFuYWdlclxufSBmcm9tICcuL2xpYi9tb2RpZmllci9pbnRlcmZhY2VzJztcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBET01DaGFuZ2VzLCBET01DaGFuZ2VzIGFzIElET01DaGFuZ2VzLCBET01UcmVlQ29uc3RydWN0aW9uLCBpc1doaXRlc3BhY2UsIGluc2VydEhUTUxCZWZvcmUgfSBmcm9tICcuL2xpYi9kb20vaGVscGVyJztcbmltcG9ydCAgKiBhcyBTaW1wbGUgZnJvbSAnLi9saWIvZG9tL2ludGVyZmFjZXMnO1xuZXhwb3J0IHsgU2ltcGxlIH07XG5leHBvcnQgeyBFbGVtZW50U3RhY2ssIEVsZW1lbnRPcGVyYXRpb25zIH0gZnJvbSAnLi9saWIvYnVpbGRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvdW5kcyB9IGZyb20gJy4vbGliL2JvdW5kcyc7XG4iXX0=
enifed("glimmer-runtime/lib/bounds", ["exports"], function (exports) {
"use strict";
exports.bounds = bounds;
exports.single = single;
@@ -17428,11 +16152,11 @@
};
return GuardedTrustingUpdateOpcode;
})(GuardedUpdateOpcode);
});
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvb3Bjb2Rlcy9jb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUErQkEsYUFBQSxPQUFBLENBQWlCLEtBQWEsRUFBQTtBQUM1QixlQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxVQUFVLENBQUM7S0FDekY7O0FBRUssYUFBQSxrQkFBQSxDQUE2QixLQUFhLEVBQUE7QUFDOUMsWUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDbEIsbUJBQU8sRUFBRSxDQUFDO1NBQ1g7QUFDRCxlQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN0Qjs7QUFFSyxhQUFBLHFCQUFBLENBQWdDLEtBQWEsRUFBQTtBQUNqRCxZQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNsQixtQkFBTyxFQUFFLENBQUM7U0FDWDtBQUNELFlBQUkseUJBdkNKLFFBQVEsQ0F1Q0ssS0FBSyxDQUFDLEVBQUU7QUFDbkIsbUJBQU8sS0FBSyxDQUFDO1NBQ2Q7QUFDRCxZQUFJLHlCQTVDSixZQUFZLENBNENLLEtBQUssQ0FBQyxFQUFFO0FBQ3ZCLG1CQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUN2QjtBQUNELFlBQUkseUJBOUNKLE1BQU0sQ0E4Q0ssS0FBSyxDQUFDLEVBQUU7QUFDakIsbUJBQU8sS0FBSyxDQUFDO1NBQ2Q7QUFDRCxlQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN0Qjs7QUFFSyxhQUFBLGNBQUEsQ0FBeUIsS0FBYSxFQUFBO0FBQzFDLFlBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2xCLG1CQUFPLEVBQUUsQ0FBQztTQUNYO0FBQ0QsWUFBSSx5QkF2REosUUFBUSxDQXVESyxLQUFLLENBQUMsRUFBRTtBQUNuQixtQkFBTyxLQUFLLENBQUM7U0FDZDtB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QUMzQzs7QUFYRyxtQ0FBbUMsV0FhN0IsVUFBVSxHQUFBLG9CQUFDLEVBQU0sRUFBRSxTQUE0QixFQUFFLEtBQXdDLEVBQUUsTUFBZ0IsRUFBRSxNQUFjLEVBQUE7QUFDbkksbUJBQU8sSUFBSSwyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQzlGOztlQWZHLDJCQUFtQztPQUFRLG1CQUFzQzs7OztRQWtCdkYsMkJBQWtDOzhCQUFsQywyQkFBa0M7O0FBQWxDLGlCQUFBLDJCQUFrQyxHQUFsQztBQ3hFUSw4Q0FBUyxTQUFTLENBQUMsQ0FBQztBRHlFMUIsZ0JBQUEsQ0FBQSxJQUFJLEdBQUcsaUJBQWlCLENBQUM7U0FLMUI7O0FBTkQsbUNBQWtDLFdBR3RCLE1BQU0sR0FBQSxnQkFBQyxHQUF3QixFQUFFLE1BQWMsRUFBRSxLQUF3QixFQUFBO0FBQ2pGLG1CQUFPLHlCQXBkVCxjQUFjLENBb2RVLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0M7O2VBTEgsMkJBQWtDO09BQVEsbUJBQXNDIiwiZmlsZSI6ImNvbnRlbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVXBzZXJ0LCB7XG4gIEluc2VydGlvbixcbiAgQ2F1dGlvdXNJbnNlcnRpb24sXG4gIFRydXN0aW5nSW5zZXJ0aW9uLFxuXG4gIGlzU2FmZVN0cmluZyxcbiAgaXNOb2RlLFxuICBpc1N0cmluZyxcblxuICBjYXV0aW91c0luc2VydCxcbiAgdHJ1c3RpbmdJbnNlcnRcbn0gZnJvbSAnLi4vLi4vdXBzZXJ0JztcbmltcG9ydCB7IGlzQ29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERPTVRyZWVDb25zdHJ1Y3Rpb24gfSBmcm9tICcuLi8uLi9kb20vaGVscGVyJztcbmltcG9ydCB7IE9wU2VxLCBPcGNvZGUsIE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDb21waWxlZEV4cHJlc3Npb24gfSBmcm9tICcuLi9leHByZXNzaW9ucyc7XG5pbXBvcnQgeyBWTSwgVXBkYXRpbmdWTSB9IGZyb20gJy4uLy4uL3ZtJztcbmltcG9ydCB7IFRyeU9wY29kZSwgVk1TdGF0ZSB9IGZyb20gJy4uLy4uL3ZtL3VwZGF0ZSc7XG5pbXBvcnQgeyBFbnRlck9wY29kZSB9IGZyb20gJy4vdm0nO1xuaW1wb3J0IHsgUmVmZXJlbmNlLCBSZWZlcmVuY2VDYWNoZSwgVXBkYXRhYmxlVGFnLCBpc01vZGlmaWVkLCBpc0NvbnN0LCBtYXAgfSBmcm9tICdnbGltbWVyLXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBPcGFxdWUsIExpbmtlZExpc3QgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuaW1wb3J0IHsgQ3Vyc29yLCBjbGVhciB9IGZyb20gJy4uLy4uL2JvdW5kcyc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJy4uLy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgQ29tcGlsZUludG9MaXN0IH0gZnJvbSAnLi4vLi4vY29tcGlsZXInO1xuaW1wb3J0IE9wY29kZUJ1aWxkZXJEU0wgZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7IENvbmRpdGlvbmFsUmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcyc7XG5pbXBvcnQgeyBBcmdzIH0gZnJvbSAnLi4vLi4vc3ludGF4L2NvcmUnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBVcGRhdGFibGVCbG9ja1RyYWNrZXIgfSBmcm9tICcuLi8uLi9idWlsZGVyJztcbmltcG9ydCBTeW1ib2xUYWJsZSBmcm9tICcuLi8uLi9zeW1ib2wtdGFibGUnO1xuXG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlOiBPcGFxdWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlWyd0b1N0cmluZyddICE9PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVGV4dFZhbHVlKHZhbHVlOiBPcGFxdWUpOiBzdHJpbmcge1xuICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVUcnVzdGVkVmFsdWUodmFsdWU6IE9wYXF1ZSk6IFRydXN0aW5nSW5zZXJ0aW9uIHtcbiAgaWYgKGlzRW1wdHkodmFsdWUpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU2FmZVN0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUudG9IVE1MKCk7XG4gIH1cbiAgaWYgKGlzTm9kZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZTogT3BhcXVlKTogQ2F1dGlvdXNJbnNlcnRpb24ge1xuICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTYWZlU3RyaW5nKHZhbHVlKSB8fCBpc05vZGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwZW5kT3Bjb2RlPFQgZXh0ZW5kcyBJbnNlcnRpb24+IGV4dGVuZHMgT3Bjb2RlIHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IG5vcm1hbGl6ZShyZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+KTogUmVmZXJlbmNlPFQ+O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUKTogVXBzZXJ0O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgdXBkYXRlV2l0aCh2bTogVk0sIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxUPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGVPcGNvZGU8VD47XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgbGV0IHJlZmVyZW5jZSA9IHZtLmZyYW1lLmdldE9wZXJhbmQoKTtcbiAgICBsZXQgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplKHJlZmVyZW5jZSk7XG5cbiAgICBsZXQgdmFsdWUsIGNhY2hlO1xuXG4gICAgaWYgKGlzQ29uc3QocmVmZXJlbmNlKSkge1xuICAgICAgdmFsdWUgPSBub3JtYWxpemVkLnZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKG5vcm1hbGl6ZWQpO1xuICAgICAgdmFsdWUgPSBjYWNoZS5wZWVrKCk7XG4gICAgfVxuXG4gICAgbGV0IHN0YWNrID0gdm0uc3RhY2soKTtcbiAgICBsZXQgdXBzZXJ0ID0gdGhpcy5pbnNlcnQodm0uZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKSwgc3RhY2ssIHZhbHVlKTtcbiAgICBsZXQgYm91bmRzID0gbmV3IEZyYWdtZW50KHVwc2VydC5ib3VuZHMpO1xuXG4gICAgc3RhY2submV3Qm91bmRzKGJvdW5kcyk7XG5cbiAgICBpZiAoY2FjaGUgLyogaS5lLiAhaXNDb25zdChyZWZlcmVuY2UpICovKSB7XG4gICAgICB2bS51cGRhdGVXaXRoKHRoaXMudXBkYXRlV2l0aCh2bSwgcmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbXCIkT1BFUkFORFwiXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEd1YXJkZWRBcHBlbmRPcGNvZGU8VCBleHRlbmRzIEluc2VydGlvbj4gZXh0ZW5kcyBBcHBlbmRPcGNvZGU8VD4ge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgQXBwZW5kT3Bjb2RlOiB0eXBlb2YgT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUgfCB0eXBlb2YgT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGU7XG4gIHByaXZhdGUgZGVvcHRlZDogT3BTZXEgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXhwcmVzc2lvbjogQ29tcGlsZWRFeHByZXNzaW9uPGFueT4sIHByaXZhdGUgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIGlmICh0aGlzLmRlb3B0ZWQpIHtcbiAgICAgIHZtLnB1c2hFdmFsRnJhbWUodGhpcy5kZW9wdGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uZXZhbHVhdGVPcGVyYW5kKHRoaXMuZXhwcmVzc2lvbik7XG5cbiAgICAgIGxldCB2YWx1ZSA9IHZtLmZyYW1lLmdldE9wZXJhbmQoKS52YWx1ZSgpO1xuXG4gICAgICBpZihpc0NvbXBvbmVudERlZmluaXRpb24odmFsdWUpKSB7XG4gICAgICAgIHZtLnB1c2hFdmFsRnJhbWUodGhpcy5kZW9wdCh2bS5lbnYpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1cGVyLmV2YWx1YXRlKHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVvcHQoZW52OiBFbnZpcm9ubWVudCk6IE9wU2VxIHsgLy8gUHVibGljIGJlY2F1c2UgaXQncyB1c2VkIGluIHRoZSBsYXp5IGRlb3B0XG4gICAgLy8gQXQgY29tcGlsZSB0aW1lLCB3ZSBkZXRlcm1pbmVkIHRoYXQgdGhpcyBhcHBlbmQgY2FsbHNpdGUgbWlnaHQgcmVmZXJcbiAgICAvLyB0byBhIGxvY2FsIHZhcmlhYmxlL3Byb3BlcnR5IGxvb2t1cCB0aGF0IHJlc29sdmVzIHRvIGEgY29tcG9uZW50XG4gICAgLy8gZGVmaW5pdGlvbiBhdCBydW50aW1lLlxuICAgIC8vXG4gICAgLy8gV2UgY291bGQgaGF2ZSBlYWdlcmx5IGNvbXBpbGVkIHRoaXMgY2FsbHNpdGUgaW50byBzb21ldGhpbmcgbGlrZSB0aGlzOlxuICAgIC8vXG4gICAgLy8gICB7eyNpZiAoaXMtY29tcG9uZW50LWRlZmluaXRpb24gZm9vKX19XG4gICAgLy8gICAgIHt7Y29tcG9uZW50IGZvb319XG4gICAgLy8gICB7e2Vsc2V9fVxuICAgIC8vICAgICB7e2Zvb319XG4gICAgLy8gICB7ey9pZn19XG4gICAgLy9cbiAgICAvLyBIb3dldmVyLCBpbiBwcmFjdGljZSwgdGhlcmUgbWlnaHQgYmUgYSBsYXJnZSBhbW91dCBvZiB0aGVzZSBjYWxsc2l0ZXNcbiAgICAvLyBhbmQgbW9zdCBvZiB0aGVtIHdvdWxkIHJlc29sdmUgdG8gYSBzaW1wbGUgdmFsdWUgbG9va3VwLiBUaGVyZWZvcmUsIHdlXG4gICAgLy8gdHJpZWQgdG8gYmUgb3B0aW1pc3RpYyBhbmQgYXNzdW1lZCB0aGF0IHRoZSBjYWxsc2l0ZSB3aWxsIHJlc29sdmUgdG9cbiAgICAvLyBhcHBlbmRpbmcgYSBzaW1wbGUgdmFsdWUuXG4gICAgLy9cbiAgICAvLyBIb3dldmVyLCB3ZSBoYXZlIHJlYWNoZWQgaGVyZSBiZWNhdXNlIGF0IHJ1bnRpbWUsIHRoZSBndWFyZCBjb25kaXRpb25hbFxuICAgIC8vIGhhdmUgZGV0ZWN0ZWQgdGhhdCB0aGlzIGNhbGxzaXRlIGlzIGluZGVlZCByZWZlcnJpbmcgdG8gYSBjb21wb25lbnRcbiAgICAvLyBkZWZpbml0aW9uIG9iamVjdC4gU2luY2UgdGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgdHJ1ZSBmb3Igb3RoZXJcbiAgICAvLyBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2FsbHNpdGUsIGl0IGlzIG5vdyBhcHByb3BpYXRlIHRvIGRlb3B0IGludG8gdGhlXG4gICAgLy8gZXhwYW5kZWQgdmVyc2lvbiB0aGF0IGhhbmRsZXMgYm90aCBjYXNlcy4gVGhlIGNvbXBpbGF0aW9uIHdvdWxkIGxvb2tcbiAgICAvLyBsaWtlIHRoaXM6XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAgIEVudGVyKEJFR0lOLCBFTkQpXG4gICAgLy8gICBCRUdJTjogICAgICBOb29wXG4gICAgLy8gICAgICAgICAgICAgICBUZXN0KGlzLWNvbXBvbmVudC1kZWZpbml0aW9uKVxuICAgIC8vICAgICAgICAgICAgICAgSnVtcFVubGVzcyhWQUxVRSlcbiAgICAvLyAgIENPTVBPTkVOVDogIE5vb3BcbiAgICAvLyAgICAgICAgICAgICAgIFB1dER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uT3Bjb2RlXG4gICAgLy8gICAgICAgICAgICAgICBPcGVuQ29tcG9uZW50XG4gICAgLy8gICAgICAgICAgICAgICBDbG9zZUNvbXBvbmVudFxuICAgIC8vICAgICAgICAgICAgICAgSnVtcChFTkQpXG4gICAgLy8gICBWQUxVRTogICAgICBOb29wXG4gICAgLy8gICAgICAgICAgICAgICBPcHRpbWl6ZWRBcHBlbmRcbiAgICAvLyAgIEVORDogICAgICAgIE5vb3BcbiAgICAvLyAgICAgICAgICAgICAgIEV4aXRcbiAgICAvL1xuICAgIC8vIEtlZXAgaW4gbWluZCB0aGF0IGV2ZW4gaWYgd2UgKmRvbid0KiByZWFjaCBoZXJlIGF0IGluaXRpYWwgcmVuZGVyIHRpbWUsXG4gICAgLy8gaXQgaXMgc3RpbGwgcG9zc2libGUgKGFsdGhvdWdoIHF1aXRlIHJhcmUpIHRoYXQgdGhlIHNpbXBsZSB2YWx1ZSB3ZVxuICAgIC8vIGVuY291bnRlciBkdXJpbmcgaW5pdGlhbCByZW5kZXIgY291bGQgbGF0ZXIgY2hhbmdlIGludG8gYSBjb21wb25lbnRcbiAgICAvLyBkZWZpbml0aW9uIG9iamVjdCBhdCB1cGRhdGUgdGltZS4gVGhhdCBpcyBoYW5kbGVkIGJ5IHRoZSBcImxhenkgZGVvcHRcIlxuICAgIC8vIGNvZGUgb24gdGhlIHVwZGF0ZSBzaWRlIChzY3JvbGwgZG93biBmb3IgdGhlIG5leHQgYmlnIGJsb2NrIG9mIGNvbW1lbnQpLlxuXG4gICAgbGV0IGJ1ZmZlciA9IG5ldyBDb21waWxlSW50b0xpc3QoZW52LCBudWxsKTtcbiAgICBsZXQgZHNsID0gbmV3IE9wY29kZUJ1aWxkZXJEU0woYnVmZmVyLCB0aGlzLnN5bWJvbFRhYmxlLCBlbnYpO1xuXG4gICAgZHNsLmJsb2NrKHsgdGVtcGxhdGVzOiBudWxsIH0sIChkc2wsIEJFR0lOLCBFTkQpID0+IHtcbiAgICAgIGRzbC5wdXRWYWx1ZSh0aGlzLmV4cHJlc3Npb24pO1xuICAgICAgZHNsLnRlc3QoSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlLmNyZWF0ZSk7XG4gICAgICBkc2wuanVtcFVubGVzcygnVkFMVUUnKTtcbiAgICAgIGRzbC5sYWJlbCgnQ09NUE9ORU5UJyk7XG4gICAgICBkc2wucHV0RHluYW1pY0NvbXBvbmVudERlZmluaXRpb24oKTtcbiAgICAgIGRzbC5vcGVuQ29tcG9uZW50KEFyZ3MuZW1wdHkoKSk7XG4gICAgICBkc2wuY2xvc2VDb21wb25lbnQoKTtcbiAgICAgIGRzbC5qdW1wKEVORCk7XG4gICAgICBkc2wubGFiZWwoJ1ZBTFVFJyk7XG4gICAgICBkc2wuYXBwZW5kKG5ldyB0aGlzLkFwcGVuZE9wY29kZSgpKTtcbiAgICB9KTtcblxuICAgIGxldCBkZW9wdGVkID0gdGhpcy5kZW9wdGVkID0gZHNsLnRvT3BTZXEoKTtcblxuICAgIC8vIEZyb20gdGhpcyBwb2ludCBvbiwgd2UgaGF2ZSBlc3NlbnRpYWxseSByZXBsYWNlZCBvdXJzZWx2ZSB3aXRoIGEgbmV3IHNldFxuICAgIC8vIG9mIG9wY29kZXMuIFNpbmNlIHdlIHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGluZyB0aGUgbmV3L2Rlb3B0ZWQgY29kZSwgaXQnc1xuICAgIC8vIGEgZ29vZCBpZGVhIChhcyBhIHBhdHRlcm4pIHRvIG51bGwgb3V0IGFueSB1bm5lZWRlZCBmaWVsZHMgaGVyZSB0byBhdm9pZFxuICAgIC8vIGhvbGRpbmcgb24gdG8gdW5uZWVkZWQvc3RhbGUgb2JqZWN0czpcblxuICAgIHRoaXMuZXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgICByZXR1cm4gZGVvcHRlZDtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgeyBfZ3VpZDogZ3VpZCwgdHlwZSwgZGVvcHRlZCB9ID0gdGhpcztcblxuICAgIGlmIChkZW9wdGVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBndWlkLFxuICAgICAgICB0eXBlLFxuICAgICAgICBkZW9wdGVkOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogZGVvcHRlZC50b0FycmF5KCkubWFwKG9wID0+IG9wLnRvSlNPTigpKVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ3VpZCxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgYXJnczogW3RoaXMuZXhwcmVzc2lvbi50b0pTT04oKV1cbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIElzQ29tcG9uZW50RGVmaW5pdGlvblJlZmVyZW5jZSBleHRlbmRzIENvbmRpdGlvbmFsUmVmZXJlbmNlIHtcbiAgc3RhdGljIGNyZWF0ZShpbm5lcjogUmVmZXJlbmNlPE9wYXF1ZT4pOiBJc0NvbXBvbmVudERlZmluaXRpb25SZWZlcmVuY2Uge1xuICAgIHJldHVybiBuZXcgSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlKGlubmVyKTtcbiAgfVxuXG4gIHRvQm9vbCh2YWx1ZTogT3BhcXVlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzQ29tcG9uZW50RGVmaW5pdGlvbih2YWx1ZSk7XG4gIH1cbn1cblxuYWJzdHJhY3QgY2xhc3MgVXBkYXRlT3Bjb2RlPFQgZXh0ZW5kcyBJbnNlcnRpb24+IGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFQ+LFxuICAgIHByb3RlY3RlZCBib3VuZHM6IEZyYWdtZW50LFxuICAgIHByb3RlY3RlZCB1cHNlcnQ6IFVwc2VydFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gY2FjaGUudGFnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVCk6IFVwc2VydDtcblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuY2FjaGUucmV2YWxpZGF0ZSgpO1xuXG4gICAgaWYgKGlzTW9kaWZpZWQodmFsdWUpKSB7XG4gICAgICBsZXQgeyBib3VuZHMsIHVwc2VydCB9ID0gdGhpcztcbiAgICAgIGxldCB7IGRvbSB9ID0gdm07XG5cbiAgICAgIGlmKCF0aGlzLnVwc2VydC51cGRhdGUoZG9tLCB2YWx1ZSkpIHtcbiAgICAgICAgbGV0IGN1cnNvciA9IG5ldyBDdXJzb3IoYm91bmRzLnBhcmVudEVsZW1lbnQoKSwgY2xlYXIoYm91bmRzKSk7XG4gICAgICAgIHVwc2VydCA9IHRoaXMudXBzZXJ0ID0gdGhpcy5pbnNlcnQodm0uZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKSwgY3Vyc29yLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGJvdW5kcy51cGRhdGUodXBzZXJ0LmJvdW5kcyk7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIGxldCB7IF9ndWlkOiBndWlkLCB0eXBlLCBjYWNoZSB9ID0gdGhpcztcblxuICAgIHJldHVybiB7XG4gICAgICBndWlkLFxuICAgICAgdHlwZSxcbiAgICAgIGRldGFpbHM6IHsgbGFzdFZhbHVlOiBKU09OLnN0cmluZ2lmeShjYWNoZS5wZWVrKCkpIH1cbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHdWFyZGVkVXBkYXRlT3Bjb2RlPFQgZXh0ZW5kcyBJbnNlcnRpb24+IGV4dGVuZHMgVXBkYXRlT3Bjb2RlPFQ+IHtcbiAgcHJpdmF0ZSBfdGFnOiBVcGRhdGFibGVUYWc7XG4gIHByaXZhdGUgZGVvcHRlZDogVHJ5T3Bjb2RlID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sXG4gICAgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFQ+LFxuICAgIGJvdW5kczogRnJhZ21lbnQsXG4gICAgdXBzZXJ0OiBVcHNlcnQsXG4gICAgcHJpdmF0ZSBhcHBlbmRPcGNvZGU6IEd1YXJkZWRBcHBlbmRPcGNvZGU8VD4sXG4gICAgcHJpdmF0ZSBzdGF0ZTogVk1TdGF0ZVxuICApIHtcbiAgICBzdXBlcihjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICAgIHRoaXMudGFnID0gdGhpcy5fdGFnID0gbmV3IFVwZGF0YWJsZVRhZyh0aGlzLnRhZyk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGlmICh0aGlzLmRlb3B0ZWQpIHtcbiAgICAgIHZtLmV2YWx1YXRlT3Bjb2RlKHRoaXMuZGVvcHRlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc0NvbXBvbmVudERlZmluaXRpb24odGhpcy5yZWZlcmVuY2UudmFsdWUoKSkpIHtcbiAgICAgICAgdGhpcy5sYXp5RGVvcHQodm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VwZXIuZXZhbHVhdGUodm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGF6eURlb3B0KHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgLy8gRHVyaWduIGluaXRpYWwgcmVuZGVyLCB3ZSBrbm93IHRoYXQgdGhlIHJlZmVyZW5jZSBkb2VzIG5vdCBjb250YWluIGFcbiAgICAvLyBjb21wb25lbnQgZGVmaW5pdGlvbiwgc28gd2Ugb3B0aW1pc3RpY2FsbHkgYXNzdW1lZCB0aGF0IHRoaXMgYXBwZW5kXG4gICAgLy8gaXMganVzdCBhIG5vcm1hbCBhcHBlbmQuIEhvd2V2ZXIsIGF0IHVwZGF0ZSB0aW1lLCB3ZSBkaXNjb3ZlcmVkIHRoYXRcbiAgICAvLyB0aGUgcmVmZXJlbmNlIGhhcyBzd2l0Y2hlZCBpbnRvIGNvbnRhaW5pbmcgYSBjb21wb25lbnQgZGVmaW5pdGlvbiwgc29cbiAgICAvLyB3ZSBuZWVkIHRvIGRvIGEgXCJsYXp5IGRlb3B0XCIsIHNpbXVsYXRpbmcgd2hhdCB3b3VsZCBoYXZlIGhhcHBlbmVkIGlmXG4gICAgLy8gd2UgaGFkIGRlY2lkZWQgdG8gcGVyZm9ybSB0aGUgZGVvcHQgaW4gdGhlIGZpcnN0IHBsYWNlIGR1cmluZyBpbml0aWFsXG4gICAgLy8gcmVuZGVyLlxuICAgIC8vXG4gICAgLy8gTW9yZSBjb25jcmV0ZWx5LCB3ZSB3b3VsZCBoYXZlIGV4cGFuZGVkIHRoZSBjdXJseSBpbnRvIGEgaWYvZWxzZSwgYW5kXG4gICAgLy8gYmFzZWQgb24gd2hldGhlciB0aGUgdmFsdWUgaXMgYSBjb21wb25lbnQgZGVmaW5pdGlvbiBvciBub3QsIHdlIHdvdWxkXG4gICAgLy8gaGF2ZSBlbnRlcmVkIGVpdGhlciB0aGUgZHluYW1pYyBjb21wb25lbnQgYnJhbmNoIG9yIHRoZSBzaW1wbGUgdmFsdWVcbiAgICAvLyBicmFuY2guXG4gICAgLy9cbiAgICAvLyBTaW5jZSB3ZSByZW5kZXJlZCBhIHNpbXBsZSB2YWx1ZSBkdXJpbmcgaW5pdGlhbCByZW5kZXIgKGFuZCBhbGwgdGhlXG4gICAgLy8gdXBkYXRlcyB1cCB1bnRpbCB0aGlzIHBvaW50KSwgd2UgbmVlZCB0byBwcmV0ZW5kIHRoYXQgdGhlIHJlc3VsdCBpc1xuICAgIC8vIHByb2R1Y2VkIGJ5IHRoZSBcIlZBTFVFXCIgYnJhbmNoIG9mIHRoZSBkZW9wdGVkIGFwcGVuZCBvcGNvZGU6XG4gICAgLy9cbiAgICAvLyAgIFRyeShCRUdJTiwgRU5EKVxuICAgIC8vICAgICBBc3NlcnQoSXNDb21wb25lbnREZWZpbml0aW9uLCBleHBlY3RlZD1mYWxzZSlcbiAgICAvLyAgICAgT3B0aW1pemVkVXBkYXRlXG4gICAgLy9cbiAgICAvLyBJbiB0aGlzIGNhc2UsIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBoYXMgc3dpdGNoZWQgZnJvbSBiZWluZyBhIHNpbXBsZVxuICAgIC8vIHZhbHVlIGludG8gYSBjb21wb25lbnQgZGVmaW5pdGlvbiwgd2hhdCB3b3VsZCBoYXZlIGhhcHBlbmVkIGlzIHRoYXRcbiAgICAvLyB0aGUgYXNzZXJ0IHdvdWxkIHRocm93LCBjYXVzaW5nIHRoZSBUcnkgb3Bjb2RlIHRvIHRlYXJkb3duIHRoZSBib3VuZHNcbiAgICAvLyBhbmQgcmVydW4gdGhlIG9yaWdpbmFsIGFwcGVuZCBvcGNvZGUuXG4gICAgLy9cbiAgICAvLyBTaW5jZSB0aGUgVHJ5IG9wY29kZSB3b3VsZCBoYXZlIG51a2VkIHRoZSB1cGRhdGluZyBvcGNvZGVzIGFueXdheSwgd2VcbiAgICAvLyB3b3VsZG4ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHNpbXVsYXRpbmcgdGhvc2UuIEFsbCB3ZSBoYXZlIHRvIGRvIGlzIHRvXG4gICAgLy8gZXhlY3V0ZSB0aGUgVHJ5IG9wY29kZSBhbmQgaW1tZWRpYXRlbHkgdGhyb3cuXG5cbiAgICBsZXQgeyBib3VuZHMsIGFwcGVuZE9wY29kZSwgc3RhdGUgfSA9IHRoaXM7XG5cbiAgICBsZXQgYXBwZW5kT3BzID0gYXBwZW5kT3Bjb2RlLmRlb3B0KHZtLmVudik7XG4gICAgbGV0IGVudGVyICAgICA9IGFwcGVuZE9wcy5oZWFkKCkgYXMgRW50ZXJPcGNvZGU7XG4gICAgbGV0IG9wcyAgICAgICA9IGVudGVyLnNsaWNlO1xuXG4gICAgbGV0IHRyYWNrZXIgPSBuZXcgVXBkYXRhYmxlQmxvY2tUcmFja2VyKGJvdW5kcy5wYXJlbnRFbGVtZW50KCkpO1xuICAgIHRyYWNrZXIubmV3Qm91bmRzKHRoaXMuYm91bmRzKTtcblxuICAgIGxldCBjaGlsZHJlbiA9IG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpO1xuXG4gICAgbGV0IGRlb3B0ZWQgPSB0aGlzLmRlb3B0ZWQgPSBuZXcgVHJ5T3Bjb2RlKG9wcywgc3RhdGUsIHRyYWNrZXIsIGNoaWxkcmVuKTtcblxuICAgIHRoaXMuX3RhZy51cGRhdGUoZGVvcHRlZC50YWcpO1xuXG4gICAgdm0uZXZhbHVhdGVPcGNvZGUoZGVvcHRlZCk7XG4gICAgdm0udGhyb3coKTtcblxuICAgIC8vIEZyb20gdGhpcyBwb2ludCBvbiwgd2UgaGF2ZSBlc3NlbnRpYWxseSByZXBsYWNlZCBvdXJzZWx2ZSB3aXRoIGEgbmV3XG4gICAgLy8gb3Bjb2RlLiBTaW5jZSB3ZSB3aWxsIGFsd2F5cyBiZSBleGVjdXRpbmcgdGhlIG5ldy9kZW9wdGVkIGNvZGUsIGl0J3MgYVxuICAgIC8vIGdvb2QgaWRlYSAoYXMgYSBwYXR0ZXJuKSB0byBudWxsIG91dCBhbnkgdW5uZWVkZWQgZmllbGRzIGhlcmUgdG8gYXZvaWRcbiAgICAvLyBob2xkaW5nIG9uIHRvIHVubmVlZGVkL3N0YWxlIG9iamVjdHM6XG5cbiAgICB0aGlzLl90YWcgICAgICAgICA9IG51bGw7XG4gICAgdGhpcy5yZWZlcmVuY2UgICAgPSBudWxsO1xuICAgIHRoaXMuY2FjaGUgICAgICAgID0gbnVsbDtcbiAgICB0aGlzLmJvdW5kcyAgICAgICA9IG51bGw7XG4gICAgdGhpcy51cHNlcnQgICAgICAgPSBudWxsO1xuICAgIHRoaXMuYXBwZW5kT3Bjb2RlID0gbnVsbDtcbiAgICB0aGlzLnN0YXRlICAgICAgICA9IG51bGw7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgX2d1aWQ6IGd1aWQsIHR5cGUsIGRlb3B0ZWQgfSA9IHRoaXM7XG5cbiAgICBpZiAoZGVvcHRlZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ3VpZCxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgZGVvcHRlZDogdHJ1ZSxcbiAgICAgICAgY2hpbGRyZW46IFtkZW9wdGVkLnRvSlNPTigpXVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN1cGVyLnRvSlNPTigpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUgZXh0ZW5kcyBBcHBlbmRPcGNvZGU8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtY2F1dGlvdXMtYXBwZW5kJztcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGgodm06IFZNLCByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8Q2F1dGlvdXNJbnNlcnRpb24+LCBib3VuZHM6IEZyYWdtZW50LCB1cHNlcnQ6IFVwc2VydCk6IE9wdGltaXplZENhdXRpb3VzVXBkYXRlT3Bjb2RlIHtcbiAgICByZXR1cm4gbmV3IE9wdGltaXplZENhdXRpb3VzVXBkYXRlT3Bjb2RlKGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gIH1cbn1cblxuY2xhc3MgT3B0aW1pemVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUgZXh0ZW5kcyBVcGRhdGVPcGNvZGU8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtY2F1dGlvdXMtdXBkYXRlJztcblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBDYXV0aW91c0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEd1YXJkZWRDYXV0aW91c0FwcGVuZE9wY29kZSBleHRlbmRzIEd1YXJkZWRBcHBlbmRPcGNvZGU8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdndWFyZGVkLWNhdXRpb3VzLWFwcGVuZCc7XG5cbiAgcHJvdGVjdGVkIEFwcGVuZE9wY29kZSA9IE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlO1xuXG4gIHByb3RlY3RlZCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVWYWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBDYXV0aW91c0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlV2l0aCh2bTogVk0sIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxDYXV0aW91c0luc2VydGlvbj4sIGJvdW5kczogRnJhZ21lbnQsIHVwc2VydDogVXBzZXJ0KTogR3VhcmRlZENhdXRpb3VzVXBkYXRlT3Bjb2RlIHtcbiAgICByZXR1cm4gbmV3IEd1YXJkZWRDYXV0aW91c1VwZGF0ZU9wY29kZShyZWZlcmVuY2UsIGNhY2hlLCBib3VuZHMsIHVwc2VydCwgdGhpcywgdm0uY2FwdHVyZSgpKTtcbiAgfVxufVxuXG5jbGFzcyBHdWFyZGVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkVXBkYXRlT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnZ3VhcmRlZC1jYXV0aW91cy11cGRhdGUnO1xuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IENhdXRpb3VzSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gY2F1dGlvdXNJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGUgZXh0ZW5kcyBBcHBlbmRPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtdHJ1c3RpbmctYXBwZW5kJztcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVHJ1c3RlZFZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoKHZtOiBWTSwgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFRydXN0aW5nSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBPcHRpbWl6ZWRUcnVzdGluZ1VwZGF0ZU9wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBPcHRpbWl6ZWRUcnVzdGluZ1VwZGF0ZU9wY29kZShjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIE9wdGltaXplZFRydXN0aW5nVXBkYXRlT3Bjb2RlIGV4dGVuZHMgVXBkYXRlT3Bjb2RlPFRydXN0aW5nSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnb3B0aW1pemVkLXRydXN0aW5nLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVHJ1c3RpbmdJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHdWFyZGVkVHJ1c3RpbmdBcHBlbmRPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkQXBwZW5kT3Bjb2RlPFRydXN0aW5nSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnZ3VhcmRlZC10cnVzdGluZy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBBcHBlbmRPcGNvZGUgPSBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZTtcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVHJ1c3RlZFZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoKHZtOiBWTSwgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFRydXN0aW5nSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBHdWFyZGVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUge1xuICAgIHJldHVybiBuZXcgR3VhcmRlZFRydXN0aW5nVXBkYXRlT3Bjb2RlKHJlZmVyZW5jZSwgY2FjaGUsIGJvdW5kcywgdXBzZXJ0LCB0aGlzLCB2bS5jYXB0dXJlKCkpO1xuICB9XG59XG5cbmNsYXNzIEd1YXJkZWRUcnVzdGluZ1VwZGF0ZU9wY29kZSBleHRlbmRzIEd1YXJkZWRVcGRhdGVPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICd0cnVzdGluZy11cGRhdGUnO1xuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNTYWZlU3RyaW5nLCBpc05vZGUsIGlzU3RyaW5nLCBjYXV0aW91c0luc2VydCwgdHJ1c3RpbmdJbnNlcnQgfSBmcm9tICcuLi8uLi91cHNlcnQnO1xuaW1wb3J0IHsgaXNDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgT3Bjb2RlLCBVcGRhdGluZ09wY29kZSB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgVHJ5T3Bjb2RlIH0gZnJvbSAnLi4vLi4vdm0vdXBkYXRlJztcbmltcG9ydCB7IFJlZmVyZW5jZUNhY2hlLCBVcGRhdGFibGVUYWcsIGlzTW9kaWZpZWQsIGlzQ29uc3QsIG1hcCB9IGZyb20gJ2dsaW1tZXItcmVmZXJlbmNlJztcbmltcG9ydCB7IExpbmtlZExpc3QgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuaW1wb3J0IHsgQ3Vyc29yLCBjbGVhciB9IGZyb20gJy4uLy4uL2JvdW5kcyc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJy4uLy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgQ29tcGlsZUludG9MaXN0IH0gZnJvbSAnLi4vLi4vY29tcGlsZXInO1xuaW1wb3J0IE9wY29kZUJ1aWxkZXJEU0wgZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7IENvbmRpdGlvbmFsUmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcyc7XG5pbXBvcnQgeyBBcmdzIH0gZnJvbSAnLi4vLi4vc3ludGF4L2NvcmUnO1xuaW1wb3J0IHsgVXBkYXRhYmxlQmxvY2tUcmFja2VyIH0gZnJvbSAnLi4vLi4vYnVpbGRlcic7XG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlWyd0b1N0cmluZyddICE9PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVRleHRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVRydXN0ZWRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNTYWZlU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUudG9IVE1MKCk7XG4gICAgfVxuICAgIGlmIChpc05vZGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzU2FmZVN0cmluZyh2YWx1ZSkgfHwgaXNOb2RlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuZXhwb3J0IGNsYXNzIEFwcGVuZE9wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gICAgZXZhbHVhdGUodm0pIHtcbiAgICAgICAgbGV0IHJlZmVyZW5jZSA9IHZtLmZyYW1lLmdldE9wZXJhbmQoKTtcbiAgICAgICAgbGV0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZShyZWZlcmVuY2UpO1xuICAgICAgICBsZXQgdmFsdWUsIGNhY2hlO1xuICAgICAgICBpZiAoaXNDb25zdChyZWZlcmVuY2UpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG5vcm1hbGl6ZWQudmFsdWUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKG5vcm1hbGl6ZWQpO1xuICAgICAgICAgICAgdmFsdWUgPSBjYWNoZS5wZWVrKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0YWNrID0gdm0uc3RhY2soKTtcbiAgICAgICAgbGV0IHVwc2VydCA9IHRoaXMuaW5zZXJ0KHZtLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCksIHN0YWNrLCB2YWx1ZSk7XG4gICAgICAgIGxldCBib3VuZHMgPSBuZXcgRnJhZ21lbnQodXBzZXJ0LmJvdW5kcyk7XG4gICAgICAgIHN0YWNrLm5ld0JvdW5kcyhib3VuZHMpO1xuICAgICAgICBpZiAoY2FjaGUgLyogaS5lLiAhaXNDb25zdChyZWZlcmVuY2UpICovKSB7XG4gICAgICAgICAgICB2bS51cGRhdGVXaXRoKHRoaXMudXBkYXRlV2l0aCh2bSwgcmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgYXJnczogW1wiJE9QRVJBTkRcIl1cbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgR3VhcmRlZEFwcGVuZE9wY29kZSBleHRlbmRzIEFwcGVuZE9wY29kZSB7XG4gICAgY29uc3RydWN0b3IoZXhwcmVzc2lvbiwgc3ltYm9sVGFibGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy5zeW1ib2xUYWJsZSA9IHN5bWJvbFRhYmxlO1xuICAgICAgICB0aGlzLmRlb3B0ZWQgPSBudWxsO1xuICAgIH1cbiAgICBldmFsdWF0ZSh2bSkge1xuICAgICAgICBpZiAodGhpcy5kZW9wdGVkKSB7XG4gICAgICAgICAgICB2bS5wdXNoRXZhbEZyYW1lKHRoaXMuZGVvcHRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2bS5ldmFsdWF0ZU9wZXJhbmQodGhpcy5leHByZXNzaW9uKTtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHZtLmZyYW1lLmdldE9wZXJhbmQoKS52YWx1ZSgpO1xuICAgICAgICAgICAgaWYgKGlzQ29tcG9uZW50RGVmaW5pdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2bS5wdXNoRXZhbEZyYW1lKHRoaXMuZGVvcHQodm0uZW52KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdXBlci5ldmFsdWF0ZSh2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVvcHQoZW52KSB7XG4gICAgICAgIC8vIEF0IGNvbXBpbGUgdGltZSwgd2UgZGV0ZXJtaW5lZCB0aGF0IHRoaXMgYXBwZW5kIGNhbGxzaXRlIG1pZ2h0IHJlZmVyXG4gICAgICAgIC8vIHRvIGEgbG9jYWwgdmFyaWFibGUvcHJvcGVydHkgbG9va3VwIHRoYXQgcmVzb2x2ZXMgdG8gYSBjb21wb25lbnRcbiAgICAgICAgLy8gZGVmaW5pdGlvbiBhdCBydW50aW1lLlxuICAgICAgICAvL1xuICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGVhZ2VybHkgY29tcGlsZWQgdGhpcyBjYWxsc2l0ZSBpbnRvIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAge3sjaWYgKGlzLWNvbXBvbmVudC1kZWZpbml0aW9uIGZvbyl9fVxuICAgICAgICAvLyAgICAge3tjb21wb25lbnQgZm9vfX1cbiAgICAgICAgLy8gICB7e2Vsc2V9fVxuICAgICAgICAvLyAgICAge3tmb299fVxuICAgICAgICAvLyAgIHt7L2lmfX1cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSG93ZXZlciwgaW4gcHJhY3RpY2UsIHRoZXJlIG1pZ2h0IGJlIGEgbGFyZ2UgYW1vdXQgb2YgdGhlc2UgY2FsbHNpdGVzXG4gICAgICAgIC8vIGFuZCBtb3N0IG9mIHRoZW0gd291bGQgcmVzb2x2ZSB0byBhIHNpbXBsZSB2YWx1ZSBsb29rdXAuIFRoZXJlZm9yZSwgd2VcbiAgICAgICAgLy8gdHJpZWQgdG8gYmUgb3B0aW1pc3RpYyBhbmQgYXNzdW1lZCB0aGF0IHRoZSBjYWxsc2l0ZSB3aWxsIHJlc29sdmUgdG9cbiAgICAgICAgLy8gYXBwZW5kaW5nIGEgc2ltcGxlIHZhbHVlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBIb3dldmVyLCB3ZSBoYXZlIHJlYWNoZWQgaGVyZSBiZWNhdXNlIGF0IHJ1bnRpbWUsIHRoZSBndWFyZCBjb25kaXRpb25hbFxuICAgICAgICAvLyBoYXZlIGRldGVjdGVkIHRoYXQgdGhpcyBjYWxsc2l0ZSBpcyBpbmRlZWQgcmVmZXJyaW5nIHRvIGEgY29tcG9uZW50XG4gICAgICAgIC8vIGRlZmluaXRpb24gb2JqZWN0LiBTaW5jZSB0aGlzIGlzIGxpa2VseSBnb2luZyB0byBiZSB0cnVlIGZvciBvdGhlclxuICAgICAgICAvLyBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2FsbHNpdGUsIGl0IGlzIG5vdyBhcHByb3BpYXRlIHRvIGRlb3B0IGludG8gdGhlXG4gICAgICAgIC8vIGV4cGFuZGVkIHZlcnNpb24gdGhhdCBoYW5kbGVzIGJvdGggY2FzZXMuIFRoZSBjb21waWxhdGlvbiB3b3VsZCBsb29rXG4gICAgICAgIC8vIGxpa2UgdGhpczpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICAgICAgICAgICBFbnRlcihCRUdJTiwgRU5EKVxuICAgICAgICAvLyAgIEJFR0lOOiAgICAgIE5vb3BcbiAgICAgICAgLy8gICAgICAgICAgICAgICBUZXN0KGlzLWNvbXBvbmVudC1kZWZpbml0aW9uKVxuICAgICAgICAvLyAgICAgICAgICAgICAgIEp1bXBVbmxlc3MoVkFMVUUpXG4gICAgICAgIC8vICAgQ09NUE9ORU5UOiAgTm9vcFxuICAgICAgICAvLyAgICAgICAgICAgICAgIFB1dER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uT3Bjb2RlXG4gICAgICAgIC8vICAgICAgICAgICAgICAgT3BlbkNvbXBvbmVudFxuICAgICAgICAvLyAgICAgICAgICAgICAgIENsb3NlQ29tcG9uZW50XG4gICAgICAgIC8vICAgICAgICAgICAgICAgSnVtcChFTkQpXG4gICAgICAgIC8vICAgVkFMVUU6ICAgICAgTm9vcFxuICAgICAgICAvLyAgICAgICAgICAgICAgIE9wdGltaXplZEFwcGVuZFxuICAgICAgICAvLyAgIEVORDogICAgICAgIE5vb3BcbiAgICAgICAgLy8gICAgICAgICAgICAgICBFeGl0XG4gICAgICAgIC8vXG4gICAgICAgIC8vIEtlZXAgaW4gbWluZCB0aGF0IGV2ZW4gaWYgd2UgKmRvbid0KiByZWFjaCBoZXJlIGF0IGluaXRpYWwgcmVuZGVyIHRpbWUsXG4gICAgICAgIC8vIGl0IGlzIHN0aWxsIHBvc3NpYmxlIChhbHRob3VnaCBxdWl0ZSByYXJlKSB0aGF0IHRoZSBzaW1wbGUgdmFsdWUgd2VcbiAgICAgICAgLy8gZW5jb3VudGVyIGR1cmluZyBpbml0aWFsIHJlbmRlciBjb3VsZCBsYXRlciBjaGFuZ2UgaW50byBhIGNvbXBvbmVudFxuICAgICAgICAvLyBkZWZpbml0aW9uIG9iamVjdCBhdCB1cGRhdGUgdGltZS4gVGhhdCBpcyBoYW5kbGVkIGJ5IHRoZSBcImxhenkgZGVvcHRcIlxuICAgICAgICAvLyBjb2RlIG9uIHRoZSB1cGRhdGUgc2lkZSAoc2Nyb2xsIGRvd24gZm9yIHRoZSBuZXh0IGJpZyBibG9jayBvZiBjb21tZW50KS5cbiAgICAgICAgbGV0IGJ1ZmZlciA9IG5ldyBDb21waWxlSW50b0xpc3QoZW52LCBudWxsKTtcbiAgICAgICAgbGV0IGRzbCA9IG5ldyBPcGNvZGVCdWlsZGVyRFNMKGJ1ZmZlciwgdGhpcy5zeW1ib2xUYWJsZSwgZW52KTtcbiAgICAgICAgZHNsLmJsb2NrKHsgdGVtcGxhdGVzOiBudWxsIH0sIChkc2wsIEJFR0lOLCBFTkQpID0+IHtcbiAgICAgICAgICAgIGRzbC5wdXRWYWx1ZSh0aGlzLmV4cHJlc3Npb24pO1xuICAgICAgICAgICAgZHNsLnRlc3QoSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlLmNyZWF0ZSk7XG4gICAgICAgICAgICBkc2wuanVtcFVubGVzcygnVkFMVUUnKTtcbiAgICAgICAgICAgIGRzbC5sYWJlbCgnQ09NUE9ORU5UJyk7XG4gICAgICAgICAgICBkc2wucHV0RHluYW1pY0NvbXBvbmVudERlZmluaXRpb24oKTtcbiAgICAgICAgICAgIGRzbC5vcGVuQ29tcG9uZW50KEFyZ3MuZW1wdHkoKSk7XG4gICAgICAgICAgICBkc2wuY2xvc2VDb21wb25lbnQoKTtcbiAgICAgICAgICAgIGRzbC5qdW1wKEVORCk7XG4gICAgICAgICAgICBkc2wubGFiZWwoJ1ZBTFVFJyk7XG4gICAgICAgICAgICBkc2wuYXBwZW5kKG5ldyB0aGlzLkFwcGVuZE9wY29kZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBkZW9wdGVkID0gdGhpcy5kZW9wdGVkID0gZHNsLnRvT3BTZXEoKTtcbiAgICAgICAgLy8gRnJvbSB0aGlzIHBvaW50IG9uLCB3ZSBoYXZlIGVzc2VudGlhbGx5IHJlcGxhY2VkIG91cnNlbHZlIHdpdGggYSBuZXcgc2V0XG4gICAgICAgIC8vIG9mIG9wY29kZXMuIFNpbmNlIHdlIHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGluZyB0aGUgbmV3L2Rlb3B0ZWQgY29kZSwgaXQnc1xuICAgICAgICAvLyBhIGdvb2QgaWRlYSAoYXMgYSBwYXR0ZXJuKSB0byBudWxsIG91dCBhbnkgdW5uZWVkZWQgZmllbGRzIGhlcmUgdG8gYXZvaWRcbiAgICAgICAgLy8gaG9sZGluZyBvbiB0byB1bm5lZWRlZC9zdGFsZSBvYmplY3RzOlxuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBudWxsO1xuICAgICAgICByZXR1cm4gZGVvcHRlZDtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBsZXQgeyBfZ3VpZDogZ3VpZCwgdHlwZSwgZGVvcHRlZCB9ID0gdGhpcztcbiAgICAgICAgaWYgKGRlb3B0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZ3VpZCxcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGRlb3B0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IGRlb3B0ZWQudG9BcnJheSgpLm1hcChvcCA9PiBvcC50b0pTT04oKSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGd1aWQsXG4gICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICBhcmdzOiBbdGhpcy5leHByZXNzaW9uLnRvSlNPTigpXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmNsYXNzIElzQ29tcG9uZW50RGVmaW5pdGlvblJlZmVyZW5jZSBleHRlbmRzIENvbmRpdGlvbmFsUmVmZXJlbmNlIHtcbiAgICBzdGF0aWMgY3JlYXRlKGlubmVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlKGlubmVyKTtcbiAgICB9XG4gICAgdG9Cb29sKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpc0NvbXBvbmVudERlZmluaXRpb24odmFsdWUpO1xuICAgIH1cbn1cbmNsYXNzIFVwZGF0ZU9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihjYWNoZSwgYm91bmRzLCB1cHNlcnQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5jYWNoZSA9IGNhY2hlO1xuICAgICAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgICAgICAgdGhpcy51cHNlcnQgPSB1cHNlcnQ7XG4gICAgICAgIHRoaXMudGFnID0gY2FjaGUudGFnO1xuICAgIH1cbiAgICBldmFsdWF0ZSh2bSkge1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmNhY2hlLnJldmFsaWRhdGUoKTtcbiAgICAgICAgaWYgKGlzTW9kaWZpZWQodmFsdWUpKSB7XG4gICAgICAgICAgICBsZXQgeyBib3VuZHMsIHVwc2VydCB9ID0gdGhpcztcbiAgICAgICAgICAgIGxldCB7IGRvbSB9ID0gdm07XG4gICAgICAgICAgICBpZiAoIXRoaXMudXBzZXJ0LnVwZGF0ZShkb20sIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGxldCBjdXJzb3IgPSBuZXcgQ3Vyc29yKGJvdW5kcy5wYXJlbnRFbGVtZW50KCksIGNsZWFyKGJvdW5kcykpO1xuICAgICAgICAgICAgICAgIHVwc2VydCA9IHRoaXMudXBzZXJ0ID0gdGhpcy5pbnNlcnQodm0uZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKSwgY3Vyc29yLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib3VuZHMudXBkYXRlKHVwc2VydC5ib3VuZHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgbGV0IHsgX2d1aWQ6IGd1aWQsIHR5cGUsIGNhY2hlIH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ3VpZCxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBkZXRhaWxzOiB7IGxhc3RWYWx1ZTogSlNPTi5zdHJpbmdpZnkoY2FjaGUucGVlaygpKSB9XG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEd1YXJkZWRVcGRhdGVPcGNvZGUgZXh0ZW5kcyBVcGRhdGVPcGNvZGUge1xuICAgIGNvbnN0cnVjdG9yKHJlZmVyZW5jZSwgY2FjaGUsIGJvdW5kcywgdXBzZXJ0LCBhcHBlbmRPcGNvZGUsIHN0YXRlKSB7XG4gICAgICAgIHN1cGVyKGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuICAgICAgICB0aGlzLmFwcGVuZE9wY29kZSA9IGFwcGVuZE9wY29kZTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLmRlb3B0ZWQgPSBudWxsO1xuICAgICAgICB0aGlzLnRhZyA9IHRoaXMuX3RhZyA9IG5ldyBVcGRhdGFibGVUYWcodGhpcy50YWcpO1xuICAgIH1cbiAgICBldmFsdWF0ZSh2bSkge1xuICAgICAgICBpZiAodGhpcy5kZW9wdGVkKSB7XG4gICAgICAgICAgICB2bS5ldmFsdWF0ZU9wY29kZSh0aGlzLmRlb3B0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzQ29tcG9uZW50RGVmaW5pdGlvbih0aGlzLnJlZmVyZW5jZS52YWx1ZSgpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGF6eURlb3B0KHZtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1cGVyLmV2YWx1YXRlKHZtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBsYXp5RGVvcHQodm0pIHtcbiAgICAgICAgLy8gRHVyaWduIGluaXRpYWwgcmVuZGVyLCB3ZSBrbm93IHRoYXQgdGhlIHJlZmVyZW5jZSBkb2VzIG5vdCBjb250YWluIGFcbiAgICAgICAgLy8gY29tcG9uZW50IGRlZmluaXRpb24sIHNvIHdlIG9wdGltaXN0aWNhbGx5IGFzc3VtZWQgdGhhdCB0aGlzIGFwcGVuZFxuICAgICAgICAvLyBpcyBqdXN0IGEgbm9ybWFsIGFwcGVuZC4gSG93ZXZlciwgYXQgdXBkYXRlIHRpbWUsIHdlIGRpc2NvdmVyZWQgdGhhdFxuICAgICAgICAvLyB0aGUgcmVmZXJlbmNlIGhhcyBzd2l0Y2hlZCBpbnRvIGNvbnRhaW5pbmcgYSBjb21wb25lbnQgZGVmaW5pdGlvbiwgc29cbiAgICAgICAgLy8gd2UgbmVlZCB0byBkbyBhIFwibGF6eSBkZW9wdFwiLCBzaW11bGF0aW5nIHdoYXQgd291bGQgaGF2ZSBoYXBwZW5lZCBpZlxuICAgICAgICAvLyB3ZSBoYWQgZGVjaWRlZCB0byBwZXJmb3JtIHRoZSBkZW9wdCBpbiB0aGUgZmlyc3QgcGxhY2UgZHVyaW5nIGluaXRpYWxcbiAgICAgICAgLy8gcmVuZGVyLlxuICAgICAgICAvL1xuICAgICAgICAvLyBNb3JlIGNvbmNyZXRlbHksIHdlIHdvdWxkIGhhdmUgZXhwYW5kZWQgdGhlIGN1cmx5IGludG8gYSBpZi9lbHNlLCBhbmRcbiAgICAgICAgLy8gYmFzZWQgb24gd2hldGhlciB0aGUgdmFsdWUgaXMgYSBjb21wb25lbnQgZGVmaW5pdGlvbiBvciBub3QsIHdlIHdvdWxkXG4gICAgICAgIC8vIGhhdmUgZW50ZXJlZCBlaXRoZXIgdGhlIGR5bmFtaWMgY29tcG9uZW50IGJyYW5jaCBvciB0aGUgc2ltcGxlIHZhbHVlXG4gICAgICAgIC8vIGJyYW5jaC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gU2luY2Ugd2UgcmVuZGVyZWQgYSBzaW1wbGUgdmFsdWUgZHVyaW5nIGluaXRpYWwgcmVuZGVyIChhbmQgYWxsIHRoZVxuICAgICAgICAvLyB1cGRhdGVzIHVwIHVudGlsIHRoaXMgcG9pbnQpLCB3ZSBuZWVkIHRvIHByZXRlbmQgdGhhdCB0aGUgcmVzdWx0IGlzXG4gICAgICAgIC8vIHByb2R1Y2VkIGJ5IHRoZSBcIlZBTFVFXCIgYnJhbmNoIG9mIHRoZSBkZW9wdGVkIGFwcGVuZCBvcGNvZGU6XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgVHJ5KEJFR0lOLCBFTkQpXG4gICAgICAgIC8vICAgICBBc3NlcnQoSXNDb21wb25lbnREZWZpbml0aW9uLCBleHBlY3RlZD1mYWxzZSlcbiAgICAgICAgLy8gICAgIE9wdGltaXplZFVwZGF0ZVxuICAgICAgICAvL1xuICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBoYXMgc3dpdGNoZWQgZnJvbSBiZWluZyBhIHNpbXBsZVxuICAgICAgICAvLyB2YWx1ZSBpbnRvIGEgY29tcG9uZW50IGRlZmluaXRpb24sIHdoYXQgd291bGQgaGF2ZSBoYXBwZW5lZCBpcyB0aGF0XG4gICAgICAgIC8vIHRoZSBhc3NlcnQgd291bGQgdGhyb3csIGNhdXNpbmcgdGhlIFRyeSBvcGNvZGUgdG8gdGVhcmRvd24gdGhlIGJvdW5kc1xuICAgICAgICAvLyBhbmQgcmVydW4gdGhlIG9yaWdpbmFsIGFwcGVuZCBvcGNvZGUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFNpbmNlIHRoZSBUcnkgb3Bjb2RlIHdvdWxkIGhhdmUgbnVrZWQgdGhlIHVwZGF0aW5nIG9wY29kZXMgYW55d2F5LCB3ZVxuICAgICAgICAvLyB3b3VsZG4ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHNpbXVsYXRpbmcgdGhvc2UuIEFsbCB3ZSBoYXZlIHRvIGRvIGlzIHRvXG4gICAgICAgIC8vIGV4ZWN1dGUgdGhlIFRyeSBvcGNvZGUgYW5kIGltbWVkaWF0ZWx5IHRocm93LlxuICAgICAgICBsZXQgeyBib3VuZHMsIGFwcGVuZE9wY29kZSwgc3RhdGUgfSA9IHRoaXM7XG4gICAgICAgIGxldCBhcHBlbmRPcHMgPSBhcHBlbmRPcGNvZGUuZGVvcHQodm0uZW52KTtcbiAgICAgICAgbGV0IGVudGVyID0gYXBwZW5kT3BzLmhlYWQoKTtcbiAgICAgICAgbGV0IG9wcyA9IGVudGVyLnNsaWNlO1xuICAgICAgICBsZXQgdHJhY2tlciA9IG5ldyBVcGRhdGFibGVCbG9ja1RyYWNrZXIoYm91bmRzLnBhcmVudEVsZW1lbnQoKSk7XG4gICAgICAgIHRyYWNrZXIubmV3Qm91bmRzKHRoaXMuYm91bmRzKTtcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gbmV3IExpbmtlZExpc3QoKTtcbiAgICAgICAgbGV0IGRlb3B0ZWQgPSB0aGlzLmRlb3B0ZWQgPSBuZXcgVHJ5T3Bjb2RlKG9wcywgc3RhdGUsIHRyYWNrZXIsIGNoaWxkcmVuKTtcbiAgICAgICAgdGhpcy5fdGFnLnVwZGF0ZShkZW9wdGVkLnRhZyk7XG4gICAgICAgIHZtLmV2YWx1YXRlT3Bjb2RlKGRlb3B0ZWQpO1xuICAgICAgICB2bS50aHJvdygpO1xuICAgICAgICAvLyBGcm9tIHRoaXMgcG9pbnQgb24sIHdlIGhhdmUgZXNzZW50aWFsbHkgcmVwbGFjZWQgb3Vyc2VsdmUgd2l0aCBhIG5ld1xuICAgICAgICAvLyBvcGNvZGUuIFNpbmNlIHdlIHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGluZyB0aGUgbmV3L2Rlb3B0ZWQgY29kZSwgaXQncyBhXG4gICAgICAgIC8vIGdvb2QgaWRlYSAoYXMgYSBwYXR0ZXJuKSB0byBudWxsIG91dCBhbnkgdW5uZWVkZWQgZmllbGRzIGhlcmUgdG8gYXZvaWRcbiAgICAgICAgLy8gaG9sZGluZyBvbiB0byB1bm5lZWRlZC9zdGFsZSBvYmplY3RzOlxuICAgICAgICB0aGlzLl90YWcgPSBudWxsO1xuICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IG51bGw7XG4gICAgICAgIHRoaXMuY2FjaGUgPSBudWxsO1xuICAgICAgICB0aGlzLmJvdW5kcyA9IG51bGw7XG4gICAgICAgIHRoaXMudXBzZXJ0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5hcHBlbmRPcGNvZGUgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlID0gbnVsbDtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBsZXQgeyBfZ3VpZDogZ3VpZCwgdHlwZSwgZGVvcHRlZCB9ID0gdGhpcztcbiAgICAgICAgaWYgKGRlb3B0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZ3VpZCxcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGRlb3B0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtkZW9wdGVkLnRvSlNPTigpXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci50b0pTT04oKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBPcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZSBleHRlbmRzIEFwcGVuZE9wY29kZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdvcHRpbWl6ZWQtY2F1dGlvdXMtYXBwZW5kJztcbiAgICB9XG4gICAgbm9ybWFsaXplKHJlZmVyZW5jZSkge1xuICAgICAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVmFsdWUpO1xuICAgIH1cbiAgICBpbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICAgIH1cbiAgICB1cGRhdGVXaXRoKHZtLCByZWZlcmVuY2UsIGNhY2hlLCBib3VuZHMsIHVwc2VydCkge1xuICAgICAgICByZXR1cm4gbmV3IE9wdGltaXplZENhdXRpb3VzVXBkYXRlT3Bjb2RlKGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gICAgfVxufVxuY2xhc3MgT3B0aW1pemVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUgZXh0ZW5kcyBVcGRhdGVPcGNvZGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnb3B0aW1pemVkLWNhdXRpb3VzLXVwZGF0ZSc7XG4gICAgfVxuICAgIGluc2VydChkb20sIGN1cnNvciwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEd1YXJkZWRDYXV0aW91c0FwcGVuZE9wY29kZSBleHRlbmRzIEd1YXJkZWRBcHBlbmRPcGNvZGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnZ3VhcmRlZC1jYXV0aW91cy1hcHBlbmQnO1xuICAgICAgICB0aGlzLkFwcGVuZE9wY29kZSA9IE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlO1xuICAgIH1cbiAgICBub3JtYWxpemUocmVmZXJlbmNlKSB7XG4gICAgICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVWYWx1ZSk7XG4gICAgfVxuICAgIGluc2VydChkb20sIGN1cnNvciwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gICAgfVxuICAgIHVwZGF0ZVdpdGgodm0sIHJlZmVyZW5jZSwgY2FjaGUsIGJvdW5kcywgdXBzZXJ0KSB7XG4gICAgICAgIHJldHVybiBuZXcgR3VhcmRlZENhdXRpb3VzVXBkYXRlT3Bjb2RlKHJlZmVyZW5jZSwgY2FjaGUsIGJvdW5kcywgdXBzZXJ0LCB0aGlzLCB2bS5jYXB0dXJlKCkpO1xuICAgIH1cbn1cbmNsYXNzIEd1YXJkZWRDYXV0aW91c1VwZGF0ZU9wY29kZSBleHRlbmRzIEd1YXJkZWRVcGRhdGVPcGNvZGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnZ3VhcmRlZC1jYXV0aW91cy11cGRhdGUnO1xuICAgIH1cbiAgICBpbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZSBleHRlbmRzIEFwcGVuZE9wY29kZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdvcHRpbWl6ZWQtdHJ1c3RpbmctYXBwZW5kJztcbiAgICB9XG4gICAgbm9ybWFsaXplKHJlZmVyZW5jZSkge1xuICAgICAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVHJ1c3RlZFZhbHVlKTtcbiAgICB9XG4gICAgaW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgICB9XG4gICAgdXBkYXRlV2l0aCh2bSwgcmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPcHRpbWl6ZWRUcnVzdGluZ1VwZGF0ZU9wY29kZShjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICAgIH1cbn1cbmNsYXNzIE9wdGltaXplZFRydXN0aW5nVXBkYXRlT3Bjb2RlIGV4dGVuZHMgVXBkYXRlT3Bjb2RlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ29wdGltaXplZC10cnVzdGluZy11cGRhdGUnO1xuICAgIH1cbiAgICBpbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBHdWFyZGVkVHJ1c3RpbmdBcHBlbmRPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkQXBwZW5kT3Bjb2RlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2d1YXJkZWQtdHJ1c3RpbmctYXBwZW5kJztcbiAgICAgICAgdGhpcy5BcHBlbmRPcGNvZGUgPSBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZTtcbiAgICB9XG4gICAgbm9ybWFsaXplKHJlZmVyZW5jZSkge1xuICAgICAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVHJ1c3RlZFZhbHVlKTtcbiAgICB9XG4gICAgaW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgICB9XG4gICAgdXBkYXRlV2l0aCh2bSwgcmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBHdWFyZGVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUocmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQsIHRoaXMsIHZtLmNhcHR1cmUoKSk7XG4gICAgfVxufVxuY2xhc3MgR3VhcmRlZFRydXN0aW5nVXBkYXRlT3Bjb2RlIGV4dGVuZHMgR3VhcmRlZFVwZGF0ZU9wY29kZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICd0cnVzdGluZy11cGRhdGUnO1xuICAgIH1cbiAgICBpbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICAgIH1cbn1cbiJdfQ==
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvb3Bjb2Rlcy9jb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUErQkEsYUFBQSxPQUFBLENBQWlCLEtBQWEsRUFBQTtBQUM1QixlQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxVQUFVLENBQUM7S0FDekY7O0FBRUssYUFBQSxrQkFBQSxDQUE2QixLQUFhLEVBQUE7QUFDOUMsWUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDbEIsbUJBQU8sRUFBRSxDQUFDO1NBQ1g7QUFDRCxlQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN0Qjs7QUFFSyxhQUFBLHFCQUFBLENBQWdDLEtBQWEsRUFBQTtBQUNqRCxZQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNsQixtQkFBTyxFQUFFLENBQUM7U0FDWDtBQUNELFlBQUkseUJBdkNKLFFBQVEsQ0F1Q0ssS0FBSyxDQUFDLEVBQUU7QUFDbkIsbUJBQU8sS0FBSyxDQUFDO1NBQ2Q7QUFDRCxZQUFJLHlCQTVDSixZQUFZLENBNENLLEtBQUssQ0FBQyxFQUFFO0FBQ3ZCLG1CQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUN2QjtBQUNELFlBQUkseUJBOUNKLE1BQU0sQ0E4Q0ssS0FBSyxDQUFDLEVBQUU7QUFDakIsbUJBQU8sS0FBSyxDQUFDO1NBQ2Q7QUFDRCxlQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN0Qjs7QUFFSyxhQUFBLGNBQUEsQ0FBeUIsS0FBYSxFQUFBO0FBQzFDLFlBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2xCLG1CQUFPLEVBQUUsQ0FBQztTQUNYO0FBQ0QsWUFBSSx5QkF2REosUUFBUSxDQXVESyxLQUFLLENBQUMsRUFBRTtBQUNuQixtQkFBTyxLQUFLLENBQUM7U0FDZDtB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QUMzQzs7QUFYRyxtQ0FBbUMsV0FhN0IsVUFBVSxHQUFBLG9CQUFDLEVBQU0sRUFBRSxTQUE0QixFQUFFLEtBQXdDLEVBQUUsTUFBZ0IsRUFBRSxNQUFjLEVBQUE7QUFDbkksbUJBQU8sSUFBSSwyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQzlGOztlQWZHLDJCQUFtQztPQUFRLG1CQUFzQzs7OztRQWtCdkYsMkJBQWtDOzhCQUFsQywyQkFBa0M7O0FBQWxDLGlCQUFBLDJCQUFrQyxHQUFsQztBQ3hFUSw4Q0FBUyxTQUFTLENBQUMsQ0FBQztBRHlFMUIsZ0JBQUEsQ0FBQSxJQUFJLEdBQUcsaUJBQWlCLENBQUM7U0FLMUI7O0FBTkQsbUNBQWtDLFdBR3RCLE1BQU0sR0FBQSxnQkFBQyxHQUF3QixFQUFFLE1BQWMsRUFBRSxLQUF3QixFQUFBO0FBQ2pGLG1CQUFPLHlCQXBkVCxjQUFjLENBb2RVLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0M7O2VBTEgsMkJBQWtDO09BQVEsbUJBQXNDIiwiZmlsZSI6ImNvbnRlbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVXBzZXJ0LCB7XG4gIEluc2VydGlvbixcbiAgQ2F1dGlvdXNJbnNlcnRpb24sXG4gIFRydXN0aW5nSW5zZXJ0aW9uLFxuXG4gIGlzU2FmZVN0cmluZyxcbiAgaXNOb2RlLFxuICBpc1N0cmluZyxcblxuICBjYXV0aW91c0luc2VydCxcbiAgdHJ1c3RpbmdJbnNlcnRcbn0gZnJvbSAnLi4vLi4vdXBzZXJ0JztcbmltcG9ydCB7IGlzQ29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERPTVRyZWVDb25zdHJ1Y3Rpb24gfSBmcm9tICcuLi8uLi9kb20vaGVscGVyJztcbmltcG9ydCB7IE9wU2VxLCBPcGNvZGUsIE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDb21waWxlZEV4cHJlc3Npb24gfSBmcm9tICcuLi9leHByZXNzaW9ucyc7XG5pbXBvcnQgeyBWTSwgVXBkYXRpbmdWTSB9IGZyb20gJy4uLy4uL3ZtJztcbmltcG9ydCB7IFRyeU9wY29kZSwgVk1TdGF0ZSB9IGZyb20gJy4uLy4uL3ZtL3VwZGF0ZSc7XG5pbXBvcnQgeyBFbnRlck9wY29kZSB9IGZyb20gJy4vdm0nO1xuaW1wb3J0IHsgUmVmZXJlbmNlLCBSZWZlcmVuY2VDYWNoZSwgVXBkYXRhYmxlVGFnLCBpc01vZGlmaWVkLCBpc0NvbnN0LCBtYXAgfSBmcm9tICdnbGltbWVyLXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBPcGFxdWUsIExpbmtlZExpc3QgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuaW1wb3J0IHsgQ3Vyc29yLCBjbGVhciB9IGZyb20gJy4uLy4uL2JvdW5kcyc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJy4uLy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgQ29tcGlsZUludG9MaXN0IH0gZnJvbSAnLi4vLi4vY29tcGlsZXInO1xuaW1wb3J0IE9wY29kZUJ1aWxkZXJEU0wgZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7IENvbmRpdGlvbmFsUmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcyc7XG5pbXBvcnQgeyBBcmdzIH0gZnJvbSAnLi4vLi4vc3ludGF4L2NvcmUnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBVcGRhdGFibGVCbG9ja1RyYWNrZXIgfSBmcm9tICcuLi8uLi9idWlsZGVyJztcbmltcG9ydCBTeW1ib2xUYWJsZSBmcm9tICcuLi8uLi9zeW1ib2wtdGFibGUnO1xuXG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlOiBPcGFxdWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlWyd0b1N0cmluZyddICE9PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVGV4dFZhbHVlKHZhbHVlOiBPcGFxdWUpOiBzdHJpbmcge1xuICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVUcnVzdGVkVmFsdWUodmFsdWU6IE9wYXF1ZSk6IFRydXN0aW5nSW5zZXJ0aW9uIHtcbiAgaWYgKGlzRW1wdHkodmFsdWUpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU2FmZVN0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUudG9IVE1MKCk7XG4gIH1cbiAgaWYgKGlzTm9kZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZTogT3BhcXVlKTogQ2F1dGlvdXNJbnNlcnRpb24ge1xuICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTYWZlU3RyaW5nKHZhbHVlKSB8fCBpc05vZGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwZW5kT3Bjb2RlPFQgZXh0ZW5kcyBJbnNlcnRpb24+IGV4dGVuZHMgT3Bjb2RlIHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IG5vcm1hbGl6ZShyZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+KTogUmVmZXJlbmNlPFQ+O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUKTogVXBzZXJ0O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgdXBkYXRlV2l0aCh2bTogVk0sIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxUPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGVPcGNvZGU8VD47XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgbGV0IHJlZmVyZW5jZSA9IHZtLmZyYW1lLmdldE9wZXJhbmQoKTtcbiAgICBsZXQgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplKHJlZmVyZW5jZSk7XG5cbiAgICBsZXQgdmFsdWUsIGNhY2hlO1xuXG4gICAgaWYgKGlzQ29uc3QocmVmZXJlbmNlKSkge1xuICAgICAgdmFsdWUgPSBub3JtYWxpemVkLnZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKG5vcm1hbGl6ZWQpO1xuICAgICAgdmFsdWUgPSBjYWNoZS5wZWVrKCk7XG4gICAgfVxuXG4gICAgbGV0IHN0YWNrID0gdm0uc3RhY2soKTtcbiAgICBsZXQgdXBzZXJ0ID0gdGhpcy5pbnNlcnQodm0uZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKSwgc3RhY2ssIHZhbHVlKTtcbiAgICBsZXQgYm91bmRzID0gbmV3IEZyYWdtZW50KHVwc2VydC5ib3VuZHMpO1xuXG4gICAgc3RhY2submV3Qm91bmRzKGJvdW5kcyk7XG5cbiAgICBpZiAoY2FjaGUgLyogaS5lLiAhaXNDb25zdChyZWZlcmVuY2UpICovKSB7XG4gICAgICB2bS51cGRhdGVXaXRoKHRoaXMudXBkYXRlV2l0aCh2bSwgcmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbXCIkT1BFUkFORFwiXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEd1YXJkZWRBcHBlbmRPcGNvZGU8VCBleHRlbmRzIEluc2VydGlvbj4gZXh0ZW5kcyBBcHBlbmRPcGNvZGU8VD4ge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgQXBwZW5kT3Bjb2RlOiB0eXBlb2YgT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUgfCB0eXBlb2YgT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGU7XG4gIHByaXZhdGUgZGVvcHRlZDogT3BTZXEgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXhwcmVzc2lvbjogQ29tcGlsZWRFeHByZXNzaW9uPGFueT4sIHByaXZhdGUgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIGlmICh0aGlzLmRlb3B0ZWQpIHtcbiAgICAgIHZtLnB1c2hFdmFsRnJhbWUodGhpcy5kZW9wdGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uZXZhbHVhdGVPcGVyYW5kKHRoaXMuZXhwcmVzc2lvbik7XG5cbiAgICAgIGxldCB2YWx1ZSA9IHZtLmZyYW1lLmdldE9wZXJhbmQoKS52YWx1ZSgpO1xuXG4gICAgICBpZihpc0NvbXBvbmVudERlZmluaXRpb24odmFsdWUpKSB7XG4gICAgICAgIHZtLnB1c2hFdmFsRnJhbWUodGhpcy5kZW9wdCh2bS5lbnYpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1cGVyLmV2YWx1YXRlKHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVvcHQoZW52OiBFbnZpcm9ubWVudCk6IE9wU2VxIHsgLy8gUHVibGljIGJlY2F1c2UgaXQncyB1c2VkIGluIHRoZSBsYXp5IGRlb3B0XG4gICAgLy8gQXQgY29tcGlsZSB0aW1lLCB3ZSBkZXRlcm1pbmVkIHRoYXQgdGhpcyBhcHBlbmQgY2FsbHNpdGUgbWlnaHQgcmVmZXJcbiAgICAvLyB0byBhIGxvY2FsIHZhcmlhYmxlL3Byb3BlcnR5IGxvb2t1cCB0aGF0IHJlc29sdmVzIHRvIGEgY29tcG9uZW50XG4gICAgLy8gZGVmaW5pdGlvbiBhdCBydW50aW1lLlxuICAgIC8vXG4gICAgLy8gV2UgY291bGQgaGF2ZSBlYWdlcmx5IGNvbXBpbGVkIHRoaXMgY2FsbHNpdGUgaW50byBzb21ldGhpbmcgbGlrZSB0aGlzOlxuICAgIC8vXG4gICAgLy8gICB7eyNpZiAoaXMtY29tcG9uZW50LWRlZmluaXRpb24gZm9vKX19XG4gICAgLy8gICAgIHt7Y29tcG9uZW50IGZvb319XG4gICAgLy8gICB7e2Vsc2V9fVxuICAgIC8vICAgICB7e2Zvb319XG4gICAgLy8gICB7ey9pZn19XG4gICAgLy9cbiAgICAvLyBIb3dldmVyLCBpbiBwcmFjdGljZSwgdGhlcmUgbWlnaHQgYmUgYSBsYXJnZSBhbW91dCBvZiB0aGVzZSBjYWxsc2l0ZXNcbiAgICAvLyBhbmQgbW9zdCBvZiB0aGVtIHdvdWxkIHJlc29sdmUgdG8gYSBzaW1wbGUgdmFsdWUgbG9va3VwLiBUaGVyZWZvcmUsIHdlXG4gICAgLy8gdHJpZWQgdG8gYmUgb3B0aW1pc3RpYyBhbmQgYXNzdW1lZCB0aGF0IHRoZSBjYWxsc2l0ZSB3aWxsIHJlc29sdmUgdG9cbiAgICAvLyBhcHBlbmRpbmcgYSBzaW1wbGUgdmFsdWUuXG4gICAgLy9cbiAgICAvLyBIb3dldmVyLCB3ZSBoYXZlIHJlYWNoZWQgaGVyZSBiZWNhdXNlIGF0IHJ1bnRpbWUsIHRoZSBndWFyZCBjb25kaXRpb25hbFxuICAgIC8vIGhhdmUgZGV0ZWN0ZWQgdGhhdCB0aGlzIGNhbGxzaXRlIGlzIGluZGVlZCByZWZlcnJpbmcgdG8gYSBjb21wb25lbnRcbiAgICAvLyBkZWZpbml0aW9uIG9iamVjdC4gU2luY2UgdGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgdHJ1ZSBmb3Igb3RoZXJcbiAgICAvLyBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2FsbHNpdGUsIGl0IGlzIG5vdyBhcHByb3BpYXRlIHRvIGRlb3B0IGludG8gdGhlXG4gICAgLy8gZXhwYW5kZWQgdmVyc2lvbiB0aGF0IGhhbmRsZXMgYm90aCBjYXNlcy4gVGhlIGNvbXBpbGF0aW9uIHdvdWxkIGxvb2tcbiAgICAvLyBsaWtlIHRoaXM6XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAgIEVudGVyKEJFR0lOLCBFTkQpXG4gICAgLy8gICBCRUdJTjogICAgICBOb29wXG4gICAgLy8gICAgICAgICAgICAgICBUZXN0KGlzLWNvbXBvbmVudC1kZWZpbml0aW9uKVxuICAgIC8vICAgICAgICAgICAgICAgSnVtcFVubGVzcyhWQUxVRSlcbiAgICAvLyAgIENPTVBPTkVOVDogIE5vb3BcbiAgICAvLyAgICAgICAgICAgICAgIFB1dER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uT3Bjb2RlXG4gICAgLy8gICAgICAgICAgICAgICBPcGVuQ29tcG9uZW50XG4gICAgLy8gICAgICAgICAgICAgICBDbG9zZUNvbXBvbmVudFxuICAgIC8vICAgICAgICAgICAgICAgSnVtcChFTkQpXG4gICAgLy8gICBWQUxVRTogICAgICBOb29wXG4gICAgLy8gICAgICAgICAgICAgICBPcHRpbWl6ZWRBcHBlbmRcbiAgICAvLyAgIEVORDogICAgICAgIE5vb3BcbiAgICAvLyAgICAgICAgICAgICAgIEV4aXRcbiAgICAvL1xuICAgIC8vIEtlZXAgaW4gbWluZCB0aGF0IGV2ZW4gaWYgd2UgKmRvbid0KiByZWFjaCBoZXJlIGF0IGluaXRpYWwgcmVuZGVyIHRpbWUsXG4gICAgLy8gaXQgaXMgc3RpbGwgcG9zc2libGUgKGFsdGhvdWdoIHF1aXRlIHJhcmUpIHRoYXQgdGhlIHNpbXBsZSB2YWx1ZSB3ZVxuICAgIC8vIGVuY291bnRlciBkdXJpbmcgaW5pdGlhbCByZW5kZXIgY291bGQgbGF0ZXIgY2hhbmdlIGludG8gYSBjb21wb25lbnRcbiAgICAvLyBkZWZpbml0aW9uIG9iamVjdCBhdCB1cGRhdGUgdGltZS4gVGhhdCBpcyBoYW5kbGVkIGJ5IHRoZSBcImxhenkgZGVvcHRcIlxuICAgIC8vIGNvZGUgb24gdGhlIHVwZGF0ZSBzaWRlIChzY3JvbGwgZG93biBmb3IgdGhlIG5leHQgYmlnIGJsb2NrIG9mIGNvbW1lbnQpLlxuXG4gICAgbGV0IGJ1ZmZlciA9IG5ldyBDb21waWxlSW50b0xpc3QoZW52LCBudWxsKTtcbiAgICBsZXQgZHNsID0gbmV3IE9wY29kZUJ1aWxkZXJEU0woYnVmZmVyLCB0aGlzLnN5bWJvbFRhYmxlLCBlbnYpO1xuXG4gICAgZHNsLmJsb2NrKHsgdGVtcGxhdGVzOiBudWxsIH0sIChkc2wsIEJFR0lOLCBFTkQpID0+IHtcbiAgICAgIGRzbC5wdXRWYWx1ZSh0aGlzLmV4cHJlc3Npb24pO1xuICAgICAgZHNsLnRlc3QoSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlLmNyZWF0ZSk7XG4gICAgICBkc2wuanVtcFVubGVzcygnVkFMVUUnKTtcbiAgICAgIGRzbC5sYWJlbCgnQ09NUE9ORU5UJyk7XG4gICAgICBkc2wucHV0RHluYW1pY0NvbXBvbmVudERlZmluaXRpb24oKTtcbiAgICAgIGRzbC5vcGVuQ29tcG9uZW50KEFyZ3MuZW1wdHkoKSk7XG4gICAgICBkc2wuY2xvc2VDb21wb25lbnQoKTtcbiAgICAgIGRzbC5qdW1wKEVORCk7XG4gICAgICBkc2wubGFiZWwoJ1ZBTFVFJyk7XG4gICAgICBkc2wuYXBwZW5kKG5ldyB0aGlzLkFwcGVuZE9wY29kZSgpKTtcbiAgICB9KTtcblxuICAgIGxldCBkZW9wdGVkID0gdGhpcy5kZW9wdGVkID0gZHNsLnRvT3BTZXEoKTtcblxuICAgIC8vIEZyb20gdGhpcyBwb2ludCBvbiwgd2UgaGF2ZSBlc3NlbnRpYWxseSByZXBsYWNlZCBvdXJzZWx2ZSB3aXRoIGEgbmV3IHNldFxuICAgIC8vIG9mIG9wY29kZXMuIFNpbmNlIHdlIHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGluZyB0aGUgbmV3L2Rlb3B0ZWQgY29kZSwgaXQnc1xuICAgIC8vIGEgZ29vZCBpZGVhIChhcyBhIHBhdHRlcm4pIHRvIG51bGwgb3V0IGFueSB1bm5lZWRlZCBmaWVsZHMgaGVyZSB0byBhdm9pZFxuICAgIC8vIGhvbGRpbmcgb24gdG8gdW5uZWVkZWQvc3RhbGUgb2JqZWN0czpcblxuICAgIHRoaXMuZXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgICByZXR1cm4gZGVvcHRlZDtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgeyBfZ3VpZDogZ3VpZCwgdHlwZSwgZGVvcHRlZCB9ID0gdGhpcztcblxuICAgIGlmIChkZW9wdGVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBndWlkLFxuICAgICAgICB0eXBlLFxuICAgICAgICBkZW9wdGVkOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogZGVvcHRlZC50b0FycmF5KCkubWFwKG9wID0+IG9wLnRvSlNPTigpKVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ3VpZCxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgYXJnczogW3RoaXMuZXhwcmVzc2lvbi50b0pTT04oKV1cbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIElzQ29tcG9uZW50RGVmaW5pdGlvblJlZmVyZW5jZSBleHRlbmRzIENvbmRpdGlvbmFsUmVmZXJlbmNlIHtcbiAgc3RhdGljIGNyZWF0ZShpbm5lcjogUmVmZXJlbmNlPE9wYXF1ZT4pOiBJc0NvbXBvbmVudERlZmluaXRpb25SZWZlcmVuY2Uge1xuICAgIHJldHVybiBuZXcgSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlKGlubmVyKTtcbiAgfVxuXG4gIHRvQm9vbCh2YWx1ZTogT3BhcXVlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzQ29tcG9uZW50RGVmaW5pdGlvbih2YWx1ZSk7XG4gIH1cbn1cblxuYWJzdHJhY3QgY2xhc3MgVXBkYXRlT3Bjb2RlPFQgZXh0ZW5kcyBJbnNlcnRpb24+IGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFQ+LFxuICAgIHByb3RlY3RlZCBib3VuZHM6IEZyYWdtZW50LFxuICAgIHByb3RlY3RlZCB1cHNlcnQ6IFVwc2VydFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gY2FjaGUudGFnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVCk6IFVwc2VydDtcblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuY2FjaGUucmV2YWxpZGF0ZSgpO1xuXG4gICAgaWYgKGlzTW9kaWZpZWQodmFsdWUpKSB7XG4gICAgICBsZXQgeyBib3VuZHMsIHVwc2VydCB9ID0gdGhpcztcbiAgICAgIGxldCB7IGRvbSB9ID0gdm07XG5cbiAgICAgIGlmKCF0aGlzLnVwc2VydC51cGRhdGUoZG9tLCB2YWx1ZSkpIHtcbiAgICAgICAgbGV0IGN1cnNvciA9IG5ldyBDdXJzb3IoYm91bmRzLnBhcmVudEVsZW1lbnQoKSwgY2xlYXIoYm91bmRzKSk7XG4gICAgICAgIHVwc2VydCA9IHRoaXMudXBzZXJ0ID0gdGhpcy5pbnNlcnQodm0uZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKSwgY3Vyc29yLCB2YWx1ZSBhcyBUKTtcbiAgICAgIH1cblxuICAgICAgYm91bmRzLnVwZGF0ZSh1cHNlcnQuYm91bmRzKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgX2d1aWQ6IGd1aWQsIHR5cGUsIGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQsXG4gICAgICB0eXBlLFxuICAgICAgZGV0YWlsczogeyBsYXN0VmFsdWU6IEpTT04uc3RyaW5naWZ5KGNhY2hlLnBlZWsoKSkgfVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEd1YXJkZWRVcGRhdGVPcGNvZGU8VCBleHRlbmRzIEluc2VydGlvbj4gZXh0ZW5kcyBVcGRhdGVPcGNvZGU8VD4ge1xuICBwcml2YXRlIF90YWc6IFVwZGF0YWJsZVRhZztcbiAgcHJpdmF0ZSBkZW9wdGVkOiBUcnlPcGNvZGUgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPixcbiAgICBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VD4sXG4gICAgYm91bmRzOiBGcmFnbWVudCxcbiAgICB1cHNlcnQ6IFVwc2VydCxcbiAgICBwcml2YXRlIGFwcGVuZE9wY29kZTogR3VhcmRlZEFwcGVuZE9wY29kZTxUPixcbiAgICBwcml2YXRlIHN0YXRlOiBWTVN0YXRlXG4gICkge1xuICAgIHN1cGVyKGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gICAgdGhpcy50YWcgPSB0aGlzLl90YWcgPSBuZXcgVXBkYXRhYmxlVGFnKHRoaXMudGFnKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgaWYgKHRoaXMuZGVvcHRlZCkge1xuICAgICAgdm0uZXZhbHVhdGVPcGNvZGUodGhpcy5kZW9wdGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzQ29tcG9uZW50RGVmaW5pdGlvbih0aGlzLnJlZmVyZW5jZS52YWx1ZSgpKSkge1xuICAgICAgICB0aGlzLmxhenlEZW9wdCh2bSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdXBlci5ldmFsdWF0ZSh2bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsYXp5RGVvcHQodm06IFVwZGF0aW5nVk0pIHtcbiAgICAvLyBEdXJpZ24gaW5pdGlhbCByZW5kZXIsIHdlIGtub3cgdGhhdCB0aGUgcmVmZXJlbmNlIGRvZXMgbm90IGNvbnRhaW4gYVxuICAgIC8vIGNvbXBvbmVudCBkZWZpbml0aW9uLCBzbyB3ZSBvcHRpbWlzdGljYWxseSBhc3N1bWVkIHRoYXQgdGhpcyBhcHBlbmRcbiAgICAvLyBpcyBqdXN0IGEgbm9ybWFsIGFwcGVuZC4gSG93ZXZlciwgYXQgdXBkYXRlIHRpbWUsIHdlIGRpc2NvdmVyZWQgdGhhdFxuICAgIC8vIHRoZSByZWZlcmVuY2UgaGFzIHN3aXRjaGVkIGludG8gY29udGFpbmluZyBhIGNvbXBvbmVudCBkZWZpbml0aW9uLCBzb1xuICAgIC8vIHdlIG5lZWQgdG8gZG8gYSBcImxhenkgZGVvcHRcIiwgc2ltdWxhdGluZyB3aGF0IHdvdWxkIGhhdmUgaGFwcGVuZWQgaWZcbiAgICAvLyB3ZSBoYWQgZGVjaWRlZCB0byBwZXJmb3JtIHRoZSBkZW9wdCBpbiB0aGUgZmlyc3QgcGxhY2UgZHVyaW5nIGluaXRpYWxcbiAgICAvLyByZW5kZXIuXG4gICAgLy9cbiAgICAvLyBNb3JlIGNvbmNyZXRlbHksIHdlIHdvdWxkIGhhdmUgZXhwYW5kZWQgdGhlIGN1cmx5IGludG8gYSBpZi9lbHNlLCBhbmRcbiAgICAvLyBiYXNlZCBvbiB3aGV0aGVyIHRoZSB2YWx1ZSBpcyBhIGNvbXBvbmVudCBkZWZpbml0aW9uIG9yIG5vdCwgd2Ugd291bGRcbiAgICAvLyBoYXZlIGVudGVyZWQgZWl0aGVyIHRoZSBkeW5hbWljIGNvbXBvbmVudCBicmFuY2ggb3IgdGhlIHNpbXBsZSB2YWx1ZVxuICAgIC8vIGJyYW5jaC5cbiAgICAvL1xuICAgIC8vIFNpbmNlIHdlIHJlbmRlcmVkIGEgc2ltcGxlIHZhbHVlIGR1cmluZyBpbml0aWFsIHJlbmRlciAoYW5kIGFsbCB0aGVcbiAgICAvLyB1cGRhdGVzIHVwIHVudGlsIHRoaXMgcG9pbnQpLCB3ZSBuZWVkIHRvIHByZXRlbmQgdGhhdCB0aGUgcmVzdWx0IGlzXG4gICAgLy8gcHJvZHVjZWQgYnkgdGhlIFwiVkFMVUVcIiBicmFuY2ggb2YgdGhlIGRlb3B0ZWQgYXBwZW5kIG9wY29kZTpcbiAgICAvL1xuICAgIC8vICAgVHJ5KEJFR0lOLCBFTkQpXG4gICAgLy8gICAgIEFzc2VydChJc0NvbXBvbmVudERlZmluaXRpb24sIGV4cGVjdGVkPWZhbHNlKVxuICAgIC8vICAgICBPcHRpbWl6ZWRVcGRhdGVcbiAgICAvL1xuICAgIC8vIEluIHRoaXMgY2FzZSwgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIGhhcyBzd2l0Y2hlZCBmcm9tIGJlaW5nIGEgc2ltcGxlXG4gICAgLy8gdmFsdWUgaW50byBhIGNvbXBvbmVudCBkZWZpbml0aW9uLCB3aGF0IHdvdWxkIGhhdmUgaGFwcGVuZWQgaXMgdGhhdFxuICAgIC8vIHRoZSBhc3NlcnQgd291bGQgdGhyb3csIGNhdXNpbmcgdGhlIFRyeSBvcGNvZGUgdG8gdGVhcmRvd24gdGhlIGJvdW5kc1xuICAgIC8vIGFuZCByZXJ1biB0aGUgb3JpZ2luYWwgYXBwZW5kIG9wY29kZS5cbiAgICAvL1xuICAgIC8vIFNpbmNlIHRoZSBUcnkgb3Bjb2RlIHdvdWxkIGhhdmUgbnVrZWQgdGhlIHVwZGF0aW5nIG9wY29kZXMgYW55d2F5LCB3ZVxuICAgIC8vIHdvdWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgc2ltdWxhdGluZyB0aG9zZS4gQWxsIHdlIGhhdmUgdG8gZG8gaXMgdG9cbiAgICAvLyBleGVjdXRlIHRoZSBUcnkgb3Bjb2RlIGFuZCBpbW1lZGlhdGVseSB0aHJvdy5cblxuICAgIGxldCB7IGJvdW5kcywgYXBwZW5kT3Bjb2RlLCBzdGF0ZSB9ID0gdGhpcztcblxuICAgIGxldCBhcHBlbmRPcHMgPSBhcHBlbmRPcGNvZGUuZGVvcHQodm0uZW52KTtcbiAgICBsZXQgZW50ZXIgICAgID0gYXBwZW5kT3BzLmhlYWQoKSBhcyBFbnRlck9wY29kZTtcbiAgICBsZXQgb3BzICAgICAgID0gZW50ZXIuc2xpY2U7XG5cbiAgICBsZXQgdHJhY2tlciA9IG5ldyBVcGRhdGFibGVCbG9ja1RyYWNrZXIoYm91bmRzLnBhcmVudEVsZW1lbnQoKSk7XG4gICAgdHJhY2tlci5uZXdCb3VuZHModGhpcy5ib3VuZHMpO1xuXG4gICAgbGV0IGNoaWxkcmVuID0gbmV3IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KCk7XG5cbiAgICBsZXQgZGVvcHRlZCA9IHRoaXMuZGVvcHRlZCA9IG5ldyBUcnlPcGNvZGUob3BzLCBzdGF0ZSwgdHJhY2tlciwgY2hpbGRyZW4pO1xuXG4gICAgdGhpcy5fdGFnLnVwZGF0ZShkZW9wdGVkLnRhZyk7XG5cbiAgICB2bS5ldmFsdWF0ZU9wY29kZShkZW9wdGVkKTtcbiAgICB2bS50aHJvdygpO1xuXG4gICAgLy8gRnJvbSB0aGlzIHBvaW50IG9uLCB3ZSBoYXZlIGVzc2VudGlhbGx5IHJlcGxhY2VkIG91cnNlbHZlIHdpdGggYSBuZXdcbiAgICAvLyBvcGNvZGUuIFNpbmNlIHdlIHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGluZyB0aGUgbmV3L2Rlb3B0ZWQgY29kZSwgaXQncyBhXG4gICAgLy8gZ29vZCBpZGVhIChhcyBhIHBhdHRlcm4pIHRvIG51bGwgb3V0IGFueSB1bm5lZWRlZCBmaWVsZHMgaGVyZSB0byBhdm9pZFxuICAgIC8vIGhvbGRpbmcgb24gdG8gdW5uZWVkZWQvc3RhbGUgb2JqZWN0czpcblxuICAgIHRoaXMuX3RhZyAgICAgICAgID0gbnVsbDtcbiAgICB0aGlzLnJlZmVyZW5jZSAgICA9IG51bGw7XG4gICAgdGhpcy5jYWNoZSAgICAgICAgPSBudWxsO1xuICAgIHRoaXMuYm91bmRzICAgICAgID0gbnVsbDtcbiAgICB0aGlzLnVwc2VydCAgICAgICA9IG51bGw7XG4gICAgdGhpcy5hcHBlbmRPcGNvZGUgPSBudWxsO1xuICAgIHRoaXMuc3RhdGUgICAgICAgID0gbnVsbDtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgeyBfZ3VpZDogZ3VpZCwgdHlwZSwgZGVvcHRlZCB9ID0gdGhpcztcblxuICAgIGlmIChkZW9wdGVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBndWlkLFxuICAgICAgICB0eXBlLFxuICAgICAgICBkZW9wdGVkOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogW2Rlb3B0ZWQudG9KU09OKCldXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3VwZXIudG9KU09OKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZSBleHRlbmRzIEFwcGVuZE9wY29kZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICB0eXBlID0gJ29wdGltaXplZC1jYXV0aW91cy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVWYWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBDYXV0aW91c0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlV2l0aCh2bTogVk0sIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxDYXV0aW91c0luc2VydGlvbj4sIGJvdW5kczogRnJhZ21lbnQsIHVwc2VydDogVXBzZXJ0KTogT3B0aW1pemVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUge1xuICAgIHJldHVybiBuZXcgT3B0aW1pemVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUoY2FjaGUsIGJvdW5kcywgdXBzZXJ0KTtcbiAgfVxufVxuXG5jbGFzcyBPcHRpbWl6ZWRDYXV0aW91c1VwZGF0ZU9wY29kZSBleHRlbmRzIFVwZGF0ZU9wY29kZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICB0eXBlID0gJ29wdGltaXplZC1jYXV0aW91cy11cGRhdGUnO1xuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IENhdXRpb3VzSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gY2F1dGlvdXNJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgR3VhcmRlZENhdXRpb3VzQXBwZW5kT3Bjb2RlIGV4dGVuZHMgR3VhcmRlZEFwcGVuZE9wY29kZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICB0eXBlID0gJ2d1YXJkZWQtY2F1dGlvdXMtYXBwZW5kJztcblxuICBwcm90ZWN0ZWQgQXBwZW5kT3Bjb2RlID0gT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGU7XG5cbiAgcHJvdGVjdGVkIG5vcm1hbGl6ZShyZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+KTogUmVmZXJlbmNlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gICAgcmV0dXJuIG1hcChyZWZlcmVuY2UsIG5vcm1hbGl6ZVZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IENhdXRpb3VzSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gY2F1dGlvdXNJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoKHZtOiBWTSwgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPENhdXRpb3VzSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBHdWFyZGVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUge1xuICAgIHJldHVybiBuZXcgR3VhcmRlZENhdXRpb3VzVXBkYXRlT3Bjb2RlKHJlZmVyZW5jZSwgY2FjaGUsIGJvdW5kcywgdXBzZXJ0LCB0aGlzLCB2bS5jYXB0dXJlKCkpO1xuICB9XG59XG5cbmNsYXNzIEd1YXJkZWRDYXV0aW91c1VwZGF0ZU9wY29kZSBleHRlbmRzIEd1YXJkZWRVcGRhdGVPcGNvZGU8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdndWFyZGVkLWNhdXRpb3VzLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZSBleHRlbmRzIEFwcGVuZE9wY29kZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICB0eXBlID0gJ29wdGltaXplZC10cnVzdGluZy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVUcnVzdGVkVmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVHJ1c3RpbmdJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGgodm06IFZNLCByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VHJ1c3RpbmdJbnNlcnRpb24+LCBib3VuZHM6IEZyYWdtZW50LCB1cHNlcnQ6IFVwc2VydCk6IE9wdGltaXplZFRydXN0aW5nVXBkYXRlT3Bjb2RlIHtcbiAgICByZXR1cm4gbmV3IE9wdGltaXplZFRydXN0aW5nVXBkYXRlT3Bjb2RlKGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gIH1cbn1cblxuY2xhc3MgT3B0aW1pemVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUgZXh0ZW5kcyBVcGRhdGVPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtdHJ1c3RpbmctdXBkYXRlJztcblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUcnVzdGluZ0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIHRydXN0aW5nSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEd1YXJkZWRUcnVzdGluZ0FwcGVuZE9wY29kZSBleHRlbmRzIEd1YXJkZWRBcHBlbmRPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdndWFyZGVkLXRydXN0aW5nLWFwcGVuZCc7XG5cbiAgcHJvdGVjdGVkIEFwcGVuZE9wY29kZSA9IE9wdGltaXplZFRydXN0aW5nQXBwZW5kT3Bjb2RlO1xuXG4gIHByb3RlY3RlZCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVUcnVzdGVkVmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVHJ1c3RpbmdJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGgodm06IFZNLCByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VHJ1c3RpbmdJbnNlcnRpb24+LCBib3VuZHM6IEZyYWdtZW50LCB1cHNlcnQ6IFVwc2VydCk6IEd1YXJkZWRUcnVzdGluZ1VwZGF0ZU9wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBHdWFyZGVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUocmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQsIHRoaXMsIHZtLmNhcHR1cmUoKSk7XG4gIH1cbn1cblxuY2xhc3MgR3VhcmRlZFRydXN0aW5nVXBkYXRlT3Bjb2RlIGV4dGVuZHMgR3VhcmRlZFVwZGF0ZU9wY29kZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICB0eXBlID0gJ3RydXN0aW5nLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVHJ1c3RpbmdJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc1NhZmVTdHJpbmcsIGlzTm9kZSwgaXNTdHJpbmcsIGNhdXRpb3VzSW5zZXJ0LCB0cnVzdGluZ0luc2VydCB9IGZyb20gJy4uLy4uL3Vwc2VydCc7XG5pbXBvcnQgeyBpc0NvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBPcGNvZGUsIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBUcnlPcGNvZGUgfSBmcm9tICcuLi8uLi92bS91cGRhdGUnO1xuaW1wb3J0IHsgUmVmZXJlbmNlQ2FjaGUsIFVwZGF0YWJsZVRhZywgaXNNb2RpZmllZCwgaXNDb25zdCwgbWFwIH0gZnJvbSAnZ2xpbW1lci1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgTGlua2VkTGlzdCB9IGZyb20gJ2dsaW1tZXItdXRpbCc7XG5pbXBvcnQgeyBDdXJzb3IsIGNsZWFyIH0gZnJvbSAnLi4vLi4vYm91bmRzJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnLi4vLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBDb21waWxlSW50b0xpc3QgfSBmcm9tICcuLi8uLi9jb21waWxlcic7XG5pbXBvcnQgT3Bjb2RlQnVpbGRlckRTTCBmcm9tICcuL2J1aWxkZXInO1xuaW1wb3J0IHsgQ29uZGl0aW9uYWxSZWZlcmVuY2UgfSBmcm9tICcuLi8uLi9yZWZlcmVuY2VzJztcbmltcG9ydCB7IEFyZ3MgfSBmcm9tICcuLi8uLi9zeW50YXgvY29yZSc7XG5pbXBvcnQgeyBVcGRhdGFibGVCbG9ja1RyYWNrZXIgfSBmcm9tICcuLi8uLi9idWlsZGVyJztcbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWVbJ3RvU3RyaW5nJ10gIT09ICdmdW5jdGlvbic7XG59XG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVGV4dFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKGlzRW1wdHkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVHJ1c3RlZFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKGlzRW1wdHkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChpc1NhZmVTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50b0hUTUwoKTtcbiAgICB9XG4gICAgaWYgKGlzTm9kZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNTYWZlU3RyaW5nKHZhbHVlKSB8fCBpc05vZGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5leHBvcnQgY2xhc3MgQXBwZW5kT3Bjb2RlIGV4dGVuZHMgT3Bjb2RlIHtcbiAgICBldmFsdWF0ZSh2bSkge1xuICAgICAgICBsZXQgcmVmZXJlbmNlID0gdm0uZnJhbWUuZ2V0T3BlcmFuZCgpO1xuICAgICAgICBsZXQgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplKHJlZmVyZW5jZSk7XG4gICAgICAgIGxldCB2YWx1ZSwgY2FjaGU7XG4gICAgICAgIGlmIChpc0NvbnN0KHJlZmVyZW5jZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gbm9ybWFsaXplZC52YWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FjaGUgPSBuZXcgUmVmZXJlbmNlQ2FjaGUobm9ybWFsaXplZCk7XG4gICAgICAgICAgICB2YWx1ZSA9IGNhY2hlLnBlZWsoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RhY2sgPSB2bS5zdGFjaygpO1xuICAgICAgICBsZXQgdXBzZXJ0ID0gdGhpcy5pbnNlcnQodm0uZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKSwgc3RhY2ssIHZhbHVlKTtcbiAgICAgICAgbGV0IGJvdW5kcyA9IG5ldyBGcmFnbWVudCh1cHNlcnQuYm91bmRzKTtcbiAgICAgICAgc3RhY2submV3Qm91bmRzKGJvdW5kcyk7XG4gICAgICAgIGlmIChjYWNoZSAvKiBpLmUuICFpc0NvbnN0KHJlZmVyZW5jZSkgKi8pIHtcbiAgICAgICAgICAgIHZtLnVwZGF0ZVdpdGgodGhpcy51cGRhdGVXaXRoKHZtLCByZWZlcmVuY2UsIGNhY2hlLCBib3VuZHMsIHVwc2VydCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBhcmdzOiBbXCIkT1BFUkFORFwiXVxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBHdWFyZGVkQXBwZW5kT3Bjb2RlIGV4dGVuZHMgQXBwZW5kT3Bjb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihleHByZXNzaW9uLCBzeW1ib2xUYWJsZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICB0aGlzLnN5bWJvbFRhYmxlID0gc3ltYm9sVGFibGU7XG4gICAgICAgIHRoaXMuZGVvcHRlZCA9IG51bGw7XG4gICAgfVxuICAgIGV2YWx1YXRlKHZtKSB7XG4gICAgICAgIGlmICh0aGlzLmRlb3B0ZWQpIHtcbiAgICAgICAgICAgIHZtLnB1c2hFdmFsRnJhbWUodGhpcy5kZW9wdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZtLmV2YWx1YXRlT3BlcmFuZCh0aGlzLmV4cHJlc3Npb24pO1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdm0uZnJhbWUuZ2V0T3BlcmFuZCgpLnZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoaXNDb21wb25lbnREZWZpbml0aW9uKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZtLnB1c2hFdmFsRnJhbWUodGhpcy5kZW9wdCh2bS5lbnYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1cGVyLmV2YWx1YXRlKHZtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBkZW9wdChlbnYpIHtcbiAgICAgICAgLy8gQXQgY29tcGlsZSB0aW1lLCB3ZSBkZXRlcm1pbmVkIHRoYXQgdGhpcyBhcHBlbmQgY2FsbHNpdGUgbWlnaHQgcmVmZXJcbiAgICAgICAgLy8gdG8gYSBsb2NhbCB2YXJpYWJsZS9wcm9wZXJ0eSBsb29rdXAgdGhhdCByZXNvbHZlcyB0byBhIGNvbXBvbmVudFxuICAgICAgICAvLyBkZWZpbml0aW9uIGF0IHJ1bnRpbWUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgZWFnZXJseSBjb21waWxlZCB0aGlzIGNhbGxzaXRlIGludG8gc29tZXRoaW5nIGxpa2UgdGhpczpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICB7eyNpZiAoaXMtY29tcG9uZW50LWRlZmluaXRpb24gZm9vKX19XG4gICAgICAgIC8vICAgICB7e2NvbXBvbmVudCBmb299fVxuICAgICAgICAvLyAgIHt7ZWxzZX19XG4gICAgICAgIC8vICAgICB7e2Zvb319XG4gICAgICAgIC8vICAge3svaWZ9fVxuICAgICAgICAvL1xuICAgICAgICAvLyBIb3dldmVyLCBpbiBwcmFjdGljZSwgdGhlcmUgbWlnaHQgYmUgYSBsYXJnZSBhbW91dCBvZiB0aGVzZSBjYWxsc2l0ZXNcbiAgICAgICAgLy8gYW5kIG1vc3Qgb2YgdGhlbSB3b3VsZCByZXNvbHZlIHRvIGEgc2ltcGxlIHZhbHVlIGxvb2t1cC4gVGhlcmVmb3JlLCB3ZVxuICAgICAgICAvLyB0cmllZCB0byBiZSBvcHRpbWlzdGljIGFuZCBhc3N1bWVkIHRoYXQgdGhlIGNhbGxzaXRlIHdpbGwgcmVzb2x2ZSB0b1xuICAgICAgICAvLyBhcHBlbmRpbmcgYSBzaW1wbGUgdmFsdWUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEhvd2V2ZXIsIHdlIGhhdmUgcmVhY2hlZCBoZXJlIGJlY2F1c2UgYXQgcnVudGltZSwgdGhlIGd1YXJkIGNvbmRpdGlvbmFsXG4gICAgICAgIC8vIGhhdmUgZGV0ZWN0ZWQgdGhhdCB0aGlzIGNhbGxzaXRlIGlzIGluZGVlZCByZWZlcnJpbmcgdG8gYSBjb21wb25lbnRcbiAgICAgICAgLy8gZGVmaW5pdGlvbiBvYmplY3QuIFNpbmNlIHRoaXMgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIHRydWUgZm9yIG90aGVyXG4gICAgICAgIC8vIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBjYWxsc2l0ZSwgaXQgaXMgbm93IGFwcHJvcGlhdGUgdG8gZGVvcHQgaW50byB0aGVcbiAgICAgICAgLy8gZXhwYW5kZWQgdmVyc2lvbiB0aGF0IGhhbmRsZXMgYm90aCBjYXNlcy4gVGhlIGNvbXBpbGF0aW9uIHdvdWxkIGxvb2tcbiAgICAgICAgLy8gbGlrZSB0aGlzOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgICAgICAgICAgIEVudGVyKEJFR0lOLCBFTkQpXG4gICAgICAgIC8vICAgQkVHSU46ICAgICAgTm9vcFxuICAgICAgICAvLyAgICAgICAgICAgICAgIFRlc3QoaXMtY29tcG9uZW50LWRlZmluaXRpb24pXG4gICAgICAgIC8vICAgICAgICAgICAgICAgSnVtcFVubGVzcyhWQUxVRSlcbiAgICAgICAgLy8gICBDT01QT05FTlQ6ICBOb29wXG4gICAgICAgIC8vICAgICAgICAgICAgICAgUHV0RHluYW1pY0NvbXBvbmVudERlZmluaXRpb25PcGNvZGVcbiAgICAgICAgLy8gICAgICAgICAgICAgICBPcGVuQ29tcG9uZW50XG4gICAgICAgIC8vICAgICAgICAgICAgICAgQ2xvc2VDb21wb25lbnRcbiAgICAgICAgLy8gICAgICAgICAgICAgICBKdW1wKEVORClcbiAgICAgICAgLy8gICBWQUxVRTogICAgICBOb29wXG4gICAgICAgIC8vICAgICAgICAgICAgICAgT3B0aW1pemVkQXBwZW5kXG4gICAgICAgIC8vICAgRU5EOiAgICAgICAgTm9vcFxuICAgICAgICAvLyAgICAgICAgICAgICAgIEV4aXRcbiAgICAgICAgLy9cbiAgICAgICAgLy8gS2VlcCBpbiBtaW5kIHRoYXQgZXZlbiBpZiB3ZSAqZG9uJ3QqIHJlYWNoIGhlcmUgYXQgaW5pdGlhbCByZW5kZXIgdGltZSxcbiAgICAgICAgLy8gaXQgaXMgc3RpbGwgcG9zc2libGUgKGFsdGhvdWdoIHF1aXRlIHJhcmUpIHRoYXQgdGhlIHNpbXBsZSB2YWx1ZSB3ZVxuICAgICAgICAvLyBlbmNvdW50ZXIgZHVyaW5nIGluaXRpYWwgcmVuZGVyIGNvdWxkIGxhdGVyIGNoYW5nZSBpbnRvIGEgY29tcG9uZW50XG4gICAgICAgIC8vIGRlZmluaXRpb24gb2JqZWN0IGF0IHVwZGF0ZSB0aW1lLiBUaGF0IGlzIGhhbmRsZWQgYnkgdGhlIFwibGF6eSBkZW9wdFwiXG4gICAgICAgIC8vIGNvZGUgb24gdGhlIHVwZGF0ZSBzaWRlIChzY3JvbGwgZG93biBmb3IgdGhlIG5leHQgYmlnIGJsb2NrIG9mIGNvbW1lbnQpLlxuICAgICAgICBsZXQgYnVmZmVyID0gbmV3IENvbXBpbGVJbnRvTGlzdChlbnYsIG51bGwpO1xuICAgICAgICBsZXQgZHNsID0gbmV3IE9wY29kZUJ1aWxkZXJEU0woYnVmZmVyLCB0aGlzLnN5bWJvbFRhYmxlLCBlbnYpO1xuICAgICAgICBkc2wuYmxvY2soeyB0ZW1wbGF0ZXM6IG51bGwgfSwgKGRzbCwgQkVHSU4sIEVORCkgPT4ge1xuICAgICAgICAgICAgZHNsLnB1dFZhbHVlKHRoaXMuZXhwcmVzc2lvbik7XG4gICAgICAgICAgICBkc2wudGVzdChJc0NvbXBvbmVudERlZmluaXRpb25SZWZlcmVuY2UuY3JlYXRlKTtcbiAgICAgICAgICAgIGRzbC5qdW1wVW5sZXNzKCdWQUxVRScpO1xuICAgICAgICAgICAgZHNsLmxhYmVsKCdDT01QT05FTlQnKTtcbiAgICAgICAgICAgIGRzbC5wdXREeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbigpO1xuICAgICAgICAgICAgZHNsLm9wZW5Db21wb25lbnQoQXJncy5lbXB0eSgpKTtcbiAgICAgICAgICAgIGRzbC5jbG9zZUNvbXBvbmVudCgpO1xuICAgICAgICAgICAgZHNsLmp1bXAoRU5EKTtcbiAgICAgICAgICAgIGRzbC5sYWJlbCgnVkFMVUUnKTtcbiAgICAgICAgICAgIGRzbC5hcHBlbmQobmV3IHRoaXMuQXBwZW5kT3Bjb2RlKCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGRlb3B0ZWQgPSB0aGlzLmRlb3B0ZWQgPSBkc2wudG9PcFNlcSgpO1xuICAgICAgICAvLyBGcm9tIHRoaXMgcG9pbnQgb24sIHdlIGhhdmUgZXNzZW50aWFsbHkgcmVwbGFjZWQgb3Vyc2VsdmUgd2l0aCBhIG5ldyBzZXRcbiAgICAgICAgLy8gb2Ygb3Bjb2Rlcy4gU2luY2Ugd2Ugd2lsbCBhbHdheXMgYmUgZXhlY3V0aW5nIHRoZSBuZXcvZGVvcHRlZCBjb2RlLCBpdCdzXG4gICAgICAgIC8vIGEgZ29vZCBpZGVhIChhcyBhIHBhdHRlcm4pIHRvIG51bGwgb3V0IGFueSB1bm5lZWRlZCBmaWVsZHMgaGVyZSB0byBhdm9pZFxuICAgICAgICAvLyBob2xkaW5nIG9uIHRvIHVubmVlZGVkL3N0YWxlIG9iamVjdHM6XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IG51bGw7XG4gICAgICAgIHJldHVybiBkZW9wdGVkO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGxldCB7IF9ndWlkOiBndWlkLCB0eXBlLCBkZW9wdGVkIH0gPSB0aGlzO1xuICAgICAgICBpZiAoZGVvcHRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBndWlkLFxuICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgZGVvcHRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogZGVvcHRlZC50b0FycmF5KCkubWFwKG9wID0+IG9wLnRvSlNPTigpKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZ3VpZCxcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFt0aGlzLmV4cHJlc3Npb24udG9KU09OKCldXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxufVxuY2xhc3MgSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlIGV4dGVuZHMgQ29uZGl0aW9uYWxSZWZlcmVuY2Uge1xuICAgIHN0YXRpYyBjcmVhdGUoaW5uZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJc0NvbXBvbmVudERlZmluaXRpb25SZWZlcmVuY2UoaW5uZXIpO1xuICAgIH1cbiAgICB0b0Jvb2wodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlzQ29tcG9uZW50RGVmaW5pdGlvbih2YWx1ZSk7XG4gICAgfVxufVxuY2xhc3MgVXBkYXRlT3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICAgIGNvbnN0cnVjdG9yKGNhY2hlLCBib3VuZHMsIHVwc2VydCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNhY2hlID0gY2FjaGU7XG4gICAgICAgIHRoaXMuYm91bmRzID0gYm91bmRzO1xuICAgICAgICB0aGlzLnVwc2VydCA9IHVwc2VydDtcbiAgICAgICAgdGhpcy50YWcgPSBjYWNoZS50YWc7XG4gICAgfVxuICAgIGV2YWx1YXRlKHZtKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuY2FjaGUucmV2YWxpZGF0ZSgpO1xuICAgICAgICBpZiAoaXNNb2RpZmllZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGxldCB7IGJvdW5kcywgdXBzZXJ0IH0gPSB0aGlzO1xuICAgICAgICAgICAgbGV0IHsgZG9tIH0gPSB2bTtcbiAgICAgICAgICAgIGlmICghdGhpcy51cHNlcnQudXBkYXRlKGRvbSwgdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnNvciA9IG5ldyBDdXJzb3IoYm91bmRzLnBhcmVudEVsZW1lbnQoKSwgY2xlYXIoYm91bmRzKSk7XG4gICAgICAgICAgICAgICAgdXBzZXJ0ID0gdGhpcy51cHNlcnQgPSB0aGlzLmluc2VydCh2bS5lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLCBjdXJzb3IsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJvdW5kcy51cGRhdGUodXBzZXJ0LmJvdW5kcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBsZXQgeyBfZ3VpZDogZ3VpZCwgdHlwZSwgY2FjaGUgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBndWlkLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGRldGFpbHM6IHsgbGFzdFZhbHVlOiBKU09OLnN0cmluZ2lmeShjYWNoZS5wZWVrKCkpIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgR3VhcmRlZFVwZGF0ZU9wY29kZSBleHRlbmRzIFVwZGF0ZU9wY29kZSB7XG4gICAgY29uc3RydWN0b3IocmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQsIGFwcGVuZE9wY29kZSwgc3RhdGUpIHtcbiAgICAgICAgc3VwZXIoY2FjaGUsIGJvdW5kcywgdXBzZXJ0KTtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgICAgIHRoaXMuYXBwZW5kT3Bjb2RlID0gYXBwZW5kT3Bjb2RlO1xuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHRoaXMuZGVvcHRlZCA9IG51bGw7XG4gICAgICAgIHRoaXMudGFnID0gdGhpcy5fdGFnID0gbmV3IFVwZGF0YWJsZVRhZyh0aGlzLnRhZyk7XG4gICAgfVxuICAgIGV2YWx1YXRlKHZtKSB7XG4gICAgICAgIGlmICh0aGlzLmRlb3B0ZWQpIHtcbiAgICAgICAgICAgIHZtLmV2YWx1YXRlT3Bjb2RlKHRoaXMuZGVvcHRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNDb21wb25lbnREZWZpbml0aW9uKHRoaXMucmVmZXJlbmNlLnZhbHVlKCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXp5RGVvcHQodm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3VwZXIuZXZhbHVhdGUodm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGxhenlEZW9wdCh2bSkge1xuICAgICAgICAvLyBEdXJpZ24gaW5pdGlhbCByZW5kZXIsIHdlIGtub3cgdGhhdCB0aGUgcmVmZXJlbmNlIGRvZXMgbm90IGNvbnRhaW4gYVxuICAgICAgICAvLyBjb21wb25lbnQgZGVmaW5pdGlvbiwgc28gd2Ugb3B0aW1pc3RpY2FsbHkgYXNzdW1lZCB0aGF0IHRoaXMgYXBwZW5kXG4gICAgICAgIC8vIGlzIGp1c3QgYSBub3JtYWwgYXBwZW5kLiBIb3dldmVyLCBhdCB1cGRhdGUgdGltZSwgd2UgZGlzY292ZXJlZCB0aGF0XG4gICAgICAgIC8vIHRoZSByZWZlcmVuY2UgaGFzIHN3aXRjaGVkIGludG8gY29udGFpbmluZyBhIGNvbXBvbmVudCBkZWZpbml0aW9uLCBzb1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIGRvIGEgXCJsYXp5IGRlb3B0XCIsIHNpbXVsYXRpbmcgd2hhdCB3b3VsZCBoYXZlIGhhcHBlbmVkIGlmXG4gICAgICAgIC8vIHdlIGhhZCBkZWNpZGVkIHRvIHBlcmZvcm0gdGhlIGRlb3B0IGluIHRoZSBmaXJzdCBwbGFjZSBkdXJpbmcgaW5pdGlhbFxuICAgICAgICAvLyByZW5kZXIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIE1vcmUgY29uY3JldGVseSwgd2Ugd291bGQgaGF2ZSBleHBhbmRlZCB0aGUgY3VybHkgaW50byBhIGlmL2Vsc2UsIGFuZFxuICAgICAgICAvLyBiYXNlZCBvbiB3aGV0aGVyIHRoZSB2YWx1ZSBpcyBhIGNvbXBvbmVudCBkZWZpbml0aW9uIG9yIG5vdCwgd2Ugd291bGRcbiAgICAgICAgLy8gaGF2ZSBlbnRlcmVkIGVpdGhlciB0aGUgZHluYW1pYyBjb21wb25lbnQgYnJhbmNoIG9yIHRoZSBzaW1wbGUgdmFsdWVcbiAgICAgICAgLy8gYnJhbmNoLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTaW5jZSB3ZSByZW5kZXJlZCBhIHNpbXBsZSB2YWx1ZSBkdXJpbmcgaW5pdGlhbCByZW5kZXIgKGFuZCBhbGwgdGhlXG4gICAgICAgIC8vIHVwZGF0ZXMgdXAgdW50aWwgdGhpcyBwb2ludCksIHdlIG5lZWQgdG8gcHJldGVuZCB0aGF0IHRoZSByZXN1bHQgaXNcbiAgICAgICAgLy8gcHJvZHVjZWQgYnkgdGhlIFwiVkFMVUVcIiBicmFuY2ggb2YgdGhlIGRlb3B0ZWQgYXBwZW5kIG9wY29kZTpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICBUcnkoQkVHSU4sIEVORClcbiAgICAgICAgLy8gICAgIEFzc2VydChJc0NvbXBvbmVudERlZmluaXRpb24sIGV4cGVjdGVkPWZhbHNlKVxuICAgICAgICAvLyAgICAgT3B0aW1pemVkVXBkYXRlXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEluIHRoaXMgY2FzZSwgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIGhhcyBzd2l0Y2hlZCBmcm9tIGJlaW5nIGEgc2ltcGxlXG4gICAgICAgIC8vIHZhbHVlIGludG8gYSBjb21wb25lbnQgZGVmaW5pdGlvbiwgd2hhdCB3b3VsZCBoYXZlIGhhcHBlbmVkIGlzIHRoYXRcbiAgICAgICAgLy8gdGhlIGFzc2VydCB3b3VsZCB0aHJvdywgY2F1c2luZyB0aGUgVHJ5IG9wY29kZSB0byB0ZWFyZG93biB0aGUgYm91bmRzXG4gICAgICAgIC8vIGFuZCByZXJ1biB0aGUgb3JpZ2luYWwgYXBwZW5kIG9wY29kZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gU2luY2UgdGhlIFRyeSBvcGNvZGUgd291bGQgaGF2ZSBudWtlZCB0aGUgdXBkYXRpbmcgb3Bjb2RlcyBhbnl3YXksIHdlXG4gICAgICAgIC8vIHdvdWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgc2ltdWxhdGluZyB0aG9zZS4gQWxsIHdlIGhhdmUgdG8gZG8gaXMgdG9cbiAgICAgICAgLy8gZXhlY3V0ZSB0aGUgVHJ5IG9wY29kZSBhbmQgaW1tZWRpYXRlbHkgdGhyb3cuXG4gICAgICAgIGxldCB7IGJvdW5kcywgYXBwZW5kT3Bjb2RlLCBzdGF0ZSB9ID0gdGhpcztcbiAgICAgICAgbGV0IGFwcGVuZE9wcyA9IGFwcGVuZE9wY29kZS5kZW9wdCh2bS5lbnYpO1xuICAgICAgICBsZXQgZW50ZXIgPSBhcHBlbmRPcHMuaGVhZCgpO1xuICAgICAgICBsZXQgb3BzID0gZW50ZXIuc2xpY2U7XG4gICAgICAgIGxldCB0cmFja2VyID0gbmV3IFVwZGF0YWJsZUJsb2NrVHJhY2tlcihib3VuZHMucGFyZW50RWxlbWVudCgpKTtcbiAgICAgICAgdHJhY2tlci5uZXdCb3VuZHModGhpcy5ib3VuZHMpO1xuICAgICAgICBsZXQgY2hpbGRyZW4gPSBuZXcgTGlua2VkTGlzdCgpO1xuICAgICAgICBsZXQgZGVvcHRlZCA9IHRoaXMuZGVvcHRlZCA9IG5ldyBUcnlPcGNvZGUob3BzLCBzdGF0ZSwgdHJhY2tlciwgY2hpbGRyZW4pO1xuICAgICAgICB0aGlzLl90YWcudXBkYXRlKGRlb3B0ZWQudGFnKTtcbiAgICAgICAgdm0uZXZhbHVhdGVPcGNvZGUoZGVvcHRlZCk7XG4gICAgICAgIHZtLnRocm93KCk7XG4gICAgICAgIC8vIEZyb20gdGhpcyBwb2ludCBvbiwgd2UgaGF2ZSBlc3NlbnRpYWxseSByZXBsYWNlZCBvdXJzZWx2ZSB3aXRoIGEgbmV3XG4gICAgICAgIC8vIG9wY29kZS4gU2luY2Ugd2Ugd2lsbCBhbHdheXMgYmUgZXhlY3V0aW5nIHRoZSBuZXcvZGVvcHRlZCBjb2RlLCBpdCdzIGFcbiAgICAgICAgLy8gZ29vZCBpZGVhIChhcyBhIHBhdHRlcm4pIHRvIG51bGwgb3V0IGFueSB1bm5lZWRlZCBmaWVsZHMgaGVyZSB0byBhdm9pZFxuICAgICAgICAvLyBob2xkaW5nIG9uIHRvIHVubmVlZGVkL3N0YWxlIG9iamVjdHM6XG4gICAgICAgIHRoaXMuX3RhZyA9IG51bGw7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlID0gbnVsbDtcbiAgICAgICAgdGhpcy5jYWNoZSA9IG51bGw7XG4gICAgICAgIHRoaXMuYm91bmRzID0gbnVsbDtcbiAgICAgICAgdGhpcy51cHNlcnQgPSBudWxsO1xuICAgICAgICB0aGlzLmFwcGVuZE9wY29kZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBudWxsO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGxldCB7IF9ndWlkOiBndWlkLCB0eXBlLCBkZW9wdGVkIH0gPSB0aGlzO1xuICAgICAgICBpZiAoZGVvcHRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBndWlkLFxuICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgZGVvcHRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW2Rlb3B0ZWQudG9KU09OKCldXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnRvSlNPTigpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlIGV4dGVuZHMgQXBwZW5kT3Bjb2RlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ29wdGltaXplZC1jYXV0aW91cy1hcHBlbmQnO1xuICAgIH1cbiAgICBub3JtYWxpemUocmVmZXJlbmNlKSB7XG4gICAgICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVWYWx1ZSk7XG4gICAgfVxuICAgIGluc2VydChkb20sIGN1cnNvciwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gICAgfVxuICAgIHVwZGF0ZVdpdGgodm0sIHJlZmVyZW5jZSwgY2FjaGUsIGJvdW5kcywgdXBzZXJ0KSB7XG4gICAgICAgIHJldHVybiBuZXcgT3B0aW1pemVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUoY2FjaGUsIGJvdW5kcywgdXBzZXJ0KTtcbiAgICB9XG59XG5jbGFzcyBPcHRpbWl6ZWRDYXV0aW91c1VwZGF0ZU9wY29kZSBleHRlbmRzIFVwZGF0ZU9wY29kZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdvcHRpbWl6ZWQtY2F1dGlvdXMtdXBkYXRlJztcbiAgICB9XG4gICAgaW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gY2F1dGlvdXNJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgR3VhcmRlZENhdXRpb3VzQXBwZW5kT3Bjb2RlIGV4dGVuZHMgR3VhcmRlZEFwcGVuZE9wY29kZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdndWFyZGVkLWNhdXRpb3VzLWFwcGVuZCc7XG4gICAgICAgIHRoaXMuQXBwZW5kT3Bjb2RlID0gT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGU7XG4gICAgfVxuICAgIG5vcm1hbGl6ZShyZWZlcmVuY2UpIHtcbiAgICAgICAgcmV0dXJuIG1hcChyZWZlcmVuY2UsIG5vcm1hbGl6ZVZhbHVlKTtcbiAgICB9XG4gICAgaW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gY2F1dGlvdXNJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgICB9XG4gICAgdXBkYXRlV2l0aCh2bSwgcmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBHdWFyZGVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUocmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQsIHRoaXMsIHZtLmNhcHR1cmUoKSk7XG4gICAgfVxufVxuY2xhc3MgR3VhcmRlZENhdXRpb3VzVXBkYXRlT3Bjb2RlIGV4dGVuZHMgR3VhcmRlZFVwZGF0ZU9wY29kZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdndWFyZGVkLWNhdXRpb3VzLXVwZGF0ZSc7XG4gICAgfVxuICAgIGluc2VydChkb20sIGN1cnNvciwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE9wdGltaXplZFRydXN0aW5nQXBwZW5kT3Bjb2RlIGV4dGVuZHMgQXBwZW5kT3Bjb2RlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ29wdGltaXplZC10cnVzdGluZy1hcHBlbmQnO1xuICAgIH1cbiAgICBub3JtYWxpemUocmVmZXJlbmNlKSB7XG4gICAgICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVUcnVzdGVkVmFsdWUpO1xuICAgIH1cbiAgICBpbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICAgIH1cbiAgICB1cGRhdGVXaXRoKHZtLCByZWZlcmVuY2UsIGNhY2hlLCBib3VuZHMsIHVwc2VydCkge1xuICAgICAgICByZXR1cm4gbmV3IE9wdGltaXplZFRydXN0aW5nVXBkYXRlT3Bjb2RlKGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gICAgfVxufVxuY2xhc3MgT3B0aW1pemVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUgZXh0ZW5kcyBVcGRhdGVPcGNvZGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnb3B0aW1pemVkLXRydXN0aW5nLXVwZGF0ZSc7XG4gICAgfVxuICAgIGluc2VydChkb20sIGN1cnNvciwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRydXN0aW5nSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEd1YXJkZWRUcnVzdGluZ0FwcGVuZE9wY29kZSBleHRlbmRzIEd1YXJkZWRBcHBlbmRPcGNvZGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnZ3VhcmRlZC10cnVzdGluZy1hcHBlbmQnO1xuICAgICAgICB0aGlzLkFwcGVuZE9wY29kZSA9IE9wdGltaXplZFRydXN0aW5nQXBwZW5kT3Bjb2RlO1xuICAgIH1cbiAgICBub3JtYWxpemUocmVmZXJlbmNlKSB7XG4gICAgICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVUcnVzdGVkVmFsdWUpO1xuICAgIH1cbiAgICBpbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICAgIH1cbiAgICB1cGRhdGVXaXRoKHZtLCByZWZlcmVuY2UsIGNhY2hlLCBib3VuZHMsIHVwc2VydCkge1xuICAgICAgICByZXR1cm4gbmV3IEd1YXJkZWRUcnVzdGluZ1VwZGF0ZU9wY29kZShyZWZlcmVuY2UsIGNhY2hlLCBib3VuZHMsIHVwc2VydCwgdGhpcywgdm0uY2FwdHVyZSgpKTtcbiAgICB9XG59XG5jbGFzcyBHdWFyZGVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkVXBkYXRlT3Bjb2RlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3RydXN0aW5nLXVwZGF0ZSc7XG4gICAgfVxuICAgIGluc2VydChkb20sIGN1cnNvciwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRydXN0aW5nSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gICAgfVxufVxuIl19
enifed('glimmer-runtime/lib/compiled/opcodes/dom', ['exports', 'glimmer-runtime/lib/opcodes', 'glimmer-util', 'glimmer-reference', 'glimmer-runtime/lib/references', 'glimmer-runtime/lib/compiled/expressions/value'], function (exports, _glimmerRuntimeLibOpcodes, _glimmerUtil, _glimmerReference, _glimmerRuntimeLibReferences, _glimmerRuntimeLibCompiledExpressionsValue) {
'use strict';
var TextOpcode = (function (_Opcode) {
babelHelpers.inherits(TextOpcode, _Opcode);
@@ -19536,17 +18260,17 @@
}
;
var PropertyChangeList = {
setAttribute: function (env, element, attr, value, namespace) {
- if (value !== null) {
+ if (value !== null && value !== undefined) {
var normalized = attr.toLowerCase();
element[normalized] = _glimmerRuntimeLibDomProps.normalizePropertyValue(value); // TODO: This doesn't work
}
},
updateAttribute: function (env, element, attr, value, namespace) {
- if (value === null) {
+ if (value === null || value === undefined) {
var normalized = attr.toLowerCase();
element[normalized] = value;
} else {
this.setAttribute.apply(this, arguments);
}
@@ -19562,11 +18286,11 @@
dom.setAttribute(element, attr, _glimmerRuntimeLibCompiledOpcodesContent.normalizeTextValue(value), namespace);
}
};
_class.prototype.updateAttribute = function updateAttribute(env, element, attr, value, namespace) {
- if (value === null) {
+ if (value === null || value === undefined) {
if (namespace) {
env.getDOM().removeAttributeNS(element, namespace, attr);
} else {
env.getDOM().removeAttribute(element, attr);
}
@@ -19653,11 +18377,11 @@
return _class5;
})())();
exports.SafeHrefAttributeChangeList = SafeHrefAttributeChangeList;
});
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvZG9tL2NoYW5nZS1saXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQWlCTSxhQUFBLGtCQUFBLENBQTZCLE9BQXVCLEVBQUUsSUFBWSxFQUFFLFVBQW1CLEVBQUUsU0FBaUIsRUFBQTtBQUM5RyxZQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzlCLFlBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxZQUFZLGlDQVh6QixhQUFhLEFBVzhCLENBQUM7QUFFbkQsWUFBSSxLQUFLLEVBQUU7QUFDVCxtQkFBTywyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbkQ7O2lDQUVjLDJCQWxCUixpQkFBaUIsQ0FrQlMsT0FBTyxFQUFFLElBQUksQ0FBQzs7WUFBekMsSUFBSSxzQkFBSixJQUFJOztBQUVWLFlBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtBQUNuQixtQkFBTywyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbkQsTUFBTTtBQUNMLG1CQUFPLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNsRDtLQUNGOztBQUVLLGFBQUEsMEJBQUEsQ0FBcUMsT0FBZSxFQUFFLElBQVksRUFBQTtBQUN0RSxZQUFJLHFDQTlCSixvQkFBb0IsQ0E4QkssT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ3ZDLG1CQUFPLDBCQUEwQixDQUFDO1NBQ25DO0FBRUQsWUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUU7QUFDbkMsbUJBQU8sNEJBQTRCLENBQUM7U0FDckM7QUFFRCxZQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTtBQUNuQyxtQkFBTyx3QkFBd0IsQ0FBQztTQUNqQztBQUVELGVBQU8sa0JBQWtCLENBQUM7S0FDM0I7O0FBRUssYUFBQSwyQkFBQSxDQUFzQyxPQUFlLEVB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QU8sRUFBRSxJQUFJLEVBQUUscUNBcEt2RCxzQkFBc0IsQ0FvS3dELEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDekc7OzBCQUVELGVBQWUsR0FBQSx5QkFBQyxHQUFnQixFQUFFLE9BQWdCLEVBQUUsSUFBWSxFQUFFLEtBQWEsRUFBQTtBQUM3RSxnQkFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM5Qzs7O1dBQ0YsQ0FBQyIsImZpbGUiOiJjaGFuZ2UtbGlzdHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGSVhNRSwgT3BhcXVlIH0gZnJvbSAnZ2xpbW1lci11dGlsJztcbmltcG9ydCB7IERPTU5hbWVzcGFjZSB9IGZyb20gJy4vaGVscGVyJztcbmltcG9ydCAqIGFzIFNpbXBsZSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgc2FuaXRpemVBdHRyaWJ1dGVWYWx1ZSxcbiAgcmVxdWlyZXNTYW5pdGl6YXRpb25cbn0gZnJvbSAnLi9zYW5pdGl6ZWQtdmFsdWVzJztcbmltcG9ydCB7IG5vcm1hbGl6ZVByb3BlcnR5LCBub3JtYWxpemVQcm9wZXJ0eVZhbHVlIH0gZnJvbSAnLi9wcm9wcyc7XG5pbXBvcnQgeyBTVkdfTkFNRVNQQUNFIH0gZnJvbSAnLi9oZWxwZXInO1xuaW1wb3J0IHsgbm9ybWFsaXplVGV4dFZhbHVlIH0gZnJvbSAnLi4vY29tcGlsZWQvb3Bjb2Rlcy9jb250ZW50JztcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDaGFuZ2VMaXN0IHtcbiAgc2V0QXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBhdHRyOiBzdHJpbmcsIHZhbHVlOiBPcGFxdWUsIG5hbWVzcGFjZT86IHN0cmluZyk6IHZvaWQ7XG4gIHVwZGF0ZUF0dHJpYnV0ZShlbnY6IEVudmlyb25tZW50LCBlbGVtZW50OiBFbGVtZW50LCBhdHRyOiBzdHJpbmcsIHZhbHVlOiBPcGFxdWUsIG5hbWVzcGFjZT86IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0Q2hhbmdlTGlzdHMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIGF0dHI6IHN0cmluZywgaXNUcnVzdGluZzogYm9vbGVhbiwgbmFtZXNwYWNlOiBzdHJpbmcpIHtcbiAgbGV0IHRhZ05hbWUgPSBlbGVtZW50LnRhZ05hbWU7XG4gIGxldCBpc1NWRyA9IGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFO1xuXG4gIGlmIChpc1NWRykge1xuICAgIHJldHVybiBkZWZhdWx0QXR0cmlidXRlQ2hhbmdlTGlzdHModGFnTmFtZSwgYXR0cik7XG4gIH1cblxuICBsZXQgeyB0eXBlIH0gPSBub3JtYWxpemVQcm9wZXJ0eShlbGVtZW50LCBhdHRyKTtcblxuICBpZiAodHlwZSA9PT0gJ2F0dHInKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRBdHRyaWJ1dGVDaGFuZ2VMaXN0cyh0YWdOYW1lLCBhdHRyKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGVmYXVsdFByb3BlcnR5Q2hhbmdlTGlzdHModGFnTmFtZSwgYXR0cik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0eUNoYW5nZUxpc3RzKHRhZ05hbWU6IHN0cmluZywgYXR0cjogc3RyaW5nKSB7XG4gIGlmIChyZXF1aXJlc1Nhbml0aXphdGlvbih0YWdOYW1lLCBhdHRyKSkge1xuICAgIHJldHVybiBTYWZlSHJlZlByb3BlcnR5Q2hhbmdlTGlzdDtcbiAgfVxuXG4gIGlmIChpc1VzZXJJbnB1dFZhbHVlKHRhZ05hbWUsIGF0dHIpKSB7XG4gICAgcmV0dXJuIElucHV0VmFsdWVQcm9wZXJ0eUNoYW5nZUxpc3Q7XG4gIH1cblxuICBpZiAoaXNPcHRpb25TZWxlY3RlZCh0YWdOYW1lLCBhdHRyKSkge1xuICAgIHJldHVybiBPcHRpb25TZWxlY3RlZENoYW5nZUxpc3Q7XG4gIH1cblxuICByZXR1cm4gUHJvcGVydHlDaGFuZ2VMaXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdEF0dHJpYnV0ZUNoYW5nZUxpc3RzKHRhZ05hbWU6IHN0cmluZywgYXR0cjogc3RyaW5nKSB7XG4gIGlmIChyZXF1aXJlc1Nhbml0aXphdGlvbih0YWdOYW1lLCBhdHRyKSkge1xuICAgIHJldHVybiBTYWZlSHJlZkF0dHJpYnV0ZUNoYW5nZUxpc3Q7XG4gIH1cblxuICByZXR1cm4gQXR0cmlidXRlQ2hhbmdlTGlzdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRET01BdHRyKGVsZW1lbnQ6IEVsZW1lbnQsIGF0dHI6IHN0cmluZykge1xuICAgbGV0IGlzU1ZHID0gZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0U7XG4gICBsZXQgeyB0eXBlLCBub3JtYWxpemVkIH0gPSBub3JtYWxpemVQcm9wZXJ0eShlbGVtZW50LCBhdHRyKTtcblxuICAgaWYgKGlzU1ZHKSB7XG4gICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShub3JtYWxpemVkKTtcbiAgIH1cblxuICAgaWYgKHR5cGUgPT09ICdhdHRyJykge1xuICAgICByZXR1cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUobm9ybWFsaXplZCk7XG4gICB9IHtcbiAgICAgcmV0dXJuIGVsZW1lbnRbbm9ybWFsaXplZF07XG4gICB9XG59O1xuXG5leHBvcnQgY29uc3QgUHJvcGVydHlDaGFuZ2VMaXN0OiBJQ2hhbmdlTGlzdCA9IHtcbiAgc2V0QXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBhdHRyOiBzdHJpbmcsIHZhbHVlOiBPcGFxdWUsIG5hbWVzcGFjZT86IERPTU5hbWVzcGFjZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgbGV0IG5vcm1hbGl6ZWQgPSBhdHRyLnRvTG93ZXJDYXNlKCk7XG4gICAgICBlbGVtZW50W25vcm1hbGl6ZWRdID0gbm9ybWFsaXplUHJvcGVydHlWYWx1ZSh2YWx1ZSk7IC8vIFRPRE86IFRoaXMgZG9lc24ndCB3b3JrXG4gICAgfVxuICB9LFxuXG4gIHVwZGF0ZUF0dHJpYnV0ZShlbnY6IEVudmlyb25tZW50LCBlbGVtZW50OiBFbGVtZW50LCBhdHRyOiBzdHJpbmcsIHZhbHVlOiBPcGFxdWUsIG5hbWVzcGFjZT86IERPTU5hbWVzcGFjZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgbGV0IG5vcm1hbGl6ZWQgPSBhdHRyLnRvTG93ZXJDYXNlKCk7XG4gICAgICBlbGVtZW50W25vcm1hbGl6ZWRdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKC4uLmFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgQXR0cmlidXRlQ2hhbmdlTGlzdDogSUNoYW5nZUxpc3QgPSBuZXcgY2xhc3Mge1xuICBzZXRBdHRyaWJ1dGUoZW52OiBFbnZpcm9ubWVudCwgZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIGF0dHI6IHN0cmluZywgdmFsdWU6IE9wYXF1ZSwgbmFtZXNwYWNlPzogRE9NTmFtZXNwYWNlKSB7XG4gICAgbGV0IGRvbSA9IGVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCk7XG5cbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbGVtZW50LCBhdHRyLCBub3JtYWxpemVUZXh0VmFsdWUodmFsdWUpLCBuYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUF0dHJpYnV0ZShlbnY6IEVudmlyb25tZW50LCBlbGVtZW50OiBFbGVtZW50LCBhdHRyOiBzdHJpbmcsIHZhbHVlOiBPcGFxdWUsIG5hbWVzcGFjZT86IERPTU5hbWVzcGFjZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICBlbnYuZ2V0RE9NKCkucmVtb3ZlQXR0cmlidXRlTlMoZWxlbWVudCwgbmFtZXNwYWNlLCBhdHRyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudi5nZXRET00oKS5yZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgYXR0ciwgdmFsdWUpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gaXNVc2VySW5wdXRWYWx1ZSh0YWdOYW1lOiBzdHJpbmcsIGF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gIHJldHVybiAodGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YWdOYW1lID09PSAnVEVYVEFSRUEnKSAmJiBhdHRyaWJ1dGUgPT09ICd2YWx1ZSc7XG59XG5cbmV4cG9ydCBjb25zdCBJbnB1dFZhbHVlUHJvcGVydHlDaGFuZ2VMaXN0OiBJQ2hhbmdlTGlzdCA9IG5ldyBjbGFzcyB7XG4gIHNldEF0dHJpYnV0ZShlbnY6IEVudmlyb25tZW50LCBlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgYXR0cjogc3RyaW5nLCB2YWx1ZTogT3BhcXVlKSB7XG4gICAgbGV0IGlucHV0ID0gZWxlbWVudCBhcyBGSVhNRTxIVE1MSW5wdXRFbGVtZW50LCBcIlRoaXMgYnJlYWtzIFNTUlwiPjtcbiAgICBpbnB1dC52YWx1ZSA9IG5vcm1hbGl6ZVRleHRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICB1cGRhdGVBdHRyaWJ1dGUoZW52OiBFbnZpcm9ubWVudCwgZWxlbWVudDogRWxlbWVudCwgYXR0cjogc3RyaW5nLCB2YWx1ZTogT3BhcXVlKSB7XG4gICAgbGV0IGlucHV0ID0gPEhUTUxJbnB1dEVsZW1lbnQ+ZWxlbWVudDtcbiAgICBsZXQgY3VycmVudFZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZVRleHRWYWx1ZSh2YWx1ZSk7XG4gICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gbm9ybWFsaXplZFZhbHVlKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGlzT3B0aW9uU2VsZWN0ZWQodGFnTmFtZTogc3RyaW5nLCBhdHRyaWJ1dGU6IHN0cmluZykge1xuICByZXR1cm4gdGFnTmFtZSA9PT0gJ09QVElPTicgJiYgYXR0cmlidXRlID09PSAnc2VsZWN0ZWQnO1xufVxuXG5leHBvcnQgY29uc3QgT3B0aW9uU2VsZWN0ZWRDaGFuZ2VMaXN0OiBJQ2hhbmdlTGlzdCA9IG5ldyBjbGFzcyB7XG4gIHNldEF0dHJpYnV0ZShlbnY6IEVudmlyb25tZW50LCBlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgYXR0cjogc3RyaW5nLCB2YWx1ZTogT3BhcXVlKSB7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICBlbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLnNldEF0dHJpYnV0ZShlbGVtZW50LCAnc2VsZWN0ZWQnLCAnJyk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IEVsZW1lbnQsIGF0dHI6IHN0cmluZywgdmFsdWU6IE9wYXF1ZSkge1xuICAgIGxldCBvcHRpb24gPSA8SFRNTE9wdGlvbkVsZW1lbnQ+ZWxlbWVudDtcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9uLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgU2FmZUhyZWZQcm9wZXJ0eUNoYW5nZUxpc3Q6IElDaGFuZ2VMaXN0ID0gbmV3IGNsYXNzIHtcbiAgc2V0QXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBhdHRyOiBzdHJpbmcsIHZhbHVlOiBPcGFxdWUpIHtcbiAgICBsZXQgdHJlZSA9IGVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCk7XG4gICAgUHJvcGVydHlDaGFuZ2VMaXN0LnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIGF0dHIsIHNhbml0aXplQXR0cmlidXRlVmFsdWUoZW52LCBlbGVtZW50LCBhdHRyLCB2YWx1ZSkpO1xuICB9XG5cbiAgdXBkYXRlQXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IEVsZW1lbnQsIGF0dHI6IHN0cmluZywgdmFsdWU6IE9wYXF1ZSkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgYXR0ciwgdmFsdWUpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgU2FmZUhyZWZBdHRyaWJ1dGVDaGFuZ2VMaXN0OiBJQ2hhbmdlTGlzdCA9IG5ldyBjbGFzcyB7XG4gIHNldEF0dHJpYnV0ZShlbnY6IEVudmlyb25tZW50LCBlbGVtZW50OiBFbGVtZW50LCBhdHRyOiBzdHJpbmcsIHZhbHVlOiBPcGFxdWUpIHtcbiAgICBBdHRyaWJ1dGVDaGFuZ2VMaXN0LnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIGF0dHIsIHNhbml0aXplQXR0cmlidXRlVmFsdWUoZW52LCBlbGVtZW50LCBhdHRyLCB2YWx1ZSkpO1xuICB9XG5cbiAgdXBkYXRlQXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IEVsZW1lbnQsIGF0dHI6IHN0cmluZywgdmFsdWU6IE9wYXF1ZSkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgYXR0ciwgdmFsdWUpO1xuICB9XG59O1xuIl19
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvZG9tL2NoYW5nZS1saXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQWlCTSxhQUFBLGtCQUFBLENBQTZCLE9BQXVCLEVBQUUsSUFBWSxFQUFFLFVBQW1CLEVBQUUsU0FBaUIsRUFBQTtBQUM5RyxZQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzlCLFlBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxZQUFZLGlDQVh6QixhQUFhLEFBVzhCLENBQUM7QUFFbkQsWUFBSSxLQUFLLEVBQUU7QUFDVCxtQkFBTywyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbkQ7O2lDQUVjLDJCQWxCUixpQkFBaUIsQ0FrQlMsT0FBTyxFQUFFLElBQUksQ0FBQzs7WUFBekMsSUFBSSxzQkFBSixJQUFJOztBQUVWLFlBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtBQUNuQixtQkFBTywyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbkQsTUFBTTtBQUNMLG1CQUFPLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNsRDtLQUNGOztBQUVLLGFBQUEsMEJBQUEsQ0FBcUMsT0FBZSxFQUFFLElBQVksRUFBQTtBQUN0RSxZQUFJLHFDQTlCSixvQkFBb0IsQ0E4QkssT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ3ZDLG1CQUFPLDBCQUEwQixDQUFDO1NBQ25DO0FBRUQsWUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUU7QUFDbkMsbUJBQU8sNEJBQTRCLENBQUM7U0FDckM7QUFFRCxZQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTtBQUNuQyxtQkFBTyx3QkFBd0IsQ0FBQztTQUNqQztBQUVELGVBQU8sa0JBQWtCLENBQUM7S0FDM0I7O0FBRUssYUFBQSwyQkFBQSxDQUFzQyxPQUFlLEVB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SUFBWSxFQUFFLEtBQWEsRUFBQTtBQUMxRSwrQkFBbUIsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUscUNBcEt2RCxzQkFBc0IsQ0FvS3dELEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDekc7OzBCQUVELGVBQWUsR0FBQSx5QkFBQyxHQUFnQixFQUFFLE9BQWdCLEVBQUUsSUFBWSxFQUFFLEtBQWEsRUFBQTtBQUM3RSxnQkFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM5Qzs7O1dBQ0YsQ0FBQyIsImZpbGUiOiJjaGFuZ2UtbGlzdHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGSVhNRSwgT3BhcXVlIH0gZnJvbSAnZ2xpbW1lci11dGlsJztcbmltcG9ydCB7IERPTU5hbWVzcGFjZSB9IGZyb20gJy4vaGVscGVyJztcbmltcG9ydCAqIGFzIFNpbXBsZSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgc2FuaXRpemVBdHRyaWJ1dGVWYWx1ZSxcbiAgcmVxdWlyZXNTYW5pdGl6YXRpb25cbn0gZnJvbSAnLi9zYW5pdGl6ZWQtdmFsdWVzJztcbmltcG9ydCB7IG5vcm1hbGl6ZVByb3BlcnR5LCBub3JtYWxpemVQcm9wZXJ0eVZhbHVlIH0gZnJvbSAnLi9wcm9wcyc7XG5pbXBvcnQgeyBTVkdfTkFNRVNQQUNFIH0gZnJvbSAnLi9oZWxwZXInO1xuaW1wb3J0IHsgbm9ybWFsaXplVGV4dFZhbHVlIH0gZnJvbSAnLi4vY29tcGlsZWQvb3Bjb2Rlcy9jb250ZW50JztcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDaGFuZ2VMaXN0IHtcbiAgc2V0QXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBhdHRyOiBzdHJpbmcsIHZhbHVlOiBPcGFxdWUsIG5hbWVzcGFjZT86IHN0cmluZyk6IHZvaWQ7XG4gIHVwZGF0ZUF0dHJpYnV0ZShlbnY6IEVudmlyb25tZW50LCBlbGVtZW50OiBFbGVtZW50LCBhdHRyOiBzdHJpbmcsIHZhbHVlOiBPcGFxdWUsIG5hbWVzcGFjZT86IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0Q2hhbmdlTGlzdHMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIGF0dHI6IHN0cmluZywgaXNUcnVzdGluZzogYm9vbGVhbiwgbmFtZXNwYWNlOiBzdHJpbmcpIHtcbiAgbGV0IHRhZ05hbWUgPSBlbGVtZW50LnRhZ05hbWU7XG4gIGxldCBpc1NWRyA9IGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFO1xuXG4gIGlmIChpc1NWRykge1xuICAgIHJldHVybiBkZWZhdWx0QXR0cmlidXRlQ2hhbmdlTGlzdHModGFnTmFtZSwgYXR0cik7XG4gIH1cblxuICBsZXQgeyB0eXBlIH0gPSBub3JtYWxpemVQcm9wZXJ0eShlbGVtZW50LCBhdHRyKTtcblxuICBpZiAodHlwZSA9PT0gJ2F0dHInKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRBdHRyaWJ1dGVDaGFuZ2VMaXN0cyh0YWdOYW1lLCBhdHRyKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGVmYXVsdFByb3BlcnR5Q2hhbmdlTGlzdHModGFnTmFtZSwgYXR0cik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0eUNoYW5nZUxpc3RzKHRhZ05hbWU6IHN0cmluZywgYXR0cjogc3RyaW5nKSB7XG4gIGlmIChyZXF1aXJlc1Nhbml0aXphdGlvbih0YWdOYW1lLCBhdHRyKSkge1xuICAgIHJldHVybiBTYWZlSHJlZlByb3BlcnR5Q2hhbmdlTGlzdDtcbiAgfVxuXG4gIGlmIChpc1VzZXJJbnB1dFZhbHVlKHRhZ05hbWUsIGF0dHIpKSB7XG4gICAgcmV0dXJuIElucHV0VmFsdWVQcm9wZXJ0eUNoYW5nZUxpc3Q7XG4gIH1cblxuICBpZiAoaXNPcHRpb25TZWxlY3RlZCh0YWdOYW1lLCBhdHRyKSkge1xuICAgIHJldHVybiBPcHRpb25TZWxlY3RlZENoYW5nZUxpc3Q7XG4gIH1cblxuICByZXR1cm4gUHJvcGVydHlDaGFuZ2VMaXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdEF0dHJpYnV0ZUNoYW5nZUxpc3RzKHRhZ05hbWU6IHN0cmluZywgYXR0cjogc3RyaW5nKSB7XG4gIGlmIChyZXF1aXJlc1Nhbml0aXphdGlvbih0YWdOYW1lLCBhdHRyKSkge1xuICAgIHJldHVybiBTYWZlSHJlZkF0dHJpYnV0ZUNoYW5nZUxpc3Q7XG4gIH1cblxuICByZXR1cm4gQXR0cmlidXRlQ2hhbmdlTGlzdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRET01BdHRyKGVsZW1lbnQ6IEVsZW1lbnQsIGF0dHI6IHN0cmluZykge1xuICAgbGV0IGlzU1ZHID0gZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0U7XG4gICBsZXQgeyB0eXBlLCBub3JtYWxpemVkIH0gPSBub3JtYWxpemVQcm9wZXJ0eShlbGVtZW50LCBhdHRyKTtcblxuICAgaWYgKGlzU1ZHKSB7XG4gICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShub3JtYWxpemVkKTtcbiAgIH1cblxuICAgaWYgKHR5cGUgPT09ICdhdHRyJykge1xuICAgICByZXR1cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUobm9ybWFsaXplZCk7XG4gICB9IHtcbiAgICAgcmV0dXJuIGVsZW1lbnRbbm9ybWFsaXplZF07XG4gICB9XG59O1xuXG5leHBvcnQgY29uc3QgUHJvcGVydHlDaGFuZ2VMaXN0OiBJQ2hhbmdlTGlzdCA9IHtcbiAgc2V0QXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBhdHRyOiBzdHJpbmcsIHZhbHVlOiBPcGFxdWUsIG5hbWVzcGFjZT86IERPTU5hbWVzcGFjZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbm9ybWFsaXplZCA9IGF0dHIudG9Mb3dlckNhc2UoKTtcbiAgICAgIGVsZW1lbnRbbm9ybWFsaXplZF0gPSBub3JtYWxpemVQcm9wZXJ0eVZhbHVlKHZhbHVlKTsgLy8gVE9ETzogVGhpcyBkb2Vzbid0IHdvcmtcbiAgICB9XG4gIH0sXG5cbiAgdXBkYXRlQXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IEVsZW1lbnQsIGF0dHI6IHN0cmluZywgdmFsdWU6IE9wYXF1ZSwgbmFtZXNwYWNlPzogRE9NTmFtZXNwYWNlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBub3JtYWxpemVkID0gYXR0ci50b0xvd2VyQ2FzZSgpO1xuICAgICAgZWxlbWVudFtub3JtYWxpemVkXSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZSguLi5hcmd1bWVudHMpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IEF0dHJpYnV0ZUNoYW5nZUxpc3Q6IElDaGFuZ2VMaXN0ID0gbmV3IGNsYXNzIHtcbiAgc2V0QXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBhdHRyOiBzdHJpbmcsIHZhbHVlOiBPcGFxdWUsIG5hbWVzcGFjZT86IERPTU5hbWVzcGFjZSkge1xuICAgIGxldCBkb20gPSBlbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpO1xuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgYXR0ciwgbm9ybWFsaXplVGV4dFZhbHVlKHZhbHVlKSwgbmFtZXNwYWNlKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVBdHRyaWJ1dGUoZW52OiBFbnZpcm9ubWVudCwgZWxlbWVudDogRWxlbWVudCwgYXR0cjogc3RyaW5nLCB2YWx1ZTogT3BhcXVlLCBuYW1lc3BhY2U/OiBET01OYW1lc3BhY2UpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICBlbnYuZ2V0RE9NKCkucmVtb3ZlQXR0cmlidXRlTlMoZWxlbWVudCwgbmFtZXNwYWNlLCBhdHRyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudi5nZXRET00oKS5yZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgYXR0ciwgdmFsdWUpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gaXNVc2VySW5wdXRWYWx1ZSh0YWdOYW1lOiBzdHJpbmcsIGF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gIHJldHVybiAodGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YWdOYW1lID09PSAnVEVYVEFSRUEnKSAmJiBhdHRyaWJ1dGUgPT09ICd2YWx1ZSc7XG59XG5cbmV4cG9ydCBjb25zdCBJbnB1dFZhbHVlUHJvcGVydHlDaGFuZ2VMaXN0OiBJQ2hhbmdlTGlzdCA9IG5ldyBjbGFzcyB7XG4gIHNldEF0dHJpYnV0ZShlbnY6IEVudmlyb25tZW50LCBlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgYXR0cjogc3RyaW5nLCB2YWx1ZTogT3BhcXVlKSB7XG4gICAgbGV0IGlucHV0ID0gZWxlbWVudCBhcyBGSVhNRTxIVE1MSW5wdXRFbGVtZW50LCBcIlRoaXMgYnJlYWtzIFNTUlwiPjtcbiAgICBpbnB1dC52YWx1ZSA9IG5vcm1hbGl6ZVRleHRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICB1cGRhdGVBdHRyaWJ1dGUoZW52OiBFbnZpcm9ubWVudCwgZWxlbWVudDogRWxlbWVudCwgYXR0cjogc3RyaW5nLCB2YWx1ZTogT3BhcXVlKSB7XG4gICAgbGV0IGlucHV0ID0gPEhUTUxJbnB1dEVsZW1lbnQ+ZWxlbWVudDtcbiAgICBsZXQgY3VycmVudFZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZVRleHRWYWx1ZSh2YWx1ZSk7XG4gICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gbm9ybWFsaXplZFZhbHVlKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGlzT3B0aW9uU2VsZWN0ZWQodGFnTmFtZTogc3RyaW5nLCBhdHRyaWJ1dGU6IHN0cmluZykge1xuICByZXR1cm4gdGFnTmFtZSA9PT0gJ09QVElPTicgJiYgYXR0cmlidXRlID09PSAnc2VsZWN0ZWQnO1xufVxuXG5leHBvcnQgY29uc3QgT3B0aW9uU2VsZWN0ZWRDaGFuZ2VMaXN0OiBJQ2hhbmdlTGlzdCA9IG5ldyBjbGFzcyB7XG4gIHNldEF0dHJpYnV0ZShlbnY6IEVudmlyb25tZW50LCBlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgYXR0cjogc3RyaW5nLCB2YWx1ZTogT3BhcXVlKSB7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICBlbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLnNldEF0dHJpYnV0ZShlbGVtZW50LCAnc2VsZWN0ZWQnLCAnJyk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IEVsZW1lbnQsIGF0dHI6IHN0cmluZywgdmFsdWU6IE9wYXF1ZSkge1xuICAgIGxldCBvcHRpb24gPSA8SFRNTE9wdGlvbkVsZW1lbnQ+ZWxlbWVudDtcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9uLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgU2FmZUhyZWZQcm9wZXJ0eUNoYW5nZUxpc3Q6IElDaGFuZ2VMaXN0ID0gbmV3IGNsYXNzIHtcbiAgc2V0QXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBhdHRyOiBzdHJpbmcsIHZhbHVlOiBPcGFxdWUpIHtcbiAgICBsZXQgdHJlZSA9IGVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCk7XG4gICAgUHJvcGVydHlDaGFuZ2VMaXN0LnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIGF0dHIsIHNhbml0aXplQXR0cmlidXRlVmFsdWUoZW52LCBlbGVtZW50LCBhdHRyLCB2YWx1ZSkpO1xuICB9XG5cbiAgdXBkYXRlQXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IEVsZW1lbnQsIGF0dHI6IHN0cmluZywgdmFsdWU6IE9wYXF1ZSkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgYXR0ciwgdmFsdWUpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgU2FmZUhyZWZBdHRyaWJ1dGVDaGFuZ2VMaXN0OiBJQ2hhbmdlTGlzdCA9IG5ldyBjbGFzcyB7XG4gIHNldEF0dHJpYnV0ZShlbnY6IEVudmlyb25tZW50LCBlbGVtZW50OiBFbGVtZW50LCBhdHRyOiBzdHJpbmcsIHZhbHVlOiBPcGFxdWUpIHtcbiAgICBBdHRyaWJ1dGVDaGFuZ2VMaXN0LnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIGF0dHIsIHNhbml0aXplQXR0cmlidXRlVmFsdWUoZW52LCBlbGVtZW50LCBhdHRyLCB2YWx1ZSkpO1xuICB9XG5cbiAgdXBkYXRlQXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IEVsZW1lbnQsIGF0dHI6IHN0cmluZywgdmFsdWU6IE9wYXF1ZSkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgYXR0ciwgdmFsdWUpO1xuICB9XG59O1xuIl19
enifed('glimmer-runtime/lib/dom/helper', ['exports', 'glimmer-runtime/lib/bounds', 'glimmer-runtime/lib/compat/inner-html-fix', 'glimmer-runtime/lib/compat/svg-inner-html-fix', 'glimmer-runtime/lib/compat/text-node-merging-fix', 'glimmer-runtime/lib/dom/interfaces'], function (exports, _glimmerRuntimeLibBounds, _glimmerRuntimeLibCompatInnerHtmlFix, _glimmerRuntimeLibCompatSvgInnerHtmlFix, _glimmerRuntimeLibCompatTextNodeMergingFix, _glimmerRuntimeLibDomInterfaces) {
'use strict';
exports.isWhitespace = isWhitespace;
exports.moveNodesBefore = moveNodesBefore;
@@ -22924,18 +21648,10 @@
VM.prototype.pushEvalFrame = function pushEvalFrame(ops) {
this.frame.push(ops);
};
- VM.prototype.popFrame = function popFrame() {
- var frame = this.frame;
-
- frame.pop();
- var current = frame.getCurrent();
- if (current === null) return;
- };
-
VM.prototype.pushChildScope = function pushChildScope() {
this.scopeStack.push(this.scopeStack.current.child());
};
VM.prototype.pushCallerScope = function pushCallerScope() {
@@ -23078,10 +21794,10 @@
return VM;
})();
exports.default = VM;
});
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvdm0vYXBwZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztRQStDYyxFQUFBO0FBZVosaUJBZlksRUFBQSxDQWVBLElBQWdFLEVBQUE7Z0JBQTlELEdBQUcsR0FBTCxJQUFnRSxDQUE5RCxHQUFHO2dCQUFFLEtBQUssR0FBWixJQUFnRSxDQUF6RCxLQUFLO2dCQUFFLFlBQVksR0FBMUIsSUFBZ0UsQ0FBbEQsWUFBWTtnQkFBRSxZQUFZLEdBQXhDLElBQWdFLENBQXBDLFlBQVk7O0FBYjVDLGdCQUFBLENBQUEsaUJBQWlCLEdBQUcsaUJBL0NSLEtBQUssRUErQzRCLENBQUM7QUFDOUMsZ0JBQUEsQ0FBQSxVQUFVLEdBQUcsaUJBaERELEtBQUssRUFnRGMsQ0FBQztBQUVqQyxnQkFBQSxDQUFBLG1CQUFtQixHQUFHLGlCQWxEVCxLQUFLLEVBa0QyQyxDQUFDO0FBQzlELGdCQUFBLENBQUEsV0FBVyxHQUFHLGlCQW5ERCxLQUFLLEVBbUR1QixDQUFDO0FBQzFDLGdCQUFBLENBQUEsY0FBYyxHQUFHLGlCQXBESixLQUFLLEVBb0QyQixDQUFDO0FBQzlDLGdCQUFBLENBQUEsS0FBSyxHQUFHLDhCQXpDUixVQUFVLEVBeUNjLENBQUM7QUFROUIsZ0JBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2YsZ0JBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ2pDLGdCQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixnQkFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMzQzs7QUFwQlcsVUFBQSxDQVVMLE9BQU8sR0FBQSxpQkFBQyxHQUFnQixFQUFFLEtBQTRELEVBQUE7Z0JBQTFELFlBQVksR0FBZCxLQUE0RCxDQUExRCxZQUFZO2dCQUFFLElBQUksR0FBcEIsS0FBNEQsQ0FBNUMsSUFBSTtnQkFBRSxZQUFZLEdBQWxDLEtB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QUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFFaEMseUJBcFhnRSxNQUFNLENBb1gvRCxJQUFJLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztBQUUxQyxnQkFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBRWhDLGlCQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsQyxxQkFBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMvQztTQUNGOztlQTlVVyxFQUFBOzs7c0JBQUEsRUFBQSIsImZpbGUiOiJhcHBlbmQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY29wZSwgRHluYW1pY1Njb3BlLCBFbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEVsZW1lbnRTdGFjayB9IGZyb20gJy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgRGVzdHJveWFibGUsIFN0YWNrLCBMaW5rZWRMaXN0LCBMaXN0U2xpY2UsIExPR0dFUiwgT3BhcXVlLCBhc3NlcnQgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuaW1wb3J0IHsgUGF0aFJlZmVyZW5jZSwgY29tYmluZVNsaWNlIH0gZnJvbSAnZ2xpbW1lci1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgVGVtcGxhdGVzIH0gZnJvbSAnLi4vc3ludGF4L2NvcmUnO1xuaW1wb3J0IHsgSW5saW5lQmxvY2ssIENvbXBpbGVkQmxvY2sgfSBmcm9tICcuLi9jb21waWxlZC9ibG9ja3MnO1xuaW1wb3J0IHsgQ29tcGlsZWRFeHByZXNzaW9uIH0gZnJvbSAnLi4vY29tcGlsZWQvZXhwcmVzc2lvbnMnO1xuaW1wb3J0IHsgQ29tcGlsZWRBcmdzLCBFdmFsdWF0ZWRBcmdzIH0gZnJvbSAnLi4vY29tcGlsZWQvZXhwcmVzc2lvbnMvYXJncyc7XG5pbXBvcnQgeyBPcGNvZGUsIE9wU2VxLCBVcGRhdGluZ09wY29kZSB9IGZyb20gJy4uL29wY29kZXMnO1xuaW1wb3J0IHsgTGFiZWxPcGNvZGUsIEp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlLCBEaWRNb2RpZnlPcGNvZGUgfSBmcm9tICcuLi9jb21waWxlZC9vcGNvZGVzL3ZtJztcbmltcG9ydCB7IFJhbmdlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRNYW5hZ2VyIH0gZnJvbSAnLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVk1TdGF0ZSwgTGlzdEJsb2NrT3Bjb2RlLCBUcnlPcGNvZGUsIEJsb2NrT3Bjb2RlIH0gZnJvbSAnLi91cGRhdGUnO1xuaW1wb3J0IFJlbmRlclJlc3VsdCBmcm9tICcuL3JlbmRlci1yZXN1bHQnO1xuaW1wb3J0IHsgRnJhbWVTdGFjaywgQmxvY2tzIH0gZnJvbSAnLi9mcmFtZSc7XG5cbmludGVyZmFjZSBWTUluaXRpYWxPcHRpb25zIHtcbiAgc2VsZjogUGF0aFJlZmVyZW5jZTxPcGFxdWU+O1xuICBkeW5hbWljU2NvcGU6IER5bmFtaWNTY29wZTtcbiAgZWxlbWVudFN0YWNrOiBFbGVtZW50U3RhY2s7XG4gIHNpemU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFZNQ29uc3RydWN0b3JPcHRpb25zIHtcbiAgZW52OiBFbnZpcm9ubWVudDtcbiAgc2NvcGU6IFNjb3BlO1xuICBkeW5hbWljU2NvcGU6IER5bmFtaWNTY29wZTtcbiAgZWxlbWVudFN0YWNrOiBFbGVtZW50U3RhY2s7XG59XG5cbmludGVyZmFjZSBQdXNoRnJhbWVPcHRpb25zIHtcbiAgYmxvY2s6IENvbXBpbGVkQmxvY2s7XG4gIGFyZ3M/OiBFdmFsdWF0ZWRBcmdzO1xuICBibG9ja3M/OiBCbG9ja3M7XG4gIGNhbGxlclNjb3BlPzogU2NvcGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljVk0ge1xuICBlbnY6IEVudmlyb25tZW50O1xuICBnZXRBcmdzKCk6IEV2YWx1YXRlZEFyZ3M7XG4gIGR5bmFtaWNTY29wZSgpOiBEeW5hbWljU2NvcGU7XG4gIGdldFNlbGYoKTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+O1xuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSk7XG59XG5cbnR5cGUgT3BMaXN0ID0gUmFuZ2U8T3Bjb2RlPjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVk0gaW1wbGVtZW50cyBQdWJsaWNWTSB7XG4gIHB1YmxpYyBlbnY6IEVudmlyb25tZW50O1xuICBwcml2YXRlIGR5bmFtaWNTY29wZVN0YWNrID0gbmV3IFN0YWNrPER5bmFtaWNTY29wZT4oKTtcbiAgcHJpdmF0ZSBzY29wZVN0YWNrID0gbmV3IFN0YWNrPFNjb3BlPigpO1xuICBwcml2YXRlIGVsZW1lbnRTdGFjazogRWxlbWVudFN0YWNrO1xuICBwdWJsaWMgdXBkYXRpbmdPcGNvZGVTdGFjayA9IG5ldyBTdGFjazxMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPj4oKTtcbiAgcHVibGljIGNhY2hlR3JvdXBzID0gbmV3IFN0YWNrPFVwZGF0aW5nT3Bjb2RlPigpO1xuICBwdWJsaWMgbGlzdEJsb2NrU3RhY2sgPSBuZXcgU3RhY2s8TGlzdEJsb2NrT3Bjb2RlPigpO1xuICBwdWJsaWMgZnJhbWUgPSBuZXcgRnJhbWVTdGFjaygpO1xuXG4gIHN0YXRpYyBpbml0aWFsKGVudjogRW52aXJvbm1lbnQsIHsgZWxlbWVudFN0YWNrLCBzZWxmLCBkeW5hbWljU2NvcGUsIHNpemUgfTogVk1Jbml0aWFsT3B0aW9ucykge1xuICAgIGxldCBzY29wZSA9IFNjb3BlLnJvb3Qoc2VsZiwgc2l6ZSk7XG4gICAgcmV0dXJuIG5ldyBWTSh7IGVudiwgc2NvcGUsIGR5bmFtaWNTY29wZSwgZWxlbWVudFN0YWNrIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoeyBlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIGVsZW1lbnRTdGFjayB9OiBWTUNvbnN0cnVjdG9yT3B0aW9ucykge1xuICAgIHRoaXMuZW52ID0gZW52O1xuICAgIHRoaXMuZWxlbWVudFN0YWNrID0gZWxlbWVudFN0YWNrO1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKHNjb3BlKTtcbiAgICB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnB1c2goZHluYW1pY1Njb3BlKTtcbiAgfVxuXG4gIGNhcHR1cmUoKTogVk1TdGF0ZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICBzY29wZTogdGhpcy5zY29wZSgpLFxuICAgICAgZHluYW1pY1Njb3BlOiB0aGlzLmR5bmFtaWNTY29wZSgpXG4gICAgfTtcbiAgfVxuXG4gIGdvdG8ob3A6IExhYmVsT3Bjb2RlKSB7XG4gICAgLy8gYXNzZXJ0KHRoaXMuZnJhbWUuZ2V0T3BzKCkuY29udGFpbnMob3ApLCBgSWxsZWdhbCBqdW1wIHRvICR7b3AubGFiZWx9YCk7XG4gICAgdGhpcy5mcmFtZS5nb3RvKG9wKTtcbiAgfVxuXG4gIGJlZ2luQ2FjaGVHcm91cCgpIHtcbiAgICB0aGlzLmNhY2hlR3JvdXBzLnB1c2godGhpcy51cGRhdGluZ09wY29kZVN0YWNrLmN1cnJlbnQudGFpbCgpKTtcbiAgfVxuXG4gIGNvbW1pdENhY2hlR3JvdXAoKSB7XG4gICAgLy8gICAgICAgIEp1bXBJZk5vdE1vZGlmaWVkKEVORClcbiAgICAvLyAgICAgICAgKGhlYWQpXG4gICAgLy8gICAgICAgICguLi4uKVxuICAgIC8vICAgICAgICAodGFpbClcbiAgICAvLyAgICAgICAgRGlkTW9kaWZ5XG4gICAgLy8gRU5EOiAgIE5vb3BcblxuICAgIGxldCBFTkQgPSBuZXcgTGFiZWxPcGNvZGUoXCJFTkRcIik7XG5cbiAgICBsZXQgb3Bjb2RlcyA9IHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5jdXJyZW50O1xuICAgIGxldCBtYXJrZXIgPSB0aGlzLmNhY2hlR3JvdXBzLnBvcCgpO1xuICAgIGxldCBoZWFkID0gbWFya2VyID8gb3Bjb2Rlcy5uZXh0Tm9kZShtYXJrZXIpIDogb3Bjb2Rlcy5oZWFkKCk7XG4gICAgbGV0IHRhaWwgPSBvcGNvZGVzLnRhaWwoKTtcbiAgICBsZXQgdGFnID0gY29tYmluZVNsaWNlKG5ldyBMaXN0U2xpY2UoaGVhZCwgdGFpbCkpO1xuXG4gICAgbGV0IGd1YXJkID0gbmV3IEp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlKHsgdGFnLCB0YXJnZXQ6IEVORCB9KTtcblxuICAgIG9wY29kZXMuaW5zZXJ0QmVmb3JlKGd1YXJkLCBoZWFkKTtcbiAgICBvcGNvZGVzLmFwcGVuZChuZXcgRGlkTW9kaWZ5T3Bjb2RlKHsgdGFyZ2V0OiBndWFyZCB9KSk7XG4gICAgb3Bjb2Rlcy5hcHBlbmQoRU5EKTtcbiAgfVxuXG4gIGVudGVyKG9wczogT3BTZXEpIHtcbiAgICBsZXQgdXBkYXRpbmcgPSBuZXcgTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4oKTtcblxuICAgIGxldCB0cmFja2VyID0gdGhpcy5zdGFjaygpLnB1c2hVcGRhdGFibGVCbG9jaygpO1xuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2FwdHVyZSgpO1xuXG4gICAgbGV0IHRyeU9wY29kZSA9IG5ldyBUcnlPcGNvZGUob3BzLCBzdGF0ZSwgdHJhY2tlciwgdXBkYXRpbmcpO1xuXG4gICAgdGhpcy5kaWRFbnRlcih0cnlPcGNvZGUsIHVwZGF0aW5nKTtcbiAgfVxuXG4gIGVudGVyV2l0aEtleShrZXk6IHN0cmluZywgb3BzOiBPcFNlcSkge1xuICAgIGxldCB1cGRhdGluZyA9IG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpO1xuXG4gICAgbGV0IHRyYWNrZXIgPSB0aGlzLnN0YWNrKCkucHVzaFVwZGF0YWJsZUJsb2NrKCk7XG4gICAgbGV0IHN0YXRlID0gdGhpcy5jYXB0dXJlKCk7XG5cbiAgICBsZXQgdHJ5T3Bjb2RlID0gbmV3IFRyeU9wY29kZShvcHMsIHN0YXRlLCB0cmFja2VyLCB1cGRhdGluZyk7XG5cbiAgICB0aGlzLmxpc3RCbG9ja1N0YWNrLmN1cnJlbnQubWFwW2tleV0gPSB0cnlPcGNvZGU7XG5cbiAgICB0aGlzLmRpZEVudGVyKHRyeU9wY29kZSwgdXBkYXRpbmcpO1xuICB9XG5cbiAgZW50ZXJMaXN0KG9wczogT3BTZXEpIHtcbiAgICBsZXQgdXBkYXRpbmcgPSBuZXcgTGlua2VkTGlzdDxCbG9ja09wY29kZT4oKTtcblxuICAgIGxldCB0cmFja2VyID0gdGhpcy5zdGFjaygpLnB1c2hCbG9ja0xpc3QodXBkYXRpbmcpO1xuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2FwdHVyZSgpO1xuICAgIGxldCBhcnRpZmFjdHMgPSB0aGlzLmZyYW1lLmdldEl0ZXJhdG9yKCkuYXJ0aWZhY3RzO1xuXG4gICAgbGV0IG9wY29kZSA9IG5ldyBMaXN0QmxvY2tPcGNvZGUob3BzLCBzdGF0ZSwgdHJhY2tlciwgdXBkYXRpbmcsIGFydGlmYWN0cyk7XG5cbiAgICB0aGlzLmxpc3RCbG9ja1N0YWNrLnB1c2gob3Bjb2RlKTtcblxuICAgIHRoaXMuZGlkRW50ZXIob3Bjb2RlLCB1cGRhdGluZyk7XG4gIH1cblxuICBwcml2YXRlIGRpZEVudGVyKG9wY29kZTogQmxvY2tPcGNvZGUsIHVwZGF0aW5nOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPikge1xuICAgIHRoaXMudXBkYXRlV2l0aChvcGNvZGUpO1xuICAgIHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5wdXNoKHVwZGF0aW5nKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5zdGFjaygpLnBvcEJsb2NrKCk7XG4gICAgdGhpcy51cGRhdGluZ09wY29kZVN0YWNrLnBvcCgpO1xuXG4gICAgbGV0IHBhcmVudCA9IHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5jdXJyZW50LnRhaWwoKSBhcyBCbG9ja09wY29kZTtcblxuICAgIHBhcmVudC5kaWRJbml0aWFsaXplQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIGV4aXRMaXN0KCkge1xuICAgIHRoaXMuZXhpdCgpO1xuICAgIHRoaXMubGlzdEJsb2NrU3RhY2sucG9wKCk7XG4gIH1cblxuICB1cGRhdGVXaXRoKG9wY29kZTogVXBkYXRpbmdPcGNvZGUpIHtcbiAgICB0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2suY3VycmVudC5hcHBlbmQob3Bjb2RlKTtcbiAgfVxuXG4gIHN0YWNrKCk6IEVsZW1lbnRTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFN0YWNrO1xuICB9XG5cbiAgc2NvcGUoKTogU2NvcGUge1xuICAgIHJldHVybiB0aGlzLnNjb3BlU3RhY2suY3VycmVudDtcbiAgfVxuXG4gIGR5bmFtaWNTY29wZSgpOiBEeW5hbWljU2NvcGUge1xuICAgIHJldHVybiB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLmN1cnJlbnQ7XG4gIH1cblxuICBwdXNoRnJhbWUoeyBibG9jaywgYXJncywgYmxvY2tzLCBjYWxsZXJTY29wZSB9OiBQdXNoRnJhbWVPcHRpb25zKSB7XG4gICAgdGhpcy5mcmFtZS5wdXNoKGJsb2NrLm9wcyk7XG5cbiAgICBpZiAoYXJncykgdGhpcy5mcmFtZS5zZXRBcmdzKGFyZ3MpO1xuICAgIGlmIChibG9ja3MpIHRoaXMuZnJhbWUuc2V0QmxvY2tzKGJsb2Nrcyk7XG4gICAgaWYgKGNhbGxlclNjb3BlKSB0aGlzLmZyYW1lLnNldENhbGxlclNjb3BlKGNhbGxlclNjb3BlKTtcbiAgfVxuXG4gIHB1c2hDb21wb25lbnRGcmFtZShcbiAgICBsYXlvdXQ6IENvbXBpbGVkQmxvY2ssXG4gICAgYXJnczogRXZhbHVhdGVkQXJncyxcbiAgICBibG9ja3M6IEJsb2NrcyxcbiAgICBjYWxsZXJTY29wZTogU2NvcGUsXG4gICAgY29tcG9uZW50OiBDb21wb25lbnQsXG4gICAgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxDb21wb25lbnQ+LFxuICAgIHNoYWRvdzogc3RyaW5nW11cbiAgKSB7XG4gICAgdGhpcy5mcmFtZS5wdXNoKGxheW91dC5vcHMsIGNvbXBvbmVudCwgbWFuYWdlciwgc2hhZG93KTtcblxuICAgIGlmIChhcmdzKSB0aGlzLmZyYW1lLnNldEFyZ3MoYXJncyk7XG4gICAgaWYgKGJsb2NrcykgdGhpcy5mcmFtZS5zZXRCbG9ja3MoYmxvY2tzKTtcbiAgICBpZiAoY2FsbGVyU2NvcGUpIHRoaXMuZnJhbWUuc2V0Q2FsbGVyU2NvcGUoY2FsbGVyU2NvcGUpO1xuICB9XG5cbiAgcHVzaEV2YWxGcmFtZShvcHM6IE9wU2VxKSB7XG4gICAgdGhpcy5mcmFtZS5wdXNoKG9wcyk7XG4gIH1cblxuICBwb3BGcmFtZSgpIHtcbiAgICBsZXQgeyBmcmFtZSB9ID0gdGhpcztcblxuICAgIGZyYW1lLnBvcCgpO1xuICAgIGxldCBjdXJyZW50ID0gZnJhbWUuZ2V0Q3VycmVudCgpO1xuXG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHJldHVybjtcbiAgfVxuXG4gIHB1c2hDaGlsZFNjb3BlKCkge1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKHRoaXMuc2NvcGVTdGFjay5jdXJyZW50LmNoaWxkKCkpO1xuICB9XG5cbiAgcHVzaENhbGxlclNjb3BlKCkge1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKHRoaXMuc2NvcGUoKS5nZXRDYWxsZXJTY29wZSgpKTtcbiAgfVxuXG4gIHB1c2hEeW5hbWljU2NvcGUoKTogRHluYW1pY1Njb3BlIHtcbiAgICBsZXQgY2hpbGQgPSB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLmN1cnJlbnQuY2hpbGQoKTtcbiAgICB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnB1c2goY2hpbGQpO1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHB1c2hSb290U2NvcGUoc2VsZjogUGF0aFJlZmVyZW5jZTxhbnk+LCBzaXplOiBudW1iZXIpOiBTY29wZSB7XG4gICAgbGV0IHNjb3BlID0gU2NvcGUucm9vdChzZWxmLCBzaXplKTtcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaChzY29wZSk7XG4gICAgcmV0dXJuIHNjb3BlO1xuICB9XG5cbiAgcG9wU2NvcGUoKSB7XG4gICAgdGhpcy5zY29wZVN0YWNrLnBvcCgpO1xuICB9XG5cbiAgcG9wRHluYW1pY1Njb3BlKCkge1xuICAgIHRoaXMuZHluYW1pY1Njb3BlU3RhY2sucG9wKCk7XG4gIH1cblxuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSkge1xuICAgIHRoaXMuc3RhY2soKS5uZXdEZXN0cm95YWJsZShkKTtcbiAgfVxuXG4gIC8vLyBTQ09QRSBIRUxQRVJTXG5cbiAgZ2V0U2VsZigpOiBQYXRoUmVmZXJlbmNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnNjb3BlKCkuZ2V0U2VsZigpO1xuICB9XG5cbiAgcmVmZXJlbmNlRm9yU3ltYm9sKHN5bWJvbDogbnVtYmVyKTogUGF0aFJlZmVyZW5jZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5zY29wZSgpLmdldFN5bWJvbChzeW1ib2wpO1xuICB9XG5cbiAgZ2V0QXJncygpOiBFdmFsdWF0ZWRBcmdzIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZS5nZXRBcmdzKCk7XG4gIH1cblxuICAvLy8gRVhFQ1VUSU9OXG5cbiAgZXhlY3V0ZShvcGNvZGVzOiBPcFNlcSwgaW5pdGlhbGl6ZT86ICh2bTogVk0pID0+IHZvaWQpOiBSZW5kZXJSZXN1bHQge1xuICAgIExPR0dFUi5kZWJ1ZyhcIltWTV0gQmVnaW4gcHJvZ3JhbSBleGVjdXRpb25cIik7XG5cbiAgICBsZXQgeyBlbGVtZW50U3RhY2ssIGZyYW1lLCB1cGRhdGluZ09wY29kZVN0YWNrLCBlbnYgfSA9IHRoaXM7XG5cbiAgICBlbGVtZW50U3RhY2sucHVzaFNpbXBsZUJsb2NrKCk7XG5cbiAgICB1cGRhdGluZ09wY29kZVN0YWNrLnB1c2gobmV3IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KCkpO1xuICAgIGZyYW1lLnB1c2gob3Bjb2Rlcyk7XG5cbiAgICBpZiAoaW5pdGlhbGl6ZSkgaW5pdGlhbGl6ZSh0aGlzKTtcblxuICAgIGxldCBvcGNvZGU6IE9wY29kZTtcblxuICAgIHdoaWxlIChmcmFtZS5oYXNPcGNvZGVzKCkpIHtcbiAgICAgIGlmIChvcGNvZGUgPSBmcmFtZS5uZXh0U3RhdGVtZW50KCkpIHtcbiAgICAgICAgTE9HR0VSLmRlYnVnKGBbVk1dIE9QICR7b3Bjb2RlLnR5cGV9YCk7XG4gICAgICAgIExPR0dFUi50cmFjZShvcGNvZGUpO1xuICAgICAgICBvcGNvZGUuZXZhbHVhdGUodGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgTE9HR0VSLmRlYnVnKFwiW1ZNXSBDb21wbGV0ZWQgcHJvZ3JhbSBleGVjdXRpb25cIik7XG5cbiAgICByZXR1cm4gbmV3IFJlbmRlclJlc3VsdCh7XG4gICAgICBlbnYsXG4gICAgICB1cGRhdGluZzogdXBkYXRpbmdPcGNvZGVTdGFjay5wb3AoKSxcbiAgICAgIGJvdW5kczogZWxlbWVudFN0YWNrLnBvcEJsb2NrKClcbiAgICB9KTtcbiAgfVxuXG4gIGV2YWx1YXRlT3Bjb2RlKG9wY29kZTogT3Bjb2RlKSB7XG4gICAgb3Bjb2RlLmV2YWx1YXRlKHRoaXMpO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHlvdSBoYXZlIG9wY29kZXMgdGhhdCBwdXNoIGFuZCBwb3AgYSBzY29wZSBhcm91bmQgdGhpcyBvcGNvZGVcbiAgLy8gaWYgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBzY29wZS5cbiAgaW52b2tlQmxvY2soYmxvY2s6IElubGluZUJsb2NrLCBhcmdzOiBFdmFsdWF0ZWRBcmdzKSB7XG4gICAgbGV0IGNvbXBpbGVkID0gYmxvY2suY29tcGlsZSh0aGlzLmVudik7XG4gICAgdGhpcy5wdXNoRnJhbWUoeyBibG9jazogY29tcGlsZWQsIGFyZ3MgfSk7XG4gIH1cblxuICBpbnZva2VMYXlvdXQoXG4gICAgYXJnczogRXZhbHVhdGVkQXJncyxcbiAgICBsYXlvdXQ6IENvbXBpbGVkQmxvY2ssXG4gICAgdGVtcGxhdGVzOiBUZW1wbGF0ZXMsXG4gICAgY2FsbGVyU2NvcGU6IFNjb3BlLFxuICAgIGNvbXBvbmVudDogQ29tcG9uZW50LFxuICAgIG1hbmFnZXI6IENvbXBvbmVudE1hbmFnZXI8Q29tcG9uZW50PixcbiAgICBzaGFkb3c6IHN0cmluZ1tdXG4gICkge1xuICAgIHRoaXMucHVzaENvbXBvbmVudEZyYW1lKGxheW91dCwgYXJncywgdGVtcGxhdGVzLCBjYWxsZXJTY29wZSwgY29tcG9uZW50LCBtYW5hZ2VyLCBzaGFkb3cpO1xuICB9XG5cbiAgZXZhbHVhdGVPcGVyYW5kKGV4cHI6IENvbXBpbGVkRXhwcmVzc2lvbjxhbnk+KSB7XG4gICAgdGhpcy5mcmFtZS5zZXRPcGVyYW5kKGV4cHIuZXZhbHVhdGUodGhpcykpO1xuICB9XG5cbiAgZXZhbHVhdGVBcmdzKGFyZ3M6IENvbXBpbGVkQXJncykge1xuICAgIGxldCBldmFsZWRBcmdzID0gdGhpcy5mcmFtZS5zZXRBcmdzKGFyZ3MuZXZhbHVhdGUodGhpcykpO1xuICAgIHRoaXMuZnJhbWUuc2V0T3BlcmFuZChldmFsZWRBcmdzLnBvc2l0aW9uYWwuYXQoMCkpO1xuICB9XG5cbiAgYmluZFBvc2l0aW9uYWxBcmdzKHN5bWJvbHM6IG51bWJlcltdKSB7XG4gICAgbGV0IGFyZ3MgPSB0aGlzLmZyYW1lLmdldEFyZ3MoKTtcblxuICAgIGFzc2VydChhcmdzLCBcIkNhbm5vdCBiaW5kIHBvc2l0aW9uYWwgYXJnc1wiKTtcblxuICAgIGxldCB7IHBvc2l0aW9uYWwgfSA9IGFyZ3M7XG5cbiAgICBsZXQgc2NvcGUgPSB0aGlzLnNjb3BlKCk7XG5cbiAgICBmb3IobGV0IGk9MDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHNjb3BlLmJpbmRTeW1ib2woc3ltYm9sc1tpXSwgcG9zaXRpb25hbC5hdChpKSk7XG4gICAgfVxuICB9XG5cbiAgYmluZE5hbWVkQXJncyhuYW1lczogc3RyaW5nW10sIHN5bWJvbHM6IG51bWJlcltdKSB7XG4gICAgbGV0IGFyZ3MgPSB0aGlzLmZyYW1lLmdldEFyZ3MoKTtcblxuICAgIGFzc2VydChhcmdzLCBcIkNhbm5vdCBiaW5kIG5hbWVkIGFyZ3NcIik7XG5cbiAgICBsZXQgeyBuYW1lZCB9ID0gYXJncztcblxuICAgIGxldCBzY29wZSA9IHRoaXMuc2NvcGUoKTtcblxuICAgIGZvcihsZXQgaT0wOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHNjb3BlLmJpbmRTeW1ib2woc3ltYm9sc1tpXSwgbmFtZWQuZ2V0KG5hbWVzW2ldKSk7XG4gICAgfVxuICB9XG5cbiAgYmluZEJsb2NrcyhuYW1lczogc3RyaW5nW10sIHN5bWJvbHM6IG51bWJlcltdKSB7XG4gICAgbGV0IGJsb2NrcyA9IHRoaXMuZnJhbWUuZ2V0QmxvY2tzKCk7XG4gICAgbGV0IGNhbGxlclNjb3BlID0gdGhpcy5mcmFtZS5nZXRDYWxsZXJTY29wZSgpO1xuXG4gICAgbGV0IHNjb3BlID0gdGhpcy5zY29wZSgpO1xuXG4gICAgc2NvcGUuYmluZENhbGxlclNjb3BlKGNhbGxlclNjb3BlKTtcblxuICAgIGZvcihsZXQgaT0wOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHNjb3BlLmJpbmRCbG9jayhzeW1ib2xzW2ldLCAoYmxvY2tzICYmIGJsb2Nrc1tuYW1lc1tpXV0pIHx8IG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGJpbmREeW5hbWljU2NvcGUobmFtZXM6IHN0cmluZ1tdKSB7XG4gICAgbGV0IGFyZ3MgPSB0aGlzLmZyYW1lLmdldEFyZ3MoKTtcblxuICAgIGFzc2VydChhcmdzLCBcIkNhbm5vdCBiaW5kIGR5bmFtaWMgc2NvcGVcIik7XG5cbiAgICBsZXQgc2NvcGUgPSB0aGlzLmR5bmFtaWNTY29wZSgpO1xuXG4gICAgZm9yKGxldCBpPTA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgc2NvcGUuc2V0KG5hbWVzW2ldLCBhcmdzLm5hbWVkLmdldChuYW1lc1tpXSkpO1xuICAgIH1cbiAgfVxufVxuXG5pbnRlcmZhY2UgRXhjZXB0aW9uSGFuZGxlciB7XG4gIGhhbmRsZUV4Y2VwdGlvbihpbml0aWFsaXplPzogKHZtOiBWTSkgPT4gdm9pZCk7XG59XG5cbmludGVyZmFjZSBSZXR1cm5IYW5kbGVyIHtcbiAgc2V0UmVuZGVyUmVzdWx0KHJlbmRlclJlc3VsdDogUmVuZGVyUmVzdWx0KTtcbn1cbiJdfQ==
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvdm0vYXBwZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztRQStDYyxFQUFBO0FBZVosaUJBZlksRUFBQSxDQWVBLElBQWdFLEVBQUE7Z0JBQTlELEdBQUcsR0FBTCxJQUFnRSxDQUE5RCxHQUFHO2dCQUFFLEtBQUssR0FBWixJQUFnRSxDQUF6RCxLQUFLO2dCQUFFLFlBQVksR0FBMUIsSUFBZ0UsQ0FBbEQsWUFBWTtnQkFBRSxZQUFZLEdBQXhDLElBQWdFLENBQXBDLFlBQVk7O0FBYjVDLGdCQUFBLENBQUEsaUJBQWlCLEdBQUcsaUJBL0NSLEtBQUssRUErQzRCLENBQUM7QUFDOUMsZ0JBQUEsQ0FBQSxVQUFVLEdBQUcsaUJBaERELEtBQUssRUFnRGMsQ0FBQztBQUVqQyxnQkFBQSxDQUFBLG1CQUFtQixHQUFHLGlCQWxEVCxLQUFLLEVBa0QyQyxDQUFDO0FBQzlELGdCQUFBLENBQUEsV0FBVyxHQUFHLGlCQW5ERCxLQUFLLEVBbUR1QixDQUFDO0FBQzFDLGdCQUFBLENBQUEsY0FBYyxHQUFHLGlCQXBESixLQUFLLEVBb0QyQixDQUFDO0FBQzlDLGdCQUFBLENBQUEsS0FBSyxHQUFHLDhCQXpDUixVQUFVLEVBeUNjLENBQUM7QUFROUIsZ0JBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2YsZ0JBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ2pDLGdCQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixnQkFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMzQzs7QUFwQlcsVUFBQSxDQVVMLE9BQU8sR0FBQSxpQkFBQyxHQUFnQixFQUFFLEtBQTRELEVBQUE7Z0JBQTFELFlBQVksR0FBZCxLQUE0RCxDQUExRCxZQUFZO2dCQUFFLElBQUksR0FBcEIsS0FBNEQsQ0FBNUMsSUFBSTtnQkFBRSxZQUFZLEdBQWxDLEtB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QUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsQyxxQkFBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMvQztTQUNGOztlQXJVVyxFQUFBOzs7c0JBQUEsRUFBQSIsImZpbGUiOiJhcHBlbmQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY29wZSwgRHluYW1pY1Njb3BlLCBFbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEVsZW1lbnRTdGFjayB9IGZyb20gJy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgRGVzdHJveWFibGUsIFN0YWNrLCBMaW5rZWRMaXN0LCBMaXN0U2xpY2UsIExPR0dFUiwgT3BhcXVlLCBhc3NlcnQgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuaW1wb3J0IHsgUGF0aFJlZmVyZW5jZSwgY29tYmluZVNsaWNlIH0gZnJvbSAnZ2xpbW1lci1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgVGVtcGxhdGVzIH0gZnJvbSAnLi4vc3ludGF4L2NvcmUnO1xuaW1wb3J0IHsgSW5saW5lQmxvY2ssIENvbXBpbGVkQmxvY2sgfSBmcm9tICcuLi9jb21waWxlZC9ibG9ja3MnO1xuaW1wb3J0IHsgQ29tcGlsZWRFeHByZXNzaW9uIH0gZnJvbSAnLi4vY29tcGlsZWQvZXhwcmVzc2lvbnMnO1xuaW1wb3J0IHsgQ29tcGlsZWRBcmdzLCBFdmFsdWF0ZWRBcmdzIH0gZnJvbSAnLi4vY29tcGlsZWQvZXhwcmVzc2lvbnMvYXJncyc7XG5pbXBvcnQgeyBPcGNvZGUsIE9wU2VxLCBVcGRhdGluZ09wY29kZSB9IGZyb20gJy4uL29wY29kZXMnO1xuaW1wb3J0IHsgTGFiZWxPcGNvZGUsIEp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlLCBEaWRNb2RpZnlPcGNvZGUgfSBmcm9tICcuLi9jb21waWxlZC9vcGNvZGVzL3ZtJztcbmltcG9ydCB7IFJhbmdlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRNYW5hZ2VyIH0gZnJvbSAnLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVk1TdGF0ZSwgTGlzdEJsb2NrT3Bjb2RlLCBUcnlPcGNvZGUsIEJsb2NrT3Bjb2RlIH0gZnJvbSAnLi91cGRhdGUnO1xuaW1wb3J0IFJlbmRlclJlc3VsdCBmcm9tICcuL3JlbmRlci1yZXN1bHQnO1xuaW1wb3J0IHsgRnJhbWVTdGFjaywgQmxvY2tzIH0gZnJvbSAnLi9mcmFtZSc7XG5cbmludGVyZmFjZSBWTUluaXRpYWxPcHRpb25zIHtcbiAgc2VsZjogUGF0aFJlZmVyZW5jZTxPcGFxdWU+O1xuICBkeW5hbWljU2NvcGU6IER5bmFtaWNTY29wZTtcbiAgZWxlbWVudFN0YWNrOiBFbGVtZW50U3RhY2s7XG4gIHNpemU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFZNQ29uc3RydWN0b3JPcHRpb25zIHtcbiAgZW52OiBFbnZpcm9ubWVudDtcbiAgc2NvcGU6IFNjb3BlO1xuICBkeW5hbWljU2NvcGU6IER5bmFtaWNTY29wZTtcbiAgZWxlbWVudFN0YWNrOiBFbGVtZW50U3RhY2s7XG59XG5cbmludGVyZmFjZSBQdXNoRnJhbWVPcHRpb25zIHtcbiAgYmxvY2s6IENvbXBpbGVkQmxvY2s7XG4gIGFyZ3M/OiBFdmFsdWF0ZWRBcmdzO1xuICBibG9ja3M/OiBCbG9ja3M7XG4gIGNhbGxlclNjb3BlPzogU2NvcGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljVk0ge1xuICBlbnY6IEVudmlyb25tZW50O1xuICBnZXRBcmdzKCk6IEV2YWx1YXRlZEFyZ3M7XG4gIGR5bmFtaWNTY29wZSgpOiBEeW5hbWljU2NvcGU7XG4gIGdldFNlbGYoKTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+O1xuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSk7XG59XG5cbnR5cGUgT3BMaXN0ID0gUmFuZ2U8T3Bjb2RlPjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVk0gaW1wbGVtZW50cyBQdWJsaWNWTSB7XG4gIHB1YmxpYyBlbnY6IEVudmlyb25tZW50O1xuICBwcml2YXRlIGR5bmFtaWNTY29wZVN0YWNrID0gbmV3IFN0YWNrPER5bmFtaWNTY29wZT4oKTtcbiAgcHJpdmF0ZSBzY29wZVN0YWNrID0gbmV3IFN0YWNrPFNjb3BlPigpO1xuICBwcml2YXRlIGVsZW1lbnRTdGFjazogRWxlbWVudFN0YWNrO1xuICBwdWJsaWMgdXBkYXRpbmdPcGNvZGVTdGFjayA9IG5ldyBTdGFjazxMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPj4oKTtcbiAgcHVibGljIGNhY2hlR3JvdXBzID0gbmV3IFN0YWNrPFVwZGF0aW5nT3Bjb2RlPigpO1xuICBwdWJsaWMgbGlzdEJsb2NrU3RhY2sgPSBuZXcgU3RhY2s8TGlzdEJsb2NrT3Bjb2RlPigpO1xuICBwdWJsaWMgZnJhbWUgPSBuZXcgRnJhbWVTdGFjaygpO1xuXG4gIHN0YXRpYyBpbml0aWFsKGVudjogRW52aXJvbm1lbnQsIHsgZWxlbWVudFN0YWNrLCBzZWxmLCBkeW5hbWljU2NvcGUsIHNpemUgfTogVk1Jbml0aWFsT3B0aW9ucykge1xuICAgIGxldCBzY29wZSA9IFNjb3BlLnJvb3Qoc2VsZiwgc2l6ZSk7XG4gICAgcmV0dXJuIG5ldyBWTSh7IGVudiwgc2NvcGUsIGR5bmFtaWNTY29wZSwgZWxlbWVudFN0YWNrIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoeyBlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIGVsZW1lbnRTdGFjayB9OiBWTUNvbnN0cnVjdG9yT3B0aW9ucykge1xuICAgIHRoaXMuZW52ID0gZW52O1xuICAgIHRoaXMuZWxlbWVudFN0YWNrID0gZWxlbWVudFN0YWNrO1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKHNjb3BlKTtcbiAgICB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnB1c2goZHluYW1pY1Njb3BlKTtcbiAgfVxuXG4gIGNhcHR1cmUoKTogVk1TdGF0ZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICBzY29wZTogdGhpcy5zY29wZSgpLFxuICAgICAgZHluYW1pY1Njb3BlOiB0aGlzLmR5bmFtaWNTY29wZSgpXG4gICAgfTtcbiAgfVxuXG4gIGdvdG8ob3A6IExhYmVsT3Bjb2RlKSB7XG4gICAgLy8gYXNzZXJ0KHRoaXMuZnJhbWUuZ2V0T3BzKCkuY29udGFpbnMob3ApLCBgSWxsZWdhbCBqdW1wIHRvICR7b3AubGFiZWx9YCk7XG4gICAgdGhpcy5mcmFtZS5nb3RvKG9wKTtcbiAgfVxuXG4gIGJlZ2luQ2FjaGVHcm91cCgpIHtcbiAgICB0aGlzLmNhY2hlR3JvdXBzLnB1c2godGhpcy51cGRhdGluZ09wY29kZVN0YWNrLmN1cnJlbnQudGFpbCgpKTtcbiAgfVxuXG4gIGNvbW1pdENhY2hlR3JvdXAoKSB7XG4gICAgLy8gICAgICAgIEp1bXBJZk5vdE1vZGlmaWVkKEVORClcbiAgICAvLyAgICAgICAgKGhlYWQpXG4gICAgLy8gICAgICAgICguLi4uKVxuICAgIC8vICAgICAgICAodGFpbClcbiAgICAvLyAgICAgICAgRGlkTW9kaWZ5XG4gICAgLy8gRU5EOiAgIE5vb3BcblxuICAgIGxldCBFTkQgPSBuZXcgTGFiZWxPcGNvZGUoXCJFTkRcIik7XG5cbiAgICBsZXQgb3Bjb2RlcyA9IHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5jdXJyZW50O1xuICAgIGxldCBtYXJrZXIgPSB0aGlzLmNhY2hlR3JvdXBzLnBvcCgpO1xuICAgIGxldCBoZWFkID0gbWFya2VyID8gb3Bjb2Rlcy5uZXh0Tm9kZShtYXJrZXIpIDogb3Bjb2Rlcy5oZWFkKCk7XG4gICAgbGV0IHRhaWwgPSBvcGNvZGVzLnRhaWwoKTtcbiAgICBsZXQgdGFnID0gY29tYmluZVNsaWNlKG5ldyBMaXN0U2xpY2UoaGVhZCwgdGFpbCkpO1xuXG4gICAgbGV0IGd1YXJkID0gbmV3IEp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlKHsgdGFnLCB0YXJnZXQ6IEVORCB9KTtcblxuICAgIG9wY29kZXMuaW5zZXJ0QmVmb3JlKGd1YXJkLCBoZWFkKTtcbiAgICBvcGNvZGVzLmFwcGVuZChuZXcgRGlkTW9kaWZ5T3Bjb2RlKHsgdGFyZ2V0OiBndWFyZCB9KSk7XG4gICAgb3Bjb2Rlcy5hcHBlbmQoRU5EKTtcbiAgfVxuXG4gIGVudGVyKG9wczogT3BTZXEpIHtcbiAgICBsZXQgdXBkYXRpbmcgPSBuZXcgTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4oKTtcblxuICAgIGxldCB0cmFja2VyID0gdGhpcy5zdGFjaygpLnB1c2hVcGRhdGFibGVCbG9jaygpO1xuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2FwdHVyZSgpO1xuXG4gICAgbGV0IHRyeU9wY29kZSA9IG5ldyBUcnlPcGNvZGUob3BzLCBzdGF0ZSwgdHJhY2tlciwgdXBkYXRpbmcpO1xuXG4gICAgdGhpcy5kaWRFbnRlcih0cnlPcGNvZGUsIHVwZGF0aW5nKTtcbiAgfVxuXG4gIGVudGVyV2l0aEtleShrZXk6IHN0cmluZywgb3BzOiBPcFNlcSkge1xuICAgIGxldCB1cGRhdGluZyA9IG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpO1xuXG4gICAgbGV0IHRyYWNrZXIgPSB0aGlzLnN0YWNrKCkucHVzaFVwZGF0YWJsZUJsb2NrKCk7XG4gICAgbGV0IHN0YXRlID0gdGhpcy5jYXB0dXJlKCk7XG5cbiAgICBsZXQgdHJ5T3Bjb2RlID0gbmV3IFRyeU9wY29kZShvcHMsIHN0YXRlLCB0cmFja2VyLCB1cGRhdGluZyk7XG5cbiAgICB0aGlzLmxpc3RCbG9ja1N0YWNrLmN1cnJlbnQubWFwW2tleV0gPSB0cnlPcGNvZGU7XG5cbiAgICB0aGlzLmRpZEVudGVyKHRyeU9wY29kZSwgdXBkYXRpbmcpO1xuICB9XG5cbiAgZW50ZXJMaXN0KG9wczogT3BTZXEpIHtcbiAgICBsZXQgdXBkYXRpbmcgPSBuZXcgTGlua2VkTGlzdDxCbG9ja09wY29kZT4oKTtcblxuICAgIGxldCB0cmFja2VyID0gdGhpcy5zdGFjaygpLnB1c2hCbG9ja0xpc3QodXBkYXRpbmcpO1xuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2FwdHVyZSgpO1xuICAgIGxldCBhcnRpZmFjdHMgPSB0aGlzLmZyYW1lLmdldEl0ZXJhdG9yKCkuYXJ0aWZhY3RzO1xuXG4gICAgbGV0IG9wY29kZSA9IG5ldyBMaXN0QmxvY2tPcGNvZGUob3BzLCBzdGF0ZSwgdHJhY2tlciwgdXBkYXRpbmcsIGFydGlmYWN0cyk7XG5cbiAgICB0aGlzLmxpc3RCbG9ja1N0YWNrLnB1c2gob3Bjb2RlKTtcblxuICAgIHRoaXMuZGlkRW50ZXIob3Bjb2RlLCB1cGRhdGluZyk7XG4gIH1cblxuICBwcml2YXRlIGRpZEVudGVyKG9wY29kZTogQmxvY2tPcGNvZGUsIHVwZGF0aW5nOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPikge1xuICAgIHRoaXMudXBkYXRlV2l0aChvcGNvZGUpO1xuICAgIHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5wdXNoKHVwZGF0aW5nKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5zdGFjaygpLnBvcEJsb2NrKCk7XG4gICAgdGhpcy51cGRhdGluZ09wY29kZVN0YWNrLnBvcCgpO1xuXG4gICAgbGV0IHBhcmVudCA9IHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5jdXJyZW50LnRhaWwoKSBhcyBCbG9ja09wY29kZTtcblxuICAgIHBhcmVudC5kaWRJbml0aWFsaXplQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIGV4aXRMaXN0KCkge1xuICAgIHRoaXMuZXhpdCgpO1xuICAgIHRoaXMubGlzdEJsb2NrU3RhY2sucG9wKCk7XG4gIH1cblxuICB1cGRhdGVXaXRoKG9wY29kZTogVXBkYXRpbmdPcGNvZGUpIHtcbiAgICB0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2suY3VycmVudC5hcHBlbmQob3Bjb2RlKTtcbiAgfVxuXG4gIHN0YWNrKCk6IEVsZW1lbnRTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFN0YWNrO1xuICB9XG5cbiAgc2NvcGUoKTogU2NvcGUge1xuICAgIHJldHVybiB0aGlzLnNjb3BlU3RhY2suY3VycmVudDtcbiAgfVxuXG4gIGR5bmFtaWNTY29wZSgpOiBEeW5hbWljU2NvcGUge1xuICAgIHJldHVybiB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLmN1cnJlbnQ7XG4gIH1cblxuICBwdXNoRnJhbWUoeyBibG9jaywgYXJncywgYmxvY2tzLCBjYWxsZXJTY29wZSB9OiBQdXNoRnJhbWVPcHRpb25zKSB7XG4gICAgdGhpcy5mcmFtZS5wdXNoKGJsb2NrLm9wcyk7XG5cbiAgICBpZiAoYXJncykgdGhpcy5mcmFtZS5zZXRBcmdzKGFyZ3MpO1xuICAgIGlmIChibG9ja3MpIHRoaXMuZnJhbWUuc2V0QmxvY2tzKGJsb2Nrcyk7XG4gICAgaWYgKGNhbGxlclNjb3BlKSB0aGlzLmZyYW1lLnNldENhbGxlclNjb3BlKGNhbGxlclNjb3BlKTtcbiAgfVxuXG4gIHB1c2hDb21wb25lbnRGcmFtZShcbiAgICBsYXlvdXQ6IENvbXBpbGVkQmxvY2ssXG4gICAgYXJnczogRXZhbHVhdGVkQXJncyxcbiAgICBibG9ja3M6IEJsb2NrcyxcbiAgICBjYWxsZXJTY29wZTogU2NvcGUsXG4gICAgY29tcG9uZW50OiBDb21wb25lbnQsXG4gICAgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxDb21wb25lbnQ+LFxuICAgIHNoYWRvdzogc3RyaW5nW11cbiAgKSB7XG4gICAgdGhpcy5mcmFtZS5wdXNoKGxheW91dC5vcHMsIGNvbXBvbmVudCwgbWFuYWdlciwgc2hhZG93KTtcblxuICAgIGlmIChhcmdzKSB0aGlzLmZyYW1lLnNldEFyZ3MoYXJncyk7XG4gICAgaWYgKGJsb2NrcykgdGhpcy5mcmFtZS5zZXRCbG9ja3MoYmxvY2tzKTtcbiAgICBpZiAoY2FsbGVyU2NvcGUpIHRoaXMuZnJhbWUuc2V0Q2FsbGVyU2NvcGUoY2FsbGVyU2NvcGUpO1xuICB9XG5cbiAgcHVzaEV2YWxGcmFtZShvcHM6IE9wU2VxKSB7XG4gICAgdGhpcy5mcmFtZS5wdXNoKG9wcyk7XG4gIH1cblxuICBwdXNoQ2hpbGRTY29wZSgpIHtcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaCh0aGlzLnNjb3BlU3RhY2suY3VycmVudC5jaGlsZCgpKTtcbiAgfVxuXG4gIHB1c2hDYWxsZXJTY29wZSgpIHtcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaCh0aGlzLnNjb3BlKCkuZ2V0Q2FsbGVyU2NvcGUoKSk7XG4gIH1cblxuICBwdXNoRHluYW1pY1Njb3BlKCk6IER5bmFtaWNTY29wZSB7XG4gICAgbGV0IGNoaWxkID0gdGhpcy5keW5hbWljU2NvcGVTdGFjay5jdXJyZW50LmNoaWxkKCk7XG4gICAgdGhpcy5keW5hbWljU2NvcGVTdGFjay5wdXNoKGNoaWxkKTtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICBwdXNoUm9vdFNjb3BlKHNlbGY6IFBhdGhSZWZlcmVuY2U8YW55Piwgc2l6ZTogbnVtYmVyKTogU2NvcGUge1xuICAgIGxldCBzY29wZSA9IFNjb3BlLnJvb3Qoc2VsZiwgc2l6ZSk7XG4gICAgdGhpcy5zY29wZVN0YWNrLnB1c2goc2NvcGUpO1xuICAgIHJldHVybiBzY29wZTtcbiAgfVxuXG4gIHBvcFNjb3BlKCkge1xuICAgIHRoaXMuc2NvcGVTdGFjay5wb3AoKTtcbiAgfVxuXG4gIHBvcER5bmFtaWNTY29wZSgpIHtcbiAgICB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnBvcCgpO1xuICB9XG5cbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpIHtcbiAgICB0aGlzLnN0YWNrKCkubmV3RGVzdHJveWFibGUoZCk7XG4gIH1cblxuICAvLy8gU0NPUEUgSEVMUEVSU1xuXG4gIGdldFNlbGYoKTogUGF0aFJlZmVyZW5jZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5zY29wZSgpLmdldFNlbGYoKTtcbiAgfVxuXG4gIHJlZmVyZW5jZUZvclN5bWJvbChzeW1ib2w6IG51bWJlcik6IFBhdGhSZWZlcmVuY2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2NvcGUoKS5nZXRTeW1ib2woc3ltYm9sKTtcbiAgfVxuXG4gIGdldEFyZ3MoKTogRXZhbHVhdGVkQXJncyB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWUuZ2V0QXJncygpO1xuICB9XG5cbiAgLy8vIEVYRUNVVElPTlxuXG4gIGV4ZWN1dGUob3Bjb2RlczogT3BTZXEsIGluaXRpYWxpemU/OiAodm06IFZNKSA9PiB2b2lkKTogUmVuZGVyUmVzdWx0IHtcbiAgICBMT0dHRVIuZGVidWcoXCJbVk1dIEJlZ2luIHByb2dyYW0gZXhlY3V0aW9uXCIpO1xuXG4gICAgbGV0IHsgZWxlbWVudFN0YWNrLCBmcmFtZSwgdXBkYXRpbmdPcGNvZGVTdGFjaywgZW52IH0gPSB0aGlzO1xuXG4gICAgZWxlbWVudFN0YWNrLnB1c2hTaW1wbGVCbG9jaygpO1xuXG4gICAgdXBkYXRpbmdPcGNvZGVTdGFjay5wdXNoKG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpKTtcbiAgICBmcmFtZS5wdXNoKG9wY29kZXMpO1xuXG4gICAgaWYgKGluaXRpYWxpemUpIGluaXRpYWxpemUodGhpcyk7XG5cbiAgICBsZXQgb3Bjb2RlOiBPcGNvZGU7XG5cbiAgICB3aGlsZSAoZnJhbWUuaGFzT3Bjb2RlcygpKSB7XG4gICAgICBpZiAob3Bjb2RlID0gZnJhbWUubmV4dFN0YXRlbWVudCgpKSB7XG4gICAgICAgIExPR0dFUi5kZWJ1ZyhgW1ZNXSBPUCAke29wY29kZS50eXBlfWApO1xuICAgICAgICBMT0dHRVIudHJhY2Uob3Bjb2RlKTtcbiAgICAgICAgb3Bjb2RlLmV2YWx1YXRlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIExPR0dFUi5kZWJ1ZyhcIltWTV0gQ29tcGxldGVkIHByb2dyYW0gZXhlY3V0aW9uXCIpO1xuXG4gICAgcmV0dXJuIG5ldyBSZW5kZXJSZXN1bHQoe1xuICAgICAgZW52LFxuICAgICAgdXBkYXRpbmc6IHVwZGF0aW5nT3Bjb2RlU3RhY2sucG9wKCksXG4gICAgICBib3VuZHM6IGVsZW1lbnRTdGFjay5wb3BCbG9jaygpXG4gICAgfSk7XG4gIH1cblxuICBldmFsdWF0ZU9wY29kZShvcGNvZGU6IE9wY29kZSkge1xuICAgIG9wY29kZS5ldmFsdWF0ZSh0aGlzKTtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB5b3UgaGF2ZSBvcGNvZGVzIHRoYXQgcHVzaCBhbmQgcG9wIGEgc2NvcGUgYXJvdW5kIHRoaXMgb3Bjb2RlXG4gIC8vIGlmIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgc2NvcGUuXG4gIGludm9rZUJsb2NrKGJsb2NrOiBJbmxpbmVCbG9jaywgYXJnczogRXZhbHVhdGVkQXJncykge1xuICAgIGxldCBjb21waWxlZCA9IGJsb2NrLmNvbXBpbGUodGhpcy5lbnYpO1xuICAgIHRoaXMucHVzaEZyYW1lKHsgYmxvY2s6IGNvbXBpbGVkLCBhcmdzIH0pO1xuICB9XG5cbiAgaW52b2tlTGF5b3V0KFxuICAgIGFyZ3M6IEV2YWx1YXRlZEFyZ3MsXG4gICAgbGF5b3V0OiBDb21waWxlZEJsb2NrLFxuICAgIHRlbXBsYXRlczogVGVtcGxhdGVzLFxuICAgIGNhbGxlclNjb3BlOiBTY29wZSxcbiAgICBjb21wb25lbnQ6IENvbXBvbmVudCxcbiAgICBtYW5hZ2VyOiBDb21wb25lbnRNYW5hZ2VyPENvbXBvbmVudD4sXG4gICAgc2hhZG93OiBzdHJpbmdbXVxuICApIHtcbiAgICB0aGlzLnB1c2hDb21wb25lbnRGcmFtZShsYXlvdXQsIGFyZ3MsIHRlbXBsYXRlcywgY2FsbGVyU2NvcGUsIGNvbXBvbmVudCwgbWFuYWdlciwgc2hhZG93KTtcbiAgfVxuXG4gIGV2YWx1YXRlT3BlcmFuZChleHByOiBDb21waWxlZEV4cHJlc3Npb248YW55Pikge1xuICAgIHRoaXMuZnJhbWUuc2V0T3BlcmFuZChleHByLmV2YWx1YXRlKHRoaXMpKTtcbiAgfVxuXG4gIGV2YWx1YXRlQXJncyhhcmdzOiBDb21waWxlZEFyZ3MpIHtcbiAgICBsZXQgZXZhbGVkQXJncyA9IHRoaXMuZnJhbWUuc2V0QXJncyhhcmdzLmV2YWx1YXRlKHRoaXMpKTtcbiAgICB0aGlzLmZyYW1lLnNldE9wZXJhbmQoZXZhbGVkQXJncy5wb3NpdGlvbmFsLmF0KDApKTtcbiAgfVxuXG4gIGJpbmRQb3NpdGlvbmFsQXJncyhzeW1ib2xzOiBudW1iZXJbXSkge1xuICAgIGxldCBhcmdzID0gdGhpcy5mcmFtZS5nZXRBcmdzKCk7XG5cbiAgICBhc3NlcnQoYXJncywgXCJDYW5ub3QgYmluZCBwb3NpdGlvbmFsIGFyZ3NcIik7XG5cbiAgICBsZXQgeyBwb3NpdGlvbmFsIH0gPSBhcmdzO1xuXG4gICAgbGV0IHNjb3BlID0gdGhpcy5zY29wZSgpO1xuXG4gICAgZm9yKGxldCBpPTA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzY29wZS5iaW5kU3ltYm9sKHN5bWJvbHNbaV0sIHBvc2l0aW9uYWwuYXQoaSkpO1xuICAgIH1cbiAgfVxuXG4gIGJpbmROYW1lZEFyZ3MobmFtZXM6IHN0cmluZ1tdLCBzeW1ib2xzOiBudW1iZXJbXSkge1xuICAgIGxldCBhcmdzID0gdGhpcy5mcmFtZS5nZXRBcmdzKCk7XG5cbiAgICBhc3NlcnQoYXJncywgXCJDYW5ub3QgYmluZCBuYW1lZCBhcmdzXCIpO1xuXG4gICAgbGV0IHsgbmFtZWQgfSA9IGFyZ3M7XG5cbiAgICBsZXQgc2NvcGUgPSB0aGlzLnNjb3BlKCk7XG5cbiAgICBmb3IobGV0IGk9MDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzY29wZS5iaW5kU3ltYm9sKHN5bWJvbHNbaV0sIG5hbWVkLmdldChuYW1lc1tpXSkpO1xuICAgIH1cbiAgfVxuXG4gIGJpbmRCbG9ja3MobmFtZXM6IHN0cmluZ1tdLCBzeW1ib2xzOiBudW1iZXJbXSkge1xuICAgIGxldCBibG9ja3MgPSB0aGlzLmZyYW1lLmdldEJsb2NrcygpO1xuICAgIGxldCBjYWxsZXJTY29wZSA9IHRoaXMuZnJhbWUuZ2V0Q2FsbGVyU2NvcGUoKTtcblxuICAgIGxldCBzY29wZSA9IHRoaXMuc2NvcGUoKTtcblxuICAgIHNjb3BlLmJpbmRDYWxsZXJTY29wZShjYWxsZXJTY29wZSk7XG5cbiAgICBmb3IobGV0IGk9MDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzY29wZS5iaW5kQmxvY2soc3ltYm9sc1tpXSwgKGJsb2NrcyAmJiBibG9ja3NbbmFtZXNbaV1dKSB8fCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBiaW5kRHluYW1pY1Njb3BlKG5hbWVzOiBzdHJpbmdbXSkge1xuICAgIGxldCBhcmdzID0gdGhpcy5mcmFtZS5nZXRBcmdzKCk7XG5cbiAgICBhc3NlcnQoYXJncywgXCJDYW5ub3QgYmluZCBkeW5hbWljIHNjb3BlXCIpO1xuXG4gICAgbGV0IHNjb3BlID0gdGhpcy5keW5hbWljU2NvcGUoKTtcblxuICAgIGZvcihsZXQgaT0wOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHNjb3BlLnNldChuYW1lc1tpXSwgYXJncy5uYW1lZC5nZXQobmFtZXNbaV0pKTtcbiAgICB9XG4gIH1cbn1cblxuaW50ZXJmYWNlIEV4Y2VwdGlvbkhhbmRsZXIge1xuICBoYW5kbGVFeGNlcHRpb24oaW5pdGlhbGl6ZT86ICh2bTogVk0pID0+IHZvaWQpO1xufVxuXG5pbnRlcmZhY2UgUmV0dXJuSGFuZGxlciB7XG4gIHNldFJlbmRlclJlc3VsdChyZW5kZXJSZXN1bHQ6IFJlbmRlclJlc3VsdCk7XG59XG4iXX0=
enifed("glimmer-runtime/lib/vm/frame", ["exports"], function (exports) {
"use strict";
var Frame = function Frame(ops) {
var component = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];