dist/ember-template-compiler.js in ember-source-2.9.1 vs dist/ember-template-compiler.js in ember-source-2.9.1.1

- 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.10.0-beta.2 + * @version 2.9.1 */ var enifed, requireModule, require, Ember; var mainContext = this; @@ -110,1097 +110,1050 @@ enifed = Ember.__loader.define; require = requireModule = Ember.__loader.require; } })(); -var babelHelpers; +enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'backburner/binary-search', 'backburner/deferred-action-queues'], function (exports, _backburnerUtils, _backburnerPlatform, _backburnerBinarySearch, _backburnerDeferredActionQueues) { + 'use strict'; -function classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError('Cannot call a class as a function'); - } -} + exports.default = Backburner; -function inherits(subClass, superClass) { - if (typeof superClass !== 'function' && superClass !== null) { - throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: false, - writable: true, - configurable: true + function Backburner(queueNames, options) { + this.queueNames = queueNames; + this.options = options || {}; + if (!this.options.defaultQueue) { + this.options.defaultQueue = queueNames[0]; } - }); + this.instanceStack = []; + this._debouncees = []; + this._throttlers = []; + this._eventCallbacks = { + end: [], + begin: [] + }; - if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : defaults(subClass, superClass); -} + var _this = this; + this._boundClearItems = function () { + clearItems(); + }; -function taggedTemplateLiteralLoose(strings, raw) { - strings.raw = raw; - return strings; -} + this._timerTimeoutId = undefined; + this._timers = []; -function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ('value' in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} + this._platform = this.options._platform || _backburnerPlatform.default; -function createClass(Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; -} - -function interopExportWildcard(obj, defaults) { - var newObj = defaults({}, obj); - delete newObj['default']; - return newObj; -} - -function defaults(obj, defaults) { - var keys = Object.getOwnPropertyNames(defaults); - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - var value = Object.getOwnPropertyDescriptor(defaults, key); - if (value && value.configurable && obj[key] === undefined) { - Object.defineProperty(obj, key, value); - } + this._boundRunExpiredTimers = function () { + _this._runExpiredTimers(); + }; } - return obj; -} -babelHelpers = { - classCallCheck: classCallCheck, - inherits: inherits, - taggedTemplateLiteralLoose: taggedTemplateLiteralLoose, - slice: Array.prototype.slice, - createClass: createClass, - interopExportWildcard: interopExportWildcard, - defaults: defaults -}; + Backburner.prototype = { + begin: function () { + var options = this.options; + var onBegin = options && options.onBegin; + var previousInstance = this.currentInstance; -enifed('backburner', ['exports'], function (exports) { 'use strict'; + if (previousInstance) { + this.instanceStack.push(previousInstance); + } -var NUMBER = /\d+/; + this.currentInstance = new _backburnerDeferredActionQueues.default(this.queueNames, options); + this._trigger('begin', this.currentInstance, previousInstance); + if (onBegin) { + onBegin(this.currentInstance, previousInstance); + } + }, -function each(collection, callback) { - for (var i = 0; i < collection.length; i++) { - callback(collection[i]); - } -} + end: function () { + var options = this.options; + var onEnd = options && options.onEnd; + var currentInstance = this.currentInstance; + var nextInstance = null; -function isString(suspect) { - return typeof suspect === 'string'; -} + // Prevent double-finally bug in Safari 6.0.2 and iOS 6 + // This bug appears to be resolved in Safari 6.0.5 and iOS 7 + var finallyAlreadyCalled = false; + try { + currentInstance.flush(); + } finally { + if (!finallyAlreadyCalled) { + finallyAlreadyCalled = true; -function isFunction(suspect) { - return typeof suspect === 'function'; -} + this.currentInstance = null; -function isNumber(suspect) { - return typeof suspect === 'number'; -} + if (this.instanceStack.length) { + nextInstance = this.instanceStack.pop(); + this.currentInstance = nextInstance; + } + this._trigger('end', currentInstance, nextInstance); + if (onEnd) { + onEnd(currentInstance, nextInstance); + } + } + } + }, -function isCoercableNumber(number) { - return isNumber(number) || NUMBER.test(number); -} + /** + Trigger an event. Supports up to two arguments. Designed around + triggering transition events from one run loop instance to the + next, which requires an argument for the first instance and then + an argument for the next instance. + @private + @method _trigger + @param {String} eventName + @param {any} arg1 + @param {any} arg2 + */ + _trigger: function (eventName, arg1, arg2) { + var callbacks = this._eventCallbacks[eventName]; + if (callbacks) { + for (var i = 0; i < callbacks.length; i++) { + callbacks[i](arg1, arg2); + } + } + }, -function binarySearch(time, timers) { - var start = 0; - var end = timers.length - 2; - var middle, l; + on: function (eventName, callback) { + if (typeof callback !== 'function') { + throw new TypeError('Callback must be a function'); + } + var callbacks = this._eventCallbacks[eventName]; + if (callbacks) { + callbacks.push(callback); + } else { + throw new TypeError('Cannot on() event "' + eventName + '" because it does not exist'); + } + }, - while (start < end) { - // since timers is an array of pairs 'l' will always - // be an integer - l = (end - start) / 2; + off: function (eventName, callback) { + if (eventName) { + var callbacks = this._eventCallbacks[eventName]; + var callbackFound = false; + if (!callbacks) return; + if (callback) { + for (var i = 0; i < callbacks.length; i++) { + if (callbacks[i] === callback) { + callbackFound = true; + callbacks.splice(i, 1); + i--; + } + } + } + if (!callbackFound) { + throw new TypeError('Cannot off() callback that does not exist'); + } + } else { + throw new TypeError('Cannot off() event "' + eventName + '" because it does not exist'); + } + }, - // compensate for the index in case even number - // of pairs inside timers - middle = start + l - (l % 2); + run: function () /* target, method, args */{ + var length = arguments.length; + var method, target, args; - if (time >= timers[middle]) { - start = middle + 2; - } else { - end = middle; - } - } + if (length === 1) { + method = arguments[0]; + target = null; + } else { + target = arguments[0]; + method = arguments[1]; + } - return (time >= timers[start]) ? start + 2 : start; -} + if (_backburnerUtils.isString(method)) { + method = target[method]; + } -function Queue(name, options, globalOptions) { - this.name = name; - this.globalOptions = globalOptions || {}; - this.options = options; - this._queue = []; - this.targetQueues = {}; - this._queueBeingFlushed = undefined; -} + if (length > 2) { + args = new Array(length - 2); + for (var i = 0, l = length - 2; i < l; i++) { + args[i] = arguments[i + 2]; + } + } else { + args = []; + } -Queue.prototype = { - push: function(target, method, args, stack) { - var queue = this._queue; - queue.push(target, method, args, stack); + var onError = getOnError(this.options); - return { - queue: this, - target: target, - method: method - }; - }, + this.begin(); - pushUniqueWithoutGuid: function(target, method, args, stack) { - var queue = this._queue; + // guard against Safari 6's double-finally bug + var didFinally = false; - for (var i = 0, l = queue.length; i < l; i += 4) { - var currentTarget = queue[i]; - var currentMethod = queue[i+1]; + if (onError) { + try { + return method.apply(target, args); + } catch (error) { + onError(error); + } finally { + if (!didFinally) { + didFinally = true; + this.end(); + } + } + } else { + try { + return method.apply(target, args); + } finally { + if (!didFinally) { + didFinally = true; + this.end(); + } + } + } + }, - if (currentTarget === target && currentMethod === method) { - queue[i+2] = args; // replace args - queue[i+3] = stack; // replace stack - return; + /* + Join the passed method with an existing queue and execute immediately, + if there isn't one use `Backburner#run`. + The join method is like the run method except that it will schedule into + an existing queue if one already exists. In either case, the join method will + immediately execute the passed in function and return its result. + @method join + @param {Object} target + @param {Function} method The method to be executed + @param {any} args The method arguments + @return method result + */ + join: function () /* target, method, args */{ + if (!this.currentInstance) { + return this.run.apply(this, arguments); } - } - queue.push(target, method, args, stack); - }, + var length = arguments.length; + var method, target; - targetQueue: function(targetQueue, target, method, args, stack) { - var queue = this._queue; + if (length === 1) { + method = arguments[0]; + target = null; + } else { + target = arguments[0]; + method = arguments[1]; + } - for (var i = 0, l = targetQueue.length; i < l; i += 2) { - var currentMethod = targetQueue[i]; - var currentIndex = targetQueue[i + 1]; + if (_backburnerUtils.isString(method)) { + method = target[method]; + } - if (currentMethod === method) { - queue[currentIndex + 2] = args; // replace args - queue[currentIndex + 3] = stack; // replace stack - return; + if (length === 1) { + return method(); + } else if (length === 2) { + return method.call(target); + } else { + var args = new Array(length - 2); + for (var i = 0, l = length - 2; i < l; i++) { + args[i] = arguments[i + 2]; + } + return method.apply(target, args); } - } + }, - targetQueue.push( - method, - queue.push(target, method, args, stack) - 4 - ); - }, + /* + Defer the passed function to run inside the specified queue. + @method defer + @param {String} queueName + @param {Object} target + @param {Function|String} method The method or method name to be executed + @param {any} args The method arguments + @return method result + */ + defer: function (queueName /* , target, method, args */) { + var length = arguments.length; + var method, target, args; - pushUniqueWithGuid: function(guid, target, method, args, stack) { - var hasLocalQueue = this.targetQueues[guid]; + if (length === 2) { + method = arguments[1]; + target = null; + } else { + target = arguments[1]; + method = arguments[2]; + } - if (hasLocalQueue) { - this.targetQueue(hasLocalQueue, target, method, args, stack); - } else { - this.targetQueues[guid] = [ - method, - this._queue.push(target, method, args, stack) - 4 - ]; - } + if (_backburnerUtils.isString(method)) { + method = target[method]; + } - return { - queue: this, - target: target, - method: method - }; - }, + var stack = this.DEBUG ? new Error() : undefined; - pushUnique: function(target, method, args, stack) { - var KEY = this.globalOptions.GUID_KEY; + if (length > 3) { + args = new Array(length - 3); + for (var i = 3; i < length; i++) { + args[i - 3] = arguments[i]; + } + } else { + args = undefined; + } - if (target && KEY) { - var guid = target[KEY]; - if (guid) { - return this.pushUniqueWithGuid(guid, target, method, args, stack); + if (!this.currentInstance) { + createAutorun(this); } - } + return this.currentInstance.schedule(queueName, target, method, args, false, stack); + }, - this.pushUniqueWithoutGuid(target, method, args, stack); + deferOnce: function (queueName /* , target, method, args */) { + var length = arguments.length; + var method, target, args; - return { - queue: this, - target: target, - method: method - }; - }, + if (length === 2) { + method = arguments[1]; + target = null; + } else { + target = arguments[1]; + method = arguments[2]; + } - invoke: function(target, method, args /*, onError, errorRecordedForStack */) { - if (args && args.length > 0) { - method.apply(target, args); - } else { - method.call(target); - } - }, + if (_backburnerUtils.isString(method)) { + method = target[method]; + } - invokeWithOnError: function(target, method, args, onError, errorRecordedForStack) { - try { - if (args && args.length > 0) { - method.apply(target, args); + var stack = this.DEBUG ? new Error() : undefined; + + if (length > 3) { + args = new Array(length - 3); + for (var i = 3; i < length; i++) { + args[i - 3] = arguments[i]; + } } else { - method.call(target); + args = undefined; } - } catch(error) { - onError(error, errorRecordedForStack); - } - }, - flush: function(sync) { - var queue = this._queue; - var length = queue.length; + if (!this.currentInstance) { + createAutorun(this); + } + return this.currentInstance.schedule(queueName, target, method, args, true, stack); + }, - if (length === 0) { - return; - } + setTimeout: function () { + var l = arguments.length; + var args = new Array(l); - var globalOptions = this.globalOptions; - var options = this.options; - var before = options && options.before; - var after = options && options.after; - var onError = globalOptions.onError || (globalOptions.onErrorTarget && - globalOptions.onErrorTarget[globalOptions.onErrorMethod]); - var target, method, args, errorRecordedForStack; - var invoke = onError ? this.invokeWithOnError : this.invoke; + for (var x = 0; x < l; x++) { + args[x] = arguments[x]; + } - this.targetQueues = Object.create(null); - var queueItems = this._queueBeingFlushed = this._queue.slice(); - this._queue = []; + var length = args.length, + method, + wait, + target, + methodOrTarget, + methodOrWait, + methodOrArgs; - if (before) { - before(); - } + if (length === 0) { + return; + } else if (length === 1) { + method = args.shift(); + wait = 0; + } else if (length === 2) { + methodOrTarget = args[0]; + methodOrWait = args[1]; - for (var i = 0; i < length; i += 4) { - target = queueItems[i]; - method = queueItems[i+1]; - args = queueItems[i+2]; - errorRecordedForStack = queueItems[i+3]; // Debugging assistance + if (_backburnerUtils.isFunction(methodOrWait) || _backburnerUtils.isFunction(methodOrTarget[methodOrWait])) { + target = args.shift(); + method = args.shift(); + wait = 0; + } else if (_backburnerUtils.isCoercableNumber(methodOrWait)) { + method = args.shift(); + wait = args.shift(); + } else { + method = args.shift(); + wait = 0; + } + } else { + var last = args[args.length - 1]; - if (isString(method)) { - method = target[method]; - } + if (_backburnerUtils.isCoercableNumber(last)) { + wait = args.pop(); + } else { + wait = 0; + } - // method could have been nullified / canceled during flush - if (method) { - // - // ** Attention intrepid developer ** - // - // To find out the stack of this task when it was scheduled onto - // the run loop, add the following to your app.js: - // - // Ember.run.backburner.DEBUG = true; // NOTE: This slows your app, don't leave it on in production. - // - // Once that is in place, when you are at a breakpoint and navigate - // here in the stack explorer, you can look at `errorRecordedForStack.stack`, - // which will be the captured stack when this job was scheduled. - // - // One possible long-term solution is the following Chrome issue: - // https://bugs.chromium.org/p/chromium/issues/detail?id=332624 - // - invoke(target, method, args, onError, errorRecordedForStack); + methodOrTarget = args[0]; + methodOrArgs = args[1]; + + if (_backburnerUtils.isFunction(methodOrArgs) || _backburnerUtils.isString(methodOrArgs) && methodOrTarget !== null && methodOrArgs in methodOrTarget) { + target = args.shift(); + method = args.shift(); + } else { + method = args.shift(); + } } - } - if (after) { - after(); - } + var executeAt = Date.now() + parseInt(wait !== wait ? 0 : wait, 10); - this._queueBeingFlushed = undefined; + if (_backburnerUtils.isString(method)) { + method = target[method]; + } - if (sync !== false && - this._queue.length > 0) { - // check if new items have been added - this.flush(true); - } - }, + var onError = getOnError(this.options); - cancel: function(actionToCancel) { - var queue = this._queue, currentTarget, currentMethod, i, l; - var target = actionToCancel.target; - var method = actionToCancel.method; - var GUID_KEY = this.globalOptions.GUID_KEY; - - if (GUID_KEY && this.targetQueues && target) { - var targetQueue = this.targetQueues[target[GUID_KEY]]; - - if (targetQueue) { - for (i = 0, l = targetQueue.length; i < l; i++) { - if (targetQueue[i] === method) { - targetQueue.splice(i, 1); + function fn() { + if (onError) { + try { + method.apply(target, args); + } catch (e) { + onError(e); } + } else { + method.apply(target, args); } } - } - for (i = 0, l = queue.length; i < l; i += 4) { - currentTarget = queue[i]; - currentMethod = queue[i+1]; + return this._setTimeout(fn, executeAt); + }, - if (currentTarget === target && - currentMethod === method) { - queue.splice(i, 4); - return true; + _setTimeout: function (fn, executeAt) { + if (this._timers.length === 0) { + this._timers.push(executeAt, fn); + this._installTimerTimeout(); + return fn; } - } - // if not found in current queue - // could be in the queue that is being flushed - queue = this._queueBeingFlushed; + // find position to insert + var i = _backburnerBinarySearch.default(executeAt, this._timers); - if (!queue) { - return; - } + this._timers.splice(i, 0, executeAt, fn); - for (i = 0, l = queue.length; i < l; i += 4) { - currentTarget = queue[i]; - currentMethod = queue[i+1]; - - if (currentTarget === target && - currentMethod === method) { - // don't mess with array during flush - // just nullify the method - queue[i+1] = null; - return true; + // we should be the new earliest timer if i == 0 + if (i === 0) { + this._reinstallTimerTimeout(); } - } - } -}; -function DeferredActionQueues(queueNames, options) { - var queues = this.queues = {}; - this.queueNames = queueNames = queueNames || []; + return fn; + }, - this.options = options; + throttle: function (target, method /* , args, wait, [immediate] */) { + var backburner = this; + var args = new Array(arguments.length); + for (var i = 0; i < arguments.length; i++) { + args[i] = arguments[i]; + } + var immediate = args.pop(); + var wait, throttler, index, timer; - each(queueNames, function(queueName) { - queues[queueName] = new Queue(queueName, options[queueName], options); - }); -} + if (_backburnerUtils.isNumber(immediate) || _backburnerUtils.isString(immediate)) { + wait = immediate; + immediate = true; + } else { + wait = args.pop(); + } -function noSuchQueue(name) { - throw new Error('You attempted to schedule an action in a queue (' + name + ') that doesn\'t exist'); -} + wait = parseInt(wait, 10); -function noSuchMethod(name) { - throw new Error('You attempted to schedule an action in a queue (' + name + ') for a method that doesn\'t exist'); -} + index = findThrottler(target, method, this._throttlers); + if (index > -1) { + return this._throttlers[index]; + } // throttled -DeferredActionQueues.prototype = { - schedule: function(name, target, method, args, onceFlag, stack) { - var queues = this.queues; - var queue = queues[name]; + timer = this._platform.setTimeout(function () { + if (!immediate) { + backburner.run.apply(backburner, args); + } + var index = findThrottler(target, method, backburner._throttlers); + if (index > -1) { + backburner._throttlers.splice(index, 1); + } + }, wait); - if (!queue) { - noSuchQueue(name); - } + if (immediate) { + this.run.apply(this, args); + } - if (!method) { - noSuchMethod(name); - } + throttler = [target, method, timer]; - if (onceFlag) { - return queue.pushUnique(target, method, args, stack); - } else { - return queue.push(target, method, args, stack); - } - }, + this._throttlers.push(throttler); - flush: function() { - var queues = this.queues; - var queueNames = this.queueNames; - var queueName, queue; - var queueNameIndex = 0; - var numberOfQueues = queueNames.length; + return throttler; + }, - while (queueNameIndex < numberOfQueues) { - queueName = queueNames[queueNameIndex]; - queue = queues[queueName]; + debounce: function (target, method /* , args, wait, [immediate] */) { + var backburner = this; + var args = new Array(arguments.length); + for (var i = 0; i < arguments.length; i++) { + args[i] = arguments[i]; + } - var numberOfQueueItems = queue._queue.length; + var immediate = args.pop(); + var wait, index, debouncee, timer; - if (numberOfQueueItems === 0) { - queueNameIndex++; + if (_backburnerUtils.isNumber(immediate) || _backburnerUtils.isString(immediate)) { + wait = immediate; + immediate = false; } else { - queue.flush(false /* async */); - queueNameIndex = 0; + wait = args.pop(); } - } - } -}; -function Backburner(queueNames, options) { - this.queueNames = queueNames; - this.options = options || {}; - if (!this.options.defaultQueue) { - this.options.defaultQueue = queueNames[0]; - } - this.instanceStack = []; - this._debouncees = []; - this._throttlers = []; - this._eventCallbacks = { - end: [], - begin: [] - }; + wait = parseInt(wait, 10); + // Remove debouncee + index = findDebouncee(target, method, this._debouncees); - var _this = this; - this._boundClearItems = function() { - clearItems(); - }; + if (index > -1) { + debouncee = this._debouncees[index]; + this._debouncees.splice(index, 1); + this._platform.clearTimeout(debouncee[2]); + } - this._timerTimeoutId = undefined; - this._timers = []; + timer = this._platform.setTimeout(function () { + if (!immediate) { + backburner.run.apply(backburner, args); + } + var index = findDebouncee(target, method, backburner._debouncees); + if (index > -1) { + backburner._debouncees.splice(index, 1); + } + }, wait); - this._platform = this.options._platform || { - setTimeout: function (fn, ms) { - return setTimeout(fn, ms); - }, - clearTimeout: function (id) { - clearTimeout(id); - } - }; + if (immediate && index === -1) { + backburner.run.apply(backburner, args); + } - this._boundRunExpiredTimers = function () { - _this._runExpiredTimers(); - }; -} + debouncee = [target, method, timer]; -Backburner.prototype = { - begin: function() { - var options = this.options; - var onBegin = options && options.onBegin; - var previousInstance = this.currentInstance; + backburner._debouncees.push(debouncee); - if (previousInstance) { - this.instanceStack.push(previousInstance); - } + return debouncee; + }, - this.currentInstance = new DeferredActionQueues(this.queueNames, options); - this._trigger('begin', this.currentInstance, previousInstance); - if (onBegin) { - onBegin(this.currentInstance, previousInstance); - } - }, + cancelTimers: function () { + _backburnerUtils.each(this._throttlers, this._boundClearItems); + this._throttlers = []; - end: function() { - var options = this.options; - var onEnd = options && options.onEnd; - var currentInstance = this.currentInstance; - var nextInstance = null; + _backburnerUtils.each(this._debouncees, this._boundClearItems); + this._debouncees = []; - // Prevent double-finally bug in Safari 6.0.2 and iOS 6 - // This bug appears to be resolved in Safari 6.0.5 and iOS 7 - var finallyAlreadyCalled = false; - try { - currentInstance.flush(); - } finally { - if (!finallyAlreadyCalled) { - finallyAlreadyCalled = true; + this._clearTimerTimeout(); + this._timers = []; - this.currentInstance = null; - - if (this.instanceStack.length) { - nextInstance = this.instanceStack.pop(); - this.currentInstance = nextInstance; - } - this._trigger('end', currentInstance, nextInstance); - if (onEnd) { - onEnd(currentInstance, nextInstance); - } + if (this._autorun) { + this._platform.clearTimeout(this._autorun); + this._autorun = null; } - } - }, + }, - /** - Trigger an event. Supports up to two arguments. Designed around - triggering transition events from one run loop instance to the - next, which requires an argument for the first instance and then - an argument for the next instance. + hasTimers: function () { + return !!this._timers.length || !!this._debouncees.length || !!this._throttlers.length || this._autorun; + }, - @private - @method _trigger - @param {String} eventName - @param {any} arg1 - @param {any} arg2 - */ - _trigger: function(eventName, arg1, arg2) { - var callbacks = this._eventCallbacks[eventName]; - if (callbacks) { - for (var i = 0; i < callbacks.length; i++) { - callbacks[i](arg1, arg2); - } - } - }, + cancel: function (timer) { + var timerType = typeof timer; - on: function(eventName, callback) { - if (typeof callback !== 'function') { - throw new TypeError('Callback must be a function'); - } - var callbacks = this._eventCallbacks[eventName]; - if (callbacks) { - callbacks.push(callback); - } else { - throw new TypeError('Cannot on() event "' + eventName + '" because it does not exist'); - } - }, - - off: function(eventName, callback) { - if (eventName) { - var callbacks = this._eventCallbacks[eventName]; - var callbackFound = false; - if (!callbacks) return; - if (callback) { - for (var i = 0; i < callbacks.length; i++) { - if (callbacks[i] === callback) { - callbackFound = true; - callbacks.splice(i, 1); - i--; + if (timer && timerType === 'object' && timer.queue && timer.method) { + // we're cancelling a deferOnce + return timer.queue.cancel(timer); + } else if (timerType === 'function') { + // we're cancelling a setTimeout + for (var i = 0, l = this._timers.length; i < l; i += 2) { + if (this._timers[i + 1] === timer) { + this._timers.splice(i, 2); // remove the two elements + if (i === 0) { + this._reinstallTimerTimeout(); + } + return true; } } + } else if (Object.prototype.toString.call(timer) === '[object Array]') { + // we're cancelling a throttle or debounce + return this._cancelItem(findThrottler, this._throttlers, timer) || this._cancelItem(findDebouncee, this._debouncees, timer); + } else { + return; // timer was null or not a timer } - if (!callbackFound) { - throw new TypeError('Cannot off() callback that does not exist'); + }, + + _cancelItem: function (findMethod, array, timer) { + var item, index; + + if (timer.length < 3) { + return false; } - } else { - throw new TypeError('Cannot off() event "' + eventName + '" because it does not exist'); - } - }, - run: function(/* target, method, args */) { - var length = arguments.length; - var method, target, args; + index = findMethod(timer[0], timer[1], array); - if (length === 1) { - method = arguments[0]; - target = null; - } else { - target = arguments[0]; - method = arguments[1]; - } + if (index > -1) { - if (isString(method)) { - method = target[method]; - } + item = array[index]; - if (length > 2) { - args = new Array(length - 2); - for (var i = 0, l = length - 2; i < l; i++) { - args[i] = arguments[i + 2]; + if (item[2] === timer[2]) { + array.splice(index, 1); + this._platform.clearTimeout(timer[2]); + return true; + } } - } else { - args = []; - } - var onError = getOnError(this.options); + return false; + }, - this.begin(); + _runExpiredTimers: function () { + this._timerTimeoutId = undefined; + this.run(this, this._scheduleExpiredTimers); + }, - // guard against Safari 6's double-finally bug - var didFinally = false; - - if (onError) { - try { - return method.apply(target, args); - } catch(error) { - onError(error); - } finally { - if (!didFinally) { - didFinally = true; - this.end(); + _scheduleExpiredTimers: function () { + var n = Date.now(); + var timers = this._timers; + var i = 0; + var l = timers.length; + for (; i < l; i += 2) { + var executeAt = timers[i]; + var fn = timers[i + 1]; + if (executeAt <= n) { + this.schedule(this.options.defaultQueue, null, fn); + } else { + break; } } - } else { - try { - return method.apply(target, args); - } finally { - if (!didFinally) { - didFinally = true; - this.end(); - } + timers.splice(0, i); + this._installTimerTimeout(); + }, + + _reinstallTimerTimeout: function () { + this._clearTimerTimeout(); + this._installTimerTimeout(); + }, + + _clearTimerTimeout: function () { + if (!this._timerTimeoutId) { + return; } + this._platform.clearTimeout(this._timerTimeoutId); + this._timerTimeoutId = undefined; + }, + + _installTimerTimeout: function () { + if (!this._timers.length) { + return; + } + var minExpiresAt = this._timers[0]; + var n = Date.now(); + var wait = Math.max(0, minExpiresAt - n); + this._timerTimeoutId = this._platform.setTimeout(this._boundRunExpiredTimers, wait); } - }, + }; - /* - Join the passed method with an existing queue and execute immediately, - if there isn't one use `Backburner#run`. + Backburner.prototype.schedule = Backburner.prototype.defer; + Backburner.prototype.scheduleOnce = Backburner.prototype.deferOnce; + Backburner.prototype.later = Backburner.prototype.setTimeout; - The join method is like the run method except that it will schedule into - an existing queue if one already exists. In either case, the join method will - immediately execute the passed in function and return its result. + function getOnError(options) { + return options.onError || options.onErrorTarget && options.onErrorTarget[options.onErrorMethod]; + } - @method join - @param {Object} target - @param {Function} method The method to be executed - @param {any} args The method arguments - @return method result - */ - join: function(/* target, method, args */) { - if (!this.currentInstance) { - return this.run.apply(this, arguments); - } + function createAutorun(backburner) { + backburner.begin(); + backburner._autorun = backburner._platform.setTimeout(function () { + backburner._autorun = null; + backburner.end(); + }); + } - var length = arguments.length; - var method, target; + function findDebouncee(target, method, debouncees) { + return findItem(target, method, debouncees); + } - if (length === 1) { - method = arguments[0]; - target = null; - } else { - target = arguments[0]; - method = arguments[1]; - } + function findThrottler(target, method, throttlers) { + return findItem(target, method, throttlers); + } - if (isString(method)) { - method = target[method]; - } + function findItem(target, method, collection) { + var item; + var index = -1; - if (length === 1) { - return method(); - } else if (length === 2) { - return method.call(target); - } else { - var args = new Array(length - 2); - for (var i = 0, l = length - 2; i < l; i++) { - args[i] = arguments[i + 2]; + for (var i = 0, l = collection.length; i < l; i++) { + item = collection[i]; + if (item[0] === target && item[1] === method) { + index = i; + break; } - return method.apply(target, args); } - }, + return index; + } - /* - Defer the passed function to run inside the specified queue. + function clearItems(item) { + this._platform.clearTimeout(item[2]); + } +}); +enifed("backburner/binary-search", ["exports"], function (exports) { + "use strict"; - @method defer - @param {String} queueName - @param {Object} target - @param {Function|String} method The method or method name to be executed - @param {any} args The method arguments - @return method result - */ - defer: function(queueName /* , target, method, args */) { - var length = arguments.length; - var method, target, args; + exports.default = binarySearch; - if (length === 2) { - method = arguments[1]; - target = null; - } else { - target = arguments[1]; - method = arguments[2]; - } + function binarySearch(time, timers) { + var start = 0; + var end = timers.length - 2; + var middle, l; - if (isString(method)) { - method = target[method]; - } + while (start < end) { + // since timers is an array of pairs 'l' will always + // be an integer + l = (end - start) / 2; - var stack = this.DEBUG ? new Error() : undefined; + // compensate for the index in case even number + // of pairs inside timers + middle = start + l - l % 2; - if (length > 3) { - args = new Array(length - 3); - for (var i = 3; i < length; i++) { - args[i-3] = arguments[i]; + if (time >= timers[middle]) { + start = middle + 2; + } else { + end = middle; } - } else { - args = undefined; } - if (!this.currentInstance) { createAutorun(this); } - return this.currentInstance.schedule(queueName, target, method, args, false, stack); - }, + return time >= timers[start] ? start + 2 : start; + } +}); +enifed('backburner/deferred-action-queues', ['exports', 'backburner/utils', 'backburner/queue'], function (exports, _backburnerUtils, _backburnerQueue) { + 'use strict'; - deferOnce: function(queueName /* , target, method, args */) { - var length = arguments.length; - var method, target, args; + exports.default = DeferredActionQueues; - if (length === 2) { - method = arguments[1]; - target = null; - } else { - target = arguments[1]; - method = arguments[2]; - } + function DeferredActionQueues(queueNames, options) { + var queues = this.queues = {}; + this.queueNames = queueNames = queueNames || []; - if (isString(method)) { - method = target[method]; - } + this.options = options; - var stack = this.DEBUG ? new Error() : undefined; + _backburnerUtils.each(queueNames, function (queueName) { + queues[queueName] = new _backburnerQueue.default(queueName, options[queueName], options); + }); + } - if (length > 3) { - args = new Array(length - 3); - for (var i = 3; i < length; i++) { - args[i-3] = arguments[i]; - } - } else { - args = undefined; - } + function noSuchQueue(name) { + throw new Error('You attempted to schedule an action in a queue (' + name + ') that doesn\'t exist'); + } - if (!this.currentInstance) { - createAutorun(this); - } - return this.currentInstance.schedule(queueName, target, method, args, true, stack); - }, + function noSuchMethod(name) { + throw new Error('You attempted to schedule an action in a queue (' + name + ') for a method that doesn\'t exist'); + } - setTimeout: function() { - var l = arguments.length; - var args = new Array(l); + DeferredActionQueues.prototype = { + schedule: function (name, target, method, args, onceFlag, stack) { + var queues = this.queues; + var queue = queues[name]; - for (var x = 0; x < l; x++) { - args[x] = arguments[x]; - } + if (!queue) { + noSuchQueue(name); + } - var length = args.length, - method, wait, target, - methodOrTarget, methodOrWait, methodOrArgs; - - if (length === 0) { - return; - } else if (length === 1) { - method = args.shift(); - wait = 0; - } else if (length === 2) { - methodOrTarget = args[0]; - methodOrWait = args[1]; - - if (isFunction(methodOrWait) || isFunction(methodOrTarget[methodOrWait])) { - target = args.shift(); - method = args.shift(); - wait = 0; - } else if (isCoercableNumber(methodOrWait)) { - method = args.shift(); - wait = args.shift(); - } else { - method = args.shift(); - wait = 0; + if (!method) { + noSuchMethod(name); } - } else { - var last = args[args.length - 1]; - if (isCoercableNumber(last)) { - wait = args.pop(); + if (onceFlag) { + return queue.pushUnique(target, method, args, stack); } else { - wait = 0; + return queue.push(target, method, args, stack); } + }, - methodOrTarget = args[0]; - methodOrArgs = args[1]; + flush: function () { + var queues = this.queues; + var queueNames = this.queueNames; + var queueName, queue; + var queueNameIndex = 0; + var numberOfQueues = queueNames.length; - if (isFunction(methodOrArgs) || (isString(methodOrArgs) && - methodOrTarget !== null && - methodOrArgs in methodOrTarget)) { - target = args.shift(); - method = args.shift(); - } else { - method = args.shift(); + while (queueNameIndex < numberOfQueues) { + queueName = queueNames[queueNameIndex]; + queue = queues[queueName]; + + var numberOfQueueItems = queue._queue.length; + + if (numberOfQueueItems === 0) { + queueNameIndex++; + } else { + queue.flush(false /* async */); + queueNameIndex = 0; + } } } + }; +}); +enifed('backburner/platform', ['exports'], function (exports) { + 'use strict'; - var executeAt = Date.now() + parseInt(wait !== wait ? 0 : wait, 10); + var GlobalContext; - if (isString(method)) { - method = target[method]; - } + /* global self */ + if (typeof self === 'object') { + GlobalContext = self; - var onError = getOnError(this.options); + /* global global */ + } else if (typeof global === 'object') { + GlobalContext = global; - function fn() { - if (onError) { - try { - method.apply(target, args); - } catch (e) { - onError(e); - } + /* global window */ + } else if (typeof window === 'object') { + GlobalContext = window; } else { - method.apply(target, args); + throw new Error('no global: `self`, `global` nor `window` was found'); } - } - return this._setTimeout(fn, executeAt); - }, + exports.default = GlobalContext; +}); +enifed('backburner/queue', ['exports', 'backburner/utils'], function (exports, _backburnerUtils) { + 'use strict'; - _setTimeout: function (fn, executeAt) { - if (this._timers.length === 0) { - this._timers.push(executeAt, fn); - this._installTimerTimeout(); - return fn; - } + exports.default = Queue; - // find position to insert - var i = binarySearch(executeAt, this._timers); + function Queue(name, options, globalOptions) { + this.name = name; + this.globalOptions = globalOptions || {}; + this.options = options; + this._queue = []; + this.targetQueues = {}; + this._queueBeingFlushed = undefined; + } - this._timers.splice(i, 0, executeAt, fn); + Queue.prototype = { + push: function (target, method, args, stack) { + var queue = this._queue; + queue.push(target, method, args, stack); - // we should be the new earliest timer if i == 0 - if (i === 0) { - this._reinstallTimerTimeout(); - } + return { + queue: this, + target: target, + method: method + }; + }, - return fn; - }, + pushUniqueWithoutGuid: function (target, method, args, stack) { + var queue = this._queue; - throttle: function(target, method /* , args, wait, [immediate] */) { - var backburner = this; - var args = new Array(arguments.length); - for (var i = 0; i < arguments.length; i++) { - args[i] = arguments[i]; - } - var immediate = args.pop(); - var wait, throttler, index, timer; + for (var i = 0, l = queue.length; i < l; i += 4) { + var currentTarget = queue[i]; + var currentMethod = queue[i + 1]; - if (isNumber(immediate) || isString(immediate)) { - wait = immediate; - immediate = true; - } else { - wait = args.pop(); - } + if (currentTarget === target && currentMethod === method) { + queue[i + 2] = args; // replace args + queue[i + 3] = stack; // replace stack + return; + } + } - wait = parseInt(wait, 10); + queue.push(target, method, args, stack); + }, - index = findThrottler(target, method, this._throttlers); - if (index > -1) { return this._throttlers[index]; } // throttled + targetQueue: function (targetQueue, target, method, args, stack) { + var queue = this._queue; - timer = this._platform.setTimeout(function() { - if (!immediate) { - backburner.run.apply(backburner, args); + for (var i = 0, l = targetQueue.length; i < l; i += 2) { + var currentMethod = targetQueue[i]; + var currentIndex = targetQueue[i + 1]; + + if (currentMethod === method) { + queue[currentIndex + 2] = args; // replace args + queue[currentIndex + 3] = stack; // replace stack + return; + } } - var index = findThrottler(target, method, backburner._throttlers); - if (index > -1) { - backburner._throttlers.splice(index, 1); - } - }, wait); - if (immediate) { - this.run.apply(this, args); - } + targetQueue.push(method, queue.push(target, method, args, stack) - 4); + }, - throttler = [target, method, timer]; + pushUniqueWithGuid: function (guid, target, method, args, stack) { + var hasLocalQueue = this.targetQueues[guid]; - this._throttlers.push(throttler); + if (hasLocalQueue) { + this.targetQueue(hasLocalQueue, target, method, args, stack); + } else { + this.targetQueues[guid] = [method, this._queue.push(target, method, args, stack) - 4]; + } - return throttler; - }, + return { + queue: this, + target: target, + method: method + }; + }, - debounce: function(target, method /* , args, wait, [immediate] */) { - var backburner = this; - var args = new Array(arguments.length); - for (var i = 0; i < arguments.length; i++) { - args[i] = arguments[i]; - } + pushUnique: function (target, method, args, stack) { + var KEY = this.globalOptions.GUID_KEY; - var immediate = args.pop(); - var wait, index, debouncee, timer; + if (target && KEY) { + var guid = target[KEY]; + if (guid) { + return this.pushUniqueWithGuid(guid, target, method, args, stack); + } + } - if (isNumber(immediate) || isString(immediate)) { - wait = immediate; - immediate = false; - } else { - wait = args.pop(); - } + this.pushUniqueWithoutGuid(target, method, args, stack); - wait = parseInt(wait, 10); - // Remove debouncee - index = findDebouncee(target, method, this._debouncees); + return { + queue: this, + target: target, + method: method + }; + }, - if (index > -1) { - debouncee = this._debouncees[index]; - this._debouncees.splice(index, 1); - this._platform.clearTimeout(debouncee[2]); - } + invoke: function (target, method, args, _, _errorRecordedForStack) { + if (args && args.length > 0) { + method.apply(target, args); + } else { + method.call(target); + } + }, - timer = this._platform.setTimeout(function() { - if (!immediate) { - backburner.run.apply(backburner, args); + invokeWithOnError: function (target, method, args, onError, errorRecordedForStack) { + try { + if (args && args.length > 0) { + method.apply(target, args); + } else { + method.call(target); + } + } catch (error) { + onError(error, errorRecordedForStack); } - var index = findDebouncee(target, method, backburner._debouncees); - if (index > -1) { - backburner._debouncees.splice(index, 1); + }, + + flush: function (sync) { + var queue = this._queue; + var length = queue.length; + + if (length === 0) { + return; } - }, wait); - if (immediate && index === -1) { - backburner.run.apply(backburner, args); - } + var globalOptions = this.globalOptions; + var options = this.options; + var before = options && options.before; + var after = options && options.after; + var onError = globalOptions.onError || globalOptions.onErrorTarget && globalOptions.onErrorTarget[globalOptions.onErrorMethod]; + var target, method, args, errorRecordedForStack; + var invoke = onError ? this.invokeWithOnError : this.invoke; - debouncee = [ - target, - method, - timer - ]; + this.targetQueues = Object.create(null); + var queueItems = this._queueBeingFlushed = this._queue.slice(); + this._queue = []; - backburner._debouncees.push(debouncee); + if (before) { + before(); + } - return debouncee; - }, + for (var i = 0; i < length; i += 4) { + target = queueItems[i]; + method = queueItems[i + 1]; + args = queueItems[i + 2]; + errorRecordedForStack = queueItems[i + 3]; // Debugging assistance - cancelTimers: function() { - each(this._throttlers, this._boundClearItems); - this._throttlers = []; + if (_backburnerUtils.isString(method)) { + method = target[method]; + } - each(this._debouncees, this._boundClearItems); - this._debouncees = []; + // method could have been nullified / canceled during flush + if (method) { + // + // ** Attention intrepid developer ** + // + // To find out the stack of this task when it was scheduled onto + // the run loop, add the following to your app.js: + // + // Ember.run.backburner.DEBUG = true; // NOTE: This slows your app, don't leave it on in production. + // + // Once that is in place, when you are at a breakpoint and navigate + // here in the stack explorer, you can look at `errorRecordedForStack.stack`, + // which will be the captured stack when this job was scheduled. + // + invoke(target, method, args, onError, errorRecordedForStack); + } + } - this._clearTimerTimeout(); - this._timers = []; + if (after) { + after(); + } - if (this._autorun) { - this._platform.clearTimeout(this._autorun); - this._autorun = null; - } - }, + this._queueBeingFlushed = undefined; - hasTimers: function() { - return !!this._timers.length || !!this._debouncees.length || !!this._throttlers.length || this._autorun; - }, + if (sync !== false && this._queue.length > 0) { + // check if new items have been added + this.flush(true); + } + }, - cancel: function (timer) { - var timerType = typeof timer; + cancel: function (actionToCancel) { + var queue = this._queue, + currentTarget, + currentMethod, + i, + l; + var target = actionToCancel.target; + var method = actionToCancel.method; + var GUID_KEY = this.globalOptions.GUID_KEY; - if (timer && timerType === 'object' && timer.queue && timer.method) { // we're cancelling a deferOnce - return timer.queue.cancel(timer); - } else if (timerType === 'function') { // we're cancelling a setTimeout - for (var i = 0, l = this._timers.length; i < l; i += 2) { - if (this._timers[i + 1] === timer) { - this._timers.splice(i, 2); // remove the two elements - if (i === 0) { - this._reinstallTimerTimeout(); + if (GUID_KEY && this.targetQueues && target) { + var targetQueue = this.targetQueues[target[GUID_KEY]]; + + if (targetQueue) { + for (i = 0, l = targetQueue.length; i < l; i++) { + if (targetQueue[i] === method) { + targetQueue.splice(i, 1); + } } - return true; } } - } else if (Object.prototype.toString.call(timer) === '[object Array]'){ // we're cancelling a throttle or debounce - return this._cancelItem(findThrottler, this._throttlers, timer) || - this._cancelItem(findDebouncee, this._debouncees, timer); - } else { - return; // timer was null or not a timer - } - }, - _cancelItem: function(findMethod, array, timer){ - var item, index; + for (i = 0, l = queue.length; i < l; i += 4) { + currentTarget = queue[i]; + currentMethod = queue[i + 1]; - if (timer.length < 3) { return false; } + if (currentTarget === target && currentMethod === method) { + queue.splice(i, 4); + return true; + } + } - index = findMethod(timer[0], timer[1], array); + // if not found in current queue + // could be in the queue that is being flushed + queue = this._queueBeingFlushed; - if (index > -1) { - - item = array[index]; - - if (item[2] === timer[2]) { - array.splice(index, 1); - this._platform.clearTimeout(timer[2]); - return true; + if (!queue) { + return; } - } - return false; - }, + for (i = 0, l = queue.length; i < l; i += 4) { + currentTarget = queue[i]; + currentMethod = queue[i + 1]; - _runExpiredTimers: function () { - this._timerTimeoutId = undefined; - this.run(this, this._scheduleExpiredTimers); - }, - - _scheduleExpiredTimers: function () { - var n = Date.now(); - var timers = this._timers; - var i = 0; - var l = timers.length; - for (; i < l; i += 2) { - var executeAt = timers[i]; - var fn = timers[i+1]; - if (executeAt <= n) { - this.schedule(this.options.defaultQueue, null, fn); - } else { - break; + if (currentTarget === target && currentMethod === method) { + // don't mess with array during flush + // just nullify the method + queue[i + 1] = null; + return true; + } } } - timers.splice(0, i); - this._installTimerTimeout(); - }, + }; +}); +enifed('backburner/utils', ['exports'], function (exports) { + 'use strict'; - _reinstallTimerTimeout: function () { - this._clearTimerTimeout(); - this._installTimerTimeout(); - }, + exports.each = each; + exports.isString = isString; + exports.isFunction = isFunction; + exports.isNumber = isNumber; + exports.isCoercableNumber = isCoercableNumber; + var NUMBER = /\d+/; - _clearTimerTimeout: function () { - if (!this._timerTimeoutId) { - return; + function each(collection, callback) { + for (var i = 0; i < collection.length; i++) { + callback(collection[i]); } - this._platform.clearTimeout(this._timerTimeoutId); - this._timerTimeoutId = undefined; - }, + } - _installTimerTimeout: function () { - if (!this._timers.length) { - return; - } - var minExpiresAt = this._timers[0]; - var n = Date.now(); - var wait = Math.max(0, minExpiresAt - n); - this._timerTimeoutId = this._platform.setTimeout(this._boundRunExpiredTimers, wait); + function isString(suspect) { + return typeof suspect === 'string'; } -}; -Backburner.prototype.schedule = Backburner.prototype.defer; -Backburner.prototype.scheduleOnce = Backburner.prototype.deferOnce; -Backburner.prototype.later = Backburner.prototype.setTimeout; + function isFunction(suspect) { + return typeof suspect === 'function'; + } -function getOnError(options) { - return options.onError || (options.onErrorTarget && options.onErrorTarget[options.onErrorMethod]); -} - -function createAutorun(backburner) { - var setTimeout = backburner._platform.setTimeout; - backburner.begin(); - backburner._autorun = setTimeout(function() { - backburner._autorun = null; - backburner.end(); - }, 0); -} - -function findDebouncee(target, method, debouncees) { - return findItem(target, method, debouncees); -} - -function findThrottler(target, method, throttlers) { - return findItem(target, method, throttlers); -} - -function findItem(target, method, collection) { - var item; - var index = -1; - - for (var i = 0, l = collection.length; i < l; i++) { - item = collection[i]; - if (item[0] === target && item[1] === method) { - index = i; - break; - } + function isNumber(suspect) { + return typeof suspect === 'number'; } - return index; -} - -function clearItems(item) { - this._platform.clearTimeout(item[2]); -} - -exports['default'] = Backburner; - -Object.defineProperty(exports, '__esModule', { value: true }); - + function isCoercableNumber(number) { + return isNumber(number) || NUMBER.test(number); + } }); enifed('ember-console/index', ['exports', 'ember-environment'], function (exports, _emberEnvironment) { 'use strict'; function K() {} @@ -1337,15 +1290,16 @@ @public */ assert: consoleMethod('assert') || assertPolyfill }; }); -enifed('ember-debug/deprecate', ['exports', 'ember-metal', 'ember-console', 'ember-environment', 'ember-debug/handlers'], function (exports, _emberMetal, _emberConsole, _emberEnvironment, _emberDebugHandlers) { +enifed('ember-debug/deprecate', ['exports', 'ember-metal/error', 'ember-console', 'ember-environment', 'ember-debug/handlers'], function (exports, _emberMetalError, _emberConsole, _emberEnvironment, _emberDebugHandlers) { /*global __fail__*/ 'use strict'; + var _slice = Array.prototype.slice; exports.registerHandler = registerHandler; exports.default = deprecate; function registerHandler(handler) { _emberDebugHandlers.registerHandler('deprecate', handler); @@ -1416,11 +1370,11 @@ registerHandler(function raiseOnDeprecation(message, options, next) { if (_emberEnvironment.ENV.RAISE_ON_DEPRECATION) { var updatedMessage = formatMessage(message); - throw new _emberMetal.Error(updatedMessage); + throw new _emberMetalError.default(updatedMessage); } else { next.apply(undefined, arguments); } }); @@ -1482,11 +1436,11 @@ until: '3.0.0', url: 'http://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options' }); } - _emberDebugHandlers.invoke.apply(undefined, ['deprecate'].concat(babelHelpers.slice.call(arguments))); + _emberDebugHandlers.invoke.apply(undefined, ['deprecate'].concat(_slice.call(arguments))); } }); enifed("ember-debug/handlers", ["exports"], function (exports) { "use strict"; @@ -1518,11 +1472,11 @@ if (handlerForType) { handlerForType(message, options); } } }); -enifed('ember-debug/index', ['exports', 'ember-metal', 'ember-environment', 'ember-console', 'ember-debug/deprecate', 'ember-debug/warn'], function (exports, _emberMetal, _emberEnvironment, _emberConsole, _emberDebugDeprecate, _emberDebugWarn) { +enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-environment', 'ember-metal/testing', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/error', 'ember-console', 'ember-debug/deprecate', 'ember-debug/warn'], function (exports, _emberMetalCore, _emberEnvironment, _emberMetalTesting, _emberMetalDebug, _emberMetalFeatures, _emberMetalError, _emberConsole, _emberDebugDeprecate, _emberDebugWarn) { 'use strict'; exports._warnIfUsingStrippedFeatureFlags = _warnIfUsingStrippedFeatureFlags; /** @@ -1554,13 +1508,13 @@ the text of the Error thrown if the assertion fails. @param {Boolean} test Must be truthy for the assertion to pass. If falsy, an exception will be thrown. @public */ - _emberMetal.setDebugFunction('assert', function assert(desc, test) { + _emberMetalDebug.setDebugFunction('assert', function assert(desc, test) { if (!test) { - throw new _emberMetal.Error('Assertion Failed: ' + desc); + throw new _emberMetalError.default('Assertion Failed: ' + desc); } }); /** Display a debug notice. @@ -1574,11 +1528,11 @@ @method debug @param {String} message A debug message to display. @public */ - _emberMetal.setDebugFunction('debug', function debug(message) { + _emberMetalDebug.setDebugFunction('debug', function debug(message) { _emberConsole.default.debug('DEBUG: ' + message); }); /** Display an info notice. @@ -1587,11 +1541,11 @@ Uses of this method in Ember itself are stripped from the ember.prod.js build. @method info @private */ - _emberMetal.setDebugFunction('info', function info() { + _emberMetalDebug.setDebugFunction('info', function info() { _emberConsole.default.info.apply(undefined, arguments); }); /** Alias an old, deprecated method with its new counterpart. @@ -1610,11 +1564,11 @@ @param {Object} [options] The options object for Ember.deprecate. @param {Function} func The new function called to replace its deprecated counterpart. @return {Function} A new function that wraps the original function with a deprecation warning @private */ - _emberMetal.setDebugFunction('deprecateFunc', function deprecateFunc() { + _emberMetalDebug.setDebugFunction('deprecateFunc', function deprecateFunc() { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (args.length === 3) { @@ -1623,11 +1577,11 @@ var options = args[1]; var func = args[2]; return { v: function () { - _emberMetal.deprecate(message, false, options); + _emberMetalDebug.deprecate(message, false, options); return func.apply(this, arguments); } }; })(); @@ -1637,11 +1591,11 @@ var message = args[0]; var func = args[1]; return { v: function () { - _emberMetal.deprecate(message); + _emberMetalDebug.deprecate(message); return func.apply(this, arguments); } }; })(); @@ -1668,26 +1622,22 @@ @method runInDebug @param {Function} func The function to be executed. @since 1.5.0 @public */ - _emberMetal.setDebugFunction('runInDebug', function runInDebug(func) { + _emberMetalDebug.setDebugFunction('runInDebug', function runInDebug(func) { func(); }); - _emberMetal.setDebugFunction('debugSeal', function debugSeal(obj) { + _emberMetalDebug.setDebugFunction('debugSeal', function debugSeal(obj) { Object.seal(obj); }); - _emberMetal.setDebugFunction('debugFreeze', function debugFreeze(obj) { - Object.freeze(obj); - }); + _emberMetalDebug.setDebugFunction('deprecate', _emberDebugDeprecate.default); - _emberMetal.setDebugFunction('deprecate', _emberDebugDeprecate.default); + _emberMetalDebug.setDebugFunction('warn', _emberDebugWarn.default); - _emberMetal.setDebugFunction('warn', _emberDebugWarn.default); - /** Will call `Ember.warn()` if ENABLE_OPTIONAL_FEATURES or any specific FEATURES flag is truthy. This method is called automatically in debug canary builds. @@ -1697,36 +1647,36 @@ @return {void} */ function _warnIfUsingStrippedFeatureFlags(FEATURES, knownFeatures, featuresWereStripped) { if (featuresWereStripped) { - _emberMetal.warn('Ember.ENV.ENABLE_OPTIONAL_FEATURES is only available in canary builds.', !_emberEnvironment.ENV.ENABLE_OPTIONAL_FEATURES, { id: 'ember-debug.feature-flag-with-features-stripped' }); + _emberMetalDebug.warn('Ember.ENV.ENABLE_OPTIONAL_FEATURES is only available in canary builds.', !_emberEnvironment.ENV.ENABLE_OPTIONAL_FEATURES, { id: 'ember-debug.feature-flag-with-features-stripped' }); var keys = Object.keys(FEATURES || {}); for (var i = 0; i < keys.length; i++) { var key = keys[i]; if (key === 'isEnabled' || !(key in knownFeatures)) { continue; } - _emberMetal.warn('FEATURE["' + key + '"] is set as enabled, but FEATURE flags are only available in canary builds.', !FEATURES[key], { id: 'ember-debug.feature-flag-with-features-stripped' }); + _emberMetalDebug.warn('FEATURE["' + key + '"] is set as enabled, but FEATURE flags are only available in canary builds.', !FEATURES[key], { id: 'ember-debug.feature-flag-with-features-stripped' }); } } } - if (!_emberMetal.isTesting()) { + if (!_emberMetalTesting.isTesting()) { (function () { // Complain if they're using FEATURE flags in builds other than canary - _emberMetal.FEATURES['features-stripped-test'] = true; + _emberMetalFeatures.FEATURES['features-stripped-test'] = true; var featuresWereStripped = true; if (false) { featuresWereStripped = false; } - delete _emberMetal.FEATURES['features-stripped-test']; - _warnIfUsingStrippedFeatureFlags(_emberEnvironment.ENV.FEATURES, _emberMetal.DEFAULT_FEATURES, featuresWereStripped); + delete _emberMetalFeatures.FEATURES['features-stripped-test']; + _warnIfUsingStrippedFeatureFlags(_emberEnvironment.ENV.FEATURES, _emberMetalFeatures.DEFAULT_FEATURES, featuresWereStripped); // Inform the developer about the Ember Inspector if not installed. var isFirefox = _emberEnvironment.environment.isFirefox; var isChrome = _emberEnvironment.environment.isChrome; @@ -1739,21 +1689,21 @@ downloadURL = 'https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi'; } else if (isFirefox) { downloadURL = 'https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/'; } - _emberMetal.debug('For more advanced debugging, install the Ember Inspector from ' + downloadURL); + _emberMetalDebug.debug('For more advanced debugging, install the Ember Inspector from ' + downloadURL); } }, false); } })(); } /** @public @class Ember.Debug */ - _emberMetal.default.Debug = {}; + _emberMetalCore.default.Debug = {}; /** Allows for runtime registration of handler functions that override the default deprecation behavior. Deprecations are invoked by calls to [Ember.deprecate](http://emberjs.com/api/classes/Ember.html#method_deprecate). The following example demonstrates its usage by registering a handler that throws an error if the @@ -1765,11 +1715,11 @@ throw new Error(`Deprecation message with should: ${message}`); } else { // defer to whatever handler was registered before this one next(message, options); } - }); + } ``` The handler function takes the following arguments: <ul> @@ -1786,11 +1736,11 @@ @static @method registerDeprecationHandler @param handler {Function} A function to handle deprecation calls. @since 2.1.0 */ - _emberMetal.default.Debug.registerDeprecationHandler = _emberDebugDeprecate.registerHandler; + _emberMetalCore.default.Debug.registerDeprecationHandler = _emberDebugDeprecate.registerHandler; /** Allows for runtime registration of handler functions that override the default warning behavior. Warnings are invoked by calls made to [Ember.warn](http://emberjs.com/api/classes/Ember.html#method_warn). The following example demonstrates its usage by registering a handler that does nothing overriding Ember's default warning behavior. @@ -1815,11 +1765,11 @@ @static @method registerWarnHandler @param handler {Function} A function to handle warnings. @since 2.1.0 */ - _emberMetal.default.Debug.registerWarnHandler = _emberDebugWarn.registerHandler; + _emberMetalCore.default.Debug.registerWarnHandler = _emberDebugWarn.registerHandler; /* We are transitioning away from `ember.js` to `ember.debug.js` to make it much clearer that it is only for local development purposes. @@ -1828,17 +1778,18 @@ used a nice helpful warning message will be printed out. */ var runningNonEmberDebugJS = false; exports.runningNonEmberDebugJS = runningNonEmberDebugJS; if (runningNonEmberDebugJS) { - _emberMetal.warn('Please use `ember.debug.js` instead of `ember.js` for development and debugging.'); + _emberMetalDebug.warn('Please use `ember.debug.js` instead of `ember.js` for development and debugging.'); } }); // reexports -enifed('ember-debug/warn', ['exports', 'ember-console', 'ember-metal', 'ember-debug/handlers'], function (exports, _emberConsole, _emberMetal, _emberDebugHandlers) { +enifed('ember-debug/warn', ['exports', 'ember-console', 'ember-metal/debug', 'ember-debug/handlers'], function (exports, _emberConsole, _emberMetalDebug, _emberDebugHandlers) { 'use strict'; + var _slice = Array.prototype.slice; exports.registerHandler = registerHandler; exports.default = warn; function registerHandler(handler) { _emberDebugHandlers.registerHandler('warn', handler); @@ -1879,26 +1830,26 @@ @public */ function warn(message, test, options) { if (!options) { - _emberMetal.deprecate(missingOptionsDeprecation, false, { + _emberMetalDebug.deprecate(missingOptionsDeprecation, false, { id: 'ember-debug.warn-options-missing', until: '3.0.0', url: 'http://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options' }); } if (options && !options.id) { - _emberMetal.deprecate(missingOptionsIdDeprecation, false, { + _emberMetalDebug.deprecate(missingOptionsIdDeprecation, false, { id: 'ember-debug.warn-id-missing', until: '3.0.0', url: 'http://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options' }); } - _emberDebugHandlers.invoke.apply(undefined, ['warn'].concat(babelHelpers.slice.call(arguments))); + _emberDebugHandlers.invoke.apply(undefined, ['warn'].concat(_slice.call(arguments))); } }); enifed('ember-environment/global', ['exports'], function (exports) { /* globals global, window, self, mainContext */ @@ -2070,13 +2021,295 @@ Function: defaultTrue(obj.Function) }; } } }); -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) { +enifed('ember-htmlbars-template-compiler/index', ['exports', 'ember-htmlbars-template-compiler/system/compile', 'ember-htmlbars-template-compiler/system/precompile', 'ember-htmlbars-template-compiler/system/compile-options'], function (exports, _emberHtmlbarsTemplateCompilerSystemCompile, _emberHtmlbarsTemplateCompilerSystemPrecompile, _emberHtmlbarsTemplateCompilerSystemCompileOptions) { 'use strict'; + exports.compile = _emberHtmlbarsTemplateCompilerSystemCompile.default; + exports.precompile = _emberHtmlbarsTemplateCompilerSystemPrecompile.default; + exports.defaultCompileOptions = _emberHtmlbarsTemplateCompilerSystemCompileOptions.default; + exports.registerPlugin = _emberHtmlbarsTemplateCompilerSystemCompileOptions.registerPlugin; +}); +enifed('ember-htmlbars-template-compiler/plugins/transform-closure-component-attrs-into-mut', ['exports'], function (exports) { + 'use strict'; + + exports.default = TransformClosureComponentAttrsIntoMut; + + function TransformClosureComponentAttrsIntoMut() { + // set later within HTMLBars to the syntax package + this.syntax = null; + } + + /** + @private + @method transform + @param {AST} ast The AST to be transformed. + */ + TransformClosureComponentAttrsIntoMut.prototype.transform = function TransformClosureComponentAttrsIntoMut_transform(ast) { + var b = this.syntax.builders; + + this.syntax.traverse(ast, { + SubExpression: function (node) { + if (isComponentClosure(node)) { + mutParameters(b, node); + } + } + }); + + return ast; + }; + + function isComponentClosure(node) { + return node.type === 'SubExpression' && node.path.original === 'component'; + } + + function mutParameters(builder, node) { + for (var i = 1; i < node.params.length; i++) { + if (node.params[i].type === 'PathExpression') { + node.params[i] = builder.sexpr(builder.path('@mut'), [node.params[i]]); + } + } + + for (var i = 0; i < node.hash.pairs.length; i++) { + var pair = node.hash.pairs[i]; + var value = pair.value; + + if (value.type === 'PathExpression') { + pair.value = builder.sexpr(builder.path('@mut'), [pair.value]); + } + } + } +}); +enifed('ember-htmlbars-template-compiler/plugins/transform-component-attrs-into-mut', ['exports'], function (exports) { + 'use strict'; + + exports.default = TransformComponentAttrsIntoMut; + + function TransformComponentAttrsIntoMut() { + // set later within HTMLBars to the syntax package + this.syntax = null; + } + + /** + @private + @method transform + @param {AST} ast The AST to be transformed. + */ + TransformComponentAttrsIntoMut.prototype.transform = function TransformComponentAttrsIntoMut_transform(ast) { + var b = this.syntax.builders; + var walker = new this.syntax.Walker(); + + walker.visit(ast, function (node) { + if (!validate(node)) { + return; + } + + for (var i = 0; i < node.hash.pairs.length; i++) { + var pair = node.hash.pairs[i]; + var value = pair.value; + + if (value.type === 'PathExpression') { + pair.value = b.sexpr(b.path('@mut'), [pair.value]); + } + } + }); + + return ast; + }; + + function validate(node) { + return node.type === 'BlockStatement' || node.type === 'MustacheStatement'; + } +}); +enifed('ember-htmlbars-template-compiler/plugins/transform-component-curly-to-readonly', ['exports'], function (exports) { + 'use strict'; + + exports.default = TransformComponentCurlyToReadonly; + + function TransformComponentCurlyToReadonly() { + // set later within HTMLBars to the syntax package + this.syntax = null; + } + + /** + @private + @method transform + @param {AST} ast The AST to be transformed. + */ + TransformComponentCurlyToReadonly.prototype.transform = function TransformComponetnCurlyToReadonly_transform(ast) { + var b = this.syntax.builders; + var walker = new this.syntax.Walker(); + + walker.visit(ast, function (node) { + if (!validate(node)) { + return; + } + + for (var i = 0; i < node.attributes.length; i++) { + var attr = node.attributes[i]; + + if (attr.value.type !== 'MustacheStatement') { + return; + } + if (attr.value.params.length || attr.value.hash.pairs.length) { + return; + } + + attr.value = b.mustache(b.path('readonly'), [attr.value.path], null, !attr.value.escape); + } + }); + + return ast; + }; + + function validate(node) { + return node.type === 'ComponentNode'; + } +}); +enifed('ember-htmlbars-template-compiler/system/compile-options', ['exports', 'ember/version', 'ember-metal/assign', 'ember-template-compiler/plugins', 'ember-htmlbars-template-compiler/plugins/transform-closure-component-attrs-into-mut', 'ember-htmlbars-template-compiler/plugins/transform-component-attrs-into-mut', 'ember-htmlbars-template-compiler/plugins/transform-component-curly-to-readonly'], function (exports, _emberVersion, _emberMetalAssign, _emberTemplateCompilerPlugins, _emberHtmlbarsTemplateCompilerPluginsTransformClosureComponentAttrsIntoMut, _emberHtmlbarsTemplateCompilerPluginsTransformComponentAttrsIntoMut, _emberHtmlbarsTemplateCompilerPluginsTransformComponentCurlyToReadonly) { + /** + @module ember + @submodule ember-htmlbars + */ + + 'use strict'; + + exports.registerPlugin = registerPlugin; + exports.removePlugin = removePlugin; + exports.default = compileOptions; + var PLUGINS = [].concat(_emberTemplateCompilerPlugins.default, [ + + // the following are ember-htmlbars specific + _emberHtmlbarsTemplateCompilerPluginsTransformClosureComponentAttrsIntoMut.default, _emberHtmlbarsTemplateCompilerPluginsTransformComponentAttrsIntoMut.default, _emberHtmlbarsTemplateCompilerPluginsTransformComponentCurlyToReadonly.default]); + + exports.PLUGINS = PLUGINS; + var USER_PLUGINS = []; + + function mergePlugins() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + options = _emberMetalAssign.default({}, options); + if (!options.plugins) { + options.plugins = { ast: [].concat(USER_PLUGINS, PLUGINS) }; + } else { + var potententialPugins = [].concat(USER_PLUGINS, PLUGINS); + var pluginsToAdd = potententialPugins.filter(function (plugin) { + return options.plugins.ast.indexOf(plugin) === -1; + }); + + options.plugins.ast = options.plugins.ast.slice().concat(pluginsToAdd); + } + + return options; + } + + function registerPlugin(type, PluginClass) { + if (type !== 'ast') { + throw new Error('Attempting to register ' + PluginClass + ' as "' + type + '" which is not a valid HTMLBars plugin type.'); + } + + if (USER_PLUGINS.indexOf(PluginClass) === -1) { + USER_PLUGINS = [PluginClass].concat(USER_PLUGINS); + } + } + + function removePlugin(type, PluginClass) { + if (type !== 'ast') { + throw new Error('Attempting to unregister ' + PluginClass + ' as "' + type + '" which is not a valid Glimmer plugin type.'); + } + + USER_PLUGINS = USER_PLUGINS.filter(function (plugin) { + return plugin !== PluginClass; + }); + } + + /** + @private + @property compileOptions + */ + + function compileOptions(_options) { + var disableComponentGeneration = true; + var options = undefined; + // When calling `Ember.Handlebars.compile()` a second argument of `true` + // had a special meaning (long since lost), this just gaurds against + // `options` being true, and causing an error during compilation. + if (_options === true) { + options = {}; + } else { + options = _options || {}; + } + + options.disableComponentGeneration = disableComponentGeneration; + + options = mergePlugins(options); + + options.buildMeta = function buildMeta(program) { + return { + revision: 'Ember@' + _emberVersion.default, + loc: program.loc, + moduleName: options.moduleName + }; + }; + + return options; + } +}); +enifed('ember-htmlbars-template-compiler/system/compile', ['exports', 'require', 'ember-htmlbars-template-compiler/system/compile-options'], function (exports, _require, _emberHtmlbarsTemplateCompilerSystemCompileOptions) { + 'use strict'; + + exports.default = compiler; + + var compile = undefined, + template = undefined; + + function compiler(string, options) { + if (!template && _require.has('ember-htmlbars')) { + template = _require.default('ember-htmlbars').template; + } + + if (!compile && _require.has('htmlbars-compiler/compiler')) { + compile = _require.default('htmlbars-compiler/compiler').compile; + } + + if (!compile) { + throw new Error('Cannot call `compile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compile`.'); + } + + if (!template) { + throw new Error('Cannot call `compile` with only the template compiler loaded. Please load `ember.debug.js` or `ember.prod.js` prior to calling `compile`.'); + } + + var templateSpec = compile(string, _emberHtmlbarsTemplateCompilerSystemCompileOptions.default(options)); + + return template(templateSpec); + } +}); +enifed('ember-htmlbars-template-compiler/system/precompile', ['exports', 'ember-htmlbars-template-compiler/system/compile-options', 'require'], function (exports, _emberHtmlbarsTemplateCompilerSystemCompileOptions, _require) { + 'use strict'; + + exports.default = precompile; + + var compileSpec = undefined; + + function precompile(templateString, options) { + if (!compileSpec && _require.has('htmlbars-compiler/compiler')) { + compileSpec = _require.default('htmlbars-compiler/compiler').compileSpec; + } + + if (!compileSpec) { + throw new Error('Cannot call `compileSpec` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compileSpec`.'); + } + + return compileSpec(templateString, _emberHtmlbarsTemplateCompilerSystemCompileOptions.default(options)); + } +}); +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) { + 'use strict'; + exports.default = alias; exports.AliasedProperty = AliasedProperty; function alias(altKey) { return new AliasedProperty(altKey); @@ -2088,53 +2321,48 @@ this._dependentKeys = [altKey]; } AliasedProperty.prototype = Object.create(_emberMetalProperties.Descriptor.prototype); - AliasedProperty.prototype.setup = function (obj, keyName) { - _emberMetalDebug.assert('Setting alias \'' + keyName + '\' on self', this.altKey !== keyName); - var meta = _emberMetalMeta.meta(obj); - if (meta.peekWatching(keyName)) { - _emberMetalDependent_keys.addDependentKeys(this, obj, keyName, meta); - } + AliasedProperty.prototype.get = function AliasedProperty_get(obj, keyName) { + return _emberMetalProperty_get.get(obj, this.altKey); }; - AliasedProperty.prototype._addDependentKeyIfMissing = function (obj, keyName) { - var meta = _emberMetalMeta.meta(obj); - if (!meta.peekDeps(this.altKey, keyName)) { - _emberMetalDependent_keys.addDependentKeys(this, obj, keyName, meta); - } + AliasedProperty.prototype.set = function AliasedProperty_set(obj, keyName, value) { + return _emberMetalProperty_set.set(obj, this.altKey, value); }; - AliasedProperty.prototype._removeDependentKeyIfAdded = function (obj, keyName) { - var meta = _emberMetalMeta.meta(obj); - if (meta.peekDeps(this.altKey, keyName)) { - _emberMetalDependent_keys.removeDependentKeys(this, obj, keyName, meta); - } + AliasedProperty.prototype.willWatch = function (obj, keyName) { + _emberMetalDependent_keys.addDependentKeys(this, obj, keyName, _emberMetalMeta.meta(obj)); }; - AliasedProperty.prototype.willWatch = AliasedProperty.prototype._addDependentKeyIfMissing; - AliasedProperty.prototype.didUnwatch = AliasedProperty.prototype._removeDependentKeyIfAdded; - AliasedProperty.prototype.teardown = AliasedProperty.prototype._removeDependentKeyIfAdded; + AliasedProperty.prototype.didUnwatch = function (obj, keyName) { + _emberMetalDependent_keys.removeDependentKeys(this, obj, keyName, _emberMetalMeta.meta(obj)); + }; - AliasedProperty.prototype.get = function AliasedProperty_get(obj, keyName) { - this._addDependentKeyIfMissing(obj, keyName); - - return _emberMetalProperty_get.get(obj, this.altKey); + AliasedProperty.prototype.setup = function (obj, keyName) { + _emberMetalDebug.assert('Setting alias \'' + keyName + '\' on self', this.altKey !== keyName); + var m = _emberMetalMeta.meta(obj); + if (m.peekWatching(keyName)) { + _emberMetalDependent_keys.addDependentKeys(this, obj, keyName, m); + } }; - AliasedProperty.prototype.set = function AliasedProperty_set(obj, keyName, value) { - return _emberMetalProperty_set.set(obj, this.altKey, value); + AliasedProperty.prototype.teardown = function (obj, keyName) { + var m = _emberMetalMeta.meta(obj); + if (m.peekWatching(keyName)) { + _emberMetalDependent_keys.removeDependentKeys(this, obj, keyName, m); + } }; AliasedProperty.prototype.readOnly = function () { this.set = AliasedProperty_readOnlySet; return this; }; function AliasedProperty_readOnlySet(obj, keyName, value) { - throw new _emberMetalError.default('Cannot set read-only property \'' + keyName + '\' on object: ' + _emberUtils.inspect(obj)); + throw new _emberMetalError.default('Cannot set read-only property \'' + keyName + '\' on object: ' + _emberMetalUtils.inspect(obj)); } AliasedProperty.prototype.oneWay = function () { this.set = AliasedProperty_oneWaySet; return this; @@ -2147,11 +2375,55 @@ // Backwards compatibility with Ember Data. AliasedProperty.prototype._meta = undefined; AliasedProperty.prototype.meta = _emberMetalComputed.ComputedProperty.prototype.meta; }); -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) { +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) { 'use strict'; exports.bind = bind; /** @@ -2256,11 +2528,11 @@ @return {String} string representation of binding @public */ toString: function () { var oneWay = this._oneWay ? '[oneWay]' : ''; - return 'Ember.Binding<' + _emberUtils.guidFor(this) + '>(' + this._from + ' -> ' + this._to + ')' + oneWay; + return 'Ember.Binding<' + _emberMetalUtils.guidFor(this) + '>(' + this._from + ' -> ' + this._to + ')' + oneWay; }, // .......................................................... // CONNECT AND SYNC // @@ -2623,16 +2895,18 @@ return new Binding(to, from).connect(obj); } exports.Binding = Binding; }); -enifed('ember-metal/cache', ['exports', 'ember-utils', 'ember-metal/meta'], function (exports, _emberUtils, _emberMetalMeta) { +enifed('ember-metal/cache', ['exports', 'ember-metal/empty_object'], function (exports, _emberMetalEmpty_object) { 'use strict'; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + var Cache = (function () { function Cache(limit, func, key, store) { - babelHelpers.classCallCheck(this, Cache); + _classCallCheck(this, Cache); this.size = 0; this.misses = 0; this.hits = 0; this.limit = limit; @@ -2645,11 +2919,11 @@ var key = this.key === undefined ? obj : this.key(obj); var value = this.store.get(key); if (value === undefined) { this.misses++; value = this._set(key, this.func(obj)); - } else if (value === _emberMetalMeta.UNDEFINED) { + } else if (value === UNDEFINED) { this.hits++; value = undefined; } else { this.hits++; // nothing to translate @@ -2665,11 +2939,11 @@ Cache.prototype._set = function _set(key, value) { if (this.limit > this.size) { this.size++; if (value === undefined) { - this.store.set(key, _emberMetalMeta.UNDEFINED); + this.store.set(key, UNDEFINED); } else { this.store.set(key, value); } } @@ -2686,15 +2960,17 @@ return Cache; })(); exports.default = Cache; + function UNDEFINED() {} + var DefaultStore = (function () { function DefaultStore() { - babelHelpers.classCallCheck(this, DefaultStore); + _classCallCheck(this, DefaultStore); - this.data = new _emberUtils.EmptyObject(); + this.data = new _emberMetalEmpty_object.default(); } DefaultStore.prototype.get = function get(key) { return this.data[key]; }; @@ -2702,17 +2978,17 @@ DefaultStore.prototype.set = function set(key, value) { this.data[key] = value; }; DefaultStore.prototype.clear = function clear() { - this.data = new _emberUtils.EmptyObject(); + this.data = new _emberMetalEmpty_object.default(); }; return DefaultStore; })(); }); -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) { +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) { 'use strict'; exports.finishChains = finishChains; var FIRST_KEY = /^([^\.]+)/; @@ -2720,22 +2996,22 @@ function firstKey(path) { return path.match(FIRST_KEY)[0]; } function isObject(obj) { - return typeof obj === 'object' && obj; + return obj && typeof obj === 'object'; } function isVolatile(obj) { return !(isObject(obj) && obj.isDescriptor && obj._volatile === false); } 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 _emberUtils.EmptyObject(); + this.chains = new _emberMetalEmpty_object.default(); } ChainWatchers.prototype = { add: function (key, node) { var nodes = this.chains[key]; @@ -2817,32 +3093,36 @@ function makeChainWatcher() { return new ChainWatchers(); } function addChainWatcher(obj, keyName, node) { + if (!isObject(obj)) { + return; + } + var m = _emberMetalMeta.meta(obj); m.writableChainWatchers(makeChainWatcher).add(keyName, node); _emberMetalWatch_key.watchKey(obj, keyName, m); } - function removeChainWatcher(obj, keyName, node, _meta) { + function removeChainWatcher(obj, keyName, node) { if (!isObject(obj)) { return; } - var meta = _meta || _emberMetalMeta.peekMeta(obj); + var m = _emberMetalMeta.peekMeta(obj); - if (!meta || !meta.readableChainWatchers()) { + if (!m || !m.readableChainWatchers()) { return; } // make meta writable - meta = _emberMetalMeta.meta(obj); + m = _emberMetalMeta.meta(obj); - meta.readableChainWatchers().remove(keyName, node); + m.readableChainWatchers().remove(keyName, node); - _emberMetalWatch_key.unwatchKey(obj, keyName, meta); + _emberMetalWatch_key.unwatchKey(obj, keyName, m); } // A ChainNode watches a single key on an object. If you provide a starting // value for the key then the node won't actually watch it. For a root node // pass null for parent and key and object for value. @@ -2863,19 +3143,14 @@ this.count = 0; this._value = value; this._paths = {}; if (this._watching) { - var obj = parent.value(); - - if (!isObject(obj)) { - return; + this._object = parent.value(); + if (this._object) { + addChainWatcher(this._object, this._key, this); } - - this._object = obj; - - addChainWatcher(this._object, this._key, this); } } function lazyGet(obj, key) { if (!obj) { @@ -2964,11 +3239,11 @@ chain: function (key, path) { var chains = this._chains; var node = undefined; if (chains === undefined) { - chains = this._chains = new _emberUtils.EmptyObject(); + chains = this._chains = new _emberMetalEmpty_object.default(); } else { node = chains[key]; } if (node === undefined) { @@ -3004,23 +3279,15 @@ } }, notify: function (revalidate, affected) { if (revalidate && this._watching) { - var parentValue = this._parent.value(); - - if (parentValue !== this._object) { - if (this._object) { - removeChainWatcher(this._object, this._key, this); - } - - if (isObject(parentValue)) { - this._object = parentValue; - addChainWatcher(parentValue, this._key, this); - } else { - this._object = undefined; - } + var obj = this._parent.value(); + if (obj !== this._object) { + removeChainWatcher(this._object, this._key, this); + this._object = obj; + addChainWatcher(obj, this._key, this); } this._value = undefined; } // then notify chains... @@ -3075,20 +3342,22 @@ } exports.removeChainWatcher = removeChainWatcher; exports.ChainNode = ChainNode; }); -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) { +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) { 'use strict'; exports.default = computed; /** @module ember @submodule ember-metal */ + function UNDEFINED() {} + var DEEP_EACH_REGEX = /\.@each\.[^.]+\./; /** A computed property transforms an object literal with object's accessor function(s) into a property. @@ -3219,11 +3488,10 @@ this._dependentKeys = opts && opts.dependentKeys; this._readOnly = false; } ComputedProperty.prototype = new _emberMetalProperties.Descriptor(); - ComputedProperty.prototype.constructor = ComputedProperty; var ComputedPropertyPrototype = ComputedProperty.prototype; /** Call on a computed property to set it into non-cached mode. When in this @@ -3386,19 +3654,19 @@ var meta = _emberMetalMeta.meta(obj); var cache = meta.writableCache(); var result = cache[keyName]; - if (result === _emberMetalMeta.UNDEFINED) { + if (result === UNDEFINED) { return undefined; } else if (result !== undefined) { return result; } var ret = this._getter.call(obj, keyName); if (ret === undefined) { - cache[keyName] = _emberMetalMeta.UNDEFINED; + cache[keyName] = UNDEFINED; } else { cache[keyName] = ret; } var chainWatchers = meta.readableChainWatchers(); @@ -3425,11 +3693,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: ' + _emberUtils.inspect(obj)); + throw new _emberMetalError.default('Cannot set read-only property "' + keyName + '" on object: ' + _emberMetalUtils.inspect(obj)); }; ComputedPropertyPrototype.clobberSet = function computedPropertyClobberSet(obj, keyName, value) { var cachedValue = cacheFor(obj, keyName); _emberMetalProperties.defineProperty(obj, keyName, null, cachedValue); @@ -3457,11 +3725,11 @@ // either there is a writable cache or we need one to update var cache = meta.writableCache(); var hadCachedValue = false; var cachedValue = undefined; if (cache[keyName] !== undefined) { - if (cache[keyName] !== _emberMetalMeta.UNDEFINED) { + if (cache[keyName] !== UNDEFINED) { cachedValue = cache[keyName]; } hadCachedValue = true; } @@ -3481,11 +3749,11 @@ if (!hadCachedValue) { _emberMetalDependent_keys.addDependentKeys(this, obj, keyName, meta); } if (ret === undefined) { - cache[keyName] = _emberMetalMeta.UNDEFINED; + cache[keyName] = UNDEFINED; } else { cache[keyName] = ret; } _emberMetalProperty_events.propertyDidChange(obj, keyName); @@ -3626,27 +3894,27 @@ function cacheFor(obj, key) { var meta = _emberMetalMeta.peekMeta(obj); var cache = meta && meta.source === obj && meta.readableCache(); var ret = cache && cache[key]; - if (ret === _emberMetalMeta.UNDEFINED) { + if (ret === UNDEFINED) { return undefined; } return ret; } cacheFor.set = function (cache, key, value) { if (value === undefined) { - cache[key] = _emberMetalMeta.UNDEFINED; + cache[key] = UNDEFINED; } else { cache[key] = value; } }; cacheFor.get = function (cache, key) { var ret = cache[key]; - if (ret === _emberMetalMeta.UNDEFINED) { + if (ret === UNDEFINED) { return undefined; } return ret; }; @@ -3683,10 +3951,11 @@ */ var Ember = typeof _emberEnvironment.context.imports.Ember === 'object' && _emberEnvironment.context.imports.Ember || {}; // Make sure these are set whether Ember was already defined or not Ember.isNamespace = true; + Ember.toString = function () { return 'Ember'; }; // .......................................................... @@ -3706,11 +3975,10 @@ exports.debug = debug; exports.deprecate = deprecate; exports.deprecateFunc = deprecateFunc; exports.runInDebug = runInDebug; exports.debugSeal = debugSeal; - exports.debugFreeze = debugFreeze; var debugFunctions = { assert: function () {}, info: function () {}, warn: function () {}, debug: function () {}, @@ -3721,12 +3989,11 @@ } return args[args.length - 1]; }, runInDebug: function () {}, - debugSeal: function () {}, - debugFreeze: function () {} + debugSeal: function () {} }; exports.debugFunctions = debugFunctions; function getDebugFunction(name) { @@ -3766,14 +4033,10 @@ } function debugSeal() { return debugFunctions.debugSeal.apply(undefined, arguments); } - - function debugFreeze() { - return debugFunctions.debugFreeze.apply(undefined, arguments); - } }); enifed('ember-metal/dependent_keys', ['exports', 'ember-metal/watching'], function (exports, _emberMetalWatching) { 'no use strict'; // Remove "use strict"; from transpiled module until // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed @@ -3865,82 +4128,89 @@ return _emberMetalProperty_get.get(this, newKey); } }); } }); -enifed('ember-metal/descriptor', ['exports', 'ember-metal/properties'], function (exports, _emberMetalProperties) { +enifed('ember-metal/dictionary', ['exports', 'ember-metal/empty_object'], function (exports, _emberMetalEmpty_object) { 'use strict'; - exports.default = descriptor; + exports.default = makeDictionary; - function descriptor(desc) { - return new Descriptor(desc); + // 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. - /** - A wrapper for a native ES5 descriptor. In an ideal world, we wouldn't need - this at all, however, the way we currently flatten/merge our mixins require - a special value to denote a descriptor. - - @class Descriptor - @private - */ + "use strict"; - var Descriptor = (function (_EmberDescriptor) { - babelHelpers.inherits(Descriptor, _EmberDescriptor); - - function Descriptor(desc) { - babelHelpers.classCallCheck(this, Descriptor); - - _EmberDescriptor.call(this); - this.desc = desc; + 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 } + }); - Descriptor.prototype.setup = function setup(obj, key) { - Object.defineProperty(obj, key, this.desc); - }; - - Descriptor.prototype.teardown = function teardown(obj, key) {}; - - return Descriptor; - })(_emberMetalProperties.Descriptor); + function EmptyObject() {} + EmptyObject.prototype = proto; + exports.default = EmptyObject; }); -enifed("ember-metal/error", ["exports"], function (exports) { +enifed('ember-metal/error', ['exports'], function (exports) { + 'use strict'; + exports.default = EmberError; + var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack']; + /** A subclass of the JavaScript Error object for use in Ember. @class Error @namespace Ember @extends Error @constructor @public */ - "use strict"; - exports.default = EmberError; + function EmberError() { + var tmp = Error.apply(this, arguments); - function EmberError(message) { - if (!(this instanceof EmberError)) { - return new EmberError(message); - } - - var error = Error.call(this, message); - + // Adds a `stack` property to the given error object that will yield the + // stack trace at the time captureStackTrace was called. + // When collecting the stack trace all frames above the topmost call + // to this function, including that call, will be left out of the + // stack trace. + // This is useful because we can hide Ember implementation details + // that are not very helpful for the user. if (Error.captureStackTrace) { Error.captureStackTrace(this, EmberError); - } else { - this.stack = error.stack; } - - this.description = error.description; - this.fileName = error.fileName; - this.lineNumber = error.lineNumber; - this.message = error.message; - this.name = error.name; - this.number = error.number; - this.code = error.code; + // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. + for (var idx = 0; idx < errorProps.length; idx++) { + this[errorProps[idx]] = tmp[errorProps[idx]]; + } } EmberError.prototype = Object.create(Error.prototype); }); enifed('ember-metal/error_handler', ['exports', 'ember-console', 'ember-metal/testing'], function (exports, _emberConsole, _emberMetalTesting) { @@ -4002,11 +4272,11 @@ } else { _emberConsole.default.error(getStack(error)); } } }); -enifed('ember-metal/events', ['exports', 'ember-utils', 'ember-metal/debug', 'ember-metal/meta', 'ember-metal/meta_listeners'], function (exports, _emberUtils, _emberMetalDebug, _emberMetalMeta, _emberMetalMeta_listeners) { +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) { 'no use strict'; // Remove "use strict"; from transpiled module until // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed /** @@ -4249,11 +4519,11 @@ if (!target) { target = obj; } if ('string' === typeof method) { if (params) { - _emberUtils.applyStr(target, method, params); + _emberMetalUtils.applyStr(target, method, params); } else { target[method](); } } else { if (params) { @@ -4416,11 +4686,11 @@ }); return all; } }); -enifed('ember-metal/features', ['exports', 'ember-utils', 'ember-environment', 'ember/features'], function (exports, _emberUtils, _emberEnvironment, _emberFeatures) { +enifed('ember-metal/features', ['exports', 'ember-environment', 'ember-metal/assign', 'ember/features'], function (exports, _emberEnvironment, _emberMetalAssign, _emberFeatures) { 'use strict'; exports.default = isEnabled; /** @@ -4434,11 +4704,11 @@ @namespace Ember @static @since 1.1.0 @public */ - var FEATURES = _emberUtils.assign(_emberFeatures.default, _emberEnvironment.ENV.FEATURES); + var FEATURES = _emberMetalAssign.default(_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. @@ -4512,150 +4782,331 @@ 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/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/is_proxy', '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, _emberMetalIs_proxy, _emberMetalDescriptor) { +enifed('ember-metal/index', ['exports', 'require', 'ember-environment', 'ember/version', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/assign', 'ember-metal/merge', 'ember-metal/instrumentation', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/error', 'ember-metal/cache', 'ember-console', 'ember-metal/property_get', 'ember-metal/events', 'ember-metal/observer_set', 'ember-metal/property_events', 'ember-metal/properties', 'ember-metal/property_set', 'ember-metal/weak_map', 'ember-metal/map', 'ember-metal/get_properties', 'ember-metal/set_properties', 'ember-metal/watch_key', 'ember-metal/chains', 'ember-metal/watch_path', 'ember-metal/watching', 'ember-metal/expand_properties', 'ember-metal/computed', 'ember-metal/alias', 'ember-metal/observer', 'ember-metal/mixin', 'ember-metal/binding', 'ember-metal/path_cache', 'ember-metal/testing', 'ember-metal/error_handler', 'ember-metal/run_loop', 'ember-metal/libraries', 'ember-metal/is_none', 'ember-metal/is_empty', 'ember-metal/is_blank', 'ember-metal/is_present', 'backburner'], function (exports, _require, _emberEnvironment, _emberVersion, _emberMetalCore, _emberMetalDebug, _emberMetalFeatures, _emberMetalAssign, _emberMetalMerge, _emberMetalInstrumentation, _emberMetalUtils, _emberMetalMeta, _emberMetalError, _emberMetalCache, _emberConsole, _emberMetalProperty_get, _emberMetalEvents, _emberMetalObserver_set, _emberMetalProperty_events, _emberMetalProperties, _emberMetalProperty_set, _emberMetalWeak_map, _emberMetalMap, _emberMetalGet_properties, _emberMetalSet_properties, _emberMetalWatch_key, _emberMetalChains, _emberMetalWatch_path, _emberMetalWatching, _emberMetalExpand_properties, _emberMetalComputed, _emberMetalAlias, _emberMetalObserver, _emberMetalMixin, _emberMetalBinding, _emberMetalPath_cache, _emberMetalTesting, _emberMetalError_handler, _emberMetalRun_loop, _emberMetalLibraries, _emberMetalIs_none, _emberMetalIs_empty, _emberMetalIs_blank, _emberMetalIs_present, _backburner) { /** @module ember @submodule ember-metal */ + // BEGIN IMPORTS 'use strict'; - exports.default = _emberMetalCore.default; - // reexports - exports.computed = _emberMetalComputed.default; - exports.cacheFor = _emberMetalComputed.cacheFor; - exports.ComputedProperty = _emberMetalComputed.ComputedProperty; - exports.alias = _emberMetalAlias.default; - exports.merge = _emberMetalMerge.default; - exports.assert = _emberMetalDebug.assert; - exports.info = _emberMetalDebug.info; - exports.warn = _emberMetalDebug.warn; - exports.debug = _emberMetalDebug.debug; - exports.deprecate = _emberMetalDebug.deprecate; - exports.deprecateFunc = _emberMetalDebug.deprecateFunc; - exports.runInDebug = _emberMetalDebug.runInDebug; - exports.setDebugFunction = _emberMetalDebug.setDebugFunction; - exports.getDebugFunction = _emberMetalDebug.getDebugFunction; - exports.debugSeal = _emberMetalDebug.debugSeal; - exports.debugFreeze = _emberMetalDebug.debugFreeze; - exports.instrument = _emberMetalInstrumentation.instrument; - exports.flaggedInstrument = _emberMetalInstrumentation.flaggedInstrument; - exports._instrumentStart = _emberMetalInstrumentation._instrumentStart; - exports.instrumentationReset = _emberMetalInstrumentation.reset; - exports.instrumentationSubscribe = _emberMetalInstrumentation.subscribe; - exports.instrumentationUnsubscribe = _emberMetalInstrumentation.unsubscribe; - exports.isTesting = _emberMetalTesting.isTesting; - exports.setTesting = _emberMetalTesting.setTesting; - exports.getOnerror = _emberMetalError_handler.getOnerror; - exports.setOnerror = _emberMetalError_handler.setOnerror; - exports.dispatchError = _emberMetalError_handler.dispatchError; - exports.setDispatchOverride = _emberMetalError_handler.setDispatchOverride; - exports.META_DESC = _emberMetalMeta.META_DESC; - exports.meta = _emberMetalMeta.meta; - exports.peekMeta = _emberMetalMeta.peekMeta; - exports.Error = _emberMetalError.default; - exports.Cache = _emberMetalCache.default; - exports.isFeatureEnabled = _emberMetalFeatures.default; - exports.FEATURES = _emberMetalFeatures.FEATURES; - exports.DEFAULT_FEATURES = _emberMetalFeatures.DEFAULT_FEATURES; - exports._getPath = _emberMetalProperty_get._getPath; - exports.get = _emberMetalProperty_get.get; - exports.getWithDefault = _emberMetalProperty_get.getWithDefault; - exports.set = _emberMetalProperty_set.set; - exports.trySet = _emberMetalProperty_set.trySet; - exports.WeakMap = _emberMetalWeak_map.default; - exports.accumulateListeners = _emberMetalEvents.accumulateListeners; - exports.addListener = _emberMetalEvents.addListener; - exports.hasListeners = _emberMetalEvents.hasListeners; - exports.listenersFor = _emberMetalEvents.listenersFor; - exports.on = _emberMetalEvents.on; - exports.removeListener = _emberMetalEvents.removeListener; - exports.sendEvent = _emberMetalEvents.sendEvent; - exports.suspendListener = _emberMetalEvents.suspendListener; - exports.suspendListeners = _emberMetalEvents.suspendListeners; - exports.watchedEvents = _emberMetalEvents.watchedEvents; - exports.isNone = _emberMetalIs_none.default; - exports.isEmpty = _emberMetalIs_empty.default; - exports.isBlank = _emberMetalIs_blank.default; - exports.isPresent = _emberMetalIs_present.default; - exports.run = _emberMetalRun_loop.default; - exports.ObserverSet = _emberMetalObserver_set.default; - exports.beginPropertyChanges = _emberMetalProperty_events.beginPropertyChanges; - exports.changeProperties = _emberMetalProperty_events.changeProperties; - exports.endPropertyChanges = _emberMetalProperty_events.endPropertyChanges; - exports.overrideChains = _emberMetalProperty_events.overrideChains; - exports.propertyDidChange = _emberMetalProperty_events.propertyDidChange; - exports.propertyWillChange = _emberMetalProperty_events.propertyWillChange; - exports.PROPERTY_DID_CHANGE = _emberMetalProperty_events.PROPERTY_DID_CHANGE; - exports.defineProperty = _emberMetalProperties.defineProperty; - exports.Descriptor = _emberMetalProperties.Descriptor; - exports.watchKey = _emberMetalWatch_key.watchKey; - exports.unwatchKey = _emberMetalWatch_key.unwatchKey; - exports.ChainNode = _emberMetalChains.ChainNode; - exports.finishChains = _emberMetalChains.finishChains; - exports.removeChainWatcher = _emberMetalChains.removeChainWatcher; - exports.watchPath = _emberMetalWatch_path.watchPath; - exports.unwatchPath = _emberMetalWatch_path.unwatchPath; - exports.destroy = _emberMetalWatching.destroy; - exports.isWatching = _emberMetalWatching.isWatching; - exports.unwatch = _emberMetalWatching.unwatch; - exports.watch = _emberMetalWatching.watch; - exports.watcherCount = _emberMetalWatching.watcherCount; - exports.libraries = _emberMetalLibraries.default; - exports.Map = _emberMetalMap.Map; - exports.MapWithDefault = _emberMetalMap.MapWithDefault; - exports.OrderedSet = _emberMetalMap.OrderedSet; - exports.getProperties = _emberMetalGet_properties.default; - exports.setProperties = _emberMetalSet_properties.default; - exports.expandProperties = _emberMetalExpand_properties.default; - exports._suspendObserver = _emberMetalObserver._suspendObserver; - exports._suspendObservers = _emberMetalObserver._suspendObservers; - exports.addObserver = _emberMetalObserver.addObserver; - exports.observersFor = _emberMetalObserver.observersFor; - exports.removeObserver = _emberMetalObserver.removeObserver; - exports._addBeforeObserver = _emberMetalObserver._addBeforeObserver; - exports._removeBeforeObserver = _emberMetalObserver._removeBeforeObserver; - exports.NAME_KEY = _emberMetalMixin.NAME_KEY; - exports.Mixin = _emberMetalMixin.Mixin; - exports.aliasMethod = _emberMetalMixin.aliasMethod; - exports._immediateObserver = _emberMetalMixin._immediateObserver; - exports._beforeObserver = _emberMetalMixin._beforeObserver; - exports.mixin = _emberMetalMixin.mixin; - exports.observer = _emberMetalMixin.observer; - exports.required = _emberMetalMixin.required; - exports.REQUIRED = _emberMetalMixin.REQUIRED; - exports.hasUnprocessedMixins = _emberMetalMixin.hasUnprocessedMixins; - exports.clearUnprocessedMixins = _emberMetalMixin.clearUnprocessedMixins; - exports.detectBinding = _emberMetalMixin.detectBinding; - exports.Binding = _emberMetalBinding.Binding; - exports.bind = _emberMetalBinding.bind; - exports.isGlobalPath = _emberMetalPath_cache.isGlobalPath; - exports.InjectedProperty = _emberMetalInjected_property.default; - exports.setHasViews = _emberMetalTags.setHasViews; - exports.tagForProperty = _emberMetalTags.tagForProperty; - exports.tagFor = _emberMetalTags.tagFor; - exports.markObjectAsDirty = _emberMetalTags.markObjectAsDirty; - exports.replace = _emberMetalReplace.default; - exports.runInTransaction = _emberMetalTransaction.default; - exports.didRender = _emberMetalTransaction.didRender; - exports.assertNotRendered = _emberMetalTransaction.assertNotRendered; - exports.isProxy = _emberMetalIs_proxy.isProxy; - exports.descriptor = _emberMetalDescriptor.default; + _emberMetalComputed.computed.alias = _emberMetalAlias.default; - // TODO: this needs to be deleted once we refactor the build tooling + // END IMPORTS + + // BEGIN EXPORTS + var EmberInstrumentation = _emberMetalCore.default.Instrumentation = {}; + EmberInstrumentation.instrument = _emberMetalInstrumentation.instrument; + EmberInstrumentation.subscribe = _emberMetalInstrumentation.subscribe; + EmberInstrumentation.unsubscribe = _emberMetalInstrumentation.unsubscribe; + EmberInstrumentation.reset = _emberMetalInstrumentation.reset; + + _emberMetalCore.default.instrument = _emberMetalInstrumentation.instrument; + _emberMetalCore.default.subscribe = _emberMetalInstrumentation.subscribe; + + _emberMetalCore.default._Cache = _emberMetalCache.default; + + _emberMetalCore.default.generateGuid = _emberMetalUtils.generateGuid; + _emberMetalCore.default.GUID_KEY = _emberMetalUtils.GUID_KEY; + _emberMetalCore.default.NAME_KEY = _emberMetalMixin.NAME_KEY; + _emberMetalCore.default.platform = { + defineProperty: true, + hasPropertyAccessors: true + }; + + _emberMetalCore.default.Error = _emberMetalError.default; + _emberMetalCore.default.guidFor = _emberMetalUtils.guidFor; + _emberMetalCore.default.META_DESC = _emberMetalMeta.META_DESC; + _emberMetalCore.default.meta = _emberMetalMeta.meta; + _emberMetalCore.default.inspect = _emberMetalUtils.inspect; + + _emberMetalCore.default.tryCatchFinally = _emberMetalUtils.deprecatedTryCatchFinally; + _emberMetalCore.default.makeArray = _emberMetalUtils.makeArray; + _emberMetalCore.default.canInvoke = _emberMetalUtils.canInvoke; + _emberMetalCore.default.tryInvoke = _emberMetalUtils.tryInvoke; + _emberMetalCore.default.wrap = _emberMetalUtils.wrap; + _emberMetalCore.default.apply = _emberMetalUtils.apply; + _emberMetalCore.default.applyStr = _emberMetalUtils.applyStr; + _emberMetalCore.default.uuid = _emberMetalUtils.uuid; + + _emberMetalCore.default.Logger = _emberConsole.default; + + _emberMetalCore.default.get = _emberMetalProperty_get.get; + _emberMetalCore.default.getWithDefault = _emberMetalProperty_get.getWithDefault; + _emberMetalCore.default._getPath = _emberMetalProperty_get._getPath; + + _emberMetalCore.default.on = _emberMetalEvents.on; + _emberMetalCore.default.addListener = _emberMetalEvents.addListener; + _emberMetalCore.default.removeListener = _emberMetalEvents.removeListener; + _emberMetalCore.default._suspendListener = _emberMetalEvents.suspendListener; + _emberMetalCore.default._suspendListeners = _emberMetalEvents.suspendListeners; + _emberMetalCore.default.sendEvent = _emberMetalEvents.sendEvent; + _emberMetalCore.default.hasListeners = _emberMetalEvents.hasListeners; + _emberMetalCore.default.watchedEvents = _emberMetalEvents.watchedEvents; + _emberMetalCore.default.listenersFor = _emberMetalEvents.listenersFor; + _emberMetalCore.default.accumulateListeners = _emberMetalEvents.accumulateListeners; + + _emberMetalCore.default._ObserverSet = _emberMetalObserver_set.default; + + _emberMetalCore.default.propertyWillChange = _emberMetalProperty_events.propertyWillChange; + _emberMetalCore.default.propertyDidChange = _emberMetalProperty_events.propertyDidChange; + _emberMetalCore.default.overrideChains = _emberMetalProperty_events.overrideChains; + _emberMetalCore.default.beginPropertyChanges = _emberMetalProperty_events.beginPropertyChanges; + _emberMetalCore.default.endPropertyChanges = _emberMetalProperty_events.endPropertyChanges; + _emberMetalCore.default.changeProperties = _emberMetalProperty_events.changeProperties; + + _emberMetalCore.default.defineProperty = _emberMetalProperties.defineProperty; + + _emberMetalCore.default.set = _emberMetalProperty_set.set; + _emberMetalCore.default.trySet = _emberMetalProperty_set.trySet; + + if (false) { + _emberMetalCore.default.WeakMap = _emberMetalWeak_map.default; + } + _emberMetalCore.default.OrderedSet = _emberMetalMap.OrderedSet; + _emberMetalCore.default.Map = _emberMetalMap.Map; + _emberMetalCore.default.MapWithDefault = _emberMetalMap.MapWithDefault; + + _emberMetalCore.default.getProperties = _emberMetalGet_properties.default; + _emberMetalCore.default.setProperties = _emberMetalSet_properties.default; + + _emberMetalCore.default.watchKey = _emberMetalWatch_key.watchKey; + _emberMetalCore.default.unwatchKey = _emberMetalWatch_key.unwatchKey; + + _emberMetalCore.default.removeChainWatcher = _emberMetalChains.removeChainWatcher; + _emberMetalCore.default._ChainNode = _emberMetalChains.ChainNode; + _emberMetalCore.default.finishChains = _emberMetalChains.finishChains; + + _emberMetalCore.default.watchPath = _emberMetalWatch_path.watchPath; + _emberMetalCore.default.unwatchPath = _emberMetalWatch_path.unwatchPath; + + _emberMetalCore.default.watch = _emberMetalWatching.watch; + _emberMetalCore.default.isWatching = _emberMetalWatching.isWatching; + _emberMetalCore.default.unwatch = _emberMetalWatching.unwatch; + _emberMetalCore.default.rewatch = _emberMetalWatching.rewatch; + _emberMetalCore.default.destroy = _emberMetalWatching.destroy; + + _emberMetalCore.default.expandProperties = _emberMetalExpand_properties.default; + + _emberMetalCore.default.ComputedProperty = _emberMetalComputed.ComputedProperty; + _emberMetalCore.default.computed = _emberMetalComputed.computed; + _emberMetalCore.default.cacheFor = _emberMetalComputed.cacheFor; + + _emberMetalCore.default.addObserver = _emberMetalObserver.addObserver; + _emberMetalCore.default.observersFor = _emberMetalObserver.observersFor; + _emberMetalCore.default.removeObserver = _emberMetalObserver.removeObserver; + _emberMetalCore.default._suspendObserver = _emberMetalObserver._suspendObserver; + _emberMetalCore.default._suspendObservers = _emberMetalObserver._suspendObservers; + + _emberMetalCore.default.required = _emberMetalMixin.required; + _emberMetalCore.default.aliasMethod = _emberMetalMixin.aliasMethod; + _emberMetalCore.default.observer = _emberMetalMixin.observer; + _emberMetalCore.default.immediateObserver = _emberMetalMixin._immediateObserver; + _emberMetalCore.default.mixin = _emberMetalMixin.mixin; + _emberMetalCore.default.Mixin = _emberMetalMixin.Mixin; + + _emberMetalCore.default.bind = _emberMetalBinding.bind; + _emberMetalCore.default.Binding = _emberMetalBinding.Binding; + _emberMetalCore.default.isGlobalPath = _emberMetalPath_cache.isGlobalPath; + + _emberMetalCore.default.run = _emberMetalRun_loop.default; + + /** + @class Backburner + @for Ember + @private + */ + _emberMetalCore.default.Backburner = function () { + _emberMetalDebug.deprecate('Usage of Ember.Backburner is deprecated.', false, { + id: 'ember-metal.ember-backburner', + until: '2.8.0', + url: 'http://emberjs.com/deprecations/v2.x/#toc_ember-backburner' + }); + + function BackburnerAlias(args) { + return _backburner.default.apply(this, args); + } + + BackburnerAlias.prototype = _backburner.default.prototype; + + return new BackburnerAlias(arguments); + }; + + _emberMetalCore.default._Backburner = _backburner.default; + + /** + The semantic version + @property VERSION + @type String + @public + */ + _emberMetalCore.default.VERSION = _emberVersion.default; + + _emberMetalCore.default.libraries = _emberMetalLibraries.default; + + _emberMetalLibraries.default.registerCoreLibrary('Ember', _emberMetalCore.default.VERSION); + + _emberMetalCore.default.isNone = _emberMetalIs_none.default; + _emberMetalCore.default.isEmpty = _emberMetalIs_empty.default; + _emberMetalCore.default.isBlank = _emberMetalIs_blank.default; + _emberMetalCore.default.isPresent = _emberMetalIs_present.default; + + _emberMetalCore.default.assign = Object.assign || _emberMetalAssign.default; + _emberMetalCore.default.merge = _emberMetalMerge.default; + + _emberMetalCore.default.FEATURES = _emberMetalFeatures.FEATURES; + _emberMetalCore.default.FEATURES.isEnabled = _emberMetalFeatures.default; + + _emberMetalCore.default.EXTEND_PROTOTYPES = _emberEnvironment.ENV.EXTEND_PROTOTYPES; + + // BACKWARDS COMPAT ACCESSORS FOR ENV FLAGS + Object.defineProperty(_emberMetalCore.default, 'LOG_STACKTRACE_ON_DEPRECATION', { + get: function () { + return _emberEnvironment.ENV.LOG_STACKTRACE_ON_DEPRECATION; + }, + set: function (value) { + _emberEnvironment.ENV.LOG_STACKTRACE_ON_DEPRECATION = !!value; + }, + enumerable: false + }); + + Object.defineProperty(_emberMetalCore.default, 'LOG_VERSION', { + get: function () { + return _emberEnvironment.ENV.LOG_VERSION; + }, + set: function (value) { + _emberEnvironment.ENV.LOG_VERSION = !!value; + }, + enumerable: false + }); + + Object.defineProperty(_emberMetalCore.default, 'MODEL_FACTORY_INJECTIONS', { + get: function () { + return _emberEnvironment.ENV.MODEL_FACTORY_INJECTIONS; + }, + set: function (value) { + _emberEnvironment.ENV.MODEL_FACTORY_INJECTIONS = !!value; + }, + enumerable: false + }); + + Object.defineProperty(_emberMetalCore.default, 'LOG_BINDINGS', { + get: function () { + return _emberEnvironment.ENV.LOG_BINDINGS; + }, + set: function (value) { + _emberEnvironment.ENV.LOG_BINDINGS = !!value; + }, + enumerable: false + }); + + Object.defineProperty(_emberMetalCore.default, 'ENV', { + get: function () { + return _emberEnvironment.ENV; + }, + enumerable: false + }); + + /** + The context that Ember searches for namespace instances on. + + @private + */ + Object.defineProperty(_emberMetalCore.default, 'lookup', { + get: function () { + return _emberEnvironment.context.lookup; + }, + set: function (value) { + _emberEnvironment.context.lookup = value; + }, + enumerable: false + }); + + Object.defineProperty(_emberMetalCore.default, 'testing', { + get: _emberMetalTesting.isTesting, + set: _emberMetalTesting.setTesting, + enumerable: false + }); + + /** + A function may be assigned to `Ember.onerror` to be called when Ember + internals encounter an error. This is useful for specialized error handling + and reporting code. + + ```javascript + Ember.onerror = function(error) { + Em.$.ajax('/report-error', 'POST', { + stack: error.stack, + otherInformation: 'whatever app state you want to provide' + }); + }; + ``` + + Internally, `Ember.onerror` is used as Backburner's error handler. + + @event onerror + @for Ember + @param {Exception} error the error object + @public + */ + Object.defineProperty(_emberMetalCore.default, 'onerror', { + get: _emberMetalError_handler.getOnerror, + set: _emberMetalError_handler.setOnerror, + enumerable: false + }); + + /** + An empty function useful for some operations. Always returns `this`. + + @method K + @return {Object} + @public + */ + _emberMetalCore.default.K = function K() { + return this; + }; + + // The debug functions are exported to globals with `require` to + // prevent babel-plugin-filter-imports from removing them. + var debugModule = _require.default('ember-metal/debug'); + _emberMetalCore.default.assert = debugModule.assert; + _emberMetalCore.default.warn = debugModule.warn; + _emberMetalCore.default.debug = debugModule.debug; + _emberMetalCore.default.deprecate = debugModule.deprecate; + _emberMetalCore.default.deprecateFunc = debugModule.deprecateFunc; + _emberMetalCore.default.runInDebug = debugModule.runInDebug; + // END EXPORTS + // do this for side-effects of updating Ember.assert, warn, etc when // ember-debug is present // This needs to be called before any deprecateFunc - if (_require.has('ember-debug')) { _require.default('ember-debug'); + } else { + _emberMetalCore.default.Debug = {}; + _emberMetalCore.default.Debug.registerDeprecationHandler = function () {}; + _emberMetalCore.default.Debug.registerWarnHandler = function () {}; } + + _emberMetalCore.default.create = _emberMetalDebug.deprecateFunc('Ember.create is deprecated in favor of Object.create', { id: 'ember-metal.ember-create', until: '3.0.0' }, Object.create); + _emberMetalCore.default.keys = _emberMetalDebug.deprecateFunc('Ember.keys is deprecated in favor of Object.keys', { id: 'ember-metal.ember.keys', until: '3.0.0' }, Object.keys); + + /* globals module */ + if (typeof module === 'object' && module.exports) { + module.exports = _emberMetalCore.default; + } else { + _emberEnvironment.context.exports.Ember = _emberEnvironment.context.exports.Em = _emberMetalCore.default; + } + + exports.default = _emberMetalCore.default; }); -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) { +// reexports +enifed('ember-metal/injected_property', ['exports', 'ember-metal/debug', 'ember-metal/computed', 'ember-metal/alias', 'ember-metal/properties', 'container/owner'], function (exports, _emberMetalDebug, _emberMetalComputed, _emberMetalAlias, _emberMetalProperties, _containerOwner) { 'use strict'; exports.default = InjectedProperty; /** @@ -4678,11 +5129,11 @@ AliasedPropertyPrototype.oneWay.call(this); } function injectedPropertyGet(keyName) { var desc = this[keyName]; - var owner = _emberUtils.getOwner(this) || this.container; // fallback to `container` for backwards compat + var owner = _containerOwner.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)); @@ -4839,30 +5290,24 @@ finalizer(); return result; } } - function NOOP() {} - // private for now - function _instrumentStart(name, _payload, _payloadParam) { - if (subscribers.length === 0) { - return NOOP; - } - + function _instrumentStart(name, _payload) { var listeners = cache[name]; if (!listeners) { listeners = populateListeners(name); } if (listeners.length === 0) { - return NOOP; + return; } - var payload = _payload(_payloadParam); + var payload = _payload(); var STRUCTURED_PROFILE = _emberEnvironment.ENV.STRUCTURED_PROFILE; var timeName = undefined; if (STRUCTURED_PROFILE) { timeName = name + ': ' + payload.object; @@ -5139,24 +5584,10 @@ function isPresent(obj) { return !_emberMetalIs_blank.default(obj); } }); -enifed('ember-metal/is_proxy', ['exports', 'ember-metal/meta'], function (exports, _emberMetalMeta) { - 'use strict'; - - exports.isProxy = isProxy; - - function isProxy(value) { - if (typeof value === 'object' && value) { - var meta = _emberMetalMeta.peekMeta(value); - return meta && meta.isProxy(); - } - - return false; - } -}); enifed('ember-metal/libraries', ['exports', 'ember-metal/debug', 'ember-metal/features'], function (exports, _emberMetalDebug, _emberMetalFeatures) { 'use strict'; exports.Libraries = Libraries; @@ -5223,11 +5654,11 @@ }; } exports.default = new Libraries(); }); -enifed('ember-metal/map', ['exports', 'ember-utils'], function (exports, _emberUtils) { +enifed('ember-metal/map', ['exports', 'ember-metal/utils', 'ember-metal/empty_object'], function (exports, _emberMetalUtils, _emberMetalEmpty_object) { /** @module ember @submodule ember-metal */ @@ -5257,11 +5688,11 @@ function missingNew(name) { throw new TypeError('Constructor ' + name + ' requires \'new\''); } function copyNull(obj) { - var output = new _emberUtils.EmptyObject(); + var output = new _emberMetalEmpty_object.default(); for (var prop in obj) { // hasOwnPropery is not needed because obj is new EmptyObject(); output[prop] = obj[prop]; } @@ -5316,11 +5747,11 @@ /** @method clear @private */ clear: function () { - this.presenceSet = new _emberUtils.EmptyObject(); + this.presenceSet = new _emberMetalEmpty_object.default(); this.list = []; this.size = 0; }, /** @@ -5329,11 +5760,11 @@ @param guid (optional, and for internal use) @return {Ember.OrderedSet} @private */ add: function (obj, _guid) { - var guid = _guid || _emberUtils.guidFor(obj); + var guid = _guid || _emberMetalUtils.guidFor(obj); var presenceSet = this.presenceSet; var list = this.list; if (presenceSet[guid] !== true) { presenceSet[guid] = true; @@ -5350,11 +5781,11 @@ @param _guid (optional and for internal use only) @return {Boolean} @private */ delete: function (obj, _guid) { - var guid = _guid || _emberUtils.guidFor(obj); + var guid = _guid || _emberMetalUtils.guidFor(obj); var presenceSet = this.presenceSet; var list = this.list; if (presenceSet[guid] === true) { delete presenceSet[guid]; @@ -5387,11 +5818,11 @@ has: function (obj) { if (this.size === 0) { return false; } - var guid = _emberUtils.guidFor(obj); + var guid = _emberMetalUtils.guidFor(obj); var presenceSet = this.presenceSet; return presenceSet[guid] === true; }, @@ -5472,11 +5903,11 @@ */ function Map() { if (this instanceof Map) { this._keys = OrderedSet.create(); this._keys._silenceRemoveDeprecation = true; - this._values = new _emberUtils.EmptyObject(); + this._values = new _emberMetalEmpty_object.default(); this.size = 0; } else { missingNew('Map'); } } @@ -5515,11 +5946,11 @@ if (this.size === 0) { return; } var values = this._values; - var guid = _emberUtils.guidFor(key); + var guid = _emberMetalUtils.guidFor(key); return values[guid]; }, /** @@ -5532,11 +5963,11 @@ @private */ set: function (key, value) { var keys = this._keys; var values = this._values; - var guid = _emberUtils.guidFor(key); + var guid = _emberMetalUtils.guidFor(key); // ensure we don't store -0 var k = key === -0 ? 0 : key; keys.add(k, guid); @@ -5562,11 +5993,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 = _emberUtils.guidFor(key); + var guid = _emberMetalUtils.guidFor(key); if (keys.delete(key, guid)) { delete values[guid]; this.size = keys.size; return true; @@ -5628,11 +6059,11 @@ @method clear @private */ clear: function () { this._keys.clear(); - this._values = new _emberUtils.EmptyObject(); + this._values = new _emberMetalEmpty_object.default(); this.size = 0; }, /** @method copy @@ -5753,29 +6184,19 @@ } return original; } }); -enifed('ember-metal/meta', ['exports', 'ember-utils', 'ember-metal/features', 'ember-metal/meta_listeners', 'ember-metal/debug', 'ember-metal/chains'], function (exports, _emberUtils, _emberMetalFeatures, _emberMetalMeta_listeners, _emberMetalDebug, _emberMetalChains) { +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) { 'no use strict'; // Remove "use strict"; from transpiled module until // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed - exports.Meta = Meta; - exports.deleteMeta = deleteMeta; exports.meta = meta; + exports.peekMeta = peekMeta; + exports.deleteMeta = deleteMeta; - var counters = { - peekCalls: 0, - peekParentCalls: 0, - peekPrototypeWalks: 0, - setCalls: 0, - deleteCalls: 0, - metaCalls: 0, - metaInstantiated: 0 - }; - /** @module ember-metal */ /* @@ -5794,61 +6215,41 @@ peekWatching, clearWatching, writeMixins, peekMixins, clearMixins, writeBindings, peekBindings, clearBindings, writeValues, peekValues, clearValues, writeDeps, forEachInDeps writableChainWatchers, readableChainWatchers, writableChains, - readableChains, writableTag, readableTag, writableTags, - readableTags + readableChains, writableTag, readableTag + */ var members = { cache: ownMap, weak: ownMap, watching: inheritedMap, mixins: inheritedMap, bindings: inheritedMap, values: inheritedMap, + deps: inheritedMapOfMaps, chainWatchers: ownCustomObject, chains: inheritedCustomObject, - tag: ownCustomObject, - tags: ownMap + tag: ownCustomObject }; - // FLAGS - var SOURCE_DESTROYING = 1 << 1; - var SOURCE_DESTROYED = 1 << 2; - var META_DESTROYED = 1 << 3; - var IS_PROXY = 1 << 4; - - if (true || false) { - members.lastRendered = ownMap; - members.lastRenderedFrom = ownMap; // FIXME: not used in production, remove me from prod builds - } - var memberNames = Object.keys(members); var META_FIELD = '__ember_meta__'; function Meta(obj, parentMeta) { - _emberMetalDebug.runInDebug(function () { - return counters.metaInstantiated++; - }); - this._cache = undefined; this._weak = undefined; this._watching = undefined; this._mixins = undefined; this._bindings = undefined; this._values = undefined; this._deps = undefined; this._chainWatchers = undefined; this._chains = undefined; this._tag = undefined; - this._tags = undefined; - // initial value for all flags right now is false - // see FLAGS const for detailed list of flags used - this._flags = 0; - // used only internally this.source = obj; // when meta(obj).proto === obj, the object is intended to be only a // prototype and doesn't need to actually be observable itself @@ -5858,110 +6259,24 @@ // explicitly instead of using prototypical inheritance because we // have detailed knowledge of how each property should really be // inherited, and we can optimize it much better than JS runtimes. this.parent = parentMeta; - if (true || false) { - this._lastRendered = undefined; - this._lastRenderedFrom = undefined; // FIXME: not used in production, remove me from prod builds - } - this._initializeListeners(); } Meta.prototype.isInitialized = function (obj) { return this.proto !== obj; }; - var NODE_STACK = []; - - Meta.prototype.destroy = function () { - if (this.isMetaDestroyed()) { - return; - } - - // remove chainWatchers to remove circular references that would prevent GC - var node = undefined, - nodes = undefined, - key = undefined, - nodeObject = undefined; - node = this.readableChains(); - if (node) { - NODE_STACK.push(node); - // process tree - while (NODE_STACK.length > 0) { - node = NODE_STACK.pop(); - // push children - nodes = node._chains; - if (nodes) { - for (key in nodes) { - if (nodes[key] !== undefined) { - NODE_STACK.push(nodes[key]); - } - } - } - - // remove chainWatcher in node object - if (node._watching) { - nodeObject = node._object; - if (nodeObject) { - var foreignMeta = peekMeta(nodeObject); - // avoid cleaning up chain watchers when both current and - // foreign objects are being destroyed - // if both are being destroyed manual cleanup is not needed - // as they will be GC'ed and no non-destroyed references will - // be remaining - if (foreignMeta && !foreignMeta.isSourceDestroying()) { - _emberMetalChains.removeChainWatcher(nodeObject, node._key, node, foreignMeta); - } - } - } - } - } - - this.setMetaDestroyed(); - }; - for (var _name in _emberMetalMeta_listeners.protoMethods) { Meta.prototype[_name] = _emberMetalMeta_listeners.protoMethods[_name]; } memberNames.forEach(function (name) { return members[name](name, Meta); }); - Meta.prototype.isSourceDestroying = function isSourceDestroying() { - return (this._flags & SOURCE_DESTROYING) !== 0; - }; - - Meta.prototype.setSourceDestroying = function setSourceDestroying() { - this._flags |= SOURCE_DESTROYING; - }; - - Meta.prototype.isSourceDestroyed = function isSourceDestroyed() { - return (this._flags & SOURCE_DESTROYED) !== 0; - }; - - Meta.prototype.setSourceDestroyed = function setSourceDestroyed() { - this._flags |= SOURCE_DESTROYED; - }; - - Meta.prototype.isMetaDestroyed = function isMetaDestroyed() { - return (this._flags & META_DESTROYED) !== 0; - }; - - Meta.prototype.setMetaDestroyed = function setMetaDestroyed() { - this._flags |= META_DESTROYED; - }; - - Meta.prototype.isProxy = function isProxy() { - return (this._flags & IS_PROXY) !== 0; - }; - - Meta.prototype.setProxy = function setProxy() { - this._flags |= IS_PROXY; - }; - // Implements a member that is a lazily created, non-inheritable // POJO. function ownMap(name, Meta) { var key = memberProperty(name); var capitalized = capitalize(name); @@ -5974,11 +6289,11 @@ } Meta.prototype._getOrCreateOwnMap = function (key) { var ret = this[key]; if (!ret) { - ret = this[key] = new _emberUtils.EmptyObject(); + ret = this[key] = new _emberMetalEmpty_object.default(); } return ret; }; // Implements a member that is a lazily created POJO with inheritable @@ -5986,23 +6301,21 @@ function inheritedMap(name, Meta) { var key = memberProperty(name); var capitalized = capitalize(name); Meta.prototype['write' + capitalized] = function (subkey, value) { - _emberMetalDebug.assert('Cannot call write' + capitalized + ' after the object is destroyed.', !this.isMetaDestroyed()); - var map = this._getOrCreateOwnMap(key); map[subkey] = value; }; Meta.prototype['peek' + capitalized] = function (subkey) { return this._findInherited(key, subkey); }; Meta.prototype['forEach' + capitalized] = function (fn) { var pointer = this; - var seen = new _emberUtils.EmptyObject(); + var seen = new _emberMetalEmpty_object.default(); while (pointer !== undefined) { var map = pointer[key]; if (map) { for (var _key in map) { if (!seen[_key]) { @@ -6014,12 +6327,10 @@ pointer = pointer.parent; } }; Meta.prototype['clear' + capitalized] = function () { - _emberMetalDebug.assert('Cannot call clear' + capitalized + ' after the object is destroyed.', !this.isMetaDestroyed()); - this[key] = undefined; }; Meta.prototype['deleteFrom' + capitalized] = function (subkey) { delete this._getOrCreateOwnMap(key)[subkey]; @@ -6052,60 +6363,63 @@ } pointer = pointer.parent; } }; - var UNDEFINED = _emberUtils.symbol('undefined'); + var UNDEFINED = _emberMetalSymbol.default('undefined'); exports.UNDEFINED = UNDEFINED; // Implements a member that provides a lazily created map of maps, // with inheritance at both levels. - Meta.prototype.writeDeps = function writeDeps(subkey, itemkey, value) { - _emberMetalDebug.assert('Cannot call writeDeps after the object is destroyed.', !this.isMetaDestroyed()); + function inheritedMapOfMaps(name, Meta) { + var key = memberProperty(name); + var capitalized = capitalize(name); - var outerMap = this._getOrCreateOwnMap('_deps'); - var innerMap = outerMap[subkey]; - if (!innerMap) { - innerMap = outerMap[subkey] = new _emberUtils.EmptyObject(); - } - innerMap[itemkey] = value; - }; + 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[itemkey] = value; + }; - Meta.prototype.peekDeps = function peekDeps(subkey, itemkey) { - var pointer = this; - while (pointer !== undefined) { - var map = pointer._deps; - if (map) { - var value = map[subkey]; - if (value) { - if (value[itemkey] !== undefined) { - return value[itemkey]; + Meta.prototype['peek' + capitalized] = function (subkey, itemkey) { + var pointer = this; + while (pointer !== undefined) { + var map = pointer[key]; + if (map) { + var value = map[subkey]; + if (value) { + if (value[itemkey] !== undefined) { + return value[itemkey]; + } } } + pointer = pointer.parent; } - pointer = pointer.parent; - } - }; + }; - Meta.prototype.hasDeps = function hasDeps(subkey) { - var pointer = this; - while (pointer !== undefined) { - if (pointer._deps && pointer._deps[subkey]) { - return true; + Meta.prototype['has' + capitalized] = function (subkey) { + var pointer = this; + while (pointer !== undefined) { + if (pointer[key] && pointer[key][subkey]) { + return true; + } + pointer = pointer.parent; } - pointer = pointer.parent; - } - return false; - }; + return false; + }; - Meta.prototype.forEachInDeps = function forEachInDeps(subkey, fn) { - return this._forEachIn('_deps', subkey, fn); - }; + Meta.prototype['forEachIn' + capitalized] = function (subkey, fn) { + return this._forEachIn(key, subkey, fn); + }; + } Meta.prototype._forEachIn = function (key, subkey, fn) { var pointer = this; - var seen = new _emberUtils.EmptyObject(); + var seen = new _emberMetalEmpty_object.default(); var calls = []; while (pointer !== undefined) { var map = pointer[key]; if (map) { var innerMap = map[subkey]; @@ -6133,12 +6447,10 @@ // object using the method you provide. function ownCustomObject(name, Meta) { var key = memberProperty(name); var capitalized = capitalize(name); Meta.prototype['writable' + capitalized] = function (create) { - _emberMetalDebug.assert('Cannot call writable' + capitalized + ' after the object is destroyed.', !this.isMetaDestroyed()); - var ret = this[key]; if (!ret) { ret = this[key] = create(this.source); } return ret; @@ -6153,12 +6465,10 @@ // their parents by calling your object's `copy()` method. function inheritedCustomObject(name, Meta) { var key = memberProperty(name); var capitalized = capitalize(name); Meta.prototype['writable' + capitalized] = function (create) { - _emberMetalDebug.assert('Cannot call writable' + capitalized + ' after the object is destroyed.', !this.isMetaDestroyed()); - var ret = this[key]; if (!ret) { if (this.parent) { ret = this[key] = this.parent['writable' + capitalized](create).copy(this.source); } else { @@ -6216,112 +6526,36 @@ return UNDEFINED; }; Meta.prototype.writeValue = function (obj, key, value) { - var descriptor = _emberUtils.lookupDescriptor(obj, key); + var descriptor = _emberMetalUtils.lookupDescriptor(obj, key); var isMandatorySetter = descriptor && descriptor.set && descriptor.set.isMandatorySetter; if (isMandatorySetter) { this.writeValues(key, value); } else { obj[key] = value; } }; } - var HAS_NATIVE_WEAKMAP = (function () { - // detect if `WeakMap` is even present - var hasWeakMap = typeof WeakMap === 'function'; - if (!hasWeakMap) { - return false; - } - - var instance = new WeakMap(); - // use `Object`'s `.toString` directly to prevent us from detecting - // polyfills as native weakmaps - return Object.prototype.toString.call(instance) === '[object WeakMap]'; - })(); - - var setMeta = undefined, - peekMeta = undefined; - // choose the one appropriate for given platform - if (HAS_NATIVE_WEAKMAP) { - (function () { - var getPrototypeOf = Object.getPrototypeOf; - var metaStore = new WeakMap(); - - exports.setMeta = setMeta = function WeakMap_setMeta(obj, meta) { - _emberMetalDebug.runInDebug(function () { - return counters.setCalls++; - }); - metaStore.set(obj, meta); - }; - - exports.peekMeta = peekMeta = function WeakMap_peekMeta(obj) { - _emberMetalDebug.runInDebug(function () { - return counters.peekCalls++; - }); - - return metaStore.get(obj); - }; - - exports.peekMeta = peekMeta = function WeakMap_peekParentMeta(obj) { - var pointer = obj; - var meta = undefined; - while (pointer) { - meta = metaStore.get(pointer); - // jshint loopfunc:true - _emberMetalDebug.runInDebug(function () { - return counters.peekCalls++; - }); - // stop if we find a `null` value, since - // that means the meta was deleted - // any other truthy value is a "real" meta - if (meta === null || meta) { - return meta; - } - - pointer = getPrototypeOf(pointer); - _emberMetalDebug.runInDebug(function () { - return counters.peakPrototypeWalks++; - }); - } - }; - })(); - } else { - exports.setMeta = setMeta = function Fallback_setMeta(obj, meta) { - // if `null` already, just set it to the new value - // otherwise define property first - if (obj[META_FIELD] !== null) { - if (obj.__defineNonEnumerable) { - obj.__defineNonEnumerable(EMBER_META_PROPERTY); - } else { - Object.defineProperty(obj, META_FIELD, META_DESC); - } + var setMeta = function (obj, meta) { + // if `null` already, just set it to the new value + // otherwise define property first + if (obj[META_FIELD] !== null) { + if (obj.__defineNonEnumerable) { + obj.__defineNonEnumerable(EMBER_META_PROPERTY); + } else { + Object.defineProperty(obj, META_FIELD, META_DESC); } - - obj[META_FIELD] = meta; - }; - - exports.peekMeta = peekMeta = function Fallback_peekMeta(obj) { - return obj[META_FIELD]; - }; - } - - function deleteMeta(obj) { - _emberMetalDebug.runInDebug(function () { - return counters.deleteCalls++; - }); - - var meta = peekMeta(obj); - if (meta) { - meta.destroy(); } - } + obj[META_FIELD] = meta; + }; + /** Retrieves the meta hash for an object. If `writable` is true ensures the hash is writable for this object as well. The meta object contains information about computed property descriptors as @@ -6338,14 +6572,10 @@ the meta hash, allowing the method to avoid making an unnecessary copy. @return {Object} the meta hash for an object */ function meta(obj) { - _emberMetalDebug.runInDebug(function () { - return counters.metaCalls++; - }); - var maybeMeta = peekMeta(obj); var parent = undefined; // remove this code, in-favor of explicit parent if (maybeMeta) { @@ -6358,13 +6588,20 @@ var newMeta = new Meta(obj, parent); setMeta(obj, newMeta); return newMeta; } - exports.peekMeta = peekMeta; - exports.setMeta = setMeta; - exports.counters = counters; + function peekMeta(obj) { + return obj[META_FIELD]; + } + + function deleteMeta(obj) { + if (typeof obj[META_FIELD] !== 'object') { + return; + } + obj[META_FIELD] = null; + } }); enifed('ember-metal/meta_listeners', ['exports'], function (exports) { /* When we render a rich template hierarchy, the set of events that *might* happen tends to be much larger than the set of events that @@ -6535,11 +6772,11 @@ } } destination.push(target, method, source[index + 3]); } }); -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) { +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) { 'no use strict'; // Remove "use strict"; from transpiled module until // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed /** @@ -6570,11 +6807,11 @@ function mixinProperties(mixinsMeta, mixin) { var guid = undefined; if (mixin instanceof Mixin) { - guid = _emberUtils.guidFor(mixin); + guid = _emberMetalUtils.guidFor(mixin); if (mixinsMeta.peekMixins(guid)) { return CONTINUE; } mixinsMeta.writeMixins(guid, mixin); return mixin.properties; @@ -6619,14 +6856,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 = _emberUtils.wrap(property._getter, superProperty._getter); + property._getter = _emberMetalUtils.wrap(property._getter, superProperty._getter); if (superProperty._setter) { if (property._setter) { - property._setter = _emberUtils.wrap(property._setter, superProperty._setter); + property._setter = _emberMetalUtils.wrap(property._setter, superProperty._setter); } else { property._setter = superProperty._setter; } } @@ -6649,11 +6886,11 @@ // Only wrap the new method if the original method was a function if (superMethod === undefined || 'function' !== typeof superMethod) { return method; } - return _emberUtils.wrap(method, superMethod); + return _emberMetalUtils.wrap(method, superMethod); } function applyConcatenatedProperties(obj, key, value, values) { var baseValue = values[key] || obj[key]; @@ -6663,14 +6900,14 @@ return baseValue; } else { return baseValue.concat(value); } } else { - return _emberUtils.makeArray(baseValue).concat(value); + return _emberMetalUtils.makeArray(baseValue).concat(value); } } else { - return _emberUtils.makeArray(value); + return _emberMetalUtils.makeArray(value); } } function applyMergedProperties(obj, key, value, values) { var baseValue = values[key] || obj[key]; @@ -6684,11 +6921,11 @@ if (!baseValue) { return value; } - var newBase = _emberUtils.assign({}, baseValue); + var newBase = _emberMetalAssign.default({}, baseValue); var hasFunction = false; for (var prop in value) { if (!value.hasOwnProperty(prop)) { continue; @@ -6742,11 +6979,12 @@ function mergeMixins(mixins, m, descs, values, base, keys) { var currentMixin = undefined, props = undefined, key = undefined, concats = undefined, - mergings = undefined; + mergings = undefined, + meta = undefined; function removeKeys(keyName) { delete descs[keyName]; delete values[keyName]; } @@ -6759,10 +6997,11 @@ 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); @@ -6770,11 +7009,11 @@ for (key in props) { if (!props.hasOwnProperty(key)) { continue; } keys.push(key); - addNormalizedProperty(base, key, props[key], m, descs, values, concats, mergings); + addNormalizedProperty(base, key, props[key], meta, descs, values, concats, mergings); } // manually copy toString() because some JS engines do not enumerate it if (props.hasOwnProperty('toString')) { base.toString = props.toString; @@ -6943,34 +7182,34 @@ applyMixin(obj, args, false); return obj; } - var NAME_KEY = _emberUtils.GUID_KEY + '_name'; + var NAME_KEY = _emberMetalUtils.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, ```javascript - const EditableMixin = Ember.Mixin.create({ - edit() { + App.Editable = Ember.Mixin.create({ + edit: function() { console.log('starting to edit'); this.set('isEditing', true); }, isEditing: false }); // Mix mixins into classes by passing them as the first arguments to - // `.extend.` - const Comment = Ember.Object.extend(EditableMixin, { - post: null + // .extend. + App.CommentView = Ember.View.extend(App.Editable, { + template: Ember.Handlebars.compile('{{#if view.isEditing}}...{{else}}...{{/if}}') }); - let comment = Comment.create(post: somePost); - comment.edit(); // outputs 'starting to edit' + commentView = App.CommentView.create(); + commentView.edit(); // outputs 'starting to edit' ``` Note that Mixins are created with `Ember.Mixin.create`, not `Ember.Mixin.extend`. @@ -6978,25 +7217,23 @@ defined as properties will be shared amongst objects that implement the mixin. If you want to define a property in a mixin that is not shared, you can define it either as a computed property or have it be created on initialization of the object. ```javascript - // filters array will be shared amongst any object implementing mixin - const FilterableMixin = Ember.Mixin.create({ + //filters array will be shared amongst any object implementing mixin + App.Filterable = Ember.Mixin.create({ filters: Ember.A() }); - // filters will be a separate array for every object implementing the mixin - const FilterableMixin = Ember.Mixin.create({ - filters: Ember.computed(function() { - return Ember.A(); - }) + //filters will be a separate array for every object implementing the mixin + App.Filterable = Ember.Mixin.create({ + filters: Ember.computed(function() {return Ember.A();}) }); - // filters will be created as a separate array during the object's initialization - const Filterable = Ember.Mixin.create({ - init() { + //filters will be created as a separate array during the object's initialization + App.Filterable = Ember.Mixin.create({ + init: function() { this._super(...arguments); this.set("filters", Ember.A()); } }); ``` @@ -7027,11 +7264,11 @@ } else { this.mixins = undefined; } this.ownerConstructor = undefined; this._without = undefined; - this[_emberUtils.GUID_KEY] = null; + this[_emberMetalUtils.GUID_KEY] = null; this[NAME_KEY] = null; _emberMetalDebug.debugSeal(this); } Mixin._apply = applyMixin; @@ -7121,11 +7358,11 @@ }; MixinPrototype.toString = Object.toString; function _detect(curMixin, targetMixin, seen) { - var guid = _emberUtils.guidFor(curMixin); + var guid = _emberMetalUtils.guidFor(curMixin); if (seen[guid]) { return false; } seen[guid] = true; @@ -7148,21 +7385,21 @@ @param obj @return {Boolean} @private */ MixinPrototype.detect = function (obj) { - if (typeof obj !== 'object' || obj === null) { + if (!obj) { return false; } if (obj instanceof Mixin) { return _detect(obj, this, {}); } var m = _emberMetalMeta.peekMeta(obj); if (!m) { return false; } - return !!m.peekMixins(_emberUtils.guidFor(this)); + return !!m.peekMixins(_emberMetalUtils.guidFor(this)); }; MixinPrototype.without = function () { var ret = new Mixin([this]); @@ -7173,14 +7410,14 @@ ret._without = args; return ret; }; function _keys(ret, mixin, seen) { - if (seen[_emberUtils.guidFor(mixin)]) { + if (seen[_emberMetalUtils.guidFor(mixin)]) { return; } - seen[_emberUtils.guidFor(mixin)] = true; + seen[_emberMetalUtils.guidFor(mixin)] = true; if (mixin.properties) { var props = Object.keys(mixin.properties); for (var i = 0; i < props.length; i++) { var key = props[i]; @@ -7379,10 +7616,34 @@ Note, `@each.property` observer is called per each add or replace of an element and it's not called with a specific enumeration item. A `_beforeObserver` fires before a property changes. + A `_beforeObserver` is an alternative form of `.observesBefore()`. + + ```javascript + App.PersonView = Ember.View.extend({ + friends: [{ name: 'Tom' }, { name: 'Stefan' }, { name: 'Kris' }], + + valueDidChange: Ember.observer('content.value', function(obj, keyName) { + // only run if updating a value already in the DOM + if (this.get('state') === 'inDOM') { + let color = obj.get(keyName) > this.changingFrom ? 'green' : 'red'; + // logic + } + }), + + friendsDidChange: Ember.observer('friends.@each.name', function(obj, keyName) { + // some logic + // obj.get(keyName) returns friends array + }) + }); + ``` + + Also available as `Function.prototype.observesBefore` if prototype extensions are + enabled. + @method beforeObserver @for Ember @param {String} propertyNames* @param {Function} func @return func @@ -7416,11 +7677,11 @@ for (var i = 0; i < _paths.length; ++i) { _emberMetalExpand_properties.default(_paths[i], addWatchedProperty); } if (typeof func !== 'function') { - throw new _emberMetalError.default('_beforeObserver called without a function'); + throw new _emberMetalError.default('Ember.beforeObserver called without a function'); } func.__ember_observesBefore__ = paths; return func; } @@ -7541,11 +7802,11 @@ _emberMetalEvents.removeListener(obj, beforeEvent(path), target, method); return this; } }); -enifed('ember-metal/observer_set', ['exports', 'ember-utils', 'ember-metal/events'], function (exports, _emberUtils, _emberMetalEvents) { +enifed('ember-metal/observer_set', ['exports', 'ember-metal/utils', 'ember-metal/events'], function (exports, _emberMetalUtils, _emberMetalEvents) { 'use strict'; exports.default = ObserverSet; /* @@ -7572,11 +7833,11 @@ } ObserverSet.prototype.add = function (sender, keyName, eventName) { var observerSet = this.observerSet; var observers = this.observers; - var senderGuid = _emberUtils.guidFor(sender); + var senderGuid = _emberMetalUtils.guidFor(sender); var keySet = observerSet[senderGuid]; var index = undefined; if (!keySet) { observerSet[senderGuid] = keySet = {}; @@ -7917,14 +8178,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-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) { +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'], function (exports, _emberMetalUtils, _emberMetalMeta, _emberMetalEvents, _emberMetalTags, _emberMetalObserver_set, _emberMetalSymbol) { 'use strict'; - var PROPERTY_DID_CHANGE = _emberUtils.symbol('PROPERTY_DID_CHANGE'); + var PROPERTY_DID_CHANGE = _emberMetalSymbol.default('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; @@ -7947,29 +8208,29 @@ @param {Object} obj The object with the property that will change @param {String} keyName The property key (or path) that will change. @return {void} @private */ - function propertyWillChange(obj, keyName, _meta) { - var meta = _meta || _emberMetalMeta.peekMeta(obj); + function propertyWillChange(obj, keyName) { + var m = _emberMetalMeta.peekMeta(obj); - if (meta && !meta.isInitialized(obj)) { + if (m && !m.isInitialized(obj)) { return; } - var watching = meta && meta.peekWatching(keyName) > 0; + var watching = m && m.peekWatching(keyName) > 0; var possibleDesc = obj[keyName]; var desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined; if (desc && desc.willChange) { desc.willChange(obj, keyName); } if (watching) { - dependentKeysWillChange(obj, keyName, meta); - chainsWillChange(obj, keyName, meta); - notifyBeforeObservers(obj, keyName, meta); + dependentKeysWillChange(obj, keyName, m); + chainsWillChange(obj, keyName, m); + notifyBeforeObservers(obj, keyName); } } /** This function is called just after an object property has changed. @@ -7982,59 +8243,50 @@ @method propertyDidChange @for Ember @param {Object} obj The object with the property that will change @param {String} keyName The property key (or path) that will change. - @param {Meta} meta The objects meta. @return {void} @private */ - function propertyDidChange(obj, keyName, _meta) { - var meta = _meta || _emberMetalMeta.peekMeta(obj); + function propertyDidChange(obj, keyName) { + var m = _emberMetalMeta.peekMeta(obj); - if (meta && !meta.isInitialized(obj)) { + if (m && !m.isInitialized(obj)) { return; } - var watching = meta && meta.peekWatching(keyName) > 0; + var watching = m && m.peekWatching(keyName) > 0; var possibleDesc = obj[keyName]; var desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined; // shouldn't this mean that we're watching this key? if (desc && desc.didChange) { desc.didChange(obj, keyName); } if (watching) { - if (meta.hasDeps(keyName)) { - dependentKeysDidChange(obj, keyName, meta); + if (m.hasDeps(keyName)) { + dependentKeysDidChange(obj, keyName, m); } - chainsDidChange(obj, keyName, meta, false); - notifyObservers(obj, keyName, meta); + chainsDidChange(obj, keyName, m, false); + notifyObservers(obj, keyName); } if (obj[PROPERTY_DID_CHANGE]) { obj[PROPERTY_DID_CHANGE](keyName); } - if (meta && meta.isSourceDestroying()) { - return; - } - - _emberMetalTags.markObjectAsDirty(meta, keyName); - - if (true || false) { - _emberMetalTransaction.assertNotRendered(obj, keyName, meta); - } + _emberMetalTags.markObjectAsDirty(m); } var WILL_SEEN = undefined, DID_SEEN = undefined; // called whenever a property is about to change to clear the cache of any dependent keys (and notify those properties of changes, etc...) function dependentKeysWillChange(obj, depKey, meta) { - if (meta && meta.isSourceDestroying()) { + if (obj.isDestroying) { return; } if (meta && meta.hasDeps(depKey)) { var seen = WILL_SEEN; @@ -8052,11 +8304,11 @@ } } // called whenever a property has just changed to update dependent keys function dependentKeysDidChange(obj, depKey, meta) { - if (meta && meta.isSourceDestroying()) { + if (obj.isDestroying) { return; } if (meta && meta.hasDeps(depKey)) { var seen = DID_SEEN; @@ -8075,11 +8327,11 @@ } function iterDeps(method, obj, depKey, seen, meta) { var possibleDesc = undefined, desc = undefined; - var guid = _emberUtils.guidFor(obj); + var guid = _emberMetalUtils.guidFor(obj); var current = seen[guid]; if (!current) { current = seen[guid] = {}; } @@ -8100,32 +8352,32 @@ if (desc && desc._suspended === obj) { return; } - method(obj, key, meta); + method(obj, key); }); } - function chainsWillChange(obj, keyName, meta) { - var chainWatchers = meta.readableChainWatchers(); - if (chainWatchers) { - chainWatchers.notify(keyName, false, propertyWillChange); + function chainsWillChange(obj, keyName, m) { + var c = m.readableChainWatchers(); + if (c) { + c.notify(keyName, false, propertyWillChange); } } - function chainsDidChange(obj, keyName, meta) { - var chainWatchers = meta.readableChainWatchers(); - if (chainWatchers) { - chainWatchers.notify(keyName, true, propertyDidChange); + function chainsDidChange(obj, keyName, m) { + var c = m.readableChainWatchers(); + if (c) { + c.notify(keyName, true, propertyDidChange); } } - function overrideChains(obj, keyName, meta) { - var chainWatchers = meta.readableChainWatchers(); - if (chainWatchers) { - chainWatchers.revalidate(keyName); + function overrideChains(obj, keyName, m) { + var c = m.readableChainWatchers(); + if (c) { + c.revalidate(keyName); } } /** @method beginPropertyChanges @@ -8171,12 +8423,12 @@ } finally { endPropertyChanges.call(binding); } } - function notifyBeforeObservers(obj, keyName, meta) { - if (meta && meta.isSourceDestroying()) { + function notifyBeforeObservers(obj, keyName) { + if (obj.isDestroying) { return; } var eventName = keyName + ':before'; var listeners = undefined, @@ -8188,12 +8440,12 @@ } else { _emberMetalEvents.sendEvent(obj, eventName, [obj, keyName]); } } - function notifyObservers(obj, keyName, meta) { - if (meta && meta.isSourceDestroying()) { + function notifyObservers(obj, keyName) { + if (obj.isDestroying) { return; } var eventName = keyName + ':change'; var listeners = undefined; @@ -8239,14 +8491,10 @@ /** Gets the value of a property on an object. If the property is computed, the function will be invoked. If the property is not defined but the object implements the `unknownProperty` method then that will be invoked. - ```javascript - Ember.get(obj, "name"); - ``` - If you plan to run on IE8 and older browsers then you should use this method anytime you want to retrieve a property on an object that you don't know for sure is private. (Properties beginning with an underscore '_' are considered private.) @@ -8270,10 +8518,15 @@ _emberMetalDebug.assert('Get must be called with two arguments; an object and a property key', arguments.length === 2); _emberMetalDebug.assert('Cannot call get with \'' + keyName + '\' on an undefined object.', obj !== undefined && obj !== null); _emberMetalDebug.assert('The key provided to get must be a string, you passed ' + keyName, typeof keyName === 'string'); _emberMetalDebug.assert('\'this\' in paths is not supported', !_emberMetalPath_cache.hasThis(keyName)); + // Helpers that operate with 'this' within an #each + if (keyName === '') { + return obj; + } + var value = obj[keyName]; var desc = value !== null && typeof value === 'object' && value.isDescriptor ? value : undefined; var ret = undefined; if (desc === undefined && _emberMetalPath_cache.isPath(keyName)) { @@ -8346,11 +8599,11 @@ return value; } exports.default = get; }); -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) { +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) { 'use strict'; exports.set = set; exports.trySet = trySet; @@ -8358,14 +8611,10 @@ Sets the value of a property on an object, respecting computed properties and notifying observers and other listeners of the change. If the property is not defined but the object implements the `setUnknownProperty` method then that will be invoked as well. - ```javascript - Ember.set(obj, "name", value); - ``` - @method set @for Ember @param {Object} obj The object to modify. @param {String} keyName The property key to set @param {Object} value The value to set @@ -8376,11 +8625,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: ' + _emberUtils.toString(obj) + '.' + keyName + ' = ' + _emberUtils.toString(value), !obj.isDestroyed); + _emberMetalDebug.assert('calling set on destroyed object: ' + _emberMetalUtils.toString(obj) + '.' + keyName + ' = ' + _emberMetalUtils.toString(value), !obj.isDestroyed); if (_emberMetalPath_cache.isPath(keyName)) { return setPath(obj, keyName, value, tolerant); } @@ -8518,11 +8767,11 @@ ret = ret.concat(splice.apply(array, chunk)); } return ret; } }); -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) { +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) { 'use strict'; exports.default = run; function onBegin(current) { @@ -8541,11 +8790,11 @@ return _emberMetalError_handler.setOnerror(handler); } }; var backburner = new _backburner.default(['sync', 'actions', 'destroy'], { - GUID_KEY: _emberUtils.GUID_KEY, + GUID_KEY: _emberMetalUtils.GUID_KEY, sync: { before: _emberMetalProperty_events.beginPropertyChanges, after: _emberMetalProperty_events.endPropertyChanges }, defaultQueue: 'actions', @@ -8785,16 +9034,17 @@ @param {Object} [target] target object to use as the context when invoking a method. @param {String|Function} method The method to invoke. If you pass a string it will be resolved on the target object at the time the scheduled item is invoked allowing you to change the target function. @param {Object} [arguments*] Optional arguments to be passed to the queued method. - @return {void} + @return {*} Timer information for use in cancelling, see `run.cancel`. @public */ run.schedule = function () /* queue, target, method */{ _emberMetalDebug.assert('You have turned on testing mode, which disabled the run-loop\'s autorun. ' + 'You will need to wrap any code with asynchronous side-effects in a run', run.currentRunLoop || !_emberMetalTesting.isTesting()); - backburner.schedule.apply(backburner, arguments); + + return backburner.schedule.apply(backburner, arguments); }; // Used by global test teardown run.hasScheduledTimers = function () { return backburner.hasTimers(); @@ -9244,90 +9494,91 @@ } }); return properties; } }); -enifed('ember-metal/tags', ['exports', 'glimmer-reference', 'ember-metal/meta', 'require', 'ember-metal/is_proxy'], function (exports, _glimmerReference, _emberMetalMeta, _require, _emberMetalIs_proxy) { +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.tagForProperty = tagForProperty; exports.tagFor = tagFor; - exports.markObjectAsDirty = markObjectAsDirty; + var hasGlimmer = _require2.has('glimmer-reference'); + var CONSTANT_TAG = undefined, + CURRENT_TAG = undefined, + DirtyableTag = undefined, + makeTag = undefined, + run = undefined; + var hasViews = function () { return false; }; function setHasViews(fn) { hasViews = fn; } - function makeTag() { - return new _glimmerReference.DirtyableTag(); - } + var markObjectAsDirty = undefined; - function tagForProperty(object, propertyKey, _meta) { - if (_emberMetalIs_proxy.isProxy(object)) { - return tagFor(object, _meta); - } + exports.markObjectAsDirty = markObjectAsDirty; - if (typeof object === 'object' && object) { - var meta = _meta || _emberMetalMeta.meta(object); - var tags = meta.writableTags(); - var tag = tags[propertyKey]; - if (tag) { - return tag; - } - - return tags[propertyKey] = makeTag(); - } else { - return _glimmerReference.CONSTANT_TAG; + function tagFor(object, _meta) { + if (!hasGlimmer) { + throw new Error('Cannot call tagFor without Glimmer'); } - } - function tagFor(object, _meta) { - if (typeof object === 'object' && object) { + if (object && typeof object === 'object') { var meta = _meta || _emberMetalMeta.meta(object); return meta.writableTag(makeTag); } else { - return _glimmerReference.CONSTANT_TAG; + return CONSTANT_TAG; } } - function markObjectAsDirty(meta, propertyKey) { - var objectTag = meta && meta.readableTag(); - - if (objectTag) { - objectTag.dirty(); - } - - var tags = meta && meta.readableTags(); - var propertyTag = tags && tags[propertyKey]; - - if (propertyTag) { - propertyTag.dirty(); - } - - if (objectTag || propertyTag) { - ensureRunloop(); - } - } - - var run = undefined; - function K() {} - function ensureRunloop() { if (!run) { - run = _require.default('ember-metal/run_loop').default; + run = _require2.default('ember-metal/run_loop').default; } if (hasViews() && !run.backburner.currentInstance) { run.schedule('actions', K); } } + + if (hasGlimmer) { + var _require = _require2.default('glimmer-reference'); + + DirtyableTag = _require.DirtyableTag; + CONSTANT_TAG = _require.CONSTANT_TAG; + CURRENT_TAG = _require.CURRENT_TAG; + + makeTag = function () { + return new DirtyableTag(); + }; + + exports.markObjectAsDirty = markObjectAsDirty = function (meta) { + ensureRunloop(); + var tag = meta && meta.readableTag() || CURRENT_TAG; + tag.dirty(); + }; + } else { + exports.markObjectAsDirty = markObjectAsDirty = function () {}; + } }); enifed("ember-metal/testing", ["exports"], function (exports) { "use strict"; exports.isTesting = isTesting; @@ -9340,109 +9591,548 @@ function setTesting(value) { testing = !!value; } }); -enifed('ember-metal/transaction', ['exports', 'ember-metal/meta', 'ember-metal/debug', 'ember-metal/features'], function (exports, _emberMetalMeta, _emberMetalDebug, _emberMetalFeatures) { - 'use strict'; +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 - var runInTransaction = undefined, - didRender = undefined, - assertNotRendered = undefined; + /** + @module ember-metal + */ - var raise = _emberMetalDebug.assert; - if (false) { - raise = function (message, test) { - _emberMetalDebug.deprecate(message, test, { id: 'ember-views.render-double-modify', until: '3.0.0' }); - }; + /** + 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; } - var implication = undefined; - if (false) { - implication = 'will be removed in Ember 3.0.'; - } else if (true) { - implication = 'is no longer supported. See https://github.com/emberjs/ember.js/issues/13948 for more details.'; + /** + 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; } - if (true || false) { - (function () { - var counter = 0; - var inTransaction = false; - var shouldReflush = undefined; + /** + 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()); - exports.default = runInTransaction = function (context, methodName) { - shouldReflush = false; - inTransaction = true; - context[methodName](); - inTransaction = false; - counter++; - return shouldReflush; - }; + var GUID_DESC = { + writable: true, + configurable: true, + enumerable: false, + value: null + }; - exports.didRender = didRender = function (object, key, reference) { - if (!inTransaction) { - return; + 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); } - var meta = _emberMetalMeta.meta(object); - var lastRendered = meta.writableLastRendered(); - lastRendered[key] = counter; + } + } + return ret; + } - _emberMetalDebug.runInDebug(function () { - var lastRenderedFrom = meta.writableLastRenderedFrom(); - lastRenderedFrom[key] = reference; - }); - }; + /** + 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. + */ - exports.assertNotRendered = assertNotRendered = function (object, key, _meta) { - var meta = _meta || _emberMetalMeta.meta(object); - var lastRendered = meta.readableLastRendered(); + function guidFor(obj) { + if (obj && obj[GUID_KEY]) { + return obj[GUID_KEY]; + } - if (lastRendered && lastRendered[key] === counter) { - raise((function () { - var ref = meta.readableLastRenderedFrom(); - var parts = []; - var lastRef = ref[key]; + // special cases where we don't want to add a key to object + if (obj === undefined) { + return '(undefined)'; + } - var label = undefined; + if (obj === null) { + return '(null)'; + } - if (lastRef) { - while (lastRef && lastRef._propertyKey) { - parts.unshift(lastRef._propertyKey); - lastRef = lastRef._parentReference; - } + var ret = undefined; + var type = typeof obj; - label = parts.join(); - } else { - label = 'the same value'; - } + // Don't allow prototype changes to String etc. to change the guidFor + switch (type) { + case 'number': + ret = numberCache[obj]; - return 'You modified ' + parts.join('.') + ' twice on ' + object + ' in a single render. This was unreliable and slow in Ember 1.x and ' + implication; - })(), false); + if (!ret) { + ret = numberCache[obj] = 'nu' + obj; + } - shouldReflush = true; + 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)); }; - })(); - } else { - exports.default = runInTransaction = function () { - throw new Error('Cannot call runInTransaction without Glimmer'); - }; + } - exports.didRender = didRender = function () { - throw new Error('Cannot call didRender without Glimmer'); + return function checkHasSuper() { + return true; }; + })(); - exports.assertNotRendered = assertNotRendered = function () { - throw new Error('Cannot call assertNotRendered without Glimmer'); - }; + exports.checkHasSuper = checkHasSuper; + function ROOT() {} + ROOT.__hasSuper = false; + + function hasSuper(func) { + if (func.__hasSuper === undefined) { + func.__hasSuper = checkHasSuper(func); + } + return func.__hasSuper; } - exports.default = runInTransaction; - exports.didRender = didRender; - exports.assertNotRendered = assertNotRendered; + /** + 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-utils', 'ember-metal/features', 'ember-metal/meta', 'ember-metal/properties'], function (exports, _emberUtils, _emberMetalFeatures, _emberMetalMeta, _emberMetalProperties) { +enifed('ember-metal/watch_key', ['exports', 'ember-metal/features', 'ember-metal/meta', 'ember-metal/properties', 'ember-metal/utils'], function (exports, _emberMetalFeatures, _emberMetalMeta, _emberMetalProperties, _emberMetalUtils) { 'use strict'; exports.watchKey = watchKey; exports.unwatchKey = unwatchKey; @@ -9486,11 +10176,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 = _emberUtils.lookupDescriptor(obj, keyName); + var descriptor = _emberMetalUtils.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; @@ -9519,21 +10209,15 @@ } }; })(); } - function unwatchKey(obj, keyName, _meta) { - var meta = _meta || _emberMetalMeta.meta(obj); - - // do nothing of this object has already been destroyed - if (meta.isSourceDestroyed()) { - return; - } - - var count = meta.peekWatching(keyName); + function unwatchKey(obj, keyName, meta) { + var m = meta || _emberMetalMeta.meta(obj); + var count = m.peekWatching(keyName); if (count === 1) { - meta.writeWatching(keyName, 0); + m.writeWatching(keyName, 0); var possibleDesc = obj[keyName]; var desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined; if (desc && desc.didUnwatch) { @@ -9552,33 +10236,33 @@ // 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 = _emberUtils.lookupDescriptor(obj, keyName); + var maybeMandatoryDescriptor = _emberMetalUtils.lookupDescriptor(obj, keyName); if (maybeMandatoryDescriptor.set && maybeMandatoryDescriptor.set.isMandatorySetter) { if (maybeMandatoryDescriptor.get && maybeMandatoryDescriptor.get.isInheritingGetter) { - var possibleValue = meta.readInheritedValue('values', keyName); + var possibleValue = m.readInheritedValue('values', keyName); if (possibleValue === _emberMetalMeta.UNDEFINED) { delete obj[keyName]; return; } } Object.defineProperty(obj, keyName, { configurable: true, enumerable: Object.prototype.propertyIsEnumerable.call(obj, keyName), writable: true, - value: meta.peekValues(keyName) + value: m.peekValues(keyName) }); - meta.deleteFromValues(keyName); + m.deleteFromValues(keyName); } } } } else if (count > 1) { - meta.writeWatching(keyName, count - 1); + m.writeWatching(keyName, count - 1); } } }); enifed('ember-metal/watch_path', ['exports', 'ember-metal/meta', 'ember-metal/chains'], function (exports, _emberMetalMeta, _emberMetalChains) { 'use strict'; @@ -9620,11 +10304,11 @@ } else if (counter > 1) { m.writeWatching(keyPath, counter - 1); } } }); -enifed('ember-metal/watching', ['exports', 'ember-metal/watch_key', 'ember-metal/watch_path', 'ember-metal/path_cache', 'ember-metal/meta'], function (exports, _emberMetalWatch_key, _emberMetalWatch_path, _emberMetalPath_cache, _emberMetalMeta) { +enifed('ember-metal/watching', ['exports', 'ember-metal/chains', 'ember-metal/watch_key', 'ember-metal/watch_path', 'ember-metal/path_cache', 'ember-metal/meta'], function (exports, _emberMetalChains, _emberMetalWatch_key, _emberMetalWatch_path, _emberMetalPath_cache, _emberMetalMeta) { /** @module ember-metal */ 'use strict'; @@ -9673,10 +10357,12 @@ } else { _emberMetalWatch_path.unwatchPath(obj, _keyPath, m); } } + var NODE_STACK = []; + /** Tears down the meta on an object so that it can be garbage collected. Multiple calls will have no effect. @method destroy @@ -9685,19 +10371,53 @@ @return {void} @private */ function destroy(obj) { - _emberMetalMeta.deleteMeta(obj); + var meta = _emberMetalMeta.peekMeta(obj); + var node = undefined, + nodes = undefined, + key = undefined, + nodeObject = undefined; + + if (meta) { + _emberMetalMeta.deleteMeta(obj); + // remove chainWatchers to remove circular references that would prevent GC + node = meta.readableChains(); + if (node) { + NODE_STACK.push(node); + // process tree + while (NODE_STACK.length > 0) { + node = NODE_STACK.pop(); + // push children + nodes = node._chains; + if (nodes) { + for (key in nodes) { + if (nodes[key] !== undefined) { + NODE_STACK.push(nodes[key]); + } + } + } + // remove chainWatcher in node object + if (node._watching) { + nodeObject = node._object; + if (nodeObject) { + _emberMetalChains.removeChainWatcher(nodeObject, node._key, node); + } + } + } + } + } } }); -enifed('ember-metal/weak_map', ['exports', 'ember-utils', 'ember-metal/meta'], function (exports, _emberUtils, _emberMetalMeta) { +enifed('ember-metal/weak_map', ['exports', 'ember-metal/utils', 'ember-metal/meta'], function (exports, _emberMetalUtils, _emberMetalMeta) { 'use strict'; exports.default = WeakMap; var id = 0; + function UNDEFINED() {} // Returns whether Type(value) is Object according to the terminology in the spec function isObject(value) { return typeof value === 'object' && value !== null || typeof value === 'function'; } @@ -9719,11 +10439,11 @@ function WeakMap(iterable) { if (!(this instanceof WeakMap)) { throw new TypeError('Constructor WeakMap requires \'new\''); } - this._id = _emberUtils.GUID_KEY + id++; + this._id = _emberMetalUtils.GUID_KEY + id++; if (iterable === null || iterable === undefined) { return; } else if (Array.isArray(iterable)) { for (var i = 0; i < iterable.length; i++) { @@ -9750,11 +10470,11 @@ var meta = _emberMetalMeta.peekMeta(obj); if (meta) { var map = meta.readableWeak(); if (map) { - if (map[this._id] === _emberMetalMeta.UNDEFINED) { + if (map[this._id] === UNDEFINED) { return undefined; } return map[this._id]; } @@ -9771,11 +10491,11 @@ if (!isObject(obj)) { throw new TypeError('Invalid value used as weak map key'); } if (value === undefined) { - value = _emberMetalMeta.UNDEFINED; + value = UNDEFINED; } _emberMetalMeta.meta(obj).writableWeak()[this._id] = value; return this; @@ -9822,63 +10542,110 @@ */ WeakMap.prototype.toString = function () { return '[object WeakMap]'; }; }); -enifed('ember-template-compiler/compat', ['exports', 'ember-metal', 'ember-template-compiler/system/precompile', 'ember-template-compiler/system/compile', 'ember-template-compiler/system/compile-options'], function (exports, _emberMetal, _emberTemplateCompilerSystemPrecompile, _emberTemplateCompilerSystemCompile, _emberTemplateCompilerSystemCompileOptions) { +enifed('ember-template-compiler/compat', ['exports', 'ember-metal/core', 'ember-template-compiler/compiler'], function (exports, _emberMetalCore, _emberTemplateCompilerCompiler) { 'use strict'; - var EmberHandlebars = _emberMetal.default.Handlebars = _emberMetal.default.Handlebars || {}; - var EmberHTMLBars = _emberMetal.default.HTMLBars = _emberMetal.default.HTMLBars || {}; + var EmberHandlebars = _emberMetalCore.default.Handlebars = _emberMetalCore.default.Handlebars || {}; + var EmberHTMLBars = _emberMetalCore.default.HTMLBars = _emberMetalCore.default.HTMLBars || {}; - EmberHTMLBars.precompile = EmberHandlebars.precompile = _emberTemplateCompilerSystemPrecompile.default; - EmberHTMLBars.compile = EmberHandlebars.compile = _emberTemplateCompilerSystemCompile.default; - EmberHTMLBars.registerPlugin = _emberTemplateCompilerSystemCompileOptions.registerPlugin; + var _compiler = _emberTemplateCompilerCompiler.default(); + + var precompile = _compiler.precompile; + var compile = _compiler.compile; + var registerPlugin = _compiler.registerPlugin; + + EmberHTMLBars.precompile = EmberHandlebars.precompile = precompile; + EmberHTMLBars.compile = EmberHandlebars.compile = compile; + EmberHTMLBars.registerPlugin = registerPlugin; }); // reexports -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) { +enifed('ember-template-compiler/compat/precompile', ['exports', 'require', 'ember-metal/features'], function (exports, _require, _emberMetalFeatures) { + /** + @module ember + @submodule ember-template-compiler + */ 'use strict'; - // private API used by ember-cli-htmlbars to setup ENV and FEATURES - if (!_emberMetal.default.ENV) { - _emberMetal.default.ENV = _emberEnvironment.ENV; + var compile = undefined, + compileSpec = undefined, + compileOptions = undefined; + + // Note we don't really want to expose this from main file + if (false) { + compileOptions = _require.default('ember-glimmer-template-compiler/system/compile-options').default; + } else { + compileOptions = _require.default('ember-htmlbars-template-compiler/system/compile-options').default; } - if (!_emberMetal.default.FEATURES) { - _emberMetal.default.FEATURES = _emberMetal.FEATURES; + + exports.default = function (string) { + if ((!compile || !compileSpec) && _require.has('htmlbars-compiler/compiler')) { + var Compiler = _require.default('htmlbars-compiler/compiler'); + + compile = Compiler.compile; + compileSpec = Compiler.compileSpec; + } + + if (!compile || !compileSpec) { + throw new Error('Cannot call `precompile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `precompile`.'); + } + + var asObject = arguments[1] === undefined ? true : arguments[1]; + var compileFunc = asObject ? compile : compileSpec; + + return compileFunc(string, compileOptions()); + }; +}); +enifed('ember-template-compiler/compiler', ['exports', 'ember-metal/features', 'require'], function (exports, _emberMetalFeatures, _require) { + 'use strict'; + + exports.default = pickCompiler; + + function pickCompiler() { + var compiler = undefined; + if (false) { + compiler = _require.default('ember-glimmer-template-compiler'); + } else { + compiler = _require.default('ember-htmlbars-template-compiler'); + } + + return compiler; } - if (!_emberMetal.default.VERSION) { - _emberMetal.default.VERSION = _emberVersion.default; - } +}); +enifed('ember-template-compiler/index', ['exports', 'ember-template-compiler/compat', 'ember-template-compiler/system/bootstrap', 'ember-metal', 'ember-template-compiler/system/precompile', 'ember-template-compiler/system/compile', 'ember-template-compiler/system/register-plugin', 'ember-template-compiler/system/compile-options'], function (exports, _emberTemplateCompilerCompat, _emberTemplateCompilerSystemBootstrap, _emberMetal, _emberTemplateCompilerSystemPrecompile, _emberTemplateCompilerSystemCompile, _emberTemplateCompilerSystemRegisterPlugin, _emberTemplateCompilerSystemCompileOptions) { + 'use strict'; exports._Ember = _emberMetal.default; + // Is this still needed exports.precompile = _emberTemplateCompilerSystemPrecompile.default; exports.compile = _emberTemplateCompilerSystemCompile.default; - exports.compileOptions = _emberTemplateCompilerSystemCompileOptions.default; - exports.registerPlugin = _emberTemplateCompilerSystemCompileOptions.registerPlugin; - exports.defaultPlugins = _emberTemplateCompilerPlugins.default; + exports.registerPlugin = _emberTemplateCompilerSystemRegisterPlugin.default; + exports.defaultCompileOptions = _emberTemplateCompilerSystemCompileOptions.default; // used for adding Ember.Handlebars.compile for backwards compat }); // used to bootstrap templates -enifed('ember-template-compiler/plugins/assert-reserved-named-arguments', ['exports', 'ember-metal', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetal, _emberTemplateCompilerSystemCalculateLocationDisplay) { +enifed('ember-template-compiler/plugins/assert-reserved-named-arguments', ['exports', 'ember-metal/debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetalDebug, _emberTemplateCompilerSystemCalculateLocationDisplay) { 'use strict'; exports.default = AssertReservedNamedArguments; function AssertReservedNamedArguments(options) { this.syntax = null; this.options = options; } AssertReservedNamedArguments.prototype.transform = function AssertReservedNamedArguments_transform(ast) { - var moduleName = this.options.meta.moduleName; + var moduleName = this.options.moduleName; this.syntax.traverse(ast, { PathExpression: function (node) { if (node.original[0] === '@') { - _emberMetal.assert(assertMessage(moduleName, node)); + _emberMetalDebug.assert(assertMessage(moduleName, node)); } } }); return ast; @@ -9889,22 +10656,22 @@ var source = _emberTemplateCompilerSystemCalculateLocationDisplay.default(moduleName, node.loc); return '\'' + path + '\' is not a valid path. ' + source; } }); -enifed('ember-template-compiler/plugins/deprecate-render-model', ['exports', 'ember-metal', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetal, _emberTemplateCompilerSystemCalculateLocationDisplay) { +enifed('ember-template-compiler/plugins/deprecate-render-model', ['exports', 'ember-metal/debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetalDebug, _emberTemplateCompilerSystemCalculateLocationDisplay) { 'use strict'; exports.default = DeprecateRenderModel; function DeprecateRenderModel(options) { this.syntax = null; this.options = options; } DeprecateRenderModel.prototype.transform = function DeprecateRenderModel_transform(ast) { - var moduleName = this.options.meta.moduleName; + var moduleName = this.options.moduleName; var walker = new this.syntax.Walker(); walker.visit(ast, function (node) { if (!validate(node)) { return; @@ -9913,11 +10680,11 @@ each(node.params, function (param) { if (param.type !== 'PathExpression') { return; } - _emberMetal.deprecate(deprecationMessage(moduleName, node, param), false, { + _emberMetalDebug.deprecate(deprecationMessage(moduleName, node, param), false, { id: 'ember-template-compiler.deprecate-render-model', until: '3.0.0', url: 'http://emberjs.com/deprecations/v2.x#toc_model-param-in-code-render-code-helper' }); }); @@ -9944,90 +10711,15 @@ var preferred = '{{' + componentName + ' model=' + modelName + '}}'; return 'Please refactor `' + original + '` to a component and invoke via' + (' `' + preferred + '`. ' + sourceInformation); } }); -enifed('ember-template-compiler/plugins/index', ['exports', 'ember-template-compiler/plugins/transform-old-binding-syntax', 'ember-template-compiler/plugins/transform-item-class', 'ember-template-compiler/plugins/transform-angle-bracket-components', 'ember-template-compiler/plugins/transform-input-on-to-onEvent', 'ember-template-compiler/plugins/transform-top-level-components', 'ember-template-compiler/plugins/transform-inline-link-to', 'ember-template-compiler/plugins/transform-old-class-binding-syntax', 'ember-template-compiler/plugins/deprecate-render-model', 'ember-template-compiler/plugins/assert-reserved-named-arguments', 'ember-template-compiler/plugins/transform-action-syntax', 'ember-template-compiler/plugins/transform-input-type-syntax', 'ember-template-compiler/plugins/transform-attrs-into-args', 'ember-template-compiler/plugins/transform-each-in-into-each', 'ember-template-compiler/plugins/transform-has-block-syntax'], function (exports, _emberTemplateCompilerPluginsTransformOldBindingSyntax, _emberTemplateCompilerPluginsTransformItemClass, _emberTemplateCompilerPluginsTransformAngleBracketComponents, _emberTemplateCompilerPluginsTransformInputOnToOnEvent, _emberTemplateCompilerPluginsTransformTopLevelComponents, _emberTemplateCompilerPluginsTransformInlineLinkTo, _emberTemplateCompilerPluginsTransformOldClassBindingSyntax, _emberTemplateCompilerPluginsDeprecateRenderModel, _emberTemplateCompilerPluginsAssertReservedNamedArguments, _emberTemplateCompilerPluginsTransformActionSyntax, _emberTemplateCompilerPluginsTransformInputTypeSyntax, _emberTemplateCompilerPluginsTransformAttrsIntoArgs, _emberTemplateCompilerPluginsTransformEachInIntoEach, _emberTemplateCompilerPluginsTransformHasBlockSyntax) { +enifed('ember-template-compiler/plugins/index', ['exports', 'ember-template-compiler/plugins/transform-old-binding-syntax', 'ember-template-compiler/plugins/transform-item-class', 'ember-template-compiler/plugins/transform-angle-bracket-components', 'ember-template-compiler/plugins/transform-input-on-to-onEvent', 'ember-template-compiler/plugins/transform-top-level-components', 'ember-template-compiler/plugins/transform-inline-link-to', 'ember-template-compiler/plugins/transform-old-class-binding-syntax', 'ember-template-compiler/plugins/deprecate-render-model', 'ember-template-compiler/plugins/assert-reserved-named-arguments'], function (exports, _emberTemplateCompilerPluginsTransformOldBindingSyntax, _emberTemplateCompilerPluginsTransformItemClass, _emberTemplateCompilerPluginsTransformAngleBracketComponents, _emberTemplateCompilerPluginsTransformInputOnToOnEvent, _emberTemplateCompilerPluginsTransformTopLevelComponents, _emberTemplateCompilerPluginsTransformInlineLinkTo, _emberTemplateCompilerPluginsTransformOldClassBindingSyntax, _emberTemplateCompilerPluginsDeprecateRenderModel, _emberTemplateCompilerPluginsAssertReservedNamedArguments) { 'use strict'; - exports.default = Object.freeze([_emberTemplateCompilerPluginsTransformOldBindingSyntax.default, _emberTemplateCompilerPluginsTransformItemClass.default, _emberTemplateCompilerPluginsTransformAngleBracketComponents.default, _emberTemplateCompilerPluginsTransformInputOnToOnEvent.default, _emberTemplateCompilerPluginsTransformTopLevelComponents.default, _emberTemplateCompilerPluginsTransformInlineLinkTo.default, _emberTemplateCompilerPluginsTransformOldClassBindingSyntax.default, _emberTemplateCompilerPluginsDeprecateRenderModel.default, _emberTemplateCompilerPluginsAssertReservedNamedArguments.default, _emberTemplateCompilerPluginsTransformActionSyntax.default, _emberTemplateCompilerPluginsTransformInputTypeSyntax.default, _emberTemplateCompilerPluginsTransformAttrsIntoArgs.default, _emberTemplateCompilerPluginsTransformEachInIntoEach.default, _emberTemplateCompilerPluginsTransformHasBlockSyntax.default]); + exports.default = Object.freeze([_emberTemplateCompilerPluginsTransformOldBindingSyntax.default, _emberTemplateCompilerPluginsTransformItemClass.default, _emberTemplateCompilerPluginsTransformAngleBracketComponents.default, _emberTemplateCompilerPluginsTransformInputOnToOnEvent.default, _emberTemplateCompilerPluginsTransformTopLevelComponents.default, _emberTemplateCompilerPluginsTransformInlineLinkTo.default, _emberTemplateCompilerPluginsTransformOldClassBindingSyntax.default, _emberTemplateCompilerPluginsDeprecateRenderModel.default, _emberTemplateCompilerPluginsAssertReservedNamedArguments.default]); }); -enifed('ember-template-compiler/plugins/transform-action-syntax', ['exports'], function (exports) { - /** - @module ember - @submodule ember-glimmer - */ - - /** - A Glimmer2 AST transformation that replaces all instances of - - ```handlebars - <button {{action 'foo'}}> - <button onblur={{action 'foo'}}> - <button onblur={{action (action 'foo') 'bar'}}> - ``` - - with - - ```handlebars - <button {{action this 'foo'}}> - <button onblur={{action this 'foo'}}> - <button onblur={{action this (action this 'foo') 'bar'}}> - ``` - - @private - @class TransformActionSyntax - */ - - 'use strict'; - - exports.default = TransformActionSyntax; - - function TransformActionSyntax() { - // set later within Glimmer2 to the syntax package - this.syntax = null; - } - - /** - @private - @method transform - @param {AST} ast The AST to be transformed. - */ - TransformActionSyntax.prototype.transform = function TransformActionSyntax_transform(ast) { - var _syntax = this.syntax; - var traverse = _syntax.traverse; - var b = _syntax.builders; - - traverse(ast, { - ElementModifierStatement: function (node) { - if (isAction(node)) { - insertThisAsFirstParam(node, b); - } - }, - MustacheStatement: function (node) { - if (isAction(node)) { - insertThisAsFirstParam(node, b); - } - }, - SubExpression: function (node) { - if (isAction(node)) { - insertThisAsFirstParam(node, b); - } - } - }); - - return ast; - }; - - function isAction(node) { - return node.path.original === 'action'; - } - - function insertThisAsFirstParam(node, builders) { - node.params.unshift(builders.path('this')); - } -}); enifed('ember-template-compiler/plugins/transform-angle-bracket-components', ['exports'], function (exports) { 'use strict'; exports.default = TransformAngleBracketComponents; @@ -10057,205 +10749,10 @@ function validate(node) { return node.type === 'ComponentNode'; } }); -enifed('ember-template-compiler/plugins/transform-attrs-into-args', ['exports'], function (exports) { - /** - @module ember - @submodule ember-glimmer - */ - - /** - A Glimmer2 AST transformation that replaces all instances of - - ```handlebars - {{attrs.foo.bar}} - ``` - - to - - ```handlebars - {{@foo.bar}} - ``` - - as well as `{{#if attrs.foo}}`, `{{deeply (nested attrs.foobar.baz)}}` etc - - @private - @class TransformAttrsToProps - */ - - 'use strict'; - - exports.default = TransformAttrsToProps; - - function TransformAttrsToProps() { - // set later within Glimmer2 to the syntax package - this.syntax = null; - } - - function isAttrs(node) { - if (node.parts[0] === 'attrs') { - return true; - } - - var _this = node.parts[0]; - var attrs = node.parts[1]; - - if (_this === null && attrs === 'attrs') { - node.parts.shift(); - node.original = node.original.slice(5); - return true; - } - } - - /** - @private - @method transform - @param {AST} ast The AST to be transformed. - */ - TransformAttrsToProps.prototype.transform = function TransformAttrsToProps_transform(ast) { - var _syntax = this.syntax; - var traverse = _syntax.traverse; - var b = _syntax.builders; - - traverse(ast, { - PathExpression: function (node) { - if (isAttrs(node)) { - var path = b.path(node.original.substr(6)); - path.original = '@' + path.original; - path.data = true; - return path; - } - } - }); - - return ast; - }; -}); -enifed('ember-template-compiler/plugins/transform-each-in-into-each', ['exports'], function (exports) { - /** - @module ember - @submodule ember-glimmer - */ - - /** - A Glimmer2 AST transformation that replaces all instances of - - ```handlebars - {{#each-in iterableThing as |key value|}} - ``` - - with - - ```handlebars - {{#each (-each-in iterableThing) as |key value|}} - ``` - - @private - @class TransformHasBlockSyntax - */ - - 'use strict'; - - exports.default = TransformEachInIntoEach; - - function TransformEachInIntoEach() { - // set later within Glimmer2 to the syntax package - this.syntax = null; - } - - /** - @private - @method transform - @param {AST} ast The AST to be transformed. - */ - TransformEachInIntoEach.prototype.transform = function TransformEachInIntoEach_transform(ast) { - var _syntax = this.syntax; - var traverse = _syntax.traverse; - var b = _syntax.builders; - - traverse(ast, { - BlockStatement: function (node) { - if (node.path.original === 'each-in') { - node.params[0] = b.sexpr(b.path('-each-in'), [node.params[0]]); - return b.block(b.path('each'), node.params, node.hash, node.program, node.inverse, node.loc); - } - } - }); - - return ast; - }; -}); -enifed('ember-template-compiler/plugins/transform-has-block-syntax', ['exports'], function (exports) { - /** - @module ember - @submodule ember-glimmer - */ - - /** - A Glimmer2 AST transformation that replaces all instances of - - ```handlebars - {{hasBlock}} - ``` - - with - - ```handlebars - {{has-block}} - ``` - - @private - @class TransformHasBlockSyntax - */ - - 'use strict'; - - exports.default = TransformHasBlockSyntax; - - function TransformHasBlockSyntax() { - // set later within Glimmer2 to the syntax package - this.syntax = null; - } - - var TRANSFORMATIONS = { - hasBlock: 'has-block', - hasBlockParams: 'has-block-params' - }; - - /** - @private - @method transform - @param {AST} ast The AST to be transformed. - */ - TransformHasBlockSyntax.prototype.transform = function TransformHasBlockSyntax_transform(ast) { - var _syntax = this.syntax; - var traverse = _syntax.traverse; - var b = _syntax.builders; - - traverse(ast, { - PathExpression: function (node) { - if (TRANSFORMATIONS[node.original]) { - return b.sexpr(b.path(TRANSFORMATIONS[node.original])); - } - }, - MustacheStatement: function (node) { - if (TRANSFORMATIONS[node.path.original]) { - return b.mustache(b.path(TRANSFORMATIONS[node.path.original]), node.params, node.hash, null, node.loc); - } - }, - SubExpression: function (node) { - if (TRANSFORMATIONS[node.path.original]) { - return b.sexpr(b.path(TRANSFORMATIONS[node.path.original]), node.params, node.hash); - } - } - }); - - return ast; - }; -}); enifed('ember-template-compiler/plugins/transform-inline-link-to', ['exports'], function (exports) { 'use strict'; exports.default = TransformInlineLinkTo; @@ -10301,11 +10798,11 @@ }); return ast; }; }); -enifed('ember-template-compiler/plugins/transform-input-on-to-onEvent', ['exports', 'ember-metal', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetal, _emberTemplateCompilerSystemCalculateLocationDisplay) { +enifed('ember-template-compiler/plugins/transform-input-on-to-onEvent', ['exports', 'ember-metal/debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetalDebug, _emberTemplateCompilerSystemCalculateLocationDisplay) { 'use strict'; exports.default = TransformInputOnToOnEvent; /** @@ -10347,32 +10844,32 @@ */ TransformInputOnToOnEvent.prototype.transform = function TransformInputOnToOnEvent_transform(ast) { var pluginContext = this; var b = pluginContext.syntax.builders; var walker = new pluginContext.syntax.Walker(); - var moduleName = pluginContext.options.meta.moduleName; + var moduleName = pluginContext.options.moduleName; walker.visit(ast, function (node) { if (pluginContext.validate(node)) { var action = hashPairForKey(node.hash, 'action'); var on = hashPairForKey(node.hash, 'on'); var onEvent = hashPairForKey(node.hash, 'onEvent'); var normalizedOn = on || onEvent; var moduleInfo = _emberTemplateCompilerSystemCalculateLocationDisplay.default(moduleName, node.loc); if (normalizedOn && normalizedOn.value.type !== 'StringLiteral') { - _emberMetal.deprecate('Using a dynamic value for \'#{normalizedOn.key}=\' with the \'{{input}}\' helper ' + moduleInfo + 'is deprecated.', false, { id: 'ember-template-compiler.transform-input-on-to-onEvent.dynamic-value', until: '3.0.0' }); + _emberMetalDebug.deprecate('Using a dynamic value for \'#{normalizedOn.key}=\' with the \'{{input}}\' helper ' + moduleInfo + 'is deprecated.', false, { id: 'ember-template-compiler.transform-input-on-to-onEvent.dynamic-value', until: '3.0.0' }); normalizedOn.key = 'onEvent'; return; // exit early, as we cannot transform further } removeFromHash(node.hash, normalizedOn); removeFromHash(node.hash, action); if (!action) { - _emberMetal.deprecate('Using \'{{input ' + normalizedOn.key + '="' + normalizedOn.value.value + '" ...}}\' without specifying an action ' + moduleInfo + 'will do nothing.', false, { id: 'ember-template-compiler.transform-input-on-to-onEvent.no-action', until: '3.0.0' }); + _emberMetalDebug.deprecate('Using \'{{input ' + normalizedOn.key + '="' + normalizedOn.value.value + '" ...}}\' without specifying an action ' + moduleInfo + 'will do nothing.', false, { id: 'ember-template-compiler.transform-input-on-to-onEvent.no-action', until: '3.0.0' }); return; // exit early, if no action was available there is nothing to do } var specifiedOn = normalizedOn ? normalizedOn.key + '="' + normalizedOn.value.value + '" ' : ''; @@ -10382,11 +10879,11 @@ normalizedOn.value.value = 'key-press'; } var expected = (normalizedOn ? normalizedOn.value.value : 'enter') + '="' + action.value.original + '"'; - _emberMetal.deprecate('Using \'{{input ' + specifiedOn + 'action="' + action.value.original + '"}}\' ' + moduleInfo + 'is deprecated. Please use \'{{input ' + expected + '}}\' instead.', false, { id: 'ember-template-compiler.transform-input-on-to-onEvent.normalized-on', until: '3.0.0' }); + _emberMetalDebug.deprecate('Using \'{{input ' + specifiedOn + 'action="' + action.value.original + '"}}\' ' + moduleInfo + 'is deprecated. Please use \'{{input ' + expected + '}}\' instead.', false, { id: 'ember-template-compiler.transform-input-on-to-onEvent.normalized-on', until: '3.0.0' }); if (!normalizedOn) { normalizedOn = b.pair('onEvent', b.string('enter')); } node.hash.pairs.push(b.pair(normalizedOn.value.value, action.value)); @@ -10422,85 +10919,10 @@ } hash.pairs = newPairs; } }); -enifed('ember-template-compiler/plugins/transform-input-type-syntax', ['exports'], function (exports) { - /** - @module ember - @submodule ember-glimmer - */ - - /** - A Glimmer2 AST transformation that replaces all instances of - - ```handlebars - {{input type=boundType}} - ``` - - with - - ```handlebars - {{input (-input-type boundType) type=boundType}} - ``` - - Note that the type parameters is not removed as the -input-type helpers - is only used to select the component class. The component still needs - the type parameter to function. - - @private - @class TransformInputTypeSyntax - */ - - 'use strict'; - - exports.default = TransformInputTypeSyntax; - - function TransformInputTypeSyntax() { - // set later within Glimmer2 to the syntax package - this.syntax = null; - } - - /** - @private - @method transform - @param {AST} ast The AST to be transformed. - */ - TransformInputTypeSyntax.prototype.transform = function TransformInputTypeSyntax_transform(ast) { - var _syntax = this.syntax; - var traverse = _syntax.traverse; - var b = _syntax.builders; - - traverse(ast, { - MustacheStatement: function (node) { - if (isInput(node)) { - insertTypeHelperParameter(node, b); - } - } - }); - - return ast; - }; - - function isInput(node) { - return node.path.original === 'input'; - } - - function insertTypeHelperParameter(node, builders) { - var pairs = node.hash.pairs; - var pair = null; - for (var i = 0; i < pairs.length; i++) { - if (pairs[i].key === 'type') { - pair = pairs[i]; - break; - } - } - if (pair && pair.value.type !== 'StringLiteral') { - node.params.unshift(builders.sexpr('-input-type', [builders.path(pair.value.original, pair.loc)], null, pair.loc)); - } - } -}); enifed('ember-template-compiler/plugins/transform-item-class', ['exports'], function (exports) { 'use strict'; exports.default = TransformItemClass; @@ -10545,22 +10967,22 @@ function validate(node) { return (node.type === 'BlockStatement' || node.type === 'MustacheStatement') && node.path.original === 'collection'; } }); -enifed('ember-template-compiler/plugins/transform-old-binding-syntax', ['exports', 'ember-metal', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetal, _emberTemplateCompilerSystemCalculateLocationDisplay) { +enifed('ember-template-compiler/plugins/transform-old-binding-syntax', ['exports', 'ember-metal/debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetalDebug, _emberTemplateCompilerSystemCalculateLocationDisplay) { 'use strict'; exports.default = TransformOldBindingSyntax; function TransformOldBindingSyntax(options) { this.syntax = null; this.options = options; } TransformOldBindingSyntax.prototype.transform = function TransformOldBindingSyntax_transform(ast) { - var moduleName = this.options.meta.moduleName; + var moduleName = this.options.moduleName; var b = this.syntax.builders; var walker = new this.syntax.Walker(); walker.visit(ast, function (node) { if (!validate(node)) { @@ -10576,16 +10998,16 @@ if (key === 'classBinding') { return; } - _emberMetal.assert('Setting \'attributeBindings\' via template helpers is not allowed ' + sourceInformation, key !== 'attributeBindings'); + _emberMetalDebug.assert('Setting \'attributeBindings\' via template helpers is not allowed ' + sourceInformation, key !== 'attributeBindings'); if (key.substr(-7) === 'Binding') { var newKey = key.slice(0, -7); - _emberMetal.deprecate('You\'re using legacy binding syntax: ' + key + '=' + exprToString(value) + ' ' + sourceInformation + '. Please replace with ' + newKey + '=' + value.original, false, { id: 'ember-template-compiler.transform-old-binding-syntax', until: '3.0.0' }); + _emberMetalDebug.deprecate('You\'re using legacy binding syntax: ' + key + '=' + exprToString(value) + ' ' + sourceInformation + '. Please replace with ' + newKey + '=' + value.original, false, { id: 'ember-template-compiler.transform-old-binding-syntax', until: '3.0.0' }); pair.key = newKey; if (value.type === 'StringLiteral') { pair.value = b.path(value.original); } @@ -10712,11 +11134,11 @@ if (inactiveClass !== undefined) { hash.pairs.push(b.pair('inactiveClass', b.string(inactiveClass))); } - params.push(b.sexpr(b.path('-normalize-class'), sexprParams, hash)); + params.push(b.sexpr(b.string('-normalize-class'), sexprParams, hash)); } if (inactiveClass || inactiveClass === '') { params.push(b.string(inactiveClass)); } @@ -10811,19 +11233,24 @@ if (lastComponentNode.type === 'ComponentNode') { componentCallback(lastComponentNode); } } }); -enifed('ember-template-compiler/system/bootstrap', ['exports', 'ember-metal', 'ember-template-compiler/system/compile'], function (exports, _emberMetal, _emberTemplateCompilerSystemCompile) { +enifed('ember-template-compiler/system/bootstrap', ['exports', 'ember-metal/error', 'ember-template-compiler', 'ember-templates/template_registry'], function (exports, _emberMetalError, _emberTemplateCompiler, _emberTemplatesTemplate_registry) { /** @module ember @submodule ember-templates */ 'use strict'; /** + @module ember + @submodule ember-templates + */ + + /** Find templates stored in the head tag as script tags and make them available to `Ember.CoreView` in the global `Ember.TEMPLATES` object. Script tags with `text/x-handlebars` will be compiled with Ember's template compiler and are suitable for use as a view's template. @@ -10832,19 +11259,13 @@ @method bootstrap @for Ember.HTMLBars @static @param ctx */ - function bootstrap(_ref) { - var context = _ref.context; - var hasTemplate = _ref.hasTemplate; - var setTemplate = _ref.setTemplate; + function bootstrap() { + var context = arguments.length <= 0 || arguments[0] === undefined ? document : arguments[0]; - if (!context) { - context = document; - } - var selector = 'script[type="text/x-handlebars"]'; var elements = context.querySelectorAll(selector); for (var i = 0; i < elements.length; i++) { @@ -10854,21 +11275,21 @@ // First look for data-template-name attribute, then fall back to its // id if no name is found. var templateName = script.getAttribute('data-template-name') || script.getAttribute('id') || 'application'; var template = undefined; - template = _emberTemplateCompilerSystemCompile.default(script.innerHTML, { + template = _emberTemplateCompiler.compile(script.innerHTML, { moduleName: templateName }); // Check if template of same name already exists. - if (hasTemplate(templateName)) { - throw new _emberMetal.Error('Template named "' + templateName + '" already exists.'); + if (_emberTemplatesTemplate_registry.has(templateName)) { + throw new _emberMetalError.default('Template named "' + templateName + '" already exists.'); } // For templates which have a name, we save them and then remove them from the DOM. - setTemplate(templateName, template); + _emberTemplatesTemplate_registry.set(templateName, template); // Remove script tag from DOM. script.parentNode.removeChild(script); } } @@ -10906,72 +11327,25 @@ } return moduleInfo; } }); -enifed('ember-template-compiler/system/compile-options', ['exports', 'ember-utils', 'ember-template-compiler/plugins'], function (exports, _emberUtils, _emberTemplateCompilerPlugins) { +enifed('ember-template-compiler/system/compile-options', ['exports', 'ember-template-compiler/compiler'], function (exports, _emberTemplateCompilerCompiler) { 'use strict'; - exports.default = compileOptions; - exports.registerPlugin = registerPlugin; - exports.removePlugin = removePlugin; + var _compiler = _emberTemplateCompilerCompiler.default(); - var USER_PLUGINS = []; - - function compileOptions(_options) { - var options = _emberUtils.assign({ meta: {} }, _options); - - // move `moduleName` into `meta` property - if (options.moduleName) { - var meta = options.meta; - meta.moduleName = options.moduleName; - } - - if (!options.plugins) { - options.plugins = { ast: [].concat(USER_PLUGINS, _emberTemplateCompilerPlugins.default) }; - } else { - var potententialPugins = [].concat(USER_PLUGINS, _emberTemplateCompilerPlugins.default); - var pluginsToAdd = potententialPugins.filter(function (plugin) { - return options.plugins.ast.indexOf(plugin) === -1; - }); - options.plugins.ast = options.plugins.ast.slice().concat(pluginsToAdd); - } - - return options; - } - - function registerPlugin(type, PluginClass) { - if (type !== 'ast') { - throw new Error('Attempting to register ' + PluginClass + ' as "' + type + '" which is not a valid Glimmer plugin type.'); - } - - if (USER_PLUGINS.indexOf(PluginClass) === -1) { - USER_PLUGINS = [PluginClass].concat(USER_PLUGINS); - } - } - - function removePlugin(type, PluginClass) { - if (type !== 'ast') { - throw new Error('Attempting to unregister ' + PluginClass + ' as "' + type + '" which is not a valid Glimmer plugin type.'); - } - - USER_PLUGINS = USER_PLUGINS.filter(function (plugin) { - return plugin !== PluginClass; - }); - } + var defaultCompileOptions = _compiler.defaultCompileOptions; + exports.default = defaultCompileOptions; }); -enifed('ember-template-compiler/system/compile', ['exports', 'require', 'ember-template-compiler/system/precompile'], function (exports, _require, _emberTemplateCompilerSystemPrecompile) { +enifed('ember-template-compiler/system/compile', ['exports', 'ember-template-compiler/compiler', 'ember-template-compiler/system/compile-options', 'ember-metal/assign'], function (exports, _emberTemplateCompilerCompiler, _emberTemplateCompilerSystemCompileOptions, _emberMetalAssign) { /** @module ember @submodule ember-template-compiler */ 'use strict'; - exports.default = compile; - - var template = undefined; - /** Uses HTMLBars `compile` function to process a string into a compiled template. This is not present in production builds. @@ -10979,36 +11353,26 @@ @method compile @param {String} templateString This is the string to be compiled by HTMLBars. @param {Object} options This is an options hash to augment the compiler options. */ - function compile(templateString, options) { - if (!template && _require.has('ember-glimmer')) { - template = _require.default('ember-glimmer').template; - } + exports.default = function (templateString, options) { + var _compiler = _emberTemplateCompilerCompiler.default(); - if (!template) { - throw new Error('Cannot call `compile` with only the template compiler loaded. Please load `ember.debug.js` or `ember.prod.js` prior to calling `compile`.'); - } + var compile = _compiler.compile; - var precompiledTemplateString = _emberTemplateCompilerSystemPrecompile.default(templateString, options); - var templateJS = new Function('return ' + precompiledTemplateString)(); - return template(templateJS); - } + return compile(templateString, _emberMetalAssign.default({}, _emberTemplateCompilerSystemCompileOptions.default(), options)); + }; }); -enifed('ember-template-compiler/system/precompile', ['exports', 'ember-template-compiler/system/compile-options', 'require'], function (exports, _emberTemplateCompilerSystemCompileOptions, _require) { +enifed('ember-template-compiler/system/precompile', ['exports', 'ember-metal/assign', 'ember-template-compiler/compiler', 'ember-template-compiler/system/compile-options'], function (exports, _emberMetalAssign, _emberTemplateCompilerCompiler, _emberTemplateCompilerSystemCompileOptions) { /** @module ember @submodule ember-template-compiler */ 'use strict'; - exports.default = precompile; - - var glimmerPrecompile = undefined; - /** Uses HTMLBars `compile` function to process a string into a compiled template string. The returned string must be passed through `Ember.HTMLBars.template`. This is not present in production builds. @@ -11016,13812 +11380,3925 @@ @private @method precompile @param {String} templateString This is the string to be compiled by HTMLBars. */ - function precompile(templateString, options) { - if (!glimmerPrecompile && _require.has('glimmer-compiler')) { - glimmerPrecompile = _require.default('glimmer-compiler').precompile; - } + exports.default = function (templateString, options) { + var _compiler = _emberTemplateCompilerCompiler.default(); - if (!glimmerPrecompile) { - throw new Error('Cannot call `compile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compile`.'); - } + var precompile = _compiler.precompile; - return glimmerPrecompile(templateString, _emberTemplateCompilerSystemCompileOptions.default(options)); - } + return precompile(templateString, _emberMetalAssign.default({}, _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"; +enifed('ember-template-compiler/system/register-plugin', ['exports', 'ember-template-compiler/compiler'], function (exports, _emberTemplateCompilerCompiler) { + 'use strict'; - exports.default = applyStr; + var _compiler = _emberTemplateCompilerCompiler.default(); - 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); - } - } + var registerPlugin = _compiler.registerPlugin; + exports.default = registerPlugin; }); -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"; +enifed('ember-templates/compat', ['exports', 'ember-metal/core', 'ember-templates/template', 'ember-templates/string', 'ember-runtime/system/string', 'ember-metal/features', 'ember-templates/make-bound-helper'], function (exports, _emberMetalCore, _emberTemplatesTemplate, _emberTemplatesString, _emberRuntimeSystemString, _emberMetalFeatures, _emberTemplatesMakeBoundHelper) { + 'use strict'; - exports.default = assign; + var EmberHandlebars = _emberMetalCore.default.Handlebars = _emberMetalCore.default.Handlebars || {}; + exports.EmberHandlebars = EmberHandlebars; + var EmberHTMLBars = _emberMetalCore.default.HTMLBars = _emberMetalCore.default.HTMLBars || {}; + exports.EmberHTMLBars = EmberHTMLBars; + var EmberHandleBarsUtils = EmberHandlebars.Utils = EmberHandlebars.Utils || {}; - function assign(original) { - for (var i = 1; i < arguments.length; i++) { - var arg = arguments[i]; - if (!arg) { - continue; - } + exports.EmberHandleBarsUtils = EmberHandleBarsUtils; + Object.defineProperty(EmberHandlebars, 'SafeString', { + get: _emberTemplatesString.getSafeString + }); - var updates = Object.keys(arg); + EmberHTMLBars.template = EmberHandlebars.template = _emberTemplatesTemplate.default; + EmberHandleBarsUtils.escapeExpression = _emberTemplatesString.escapeExpression; + _emberRuntimeSystemString.default.htmlSafe = _emberTemplatesString.htmlSafe; - for (var _i = 0; _i < updates.length; _i++) { - var prop = updates[_i]; - original[prop] = arg[prop]; - } - } - - return original; + if (true) { + _emberRuntimeSystemString.default.isHTMLSafe = _emberTemplatesString.isHTMLSafe; } + EmberHTMLBars.makeBoundHelper = _emberTemplatesMakeBoundHelper.default; }); -enifed('ember-utils/dictionary', ['exports', 'ember-utils/empty-object'], function (exports, _emberUtilsEmptyObject) { +// reexports +enifed('ember-templates/component', ['exports', 'ember-metal/features', 'require'], function (exports, _emberMetalFeatures, _require) { '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(); + exports.default = (function () { + if (false) { + return _require.default('ember-glimmer/component').default; } else { - dict = Object.create(parent); + return _require.default('ember-htmlbars/component').default; } - 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. +enifed('ember-templates/components/checkbox', ['exports', 'ember-metal/features', 'require'], function (exports, _emberMetalFeatures, _require) { + 'use strict'; - "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 + exports.default = (function () { + if (false) { + return _require.default('ember-glimmer/components/checkbox').default; + } else { + return _require.default('ember-htmlbars/components/checkbox').default; } - }); - - function EmptyObject() {} - EmptyObject.prototype = proto; - exports.default = EmptyObject; + })(); }); -enifed('ember-utils/guid', ['exports', 'ember-utils/intern'], function (exports, _emberUtilsIntern) { +enifed('ember-templates/components/link-to', ['exports', 'ember-metal/features', 'require'], function (exports, _emberMetalFeatures, _require) { '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; + exports.default = (function () { + if (false) { + return _require.default('ember-glimmer/components/link-to').default; + } else { + return _require.default('ember-htmlbars/components/link-to').default; } + })(); +}); +enifed('ember-templates/components/text_area', ['exports', 'ember-metal/features', 'require'], function (exports, _emberMetalFeatures, _require) { + 'use strict'; - 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); - } - } + exports.default = (function () { + if (false) { + return _require.default('ember-glimmer/components/text_area').default; + } else { + return _require.default('ember-htmlbars/components/text_area').default; } - return ret; - } + })(); +}); +enifed('ember-templates/components/text_field', ['exports', 'ember-metal/features', 'require'], function (exports, _emberMetalFeatures, _require) { + 'use strict'; - /** - 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]; + exports.default = (function () { + if (false) { + return _require.default('ember-glimmer/components/text_field').default; + } else { + return _require.default('ember-htmlbars/components/text_field').default; } + })(); +}); +enifed('ember-templates/helper', ['exports', 'ember-metal/features', 'require'], function (exports, _emberMetalFeatures, _require) { + 'use strict'; - // special cases where we don't want to add a key to object - if (obj === undefined) { - return '(undefined)'; + exports.default = (function () { + if (false) { + return _require.default('ember-glimmer/helper').default; + } else { + return _require.default('ember-htmlbars/helper').default; } + })(); - if (obj === null) { - return '(null)'; + var helper = (function () { + if (false) { + return _require.default('ember-glimmer/helper').helper; + } else { + return _require.default('ember-htmlbars/helper').helper; } - - 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; - } - } + })(); + exports.helper = helper; }); -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). - */ +enifed('ember-templates/index', ['exports', 'ember-metal/core', 'ember-templates/template_registry', 'ember-templates/renderer', 'ember-templates/component', 'ember-templates/helper', 'ember-templates/components/checkbox', 'ember-templates/components/text_field', 'ember-templates/components/text_area', 'ember-templates/components/link-to', 'ember-templates/string', 'ember-environment', 'ember-templates/compat'], function (exports, _emberMetalCore, _emberTemplatesTemplate_registry, _emberTemplatesRenderer, _emberTemplatesComponent, _emberTemplatesHelper, _emberTemplatesComponentsCheckbox, _emberTemplatesComponentsText_field, _emberTemplatesComponentsText_area, _emberTemplatesComponentsLinkTo, _emberTemplatesString, _emberEnvironment, _emberTemplatesCompat) { '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'; + _emberMetalCore.default._Renderer = _emberTemplatesRenderer.Renderer; + _emberMetalCore.default.Component = _emberTemplatesComponent.default; + _emberTemplatesHelper.default.helper = _emberTemplatesHelper.helper; + _emberMetalCore.default.Helper = _emberTemplatesHelper.default; + _emberMetalCore.default.Checkbox = _emberTemplatesComponentsCheckbox.default; + _emberMetalCore.default.TextField = _emberTemplatesComponentsText_field.default; + _emberMetalCore.default.TextArea = _emberTemplatesComponentsText_area.default; + _emberMetalCore.default.LinkComponent = _emberTemplatesComponentsLinkTo.default; - exports.default = inspect; - var objectToString = Object.prototype.toString; + if (_emberEnvironment.ENV.EXTEND_PROTOTYPES.String) { + String.prototype.htmlSafe = function () { + return _emberTemplatesString.htmlSafe(this); + }; + } /** - Convenience method to inspect an object. This method will attempt to - convert the object into a useful string description. + Global hash of shared templates. This will automatically be populated + by the build tools so that you can store your Handlebars templates in + separate files that get loaded into JavaScript at buildtime. - It is a pretty simple implementation. If you want something more robust, - use something like JSDump: https://github.com/NV/jsDump - - @method inspect + @property TEMPLATES @for Ember - @param {Object} obj The object you want to inspect. - @return {String} A description of the object - @since 1.4.0 + @type Object @private */ + Object.defineProperty(_emberMetalCore.default, 'TEMPLATES', { + get: _emberTemplatesTemplate_registry.getTemplates, + set: _emberTemplatesTemplate_registry.setTemplates, + configurable: false, + enumerable: false + }); - 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(', ') + '}'; - } + exports.default = _emberMetalCore.default; }); -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"; +// reexports +enifed('ember-templates/make-bound-helper', ['exports', 'ember-metal/features', 'require'], function (exports, _emberMetalFeatures, _require) { + 'use strict'; - exports.default = intern; - - function intern(str) { - var obj = {}; - obj[str] = 1; - for (var key in obj) { - if (key === str) { - return key; - } + exports.default = (function () { + if (false) { + return _require.default('ember-glimmer/make-bound-helper').default; + } else { + return _require.default('ember-htmlbars/make-bound-helper').default; } - return str; - } + })(); }); -enifed('ember-utils/invoke', ['exports', 'ember-utils/apply-str'], function (exports, _emberUtilsApplyStr) { +enifed('ember-templates/renderer', ['exports', 'ember-metal/features', 'require'], function (exports, _emberMetalFeatures, _require) { 'use strict'; - exports.canInvoke = canInvoke; - exports.tryInvoke = tryInvoke; + var InteractiveRenderer = (function () { + if (false) { + return _require.default('ember-glimmer/renderer').InteractiveRenderer; + } else { + return _require.default('ember-htmlbars/renderer').InteractiveRenderer; + } + })(); - /** - 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 - */ + exports.InteractiveRenderer = InteractiveRenderer; + var InertRenderer = (function () { + if (false) { + return _require.default('ember-glimmer/renderer').InertRenderer; + } else { + return _require.default('ember-htmlbars/renderer').InertRenderer; + } + })(); - 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); + exports.InertRenderer = InertRenderer; + var Renderer = (function () { + if (false) { + return _require.default('ember-glimmer/renderer').Renderer; + } else { + return _require.default('ember-htmlbars/renderer').Renderer; } - } + })(); + exports.Renderer = Renderer; }); -enifed("ember-utils/lookup-descriptor", ["exports"], function (exports) { - "use strict"; +enifed('ember-templates/string', ['exports', 'ember-metal/features', 'require'], function (exports, _emberMetalFeatures, _require) { + '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); + var strings = (function () { + if (false) { + return _require.default('ember-glimmer/utils/string'); + } else { + return _require.default('ember-htmlbars/utils/string'); } + })(); - return null; - } + var SafeString = strings.SafeString; + exports.SafeString = SafeString; + var escapeExpression = strings.escapeExpression; + exports.escapeExpression = escapeExpression; + var htmlSafe = strings.htmlSafe; + exports.htmlSafe = htmlSafe; + var isHTMLSafe = strings.isHTMLSafe; + exports.isHTMLSafe = isHTMLSafe; + var getSafeString = strings.getSafeString; + exports.getSafeString = getSafeString; }); -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"; +enifed('ember-templates/template', ['exports', 'ember-metal/features', 'require'], function (exports, _emberMetalFeatures, _require) { + 'use strict'; - exports.default = makeArray; - - function makeArray(obj) { - if (obj === null || obj === undefined) { - return []; - } - return Array.isArray(obj) ? obj : [obj]; + var htmlbarsTemplate = undefined, + glimmerTemplate = undefined; + if (_require.has('ember-htmlbars')) { + htmlbarsTemplate = _require.default('ember-htmlbars').template; } -}); -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]; + if (_require.has('ember-glimmer')) { + glimmerTemplate = _require.default('ember-glimmer').template; } - /** - `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 - */ + var template = false ? glimmerTemplate : htmlbarsTemplate; - function setOwner(object, owner) { - object[OWNER] = owner; - } + exports.default = template; }); -enifed('ember-utils/super', ['exports'], function (exports) { - 'use strict'; +enifed("ember-templates/template_registry", ["exports"], function (exports) { + // STATE within a module is frowned apon, this exists + // to support Ember.TEMPLATES but shield ember internals from this legacy + // global API. + "use strict"; - exports.wrap = wrap; - var HAS_SUPER_PATTERN = /\.(_super|call\(this|apply\(this)/; - var fnToString = Function.prototype.toString; + exports.setTemplates = setTemplates; + exports.getTemplates = getTemplates; + exports.get = get; + exports.has = has; + exports.set = set; + var TEMPLATES = {}; - 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; + function setTemplates(templates) { + TEMPLATES = templates; } - /** - 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 getTemplates() { + return TEMPLATES; } - function _wrap(func, superFunc) { - function superWrapper() { - var orig = this._super; - this._super = superFunc; - var ret = func.apply(this, arguments); - this._super = orig; - return ret; + function get(name) { + if (TEMPLATES.hasOwnProperty(name)) { + return TEMPLATES[name]; } - - 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()) + ']'); + function has(name) { + return TEMPLATES.hasOwnProperty(name); } -}); -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); - } + function set(name, template) { + return TEMPLATES[name] = template; } }); enifed("ember/features", ["exports"], function (exports) { "use strict"; - exports.default = { "features-stripped-test": 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, "ember-testing-resume-test": false, "mandatory-setter": true, "ember-glimmer-detect-backtracking-rerender": true }; + exports.default = {}; }); enifed("ember/version", ["exports"], function (exports) { "use strict"; - exports.default = "2.10.0-beta.2"; + exports.default = "2.9.1"; }); -enifed("glimmer-compiler/index", ["exports", "glimmer-compiler/lib/compiler", "glimmer-compiler/lib/template-visitor"], function (exports, _glimmerCompilerLibCompiler, _glimmerCompilerLibTemplateVisitor) { +enifed("htmlbars-compiler", ["exports", "htmlbars-compiler/compiler"], function (exports, _htmlbarsCompilerCompiler) { "use strict"; - exports.precompile = _glimmerCompilerLibCompiler.precompile; - exports.PrecompileOptions = _glimmerCompilerLibCompiler.PrecompileOptions; - - // exported only for tests - exports.TemplateVisitor = _glimmerCompilerLibTemplateVisitor.default; + exports.compile = _htmlbarsCompilerCompiler.compile; + exports.compileSpec = _htmlbarsCompilerCompiler.compileSpec; + exports.template = _htmlbarsCompilerCompiler.template; }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItY29tcGlsZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O1VBQ0UsVUFBVSwrQkFBVixVQUFVO1VBQUUsaUJBQWlCLCtCQUFqQixpQkFBaUI7OztVQUlYLGVBQWUsc0NBQTFCLE9BQU8iLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICBwcmVjb21waWxlLCBQcmVjb21waWxlT3B0aW9uc1xufSBmcm9tIFwiLi9saWIvY29tcGlsZXJcIjtcblxuLy8gZXhwb3J0ZWQgb25seSBmb3IgdGVzdHNcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGVtcGxhdGVWaXNpdG9yIH0gZnJvbSAnLi9saWIvdGVtcGxhdGUtdmlzaXRvcic7XG4iXX0= -enifed("glimmer-compiler/lib/compiler", ["exports", "glimmer-syntax", "glimmer-compiler/lib/template-compiler"], function (exports, _glimmerSyntax, _glimmerCompilerLibTemplateCompiler) { - "use strict"; +enifed("htmlbars-compiler/compiler", ["exports", "htmlbars-syntax/parser", "htmlbars-compiler/template-compiler", "htmlbars-runtime/hooks", "htmlbars-runtime/render"], function (exports, _htmlbarsSyntaxParser, _htmlbarsCompilerTemplateCompiler, _htmlbarsRuntimeHooks, _htmlbarsRuntimeRender) { + /*jshint evil:true*/ + "use strict"; - exports.precompile = precompile; + exports.compileSpec = compileSpec; + exports.template = template; + exports.compile = compile; - var defaultId = (function () { - var idFn = undefined; - return function () { - if (!idFn) { - if (typeof require === 'function') { - try { - (function () { - /* tslint:disable:no-require-imports */ - var crypto = require('crypto'); - /* tslint:enable:no-require-imports */ - idFn = function (src) { - var hash = crypto.createHash('sha1'); - hash.update(src, 'utf8'); - // trim to 6 bytes of data (2^48 - 1) - return hash.digest('base64').substring(0, 8); - }; - idFn("test"); - })(); - } catch (e) { - idFn = null; - } - } - if (!idFn) { - idFn = function () { - return null; - }; - } - } - return idFn; - }; - })(); + /* + * Compile a string into a template spec string. The template spec is a string + * representation of a template. Usually, you would use compileSpec for + * pre-compilation of a template on the server. + * + * Example usage: + * + * var templateSpec = compileSpec("Howdy {{name}}"); + * // This next step is basically what plain compile does + * var template = new Function("return " + templateSpec)(); + * + * @method compileSpec + * @param {String} string An HTMLBars template string + * @return {TemplateSpec} A template spec string + */ - function precompile(string, options) { - var opts = options || { - id: defaultId(), - meta: {} - }; - var ast = _glimmerSyntax.preprocess(string, opts); + function compileSpec(string, options) { + var ast = _htmlbarsSyntaxParser.preprocess(string, options); + var compiler = new _htmlbarsCompilerTemplateCompiler.default(options); + var program = compiler.compile(ast); + return program; + } - var _TemplateCompiler$compile = _glimmerCompilerLibTemplateCompiler.default.compile(opts, ast); + /* + * @method template + * @param {TemplateSpec} templateSpec A precompiled template + * @return {Template} A template spec string + */ - var block = _TemplateCompiler$compile.block; - var meta = _TemplateCompiler$compile.meta; + function template(templateSpec) { + return new Function("return " + templateSpec)(); + } - var idFn = opts.id || defaultId(); - var blockJSON = JSON.stringify(block.toJSON()); - var templateJSONObject = { - id: idFn(JSON.stringify(meta) + blockJSON), - block: blockJSON, - meta: meta - }; - // JSON is javascript - return JSON.stringify(templateJSONObject); - } + /* + * Compile a string into a template rendering function + * + * Example usage: + * + * // Template is the hydration portion of the compiled template + * var template = compile("Howdy {{name}}"); + * + * // Template accepts three arguments: + * // + * // 1. A context object + * // 2. An env object + * // 3. A contextualElement (optional, document.body is the default) + * // + * // The env object *must* have at least these two properties: + * // + * // 1. `hooks` - Basic hooks for rendering a template + * // 2. `dom` - An instance of DOMHelper + * // + * import {hooks} from 'htmlbars-runtime'; + * import {DOMHelper} from 'morph'; + * var context = {name: 'whatever'}, + * env = {hooks: hooks, dom: new DOMHelper()}, + * contextualElement = document.body; + * var domFragment = template(context, env, contextualElement); + * + * @method compile + * @param {String} string An HTMLBars template string + * @param {Object} options A set of options to provide to the compiler + * @return {Template} A function for rendering the template + */ + + function compile(string, options) { + return _htmlbarsRuntimeHooks.wrap(template(compileSpec(string, options)), _htmlbarsRuntimeRender.default); + } }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItY29tcGlsZXIvbGliL2NvbXBpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBY0EsUUFBTSxTQUFTLEdBQXVCLENBQUMsWUFBQTtBQUNyQyxZQUFJLElBQWtCLFlBQUEsQ0FBQztBQUN2QixlQUFPLFlBQUE7QUFDTCxnQkFBSSxDQUFDLElBQUksRUFBRTtBQUNULG9CQUFJLE9BQU8sT0FBTyxLQUFLLFVBQVUsRUFBRTtBQUNqQyx3QkFBSTs7O0FBRUYsZ0NBQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7QUFFakMsZ0NBQUksR0FBRyxVQUFBLEdBQUcsRUFBQTtBQUNSLG9DQUFJLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLG9DQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQzs7QUFFekIsdUNBQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUM3QyxDQUFDO0FBQ0YsZ0NBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzs7cUJBQ2IsQ0FBQSxPQUFPLENBQUMsRUFBRTtBQUNWLDRCQUFJLEdBQUcsSUFBSSxDQUFDO3FCQUNiO2lCQUNGO0FBQ0Qsb0JBQUksQ0FBQyxJQUFJLEVBQUU7QUFDVCx3QkFBSSxHQUFHOytCQUFNLElBQUk7cUJBQUEsQ0FBQztpQkFDbkI7YUFDRjtBQUNELG1CQUFPLElBQUksQ0FBQztTQUNiLENBQUM7S0FDSCxDQUFBLEVBQUcsQ0FBQzs7QUFpQkwsYUFBQSxVQUFBLENBQTJCLE1BQWMsRUFBRSxPQUErQixFQUFBO0FBQ3hFLFlBQUksSUFBSSxHQUFHLE9BQU8sSUFBSTtBQUNwQixjQUFFLEVBQUUsU0FBUyxFQUFFO0FBQ2YsZ0JBQUksRUFBRSxFQUFFO1NBQ1QsQ0FBQztBQUNGLFlBQUksR0FBRyxHQUFHLGVBOURILFVBQVUsQ0E4REksTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDOzt3Q0FDYiw0Q0FBaUIsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7O1lBQW5ELEtBQUssNkJBQUwsS0FBSztZQUFFLElBQUksNkJBQUosSUFBSTs7QUFDakIsWUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNsQyxZQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLFlBQUksa0JBQWtCLEdBQXdDO0FBQzVELGNBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDMUMsaUJBQUssRUFBRSxTQUFTO0FBQ2hCLGdCQUFJLEVBQUosSUFBSTtTQUNMLENBQUM7O0FBR0YsZUFBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUM7S0FDM0MiLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcmVwcm9jZXNzIH0gZnJvbSBcImdsaW1tZXItc3ludGF4XCI7XG5pbXBvcnQgVGVtcGxhdGVDb21waWxlciwgeyBDb21waWxlT3B0aW9ucyB9IGZyb20gXCIuL3RlbXBsYXRlLWNvbXBpbGVyXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVkVGVtcGxhdGVXaXRoTGF6eUJsb2NrLCBUZW1wbGF0ZUphdmFzY3JpcHQgfSBmcm9tIFwiZ2xpbW1lci13aXJlLWZvcm1hdFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlSWRGbiB7XG4gIChzcmM6IHN0cmluZyk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmVjb21waWxlT3B0aW9uczxUPiBleHRlbmRzIENvbXBpbGVPcHRpb25zPFQ+IHtcbiAgaWQ/OiBUZW1wbGF0ZUlkRm47XG59XG5cbmRlY2xhcmUgZnVuY3Rpb24gcmVxdWlyZShpZDogc3RyaW5nKTogYW55O1xuXG5jb25zdCBkZWZhdWx0SWQ6ICgpID0+IFRlbXBsYXRlSWRGbiA9ICgoKSA9PiB7XG4gIGxldCBpZEZuOiBUZW1wbGF0ZUlkRm47XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKCFpZEZuKSB7XG4gICAgICBpZiAodHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZTpuby1yZXF1aXJlLWltcG9ydHMgKi9cbiAgICAgICAgICBjb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbiAgICAgICAgICAvKiB0c2xpbnQ6ZW5hYmxlOm5vLXJlcXVpcmUtaW1wb3J0cyAqL1xuICAgICAgICAgIGlkRm4gPSBzcmMgPT4ge1xuICAgICAgICAgICAgbGV0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMScpO1xuICAgICAgICAgICAgaGFzaC51cGRhdGUoc3JjLCAndXRmOCcpO1xuICAgICAgICAgICAgLy8gdHJpbSB0byA2IGJ5dGVzIG9mIGRhdGEgKDJeNDggLSAxKVxuICAgICAgICAgICAgcmV0dXJuIGhhc2guZGlnZXN0KCdiYXNlNjQnKS5zdWJzdHJpbmcoMCw4KTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlkRm4oXCJ0ZXN0XCIpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWRGbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghaWRGbikge1xuICAgICAgICBpZEZuID0gKCkgPT4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkRm47XG4gIH07XG59KSgpO1xuXG4vKlxuICogQ29tcGlsZSBhIHN0cmluZyBpbnRvIGEgdGVtcGxhdGUgamF2YXNjcmlwdCBzdHJpbmcuXG4gKlxuICogRXhhbXBsZSB1c2FnZTpcbiAqICAgICBpbXBvcnQgeyBwcmVjb21waWxlIH0gZnJvbSAnZ2xpbW1lci1jb21waWxlcic7XG4gKiAgICAgaW1wb3J0IHsgdGVtcGxhdGVGYWN0b3J5IH0gZnJvbSAnZ2xpbWVyLXJ1bnRpbWUnO1xuICogICAgIGxldCB0ZW1wbGF0ZUpzID0gcHJlY29tcGlsZShcIkhvd2R5IHt7bmFtZX19XCIpO1xuICogICAgIGxldCBmYWN0b3J5ID0gdGVtcGxhdGVGYWN0b3J5KG5ldyBGdW5jdGlvbihcInJldHVybiBcIiArIHRlbXBsYXRlSnMpKCkpO1xuICogICAgIGxldCB0ZW1wbGF0ZSA9IGZhY3RvcnkuY3JlYXRlKGVudik7XG4gKlxuICogQG1ldGhvZCBwcmVjb21waWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIGEgR2xpbW1lciB0ZW1wbGF0ZSBzdHJpbmdcbiAqIEByZXR1cm4ge3N0cmluZ30gYSB0ZW1wbGF0ZSBqYXZhc2NyaXB0IHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlY29tcGlsZTxUPihzdHJpbmc6IHN0cmluZywgb3B0aW9ucz86IFByZWNvbXBpbGVPcHRpb25zPFQ+KTogVGVtcGxhdGVKYXZhc2NyaXB0O1xuZXhwb3J0IGZ1bmN0aW9uIHByZWNvbXBpbGUoc3RyaW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBQcmVjb21waWxlT3B0aW9uczx7fT4pOiBUZW1wbGF0ZUphdmFzY3JpcHQge1xuICBsZXQgb3B0cyA9IG9wdGlvbnMgfHwge1xuICAgIGlkOiBkZWZhdWx0SWQoKSxcbiAgICBtZXRhOiB7fVxuICB9O1xuICBsZXQgYXN0ID0gcHJlcHJvY2VzcyhzdHJpbmcsIG9wdHMpO1xuICBsZXQgeyBibG9jaywgbWV0YSB9ID0gVGVtcGxhdGVDb21waWxlci5jb21waWxlKG9wdHMsIGFzdCk7XG4gIGxldCBpZEZuID0gb3B0cy5pZCB8fCBkZWZhdWx0SWQoKTtcbiAgbGV0IGJsb2NrSlNPTiA9IEpTT04uc3RyaW5naWZ5KGJsb2NrLnRvSlNPTigpKTtcbiAgbGV0IHRlbXBsYXRlSlNPTk9iamVjdDogU2VyaWFsaXplZFRlbXBsYXRlV2l0aExhenlCbG9jazx7fT4gPSB7XG4gICAgaWQ6IGlkRm4oSlNPTi5zdHJpbmdpZnkobWV0YSkgKyBibG9ja0pTT04pLFxuICAgIGJsb2NrOiBibG9ja0pTT04sXG4gICAgbWV0YVxuICB9O1xuXG4gIC8vIEpTT04gaXMgamF2YXNjcmlwdFxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGVtcGxhdGVKU09OT2JqZWN0KTtcbn1cbiJdfQ== -enifed("glimmer-compiler/lib/javascript-compiler", ["exports", "glimmer-util"], function (exports, _glimmerUtil) { - "use strict"; +enifed("htmlbars-compiler/fragment-javascript-compiler", ["exports", "htmlbars-compiler/utils", "htmlbars-util/quoting"], function (exports, _htmlbarsCompilerUtils, _htmlbarsUtilQuoting) { + "use strict"; - var Block = (function () { - function Block() { - this.statements = []; - this.positionals = []; - } + var svgNamespace = "http://www.w3.org/2000/svg", - Block.prototype.toJSON = function toJSON() { - return { - statements: this.statements, - locals: this.positionals - }; - }; + // http://www.w3.org/html/wg/drafts/html/master/syntax.html#html-integration-point + svgHTMLIntegrationPoints = { 'foreignObject': true, 'desc': true, 'title': true }; - Block.prototype.push = function push(statement) { - this.statements.push(statement); - }; + function FragmentJavaScriptCompiler() { + this.source = []; + this.depth = -1; + } - return Block; - })(); + exports.default = FragmentJavaScriptCompiler; - exports.Block = Block; + FragmentJavaScriptCompiler.prototype.compile = function (opcodes, options) { + this.source.length = 0; + this.depth = -1; + this.indent = options && options.indent || ""; + this.namespaceFrameStack = [{ namespace: null, depth: null }]; + this.domNamespace = null; - var TemplateBlock = (function (_Block) { - babelHelpers.inherits(TemplateBlock, _Block); + this.source.push('function buildFragment(dom) {\n'); + _htmlbarsCompilerUtils.processOpcodes(this, opcodes); + this.source.push(this.indent + '}'); - function TemplateBlock() { - _Block.apply(this, arguments); - this.yields = new _glimmerUtil.DictSet(); - this.named = new _glimmerUtil.DictSet(); - this.blocks = []; - this.hasPartials = false; - } + return this.source.join(''); + }; - TemplateBlock.prototype.toJSON = function toJSON() { - return { - statements: this.statements, - locals: this.positionals, - named: this.named.toArray(), - yields: this.yields.toArray(), - blocks: this.blocks.map(function (b) { - return b.toJSON(); - }), - hasPartials: this.hasPartials - }; - }; + FragmentJavaScriptCompiler.prototype.createFragment = function () { + var el = 'el' + ++this.depth; + this.source.push(this.indent + ' var ' + el + ' = dom.createDocumentFragment();\n'); + }; - return TemplateBlock; - })(Block); + FragmentJavaScriptCompiler.prototype.createElement = function (tagName) { + var el = 'el' + ++this.depth; + if (tagName === 'svg') { + this.pushNamespaceFrame({ namespace: svgNamespace, depth: this.depth }); + } + this.ensureNamespace(); + this.source.push(this.indent + ' var ' + el + ' = dom.createElement(' + _htmlbarsUtilQuoting.string(tagName) + ');\n'); + if (svgHTMLIntegrationPoints[tagName]) { + this.pushNamespaceFrame({ namespace: null, depth: this.depth }); + } + }; - exports.TemplateBlock = TemplateBlock; + FragmentJavaScriptCompiler.prototype.createText = function (str) { + var el = 'el' + ++this.depth; + this.source.push(this.indent + ' var ' + el + ' = dom.createTextNode(' + _htmlbarsUtilQuoting.string(str) + ');\n'); + }; - var Template = (function () { - function Template(meta) { - this.meta = meta; - this.block = new TemplateBlock(); - } + FragmentJavaScriptCompiler.prototype.createComment = function (str) { + var el = 'el' + ++this.depth; + this.source.push(this.indent + ' var ' + el + ' = dom.createComment(' + _htmlbarsUtilQuoting.string(str) + ');\n'); + }; - Template.prototype.toJSON = function toJSON() { - return { - block: this.block.toJSON(), - meta: this.meta - }; - }; + FragmentJavaScriptCompiler.prototype.returnNode = function () { + var el = 'el' + this.depth; + this.source.push(this.indent + ' return ' + el + ';\n'); + }; - return Template; - })(); + FragmentJavaScriptCompiler.prototype.setAttribute = function (name, value, namespace) { + var el = 'el' + this.depth; + if (namespace) { + this.source.push(this.indent + ' dom.setAttributeNS(' + el + ',' + _htmlbarsUtilQuoting.string(namespace) + ',' + _htmlbarsUtilQuoting.string(name) + ',' + _htmlbarsUtilQuoting.string(value) + ');\n'); + } else { + this.source.push(this.indent + ' dom.setAttribute(' + el + ',' + _htmlbarsUtilQuoting.string(name) + ',' + _htmlbarsUtilQuoting.string(value) + ');\n'); + } + }; - exports.Template = Template; + FragmentJavaScriptCompiler.prototype.appendChild = function () { + if (this.depth === this.getCurrentNamespaceFrame().depth) { + this.popNamespaceFrame(); + } + var child = 'el' + this.depth--; + var el = 'el' + this.depth; + this.source.push(this.indent + ' dom.appendChild(' + el + ', ' + child + ');\n'); + }; - var JavaScriptCompiler = (function () { - function JavaScriptCompiler(opcodes, meta) { - this.blocks = new _glimmerUtil.Stack(); - this.values = []; - this.opcodes = opcodes; - this.template = new Template(meta); - } + FragmentJavaScriptCompiler.prototype.getCurrentNamespaceFrame = function () { + return this.namespaceFrameStack[this.namespaceFrameStack.length - 1]; + }; - JavaScriptCompiler.process = function process(opcodes, meta) { - var compiler = new JavaScriptCompiler(opcodes, meta); - return compiler.process(); - }; + FragmentJavaScriptCompiler.prototype.pushNamespaceFrame = function (frame) { + this.namespaceFrameStack.push(frame); + }; - JavaScriptCompiler.prototype.process = function process() { - var _this = this; + FragmentJavaScriptCompiler.prototype.popNamespaceFrame = function () { + return this.namespaceFrameStack.pop(); + }; - this.opcodes.forEach(function (_ref) { - var opcode = _ref[0]; - - var args = _ref.slice(1); - - if (!_this[opcode]) { - throw new Error("unimplemented " + opcode + " on JavaScriptCompiler"); - } - _this[opcode].apply(_this, args); - }); - return this.template; - }; - - /// Nesting - - JavaScriptCompiler.prototype.startBlock = function startBlock(_ref2) { - var program = _ref2[0]; - - var block = new Block(); - block.positionals = program.blockParams; - this.blocks.push(block); - }; - - JavaScriptCompiler.prototype.endBlock = function endBlock() { - var template = this.template; - var blocks = this.blocks; - - template.block.blocks.push(blocks.pop()); - }; - - JavaScriptCompiler.prototype.startProgram = function startProgram() { - this.blocks.push(this.template.block); - }; - - JavaScriptCompiler.prototype.endProgram = function endProgram() {}; - - /// Statements - - JavaScriptCompiler.prototype.text = function text(content) { - this.push(['text', content]); - }; - - JavaScriptCompiler.prototype.append = function append(trusted) { - this.push(['append', this.popValue(), trusted]); - }; - - JavaScriptCompiler.prototype.comment = function comment(value) { - this.push(['comment', value]); - }; - - JavaScriptCompiler.prototype.modifier = function modifier(path) { - var params = this.popValue(); - var hash = this.popValue(); - this.push(['modifier', path, params, hash]); - }; - - JavaScriptCompiler.prototype.block = function block(path, template, inverse) { - var params = this.popValue(); - var hash = this.popValue(); - this.push(['block', path, params, hash, template, inverse]); - }; - - JavaScriptCompiler.prototype.openElement = function openElement(tag, blockParams) { - this.push(['open-element', tag, blockParams]); - }; - - JavaScriptCompiler.prototype.flushElement = function flushElement() { - this.push(['flush-element']); - }; - - JavaScriptCompiler.prototype.closeElement = function closeElement() { - this.push(['close-element']); - }; - - JavaScriptCompiler.prototype.staticAttr = function staticAttr(name, namespace) { - var value = this.popValue(); - this.push(['static-attr', name, value, namespace]); - }; - - JavaScriptCompiler.prototype.dynamicAttr = function dynamicAttr(name, namespace) { - var value = this.popValue(); - this.push(['dynamic-attr', name, value, namespace]); - }; - - JavaScriptCompiler.prototype.trustingAttr = function trustingAttr(name, namespace) { - var value = this.popValue(); - this.push(['trusting-attr', name, value, namespace]); - }; - - JavaScriptCompiler.prototype.staticArg = function staticArg(name) { - var value = this.popValue(); - this.push(['static-arg', name.slice(1), value]); - }; - - JavaScriptCompiler.prototype.dynamicArg = function dynamicArg(name) { - var value = this.popValue(); - this.push(['dynamic-arg', name.slice(1), value]); - }; - - JavaScriptCompiler.prototype.yield = function _yield(to) { - var params = this.popValue(); - this.push(['yield', to, params]); - this.template.block.yields.add(to); - }; - - JavaScriptCompiler.prototype.hasBlock = function hasBlock(name) { - this.pushValue(['has-block', name]); - this.template.block.yields.add(name); - }; - - JavaScriptCompiler.prototype.hasBlockParams = function hasBlockParams(name) { - this.pushValue(['has-block-params', name]); - this.template.block.yields.add(name); - }; - - JavaScriptCompiler.prototype.partial = function partial() { - var params = this.popValue(); - this.push(['partial', params[0]]); - this.template.block.hasPartials = true; - }; - - /// Expressions - - JavaScriptCompiler.prototype.literal = function literal(value) { - if (value === undefined) { - this.pushValue(['undefined']); - } else { - this.pushValue(value); - } - }; - - JavaScriptCompiler.prototype.unknown = function unknown(path) { - this.pushValue(['unknown', path]); - }; - - JavaScriptCompiler.prototype.arg = function arg(path) { - this.template.block.named.add(path[0]); - this.pushValue(['arg', path]); - }; - - JavaScriptCompiler.prototype.get = function get(path) { - this.pushValue(['get', path]); - }; - - JavaScriptCompiler.prototype.concat = function concat() { - this.pushValue(['concat', this.popValue()]); - }; - - JavaScriptCompiler.prototype.helper = function helper(path) { - var params = this.popValue(); - var hash = this.popValue(); - this.pushValue(['helper', path, params, hash]); - }; - - /// Stack Management Opcodes - - JavaScriptCompiler.prototype.prepareArray = function prepareArray(size) { - var values = []; - for (var i = 0; i < size; i++) { - values.push(this.popValue()); - } - this.pushValue(values); - }; - - JavaScriptCompiler.prototype.prepareObject = function prepareObject(size) { - _glimmerUtil.assert(this.values.length >= size, "Expected " + size + " values on the stack, found " + this.values.length); - var keys = new Array(size); - var values = new Array(size); - for (var i = 0; i < size; i++) { - keys[i] = this.popValue(); - values[i] = this.popValue(); - } - this.pushValue([keys, values]); - }; - - /// Utilities - - JavaScriptCompiler.prototype.push = function push(args) { - while (args[args.length - 1] === null) { - args.pop(); - } - this.blocks.current.push(args); - }; - - JavaScriptCompiler.prototype.pushValue = function pushValue(val) { - this.values.push(val); - }; - - JavaScriptCompiler.prototype.popValue = function popValue() { - _glimmerUtil.assert(this.values.length, "No expression found on stack"); - return this.values.pop(); - }; - - return JavaScriptCompiler; - })(); - - exports.default = JavaScriptCompiler; + FragmentJavaScriptCompiler.prototype.ensureNamespace = function () { + var correctNamespace = this.getCurrentNamespaceFrame().namespace; + if (this.domNamespace !== correctNamespace) { + this.source.push(this.indent + ' dom.setNamespace(' + (correctNamespace ? _htmlbarsUtilQuoting.string(correctNamespace) : 'null') + ');\n'); + this.domNamespace = correctNamespace; + } + }; }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItY29tcGlsZXIvbGliL2phdmFzY3JpcHQtY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O1FBb0JBLEtBQUE7QUFBQSxpQkFBQSxLQUFBLEdBQUE7QUFDRSxnQkFBQSxDQUFBLFVBQVUsR0FBZ0IsRUFBRSxDQUFDO0FBQzdCLGdCQUFBLENBQUEsV0FBVyxHQUFhLEVBQUUsQ0FBQztTQVk1Qjs7QUFkRCxhQUFBLFdBSUUsTUFBTSxHQUFBLGtCQUFBO0FBQ0osbUJBQU87QUFDTCwwQkFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO0FBQzNCLHNCQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVc7YUFDekIsQ0FBQztTQUNIOztBQVRILGFBQUEsV0FXRSxJQUFJLEdBQUEsY0FBQyxTQUFvQixFQUFBO0FBQ3ZCLGdCQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNqQzs7ZUFiSCxLQUFBOzs7OztRQWdCQSxhQUFBOzhCQUFBLGFBQUE7O0FBQUEsaUJBQUEsYUFBQSxHQUFBO0FBQW1DLCtCQUFBLFNBQUEsQ0FBQSxDQUFLO0FBQy9CLGdCQUFBLENBQUEsTUFBTSxHQUFHLGlCQXBDRixPQUFPLEVBb0NnQixDQUFDO0FBQy9CLGdCQUFBLENBQUEsS0FBSyxHQUFHLGlCQXJDRCxPQUFPLEVBcUNlLENBQUM7QUFDOUIsZ0JBQUEsQ0FBQSxNQUFNLEdBQVksRUFBRSxDQUFDO0FBQ3JCLGdCQUFBLENBQUEsV0FBVyxHQUFHLEtBQUssQ0FBQztTQVk1Qjs7QUFoQkQscUJBQUEsV0FNRSxNQUFNLEdBQUEsa0JBQUE7QUFDSixtQkFBTztBQUNMLDBCQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7QUFDM0Isc0JBQU0sRUFBRSxJQUFJLENBQUMsV0FBVztBQUN4QixxQkFBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO0FBQzNCLHNCQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7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LENBQUMsUUFBUSxFQUFPLENBQUM7QUFDL0Isc0JBQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFjLENBQUM7YUFDekM7QUFFRCxnQkFBSSxDQUFDLFNBQVMsQ0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3RDOzs7O0FBL0xILDBCQUFBLFdBbU1FLElBQUksR0FBQSxjQUFDLElBQWUsRUFBQTtBQUNsQixtQkFBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDckMsb0JBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNaO0FBRUQsZ0JBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoQzs7QUF6TUgsMEJBQUEsV0EyTUUsU0FBUyxHQUFBLG1CQUF1QyxHQUFNLEVBQUE7QUFDcEQsZ0JBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCOztBQTdNSCwwQkFBQSxXQStNRSxRQUFRLEdBQUEsb0JBQUE7QUFDTix5QkFuUkssTUFBTSxDQW1SSixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO0FBQzNELG1CQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFPLENBQUM7U0FDL0I7O2VBbE5ILGtCQUFBOzs7c0JBQUEsa0JBQUEiLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2VydCB9IGZyb20gXCJnbGltbWVyLXV0aWxcIjtcbmltcG9ydCB7IFN0YWNrLCBEaWN0U2V0IH0gZnJvbSBcImdsaW1tZXItdXRpbFwiO1xuXG5pbXBvcnQge1xuICBUZW1wbGF0ZU1ldGEsXG4gIFNlcmlhbGl6ZWRCbG9jayxcbiAgU2VyaWFsaXplZFRlbXBsYXRlQmxvY2ssXG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZSxcbiAgQ29yZSxcbiAgU3RhdGVtZW50LFxuICBFeHByZXNzaW9uLFxuICBFeHByZXNzaW9uc1xufSBmcm9tICdnbGltbWVyLXdpcmUtZm9ybWF0JztcblxuZXhwb3J0IHR5cGUgc3RyID0gc3RyaW5nO1xuZXhwb3J0IHR5cGUgUGFyYW1zID0gQ29yZS5QYXJhbXM7XG5leHBvcnQgdHlwZSBIYXNoID0gQ29yZS5IYXNoO1xuZXhwb3J0IHR5cGUgUGF0aCA9IENvcmUuUGF0aDtcbmV4cG9ydCB0eXBlIFN0YWNrVmFsdWUgPSBFeHByZXNzaW9uIHwgUGFyYW1zIHwgSGFzaCB8IHN0cjtcblxuZXhwb3J0IGNsYXNzIEJsb2NrIHtcbiAgc3RhdGVtZW50czogU3RhdGVtZW50W10gPSBbXTtcbiAgcG9zaXRpb25hbHM6IHN0cmluZ1tdID0gW107XG5cbiAgdG9KU09OKCk6IFNlcmlhbGl6ZWRCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgIGxvY2FsczogdGhpcy5wb3NpdGlvbmFsc1xuICAgIH07XG4gIH1cblxuICBwdXNoKHN0YXRlbWVudDogU3RhdGVtZW50KSB7XG4gICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVCbG9jayBleHRlbmRzIEJsb2NrIHtcbiAgcHVibGljIHlpZWxkcyA9IG5ldyBEaWN0U2V0PHN0cmluZz4oKTtcbiAgcHVibGljIG5hbWVkID0gbmV3IERpY3RTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgYmxvY2tzOiBCbG9ja1tdID0gW107XG4gIHB1YmxpYyBoYXNQYXJ0aWFscyA9IGZhbHNlO1xuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgIGxvY2FsczogdGhpcy5wb3NpdGlvbmFscyxcbiAgICAgIG5hbWVkOiB0aGlzLm5hbWVkLnRvQXJyYXkoKSxcbiAgICAgIHlpZWxkczogdGhpcy55aWVsZHMudG9BcnJheSgpLFxuICAgICAgYmxvY2tzOiB0aGlzLmJsb2Nrcy5tYXAoYiA9PiBiLnRvSlNPTigpKSxcbiAgICAgIGhhc1BhcnRpYWxzOiB0aGlzLmhhc1BhcnRpYWxzXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGU8VCBleHRlbmRzIFRlbXBsYXRlTWV0YT4ge1xuICBwdWJsaWMgYmxvY2sgPSBuZXcgVGVtcGxhdGVCbG9jaygpO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtZXRhOiBUKSB7fVxuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkVGVtcGxhdGU8VD4ge1xuICAgIHJldHVybiB7XG4gICAgICBibG9jazogdGhpcy5ibG9jay50b0pTT04oKSxcbiAgICAgIG1ldGE6IHRoaXMubWV0YVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSmF2YVNjcmlwdENvbXBpbGVyPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgc3RhdGljIHByb2Nlc3M8VCBleHRlbmRzIFRlbXBsYXRlTWV0YT4ob3Bjb2RlcywgbWV0YSk6IFRlbXBsYXRlPFQ+IHtcbiAgICBsZXQgY29tcGlsZXIgPSBuZXcgSmF2YVNjcmlwdENvbXBpbGVyPFQ+KG9wY29kZXMsIG1ldGEpO1xuICAgIHJldHVybiBjb21waWxlci5wcm9jZXNzKCk7XG4gIH1cblxuICBwcml2YXRlIHRlbXBsYXRlOiBUZW1wbGF0ZTxUPjtcbiAgcHJpdmF0ZSBibG9ja3MgPSBuZXcgU3RhY2s8QmxvY2s+KCk7XG4gIHByaXZhdGUgb3Bjb2RlczogYW55W107XG4gIHByaXZhdGUgdmFsdWVzOiBTdGFja1ZhbHVlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihvcGNvZGVzLCBtZXRhOiBUKSB7XG4gICAgdGhpcy5vcGNvZGVzID0gb3Bjb2RlcztcbiAgICB0aGlzLnRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKG1ldGEpO1xuICB9XG5cbiAgcHJvY2VzcygpOiBUZW1wbGF0ZTxUPiB7XG4gICAgdGhpcy5vcGNvZGVzLmZvckVhY2goKFtvcGNvZGUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbb3Bjb2RlXSkgeyB0aHJvdyBuZXcgRXJyb3IoYHVuaW1wbGVtZW50ZWQgJHtvcGNvZGV9IG9uIEphdmFTY3JpcHRDb21waWxlcmApOyB9XG4gICAgICB0aGlzW29wY29kZV0oLi4uYXJncyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vLyBOZXN0aW5nXG5cbiAgc3RhcnRCbG9jayhbcHJvZ3JhbV0pIHtcbiAgICBsZXQgYmxvY2s6IEJsb2NrID0gbmV3IEJsb2NrKCk7XG4gICAgYmxvY2sucG9zaXRpb25hbHMgPSBwcm9ncmFtLmJsb2NrUGFyYW1zO1xuICAgIHRoaXMuYmxvY2tzLnB1c2goYmxvY2spO1xuICB9XG5cbiAgZW5kQmxvY2soKSB7XG4gICAgbGV0IHsgdGVtcGxhdGUsIGJsb2NrcyB9ID0gdGhpcztcbiAgICB0ZW1wbGF0ZS5ibG9jay5ibG9ja3MucHVzaChibG9ja3MucG9wKCkpO1xuICB9XG5cbiAgc3RhcnRQcm9ncmFtKCkge1xuICAgIHRoaXMuYmxvY2tzLnB1c2godGhpcy50ZW1wbGF0ZS5ibG9jayk7XG4gIH1cblxuICBlbmRQcm9ncmFtKCkge1xuXG4gIH1cblxuICAvLy8gU3RhdGVtZW50c1xuXG4gIHRleHQoY29udGVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5wdXNoKFsndGV4dCcsIGNvbnRlbnRdKTtcbiAgfVxuXG4gIGFwcGVuZCh0cnVzdGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5wdXNoKFsnYXBwZW5kJywgdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpLCB0cnVzdGVkXSk7XG4gIH1cblxuICBjb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goWydjb21tZW50JywgdmFsdWVdKTtcbiAgfVxuXG4gIG1vZGlmaWVyKHBhdGg6IFBhdGgpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICB0aGlzLnB1c2goWydtb2RpZmllcicsIHBhdGgsIHBhcmFtcywgaGFzaF0pO1xuICB9XG5cbiAgYmxvY2socGF0aDogUGF0aCwgdGVtcGxhdGU6IG51bWJlciwgaW52ZXJzZTogbnVtYmVyKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoKFsnYmxvY2snLCBwYXRoLCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlXSk7XG4gIH1cblxuICBvcGVuRWxlbWVudCh0YWc6IHN0ciwgYmxvY2tQYXJhbXM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wdXNoKFsnb3Blbi1lbGVtZW50JywgdGFnLCBibG9ja1BhcmFtc10pO1xuICB9XG5cbiAgZmx1c2hFbGVtZW50KCkge1xuICAgIHRoaXMucHVzaChbJ2ZsdXNoLWVsZW1lbnQnXSk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoKSB7XG4gICAgdGhpcy5wdXNoKFsnY2xvc2UtZWxlbWVudCddKTtcbiAgfVxuXG4gIHN0YXRpY0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goWydzdGF0aWMtYXR0cicsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2VdKTtcbiAgfVxuXG4gIGR5bmFtaWNBdHRyKG5hbWU6IHN0ciwgbmFtZXNwYWNlOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFsnZHluYW1pYy1hdHRyJywgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgdHJ1c3RpbmdBdHRyKG5hbWU6IHN0ciwgbmFtZXNwYWNlOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFsndHJ1c3RpbmctYXR0cicsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2VdKTtcbiAgfVxuXG4gIHN0YXRpY0FyZyhuYW1lOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFsnc3RhdGljLWFyZycsIG5hbWUuc2xpY2UoMSksIHZhbHVlXSk7XG4gIH1cblxuICBkeW5hbWljQXJnKG5hbWU6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goWydkeW5hbWljLWFyZycsIG5hbWUuc2xpY2UoMSksIHZhbHVlXSk7XG4gIH1cblxuICB5aWVsZCh0bzogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIHRoaXMucHVzaChbJ3lpZWxkJywgdG8sIHBhcmFtc10pO1xuICAgIHRoaXMudGVtcGxhdGUuYmxvY2sueWllbGRzLmFkZCh0byk7XG4gIH1cblxuICBoYXNCbG9jayhuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IYXNCbG9jaz4oWydoYXMtYmxvY2snLCBuYW1lXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay55aWVsZHMuYWRkKG5hbWUpO1xuICB9XG5cbiAgaGFzQmxvY2tQYXJhbXMobmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuSGFzQmxvY2tQYXJhbXM+KFsnaGFzLWJsb2NrLXBhcmFtcycsIG5hbWVdKTtcbiAgICB0aGlzLnRlbXBsYXRlLmJsb2NrLnlpZWxkcy5hZGQobmFtZSk7XG4gIH1cblxuICBwYXJ0aWFsKCkge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICB0aGlzLnB1c2goWydwYXJ0aWFsJywgcGFyYW1zWzBdXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNQYXJ0aWFscyA9IHRydWU7XG4gIH1cblxuICAvLy8gRXhwcmVzc2lvbnNcblxuICBsaXRlcmFsKHZhbHVlOiBFeHByZXNzaW9ucy5WYWx1ZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5VbmRlZmluZWQ+KFsndW5kZWZpbmVkJ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5WYWx1ZT4odmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHVua25vd24ocGF0aDogc3RyaW5nW10pIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5Vbmtub3duPihbJ3Vua25vd24nLCBwYXRoXSk7XG4gIH1cblxuICBhcmcocGF0aDogc3RyaW5nW10pIHtcbiAgICB0aGlzLnRlbXBsYXRlLmJsb2NrLm5hbWVkLmFkZChwYXRoWzBdKTtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5Bcmc+KFsnYXJnJywgcGF0aF0pO1xuICB9XG5cbiAgZ2V0KHBhdGg6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuR2V0PihbJ2dldCcsIHBhdGhdKTtcbiAgfVxuXG4gIGNvbmNhdCgpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5Db25jYXQ+KFsnY29uY2F0JywgdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCldKTtcbiAgfVxuXG4gIGhlbHBlcihwYXRoOiBzdHJpbmdbXSkge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICBsZXQgaGFzaCA9IHRoaXMucG9wVmFsdWU8SGFzaD4oKTtcblxuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkhlbHBlcj4oWydoZWxwZXInLCBwYXRoLCBwYXJhbXMsIGhhc2hdKTtcbiAgfVxuXG4gIC8vLyBTdGFjayBNYW5hZ2VtZW50IE9wY29kZXNcblxuICBwcmVwYXJlQXJyYXkoc2l6ZTogbnVtYmVyKSB7XG4gICAgbGV0IHZhbHVlcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIHZhbHVlcy5wdXNoKHRoaXMucG9wVmFsdWUoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoVmFsdWU8UGFyYW1zPih2YWx1ZXMpO1xuICB9XG5cbiAgcHJlcGFyZU9iamVjdChzaXplOiBudW1iZXIpIHtcbiAgICBhc3NlcnQodGhpcy52YWx1ZXMubGVuZ3RoID49IHNpemUsIGBFeHBlY3RlZCAke3NpemV9IHZhbHVlcyBvbiB0aGUgc3RhY2ssIGZvdW5kICR7dGhpcy52YWx1ZXMubGVuZ3RofWApO1xuXG4gICAgbGV0IGtleXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KHNpemUpO1xuICAgIGxldCB2YWx1ZXM6IEV4cHJlc3Npb25bXSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBrZXlzW2ldID0gdGhpcy5wb3BWYWx1ZTxzdHI+KCk7XG4gICAgICB2YWx1ZXNbaV0gPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoVmFsdWU8SGFzaD4oW2tleXMsIHZhbHVlc10pO1xuICB9XG5cbiAgLy8vIFV0aWxpdGllc1xuXG4gIHB1c2goYXJnczogU3RhdGVtZW50KSB7XG4gICAgd2hpbGUgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gbnVsbCkge1xuICAgICAgYXJncy5wb3AoKTtcbiAgICB9XG5cbiAgICB0aGlzLmJsb2Nrcy5jdXJyZW50LnB1c2goYXJncyk7XG4gIH1cblxuICBwdXNoVmFsdWU8UyBleHRlbmRzIEV4cHJlc3Npb24gfCBQYXJhbXMgfCBIYXNoPih2YWw6IFMpIHtcbiAgICB0aGlzLnZhbHVlcy5wdXNoKHZhbCk7XG4gIH1cblxuICBwb3BWYWx1ZTxUIGV4dGVuZHMgU3RhY2tWYWx1ZT4oKTogVCB7XG4gICAgYXNzZXJ0KHRoaXMudmFsdWVzLmxlbmd0aCwgXCJObyBleHByZXNzaW9uIGZvdW5kIG9uIHN0YWNrXCIpO1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5wb3AoKSBhcyBUO1xuICB9XG59XG4iXX0= -enifed("glimmer-compiler/lib/template-compiler", ["exports", "glimmer-compiler/lib/template-visitor", "glimmer-compiler/lib/javascript-compiler", "glimmer-util"], function (exports, _glimmerCompilerLibTemplateVisitor, _glimmerCompilerLibJavascriptCompiler, _glimmerUtil) { - "use strict"; +enifed("htmlbars-compiler/fragment-opcode-compiler", ["exports", "htmlbars-compiler/template-visitor", "htmlbars-compiler/utils", "htmlbars-util", "htmlbars-util/array-utils"], function (exports, _htmlbarsCompilerTemplateVisitor, _htmlbarsCompilerUtils, _htmlbarsUtil, _htmlbarsUtilArrayUtils) { + "use strict"; - function isTrustedValue(value) { - return value.escaped !== undefined && !value.escaped; - } + function FragmentOpcodeCompiler() { + this.opcodes = []; + } - var TemplateCompiler = (function () { - function TemplateCompiler(options) { - this.templateId = 0; - this.templateIds = []; - this.symbols = null; - this.opcodes = []; - this.includeMeta = false; - this.options = options || {}; - } + exports.default = FragmentOpcodeCompiler; - TemplateCompiler.compile = function compile(options, ast) { - var templateVisitor = new _glimmerCompilerLibTemplateVisitor.default(); - templateVisitor.visit(ast); - var compiler = new TemplateCompiler(options); - var opcodes = compiler.process(templateVisitor.actions); - return _glimmerCompilerLibJavascriptCompiler.default.process(opcodes, options.meta); - }; + FragmentOpcodeCompiler.prototype.compile = function (ast) { + var templateVisitor = new _htmlbarsCompilerTemplateVisitor.default(); + templateVisitor.visit(ast); - TemplateCompiler.prototype.process = function process(actions) { - var _this = this; + _htmlbarsCompilerUtils.processOpcodes(this, templateVisitor.actions); - actions.forEach(function (_ref) { - var name = _ref[0]; + return this.opcodes; + }; - var args = _ref.slice(1); + FragmentOpcodeCompiler.prototype.opcode = function (type, params) { + this.opcodes.push([type, params]); + }; - if (!_this[name]) { - throw new Error("Unimplemented " + name + " on TemplateCompiler"); - } - _this[name].apply(_this, args); - }); - return this.opcodes; - }; + FragmentOpcodeCompiler.prototype.text = function (text) { + this.opcode('createText', [text.chars]); + this.opcode('appendChild'); + }; - TemplateCompiler.prototype.startProgram = function startProgram(program) { - this.opcode('startProgram', program, program); - }; + FragmentOpcodeCompiler.prototype.comment = function (comment) { + this.opcode('createComment', [comment.value]); + this.opcode('appendChild'); + }; - TemplateCompiler.prototype.endProgram = function endProgram() { - this.opcode('endProgram', null); - }; + FragmentOpcodeCompiler.prototype.openElement = function (element) { + this.opcode('createElement', [element.tag]); + _htmlbarsUtilArrayUtils.forEach(element.attributes, this.attribute, this); + }; - TemplateCompiler.prototype.startBlock = function startBlock(program) { - this.symbols = program[0].symbols; - this.templateId++; - this.opcode('startBlock', program, program); - }; + FragmentOpcodeCompiler.prototype.closeElement = function () { + this.opcode('appendChild'); + }; - TemplateCompiler.prototype.endBlock = function endBlock() { - this.symbols = null; - this.templateIds.push(this.templateId - 1); - this.opcode('endBlock', null); - }; + FragmentOpcodeCompiler.prototype.startProgram = function () { + this.opcodes.length = 0; + this.opcode('createFragment'); + }; - TemplateCompiler.prototype.text = function text(_ref2) { - var action = _ref2[0]; + FragmentOpcodeCompiler.prototype.endProgram = function () { + this.opcode('returnNode'); + }; - this.opcode('text', action, action.chars); - }; + FragmentOpcodeCompiler.prototype.mustache = function () { + this.pushMorphPlaceholderNode(); + }; - TemplateCompiler.prototype.comment = function comment(_ref3) { - var action = _ref3[0]; + FragmentOpcodeCompiler.prototype.component = function () { + this.pushMorphPlaceholderNode(); + }; - this.opcode('comment', action, action.value); - }; + FragmentOpcodeCompiler.prototype.block = function () { + this.pushMorphPlaceholderNode(); + }; - TemplateCompiler.prototype.openElement = function openElement(_ref4) { - var action = _ref4[0]; + FragmentOpcodeCompiler.prototype.pushMorphPlaceholderNode = function () { + this.opcode('createComment', [""]); + this.opcode('appendChild'); + }; - this.opcode('openElement', action, action.tag, action.blockParams); - for (var i = 0; i < action.attributes.length; i++) { - this.attribute([action.attributes[i]]); - } - for (var i = 0; i < action.modifiers.length; i++) { - this.modifier([action.modifiers[i]]); - } - this.opcode('flushElement', null); - }; - - TemplateCompiler.prototype.closeElement = function closeElement() { - this.opcode('closeElement', null); - }; - - TemplateCompiler.prototype.attribute = function attribute(_ref5) { - var action = _ref5[0]; - var name = action.name; - var value = action.value; - - var namespace = _glimmerUtil.getAttrNamespace(name); - var isStatic = this.prepareAttributeValue(value); - if (name.charAt(0) === '@') { - // Arguments - if (isStatic) { - this.opcode('staticArg', action, name); - } else if (action.value.type === 'MustacheStatement') { - this.opcode('dynamicArg', action, name); - } else { - this.opcode('dynamicArg', action, name); - } - } else { - var isTrusting = isTrustedValue(value); - if (isStatic) { - this.opcode('staticAttr', action, name, namespace); - } else if (isTrusting) { - this.opcode('trustingAttr', action, name, namespace); - } else if (action.value.type === 'MustacheStatement') { - this.opcode('dynamicAttr', action, name); - } else { - this.opcode('dynamicAttr', action, name, namespace); - } - } - }; - - TemplateCompiler.prototype.modifier = function modifier(_ref6) { - var action = _ref6[0]; - var parts = action.path.parts; - - this.prepareHelper(action); - this.opcode('modifier', action, parts); - }; - - TemplateCompiler.prototype.mustache = function mustache(_ref7) { - var action = _ref7[0]; - - if (isYield(action)) { - var to = assertValidYield(action); - this.yield(to, action); - } else if (isPartial(action)) { - var params = assertValidPartial(action); - this.partial(params, action); - } else { - this.mustacheExpression(action); - this.opcode('append', action, !action.escaped); - } - }; - - TemplateCompiler.prototype.block = function block(_ref8) /*, index, count*/{ - var action = _ref8[0]; - - this.prepareHelper(action); - var templateId = this.templateIds.pop(); - var inverseId = action.inverse === null ? null : this.templateIds.pop(); - this.opcode('block', action, action.path.parts, templateId, inverseId); - }; - - /// Internal actions, not found in the original processed actions - - TemplateCompiler.prototype.arg = function arg(_ref9) { - var path = _ref9[0]; - var parts = path.parts; - - this.opcode('arg', path, parts); - }; - - TemplateCompiler.prototype.mustacheExpression = function mustacheExpression(expr) { - if (isBuiltInHelper(expr)) { - this.builtInHelper(expr); - } else if (isLiteral(expr)) { - this.opcode('literal', expr, expr.path.value); - } else if (isArg(expr)) { - this.arg([expr.path]); - } else if (isHelperInvocation(expr)) { - this.prepareHelper(expr); - this.opcode('helper', expr, expr.path.parts); - } else if (isLocalVariable(expr, this.symbols)) { - this.opcode('get', expr, expr.path.parts); - } else { - this.opcode('unknown', expr, expr.path.parts); - } - }; - - /// Internal Syntax - - TemplateCompiler.prototype.yield = function _yield(to, action) { - this.prepareParams(action.params); - this.opcode('yield', action, to); - }; - - TemplateCompiler.prototype.hasBlock = function hasBlock(name, action) { - this.opcode('hasBlock', action, name); - }; - - TemplateCompiler.prototype.hasBlockParams = function hasBlockParams(name, action) { - this.opcode('hasBlockParams', action, name); - }; - - TemplateCompiler.prototype.partial = function partial(params, action) { - this.prepareParams(action.params); - this.opcode('partial', action); - }; - - TemplateCompiler.prototype.builtInHelper = function builtInHelper(expr) { - if (isHasBlock(expr)) { - var _name = assertValidHasBlockUsage(expr.path.original, expr); - this.hasBlock(_name, expr); - } else if (isHasBlockParams(expr)) { - var _name2 = assertValidHasBlockUsage(expr.path.original, expr); - this.hasBlockParams(_name2, expr); - } - }; - - /// Expressions, invoked recursively from prepareParams and prepareHash - - TemplateCompiler.prototype.SubExpression = function SubExpression(expr) { - if (isBuiltInHelper(expr)) { - this.builtInHelper(expr); - } else { - this.prepareHelper(expr); - this.opcode('helper', expr, expr.path.parts); - } - }; - - TemplateCompiler.prototype.PathExpression = function PathExpression(expr) { - if (expr.data) { - this.arg([expr]); - } else { - this.opcode('get', expr, expr.parts); - } - }; - - TemplateCompiler.prototype.StringLiteral = function StringLiteral(action) { - this.opcode('literal', null, action.value); - }; - - TemplateCompiler.prototype.BooleanLiteral = function BooleanLiteral(action) { - this.opcode('literal', null, action.value); - }; - - TemplateCompiler.prototype.NumberLiteral = function NumberLiteral(action) { - this.opcode('literal', null, action.value); - }; - - TemplateCompiler.prototype.NullLiteral = function NullLiteral(action) { - this.opcode('literal', null, action.value); - }; - - TemplateCompiler.prototype.UndefinedLiteral = function UndefinedLiteral(action) { - this.opcode('literal', null, action.value); - }; - - /// Utilities - - TemplateCompiler.prototype.opcode = function opcode(name, action) { - for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - args[_key - 2] = arguments[_key]; - } - - var opcode = [name].concat(args); - if (this.includeMeta && action) { - opcode.push(this.meta(action)); - } - this.opcodes.push(opcode); - }; - - TemplateCompiler.prototype.prepareHelper = function prepareHelper(_ref10) { - var params = _ref10.params; - var hash = _ref10.hash; - - this.prepareHash(hash); - this.prepareParams(params); - }; - - TemplateCompiler.prototype.preparePath = function preparePath(path) { - this.opcode('literal', path, path.parts); - }; - - TemplateCompiler.prototype.prepareParams = function prepareParams(params) { - if (!params.length) { - this.opcode('literal', null, null); - return; - } - for (var i = params.length - 1; i >= 0; i--) { - var param = params[i]; - _glimmerUtil.assert(this[param.type], "Unimplemented " + param.type + " on TemplateCompiler"); - this[param.type](param); - } - this.opcode('prepareArray', null, params.length); - }; - - TemplateCompiler.prototype.prepareHash = function prepareHash(hash) { - var pairs = hash.pairs; - if (!pairs.length) { - this.opcode('literal', null, null); - return; - } - for (var i = pairs.length - 1; i >= 0; i--) { - var _pairs$i = pairs[i]; - var key = _pairs$i.key; - var value = _pairs$i.value; - - _glimmerUtil.assert(this[value.type], "Unimplemented " + value.type + " on TemplateCompiler"); - this[value.type](value); - this.opcode('literal', null, key); - } - this.opcode('prepareObject', null, pairs.length); - }; - - TemplateCompiler.prototype.prepareAttributeValue = function prepareAttributeValue(value) { - // returns the static value if the value is static - switch (value.type) { - case 'TextNode': - this.opcode('literal', value, value.chars); - return true; - case 'MustacheStatement': - this.attributeMustache([value]); - return false; - case 'ConcatStatement': - this.prepareConcatParts(value.parts); - this.opcode('concat', value); - return false; - } - }; - - TemplateCompiler.prototype.prepareConcatParts = function prepareConcatParts(parts) { - for (var i = parts.length - 1; i >= 0; i--) { - var part = parts[i]; - if (part.type === 'MustacheStatement') { - this.attributeMustache([part]); - } else if (part.type === 'TextNode') { - this.opcode('literal', null, part.chars); - } - } - this.opcode('prepareArray', null, parts.length); - }; - - TemplateCompiler.prototype.attributeMustache = function attributeMustache(_ref11) { - var action = _ref11[0]; - - this.mustacheExpression(action); - }; - - TemplateCompiler.prototype.meta = function meta(node) { - var loc = node.loc; - if (!loc) { - return []; - } - var source = loc.source; - var start = loc.start; - var end = loc.end; - - return ['loc', [source || null, [start.line, start.column], [end.line, end.column]]]; - }; - - return TemplateCompiler; - })(); - - exports.default = TemplateCompiler; - - function isHelperInvocation(mustache) { - return mustache.params && mustache.params.length > 0 || mustache.hash && mustache.hash.pairs.length > 0; + FragmentOpcodeCompiler.prototype.attribute = function (attr) { + if (attr.value.type === 'TextNode') { + var namespace = _htmlbarsUtil.getAttrNamespace(attr.name); + this.opcode('setAttribute', [attr.name, attr.value.chars, namespace]); } - function isLocalVariable(mustache, symbols) { - var parts = mustache.path.parts; + }; - return parts.length === 1 && symbols && symbols.hasLocalVariable(parts[0]); - } - function isYield(_ref12) { - var path = _ref12.path; + FragmentOpcodeCompiler.prototype.setNamespace = function (namespace) { + this.opcode('setNamespace', [namespace]); + }; +}); +enifed("htmlbars-compiler/hydration-javascript-compiler", ["exports", "htmlbars-compiler/utils", "htmlbars-util/quoting", "htmlbars-util/template-utils"], function (exports, _htmlbarsCompilerUtils, _htmlbarsUtilQuoting, _htmlbarsUtilTemplateUtils) { + "use strict"; - return path.original === 'yield'; - } - function isPartial(_ref13) { - var path = _ref13.path; + function HydrationJavaScriptCompiler() { + this.stack = []; + this.source = []; + this.mustaches = []; + this.parents = [['fragment']]; + this.parentCount = 0; + this.morphs = []; + this.fragmentProcessing = []; + this.hooks = undefined; + } - return path.original === 'partial'; - } - function isArg(_ref14) { - var path = _ref14.path; + exports.default = HydrationJavaScriptCompiler; - return path.data; - } - function isLiteral(_ref15) { - var path = _ref15.path; + var prototype = HydrationJavaScriptCompiler.prototype; - return path.type === 'StringLiteral' || path.type === 'BooleanLiteral' || path.type === 'NumberLiteral' || path.type === 'NullLiteral' || path.type === 'UndefinedLiteral'; - } - function isHasBlock(_ref16) { - var path = _ref16.path; + prototype.compile = function (opcodes, options) { + this.stack.length = 0; + this.mustaches.length = 0; + this.source.length = 0; + this.parents.length = 1; + this.parents[0] = ['fragment']; + this.morphs.length = 0; + this.fragmentProcessing.length = 0; + this.parentCount = 0; + this.indent = options && options.indent || ""; + this.hooks = {}; + this.hasOpenBoundary = false; + this.hasCloseBoundary = false; + this.statements = []; + this.expressionStack = []; + this.locals = []; + this.hasOpenBoundary = false; + this.hasCloseBoundary = false; - return path.original === 'has-block'; - } - function isHasBlockParams(_ref17) { - var path = _ref17.path; + _htmlbarsCompilerUtils.processOpcodes(this, opcodes); - return path.original === 'has-block-params'; + if (this.hasOpenBoundary) { + this.source.unshift(this.indent + " dom.insertBoundary(fragment, 0);\n"); } - function isBuiltInHelper(expr) { - return isHasBlock(expr) || isHasBlockParams(expr); - } - function assertValidYield(_ref18) { - var hash = _ref18.hash; - var pairs = hash.pairs; - if (pairs.length === 1 && pairs[0].key !== 'to' || pairs.length > 1) { - throw new Error("yield only takes a single named argument: 'to'"); - } else if (pairs.length === 1 && pairs[0].value.type !== 'StringLiteral') { - throw new Error("you can only yield to a literal value"); - } else if (pairs.length === 0) { - return 'default'; - } else { - return pairs[0].value.value; - } + if (this.hasCloseBoundary) { + this.source.unshift(this.indent + " dom.insertBoundary(fragment, null);\n"); } - function assertValidPartial(_ref19) { - var params = _ref19.params; - var hash = _ref19.hash; - var escaped = _ref19.escaped; - var loc = _ref19.loc; - if (params && params.length !== 1) { - throw new Error("Partial found with no arguments. You must specify a template name. (on line " + loc.start.line + ")"); - } else if (hash && hash.pairs.length > 0) { - throw new Error("partial does not take any named arguments (on line " + loc.start.line + ")"); - } else if (!escaped) { - throw new Error("{{{partial ...}}} is not supported, please use {{partial ...}} instead (on line " + loc.start.line + ")"); - } - return params; - } - function assertValidHasBlockUsage(type, _ref20) { - var params = _ref20.params; - var hash = _ref20.hash; - var loc = _ref20.loc; + var i, l; - if (hash && hash.pairs.length > 0) { - throw new Error(type + " does not take any named arguments"); - } - if (params.length === 0) { - return 'default'; - } else if (params.length === 1) { - if (params[0].type === 'StringLiteral') { - return params[0].value; - } else { - throw new Error("you can only yield to a literal value (on line " + loc.start.line + ")"); - } - } else { - throw new Error(type + " only takes a single positional argument (on line " + loc.start.line + ")"); - } - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItY29tcGlsZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVVBLGFBQUEsY0FBQSxDQUF3QixLQUFLLEVBQUE7QUFDM0IsZUFBTyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7S0FDdEQ7O1FBRUQsZ0JBQUE7QUFpQkUsaUJBakJGLGdCQUFBLENBaUJjLE9BQTBCLEVBQUE7QUFOOUIsZ0JBQUEsQ0FBQSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsZ0JBQUEsQ0FBQSxXQUFXLEdBQWEsRUFBRSxDQUFDO0FBQzNCLGdCQUFBLENBQUEsT0FBTyxHQUFnQixJQUFJLENBQUM7QUFDNUIsZ0JBQUEsQ0FBQSxPQUFPLEdBQVUsRUFBRSxDQUFDO0FBQ3BCLGdCQUFBLENBQUEsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUcxQixnQkFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1NBQzlCOztBQW5CSCx3QkFBQSxDQUNTLE9BQU8sR0FBQSxpQkFBSSxPQUEwQixFQUFFLEdBQUcsRUFBQTtBQUMvQyxnQkFBSSxlQUFlLEdBQUcsZ0RBQXFCLENBQUM7QUFDNUMsMkJBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFM0IsZ0JBQUksUUFBUSxHQUFHLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0MsZ0JBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hELG1CQUFPLDhDQUFtQixPQUFPLENBQUksT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3RDs7QUFSSCx3QkFBQSxXQXFCRSxPQUFPLEdBQUEsaUJBQUMsT0FBTyxFQUFBOzs7QUFDYixtQkFBTyxDQUFDLE9BQU8sQ0FBQyxVQUFDLElBQWUsRUFBQTtvQkFBZCxJ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RUFBRSxNQUFxQixFQUFBO1lBQW5CLE1BQU0sR0FBUixNQUFxQixDQUFuQixNQUFNO1lBQUUsSUFBSSxHQUFkLE1BQXFCLENBQVgsSUFBSTtZQUFFLEdBQUcsR0FBbkIsTUFBcUIsQ0FBTCxHQUFHOztBQUN6RCxZQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDakMsa0JBQU0sSUFBSSxLQUFLLENBQUksSUFBSSx3Q0FBcUMsQ0FBQztTQUM5RDtBQUVELFlBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDdkIsbUJBQU8sU0FBUyxDQUFDO1NBQ2xCLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUM5QixnQkFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGVBQWUsRUFBRTtBQUN0Qyx1QkFBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ3hCLE1BQU07QUFDTCxzQkFBTSxJQUFJLEtBQUsscURBQW1ELEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFJLENBQUM7YUFDdEY7U0FDRixNQUFNO0FBQ0wsa0JBQU0sSUFBSSxLQUFLLENBQUksSUFBSSwwREFBcUQsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQUksQ0FBQztTQUNoRztLQUNGIiwiZmlsZSI6InRlbXBsYXRlLWNvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRlbXBsYXRlVmlzaXRvciwgeyBTeW1ib2xUYWJsZSB9IGZyb20gXCIuL3RlbXBsYXRlLXZpc2l0b3JcIjtcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIsIHsgVGVtcGxhdGUgfSBmcm9tIFwiLi9qYXZhc2NyaXB0LWNvbXBpbGVyXCI7XG5pbXBvcnQgeyBnZXRBdHRyTmFtZXNwYWNlIH0gZnJvbSBcImdsaW1tZXItdXRpbFwiO1xuaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSBcImdsaW1tZXItdXRpbFwiO1xuaW1wb3J0IHsgVGVtcGxhdGVNZXRhIH0gZnJvbSBcImdsaW1tZXItd2lyZS1mb3JtYXRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDb21waWxlT3B0aW9uczxUIGV4dGVuZHMgVGVtcGxhdGVNZXRhPiB7XG4gIG1ldGE/OiBUO1xufVxuXG5mdW5jdGlvbiBpc1RydXN0ZWRWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUuZXNjYXBlZCAhPT0gdW5kZWZpbmVkICYmICF2YWx1ZS5lc2NhcGVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wbGF0ZUNvbXBpbGVyPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgc3RhdGljIGNvbXBpbGU8VD4ob3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD4sIGFzdCk6IFRlbXBsYXRlPFQ+IHtcbiAgICBsZXQgdGVtcGxhdGVWaXNpdG9yID0gbmV3IFRlbXBsYXRlVmlzaXRvcigpO1xuICAgIHRlbXBsYXRlVmlzaXRvci52aXNpdChhc3QpO1xuXG4gICAgbGV0IGNvbXBpbGVyID0gbmV3IFRlbXBsYXRlQ29tcGlsZXIob3B0aW9ucyk7XG4gICAgbGV0IG9wY29kZXMgPSBjb21waWxlci5wcm9jZXNzKHRlbXBsYXRlVmlzaXRvci5hY3Rpb25zKTtcbiAgICByZXR1cm4gSmF2YVNjcmlwdENvbXBpbGVyLnByb2Nlc3M8VD4ob3Bjb2Rlcywgb3B0aW9ucy5tZXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgb3B0aW9uczogQ29tcGlsZU9wdGlvbnM8VD47XG4gIHByaXZhdGUgdGVtcGxhdGVJZCA9IDA7XG4gIHByaXZhdGUgdGVtcGxhdGVJZHM6IG51bWJlcltdID0gW107XG4gIHByaXZhdGUgc3ltYm9sczogU3ltYm9sVGFibGUgPSBudWxsO1xuICBwcml2YXRlIG9wY29kZXM6IGFueVtdID0gW107XG4gIHByaXZhdGUgaW5jbHVkZU1ldGEgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDb21waWxlT3B0aW9uczxUPikge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIH1cblxuICBwcm9jZXNzKGFjdGlvbnMpOiBhbnlbXSB7XG4gICAgYWN0aW9ucy5mb3JFYWNoKChbbmFtZSwgLi4uYXJnc10pID0+IHtcbiAgICAgIGlmICghdGhpc1tuYW1lXSkgeyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQgJHtuYW1lfSBvbiBUZW1wbGF0ZUNvbXBpbGVyYCk7IH1cbiAgICAgIHRoaXNbbmFtZV0oLi4uYXJncyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMub3Bjb2RlcztcbiAgfVxuXG4gIHN0YXJ0UHJvZ3JhbShwcm9ncmFtKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3N0YXJ0UHJvZ3JhbScsIHByb2dyYW0sIHByb2dyYW0pO1xuICB9XG5cbiAgZW5kUHJvZ3JhbSgpIHtcbiAgICB0aGlzLm9wY29kZSgnZW5kUHJvZ3JhbScsIG51bGwpO1xuICB9XG5cbiAgc3RhcnRCbG9jayhwcm9ncmFtKSB7XG4gICAgdGhpcy5zeW1ib2xzID0gcHJvZ3JhbVswXS5zeW1ib2xzO1xuICAgIHRoaXMudGVtcGxhdGVJZCsrO1xuICAgIHRoaXMub3Bjb2RlKCdzdGFydEJsb2NrJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICB0aGlzLnN5bWJvbHMgPSBudWxsO1xuICAgIHRoaXMudGVtcGxhdGVJZHMucHVzaCh0aGlzLnRlbXBsYXRlSWQgLSAxKTtcbiAgICB0aGlzLm9wY29kZSgnZW5kQmxvY2snLCBudWxsKTtcbiAgfVxuXG4gIHRleHQoW2FjdGlvbl0pIHtcbiAgICB0aGlzLm9wY29kZSgndGV4dCcsIGFjdGlvbiwgYWN0aW9uLmNoYXJzKTtcbiAgfVxuXG4gIGNvbW1lbnQoW2FjdGlvbl0pIHtcbiAgICB0aGlzLm9wY29kZSgnY29tbWVudCcsIGFjdGlvbiwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KFthY3Rpb25dKSB7XG4gICAgdGhpcy5vcGNvZGUoJ29wZW5FbGVtZW50JywgYWN0aW9uLCBhY3Rpb24udGFnLCBhY3Rpb24uYmxvY2tQYXJhbXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlKFthY3Rpb24uYXR0cmlidXRlc1tpXV0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLm1vZGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5tb2RpZmllcihbYWN0aW9uLm1vZGlmaWVyc1tpXV0pO1xuICAgIH1cbiAgICB0aGlzLm9wY29kZSgnZmx1c2hFbGVtZW50JywgbnVsbCk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2Nsb3NlRWxlbWVudCcsIG51bGwpO1xuICB9XG5cbiAgYXR0cmlidXRlKFthY3Rpb25dKSB7XG4gICAgbGV0IHsgbmFtZSwgdmFsdWUgfSA9IGFjdGlvbjtcblxuICAgIGxldCBuYW1lc3BhY2UgPSBnZXRBdHRyTmFtZXNwYWNlKG5hbWUpO1xuXG4gICAgbGV0IGlzU3RhdGljID0gdGhpcy5wcmVwYXJlQXR0cmlidXRlVmFsdWUodmFsdWUpO1xuXG4gICAgaWYgKG5hbWUuY2hhckF0KDApID09PSAnQCcpIHtcbiAgICAgIC8vIEFyZ3VtZW50c1xuICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdzdGF0aWNBcmcnLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24udmFsdWUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0FyZycsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0FyZycsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBpc1RydXN0aW5nID0gaXNUcnVzdGVkVmFsdWUodmFsdWUpO1xuXG4gICAgICBpZiAoaXNTdGF0aWMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3N0YXRpY0F0dHInLCBhY3Rpb24sIG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzVHJ1c3RpbmcpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3RydXN0aW5nQXR0cicsIGFjdGlvbiwgbmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBdHRyJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXR0cicsIGFjdGlvbiwgbmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtb2RpZmllcihbYWN0aW9uXSkge1xuICAgIGxldCB7IHBhdGg6IHsgcGFydHMgfSB9ID0gYWN0aW9uO1xuXG4gICAgdGhpcy5wcmVwYXJlSGVscGVyKGFjdGlvbik7XG4gICAgdGhpcy5vcGNvZGUoJ21vZGlmaWVyJywgYWN0aW9uLCBwYXJ0cyk7XG4gIH1cblxuICBtdXN0YWNoZShbYWN0aW9uXSkge1xuICAgIGlmIChpc1lpZWxkKGFjdGlvbikpIHtcbiAgICAgIGxldCB0byA9IGFzc2VydFZhbGlkWWllbGQoYWN0aW9uKTtcbiAgICAgIHRoaXMueWllbGQodG8sIGFjdGlvbik7XG4gICAgfSBlbHNlIGlmIChpc1BhcnRpYWwoYWN0aW9uKSkge1xuICAgICAgbGV0IHBhcmFtcyA9IGFzc2VydFZhbGlkUGFydGlhbChhY3Rpb24pO1xuICAgICAgdGhpcy5wYXJ0aWFsKHBhcmFtcywgYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnLCBhY3Rpb24sICFhY3Rpb24uZXNjYXBlZCk7XG4gICAgfVxuICB9XG5cbiAgYmxvY2soW2FjdGlvbi8qLCBpbmRleCwgY291bnQqL10pIHtcbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICBsZXQgdGVtcGxhdGVJZCA9IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgbGV0IGludmVyc2VJZCA9IGFjdGlvbi5pbnZlcnNlID09PSBudWxsID8gbnVsbCA6IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2Jsb2NrJywgYWN0aW9uLCBhY3Rpb24ucGF0aC5wYXJ0cywgdGVtcGxhdGVJZCwgaW52ZXJzZUlkKTtcbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBhY3Rpb25zLCBub3QgZm91bmQgaW4gdGhlIG9yaWdpbmFsIHByb2Nlc3NlZCBhY3Rpb25zXG5cbiAgYXJnKFtwYXRoXSkge1xuICAgIGxldCB7IHBhcnRzIH0gPSBwYXRoO1xuICAgIHRoaXMub3Bjb2RlKCdhcmcnLCBwYXRoLCBwYXJ0cyk7XG4gIH1cblxuICBtdXN0YWNoZUV4cHJlc3Npb24oZXhwcikge1xuICAgIGlmIChpc0J1aWx0SW5IZWxwZXIoZXhwcikpIHtcbiAgICAgIHRoaXMuYnVpbHRJbkhlbHBlcihleHByKTtcbiAgICB9IGVsc2UgaWYgKGlzTGl0ZXJhbChleHByKSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBleHByLCBleHByLnBhdGgudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoaXNBcmcoZXhwcikpIHtcbiAgICAgIHRoaXMuYXJnKFtleHByLnBhdGhdKTtcbiAgICB9IGVsc2UgaWYgKGlzSGVscGVySW52b2NhdGlvbihleHByKSkge1xuICAgICAgdGhpcy5wcmVwYXJlSGVscGVyKGV4cHIpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2hlbHBlcicsIGV4cHIsIGV4cHIucGF0aC5wYXJ0cyk7XG4gICAgfSBlbHNlIGlmIChpc0xvY2FsVmFyaWFibGUoZXhwciwgdGhpcy5zeW1ib2xzKSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIGV4cHIucGF0aC5wYXJ0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKCd1bmtub3duJywgZXhwciwgZXhwci5wYXRoLnBhcnRzKTtcbiAgICB9XG4gIH1cblxuICAvLy8gSW50ZXJuYWwgU3ludGF4XG5cbiAgeWllbGQodG86IHN0cmluZywgYWN0aW9uKSB7XG4gICAgdGhpcy5wcmVwYXJlUGFyYW1zKGFjdGlvbi5wYXJhbXMpO1xuICAgIHRoaXMub3Bjb2RlKCd5aWVsZCcsIGFjdGlvbiwgdG8pO1xuICB9XG5cbiAgaGFzQmxvY2sobmFtZTogc3RyaW5nLCBhY3Rpb24pIHtcbiAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2snLCBhY3Rpb24sIG5hbWUpO1xuICB9XG5cbiAgaGFzQmxvY2tQYXJhbXMobmFtZTogc3RyaW5nLCBhY3Rpb24pIHtcbiAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2tQYXJhbXMnLCBhY3Rpb24sIG5hbWUpO1xuICB9XG5cbiAgcGFydGlhbChwYXJhbXMsIGFjdGlvbikge1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhhY3Rpb24ucGFyYW1zKTtcbiAgICB0aGlzLm9wY29kZSgncGFydGlhbCcsIGFjdGlvbik7XG4gIH1cblxuICBidWlsdEluSGVscGVyKGV4cHIpIHtcbiAgICBpZiAoaXNIYXNCbG9jayhleHByKSkge1xuICAgICAgbGV0IG5hbWUgPSBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UoZXhwci5wYXRoLm9yaWdpbmFsLCBleHByKTtcbiAgICAgIHRoaXMuaGFzQmxvY2sobmFtZSwgZXhwcik7XG4gICAgfSBlbHNlIGlmIChpc0hhc0Jsb2NrUGFyYW1zKGV4cHIpKSB7XG4gICAgICBsZXQgbmFtZSA9IGFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZShleHByLnBhdGgub3JpZ2luYWwsIGV4cHIpO1xuICAgICAgdGhpcy5oYXNCbG9ja1BhcmFtcyhuYW1lLCBleHByKTtcbiAgICB9XG4gIH1cblxuICAvLy8gRXhwcmVzc2lvbnMsIGludm9rZWQgcmVjdXJzaXZlbHkgZnJvbSBwcmVwYXJlUGFyYW1zIGFuZCBwcmVwYXJlSGFzaFxuXG4gIFN1YkV4cHJlc3Npb24oZXhwcikge1xuICAgIGlmIChpc0J1aWx0SW5IZWxwZXIoZXhwcikpIHtcbiAgICAgIHRoaXMuYnVpbHRJbkhlbHBlcihleHByKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmVwYXJlSGVscGVyKGV4cHIpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2hlbHBlcicsIGV4cHIsIGV4cHIucGF0aC5wYXJ0cyk7XG4gICAgfVxuICB9XG5cbiAgUGF0aEV4cHJlc3Npb24oZXhwcikge1xuICAgIGlmIChleHByLmRhdGEpIHtcbiAgICAgIHRoaXMuYXJnKFtleHByXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdnZXQnLCBleHByLCBleHByLnBhcnRzKTtcbiAgICB9XG4gIH1cblxuICBTdHJpbmdMaXRlcmFsKGFjdGlvbikge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIEJvb2xlYW5MaXRlcmFsKGFjdGlvbikge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIE51bWJlckxpdGVyYWwoYWN0aW9uKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgTnVsbExpdGVyYWwoYWN0aW9uKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgVW5kZWZpbmVkTGl0ZXJhbChhY3Rpb24pIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICAvLy8gVXRpbGl0aWVzXG5cbiAgb3Bjb2RlKG5hbWUsIGFjdGlvbiwgLi4uYXJncykge1xuICAgIGxldCBvcGNvZGUgPSBbbmFtZSwgLi4uYXJnc107XG4gICAgaWYgKHRoaXMuaW5jbHVkZU1ldGEgJiYgYWN0aW9uKSB7XG4gICAgICBvcGNvZGUucHVzaCh0aGlzLm1ldGEoYWN0aW9uKSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGVzLnB1c2gob3Bjb2RlKTtcbiAgfVxuXG4gIHByZXBhcmVIZWxwZXIoeyBwYXJhbXMsIGhhc2ggfSkge1xuICAgIHRoaXMucHJlcGFyZUhhc2goaGFzaCk7XG4gICAgdGhpcy5wcmVwYXJlUGFyYW1zKHBhcmFtcyk7XG4gIH1cblxuICBwcmVwYXJlUGF0aChwYXRoKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBwYXRoLCBwYXRoLnBhcnRzKTtcbiAgfVxuXG4gIHByZXBhcmVQYXJhbXMocGFyYW1zKSB7XG4gICAgaWYgKCFwYXJhbXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBwYXJhbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBwYXJhbSA9IHBhcmFtc1tpXTtcblxuICAgICAgYXNzZXJ0KHRoaXNbcGFyYW0udHlwZV0sIGBVbmltcGxlbWVudGVkICR7cGFyYW0udHlwZX0gb24gVGVtcGxhdGVDb21waWxlcmApO1xuICAgICAgdGhpc1twYXJhbS50eXBlXShwYXJhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVBcnJheScsIG51bGwsIHBhcmFtcy5sZW5ndGgpO1xuICB9XG5cbiAgcHJlcGFyZUhhc2goaGFzaCkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnM7XG5cbiAgICBpZiAoIXBhaXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gcGFpcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCB7IGtleSwgdmFsdWUgfSA9IHBhaXJzW2ldO1xuXG4gICAgICBhc3NlcnQodGhpc1t2YWx1ZS50eXBlXSwgYFVuaW1wbGVtZW50ZWQgJHt2YWx1ZS50eXBlfSBvbiBUZW1wbGF0ZUNvbXBpbGVyYCk7XG4gICAgICB0aGlzW3ZhbHVlLnR5cGVdKHZhbHVlKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwga2V5KTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgncHJlcGFyZU9iamVjdCcsIG51bGwsIHBhaXJzLmxlbmd0aCk7XG4gIH1cblxuICBwcmVwYXJlQXR0cmlidXRlVmFsdWUodmFsdWUpIHtcbiAgICAvLyByZXR1cm5zIHRoZSBzdGF0aWMgdmFsdWUgaWYgdGhlIHZhbHVlIGlzIHN0YXRpY1xuXG4gICAgc3dpdGNoICh2YWx1ZS50eXBlKSB7XG4gICAgICBjYXNlICdUZXh0Tm9kZSc6XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgdmFsdWUsIHZhbHVlLmNoYXJzKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdNdXN0YWNoZVN0YXRlbWVudCc6XG4gICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3ZhbHVlXSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNhc2UgJ0NvbmNhdFN0YXRlbWVudCc6XG4gICAgICAgIHRoaXMucHJlcGFyZUNvbmNhdFBhcnRzKHZhbHVlLnBhcnRzKTtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2NvbmNhdCcsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVDb25jYXRQYXJ0cyhwYXJ0cykge1xuICAgIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHBhcnQgPSBwYXJ0c1tpXTtcblxuICAgICAgaWYgKHBhcnQudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZU11c3RhY2hlKFtwYXJ0XSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnQudHlwZSA9PT0gJ1RleHROb2RlJykge1xuICAgICAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIHBhcnQuY2hhcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdwcmVwYXJlQXJyYXknLCBudWxsLCBwYXJ0cy5sZW5ndGgpO1xuICB9XG5cbiAgYXR0cmlidXRlTXVzdGFjaGUoW2FjdGlvbl0pIHtcbiAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICB9XG5cbiAgbWV0YShub2RlKSB7XG4gICAgbGV0IGxvYyA9IG5vZGUubG9jO1xuICAgIGlmICghbG9jKSB7IHJldHVybiBbXTsgfVxuXG4gICAgbGV0IHsgc291cmNlLCBzdGFydCwgZW5kIH0gPSBsb2M7XG4gICAgcmV0dXJuIFsgJ2xvYycsIFtzb3VyY2UgfHwgbnVsbCwgW3N0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbl0sIFtlbmQubGluZSwgZW5kLmNvbHVtbl1dIF07XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIZWxwZXJJbnZvY2F0aW9uKG11c3RhY2hlKSB7XG4gIHJldHVybiAobXVzdGFjaGUucGFyYW1zICYmIG11c3RhY2hlLnBhcmFtcy5sZW5ndGggPiAwKSB8fFxuICAgIChtdXN0YWNoZS5oYXNoICYmIG11c3RhY2hlLmhhc2gucGFpcnMubGVuZ3RoID4gMCk7XG59XG5cbmZ1bmN0aW9uIGlzTG9jYWxWYXJpYWJsZShtdXN0YWNoZSwgc3ltYm9scykge1xuICBsZXQgeyBwYXJ0cyB9ID0gbXVzdGFjaGUucGF0aDtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gMSAmJiBzeW1ib2xzICYmIHN5bWJvbHMuaGFzTG9jYWxWYXJpYWJsZShwYXJ0c1swXSk7XG59XG5cbmZ1bmN0aW9uIGlzWWllbGQoeyBwYXRoIH0pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICd5aWVsZCc7XG59XG5cbmZ1bmN0aW9uIGlzUGFydGlhbCh7IHBhdGggfSkge1xuICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ3BhcnRpYWwnO1xufVxuXG5mdW5jdGlvbiBpc0FyZyh7IHBhdGggfSkge1xuICByZXR1cm4gcGF0aC5kYXRhO1xufVxuXG5mdW5jdGlvbiBpc0xpdGVyYWwoeyBwYXRoIH0pIHtcbiAgcmV0dXJuIHBhdGgudHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICB8fCBwYXRoLnR5cGUgPT09ICdCb29sZWFuTGl0ZXJhbCdcbiAgICAgIHx8IHBhdGgudHlwZSA9PT0gJ051bWJlckxpdGVyYWwnXG4gICAgICB8fCBwYXRoLnR5cGUgPT09ICdOdWxsTGl0ZXJhbCdcbiAgICAgIHx8IHBhdGgudHlwZSA9PT0gJ1VuZGVmaW5lZExpdGVyYWwnO1xufVxuXG5mdW5jdGlvbiBpc0hhc0Jsb2NrKHsgcGF0aCB9KSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnaGFzLWJsb2NrJztcbn1cblxuZnVuY3Rpb24gaXNIYXNCbG9ja1BhcmFtcyh7IHBhdGggfSkge1xuICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ2hhcy1ibG9jay1wYXJhbXMnO1xufVxuXG5mdW5jdGlvbiBpc0J1aWx0SW5IZWxwZXIoZXhwcikge1xuICByZXR1cm4gaXNIYXNCbG9jayhleHByKVxuICAgICAgfHwgaXNIYXNCbG9ja1BhcmFtcyhleHByKTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRZaWVsZCh7IGhhc2ggfSk6IHN0cmluZyB7XG4gIGxldCBwYWlycyA9IGhhc2gucGFpcnM7XG5cbiAgaWYgKChwYWlycy5sZW5ndGggPT09IDEgJiYgcGFpcnNbMF0ua2V5ICE9PSAndG8nKSB8fCBwYWlycy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB5aWVsZCBvbmx5IHRha2VzIGEgc2luZ2xlIG5hbWVkIGFyZ3VtZW50OiAndG8nYCk7XG4gIH0gZWxzZSBpZiAocGFpcnMubGVuZ3RoID09PSAxICYmIHBhaXJzWzBdLnZhbHVlLnR5cGUgIT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgeW91IGNhbiBvbmx5IHlpZWxkIHRvIGEgbGl0ZXJhbCB2YWx1ZWApO1xuICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhaXJzWzBdLnZhbHVlLnZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUGFydGlhbCh7IHBhcmFtcywgaGFzaCwgZXNjYXBlZCwgbG9jIH0pIC8qIDogZXhwciAqLyB7XG4gIGlmIChwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGFydGlhbCBmb3VuZCB3aXRoIG5vIGFyZ3VtZW50cy4gWW91IG11c3Qgc3BlY2lmeSBhIHRlbXBsYXRlIG5hbWUuIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWApO1xuICB9IGVsc2UgaWYgKGhhc2ggJiYgaGFzaC5wYWlycy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBwYXJ0aWFsIGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50cyAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgKTtcbiAgfSBlbHNlIGlmICghZXNjYXBlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihge3t7cGFydGlhbCAuLi59fX0gaXMgbm90IHN1cHBvcnRlZCwgcGxlYXNlIHVzZSB7e3BhcnRpYWwgLi4ufX0gaW5zdGVhZCAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgKTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZSh0eXBlLCB7IHBhcmFtcywgaGFzaCwgbG9jIH0pOiBzdHJpbmcge1xuICBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dHlwZX0gZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzYCk7XG4gIH1cblxuICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH0gZWxzZSBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMSkge1xuICAgIGlmIChwYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgICByZXR1cm4gcGFyYW1zWzBdLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWUgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfSBvbmx5IHRha2VzIGEgc2luZ2xlIHBvc2l0aW9uYWwgYXJndW1lbnQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCk7XG4gIH1cbn1cbiJdfQ== -enifed('glimmer-compiler/lib/template-visitor', ['exports'], function (exports) { - 'use strict'; + var indent = this.indent; - var push = Array.prototype.push; + var morphs; - var Frame = function Frame() { - this.parentNode = null; - this.children = null; - this.childIndex = null; - this.childCount = null; - this.childTemplateCount = 0; - this.mustacheCount = 0; - this.actions = []; - this.blankChildTextNodes = null; - this.symbols = null; + var result = { + createMorphsProgram: '', + hydrateMorphsProgram: '', + fragmentProcessingProgram: '', + statements: this.statements, + locals: this.locals, + hasMorphs: false }; - var SymbolTable = (function () { - function SymbolTable(symbols) { - var parent = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; + result.hydrateMorphsProgram = this.source.join(''); - this.symbols = symbols; - this.parent = parent; - } + if (this.morphs.length) { + result.hasMorphs = true; + morphs = indent + ' var morphs = new Array(' + this.morphs.length + ');\n'; - /** - * Takes in an AST and outputs a list of actions to be consumed - * by a compiler. For example, the template - * - * foo{{bar}}<div>baz</div> - * - * produces the actions - * - * [['startProgram', [programNode, 0]], - * ['text', [textNode, 0, 3]], - * ['mustache', [mustacheNode, 1, 3]], - * ['openElement', [elementNode, 2, 3, 0]], - * ['text', [textNode, 0, 1]], - * ['closeElement', [elementNode, 2, 3], - * ['endProgram', [programNode]]] - * - * This visitor walks the AST depth first and backwards. As - * a result the bottom-most child template will appear at the - * top of the actions list whereas the root template will appear - * at the bottom of the list. For example, - * - * <div>{{#if}}foo{{else}}bar<b></b>{{/if}}</div> - * - * produces the actions - * - * [['startProgram', [programNode, 0]], - * ['text', [textNode, 0, 2, 0]], - * ['openElement', [elementNode, 1, 2, 0]], - * ['closeElement', [elementNode, 1, 2]], - * ['endProgram', [programNode]], - * ['startProgram', [programNode, 0]], - * ['text', [textNode, 0, 1]], - * ['endProgram', [programNode]], - * ['startProgram', [programNode, 2]], - * ['openElement', [elementNode, 0, 1, 1]], - * ['block', [blockNode, 0, 1]], - * ['closeElement', [elementNode, 0, 1]], - * ['endProgram', [programNode]]] - * - * The state of the traversal is maintained by a stack of frames. - * Whenever a node with children is entered (either a ProgramNode - * or an ElementNode) a frame is pushed onto the stack. The frame - * contains information about the state of the traversal of that - * node. For example, - * - * - index of the current child node being visited - * - the number of mustaches contained within its child nodes - * - the list of actions generated by its child nodes - */ - - SymbolTable.prototype.hasLocalVariable = function hasLocalVariable(name) { - var symbols = this.symbols; - var parent = this.parent; - - return symbols.indexOf(name) >= 0 || parent && parent.hasLocalVariable(name); - }; - - return SymbolTable; - })(); - - exports.SymbolTable = SymbolTable; - function TemplateVisitor() { - this.frameStack = []; - this.actions = []; - this.programDepth = -1; + for (i = 0, l = this.morphs.length; i < l; ++i) { + var morph = this.morphs[i]; + morphs += indent + ' morphs[' + i + '] = ' + morph + ';\n'; + } } - // Traversal methods - TemplateVisitor.prototype.visit = function (node) { - this[node.type](node); - }; - TemplateVisitor.prototype.Program = function (program) { - this.programDepth++; - var parentFrame = this.getCurrentFrame(); - var programFrame = this.pushFrame(); - if (parentFrame) { - program.symbols = new SymbolTable(program.blockParams, parentFrame.symbols); - } else { - program.symbols = new SymbolTable(program.blockParams); - } - var startType = undefined, - endType = undefined; - if (this.programDepth === 0) { - startType = 'startProgram'; - endType = 'endProgram'; - } else { - startType = 'startBlock'; - endType = 'endBlock'; - } - programFrame.parentNode = program; - programFrame.children = program.body; - programFrame.childCount = program.body.length; - programFrame.blankChildTextNodes = []; - programFrame.actions.push([endType, [program, this.programDepth]]); - programFrame.symbols = program.symbols; - for (var i = program.body.length - 1; i >= 0; i--) { - programFrame.childIndex = i; - this.visit(program.body[i]); - } - programFrame.actions.push([startType, [program, programFrame.childTemplateCount, programFrame.blankChildTextNodes.reverse()]]); - this.popFrame(); - this.programDepth--; - // Push the completed template into the global actions list - if (parentFrame) { - parentFrame.childTemplateCount++; - } - push.apply(this.actions, programFrame.actions.reverse()); - }; - TemplateVisitor.prototype.ElementNode = function (element) { - var parentFrame = this.getCurrentFrame(); - var elementFrame = this.pushFrame(); - elementFrame.parentNode = element; - elementFrame.children = element.children; - elementFrame.childCount = element.children.length; - elementFrame.mustacheCount += element.modifiers.length; - elementFrame.blankChildTextNodes = []; - elementFrame.symbols = parentFrame.symbols; - var actionArgs = [element, parentFrame.childIndex, parentFrame.childCount]; - elementFrame.actions.push(['closeElement', actionArgs]); - for (var i = element.attributes.length - 1; i >= 0; i--) { - this.visit(element.attributes[i]); - } - for (var i = element.children.length - 1; i >= 0; i--) { - elementFrame.childIndex = i; - this.visit(element.children[i]); - } - elementFrame.actions.push(['openElement', actionArgs.concat([elementFrame.mustacheCount, elementFrame.blankChildTextNodes.reverse()])]); - this.popFrame(); - // Propagate the element's frame state to the parent frame - if (elementFrame.mustacheCount > 0) { - parentFrame.mustacheCount++; - } - parentFrame.childTemplateCount += elementFrame.childTemplateCount; - push.apply(parentFrame.actions, elementFrame.actions); - }; - TemplateVisitor.prototype.AttrNode = function (attr) { - if (attr.value.type !== 'TextNode') { - this.getCurrentFrame().mustacheCount++; - } - }; - TemplateVisitor.prototype.TextNode = function (text) { - var frame = this.getCurrentFrame(); - if (text.chars === '') { - frame.blankChildTextNodes.push(domIndexOf(frame.children, text)); - } - frame.actions.push(['text', [text, frame.childIndex, frame.childCount]]); - }; - TemplateVisitor.prototype.BlockStatement = function (node) { - var frame = this.getCurrentFrame(); - frame.mustacheCount++; - frame.actions.push(['block', [node, frame.childIndex, frame.childCount]]); - if (node.inverse) { - this.visit(node.inverse); - } - if (node.program) { - this.visit(node.program); - } - }; - TemplateVisitor.prototype.PartialStatement = function (node) { - var frame = this.getCurrentFrame(); - frame.mustacheCount++; - frame.actions.push(['mustache', [node, frame.childIndex, frame.childCount]]); - }; - TemplateVisitor.prototype.CommentStatement = function (text) { - var frame = this.getCurrentFrame(); - frame.actions.push(['comment', [text, frame.childIndex, frame.childCount]]); - }; - TemplateVisitor.prototype.MustacheStatement = function (mustache) { - var frame = this.getCurrentFrame(); - frame.mustacheCount++; - frame.actions.push(['mustache', [mustache, frame.childIndex, frame.childCount]]); - }; - // Frame helpers - TemplateVisitor.prototype.getCurrentFrame = function () { - return this.frameStack[this.frameStack.length - 1]; - }; - TemplateVisitor.prototype.pushFrame = function () { - var frame = new Frame(); - this.frameStack.push(frame); - return frame; - }; - TemplateVisitor.prototype.popFrame = function () { - return this.frameStack.pop(); - }; - exports.default = TemplateVisitor; - // Returns the index of `domNode` in the `nodes` array, skipping - // over any nodes which do not represent DOM nodes. - function domIndexOf(nodes, domNode) { - var index = -1; - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - if (node.type !== 'TextNode' && node.type !== 'ElementNode') { - continue; - } else { - index++; - } - if (node === domNode) { - return index; - } - } - return -1; + if (this.fragmentProcessing.length) { + var processing = ""; + for (i = 0, l = this.fragmentProcessing.length; i < l; ++i) { + processing += this.indent + ' ' + this.fragmentProcessing[i] + '\n'; + } + result.fragmentProcessingProgram = processing; } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItY29tcGlsZXIvbGliL3RlbXBsYXRlLXZpc2l0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsUUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7O1FBRWhDLEtBQUEsR0FBQSxTQUFBLEtBQUEsR0FBQTtBQUNTLFlBQUEsQ0FBQSxVQUFVLEdBQVcsSUFBSSxDQUFDO0FBQzFCLFlBQUEsQ0FBQSxRQUFRLEdBQVcsSUFBSSxDQUFDO0FBQ3hCLFlBQUEsQ0FBQSxVQUFVLEdBQVcsSUFBSSxDQUFDO0FBQzFCLFlBQUEsQ0FBQSxVQUFVLEdBQVcsSUFBSSxDQUFDO0FBQzFCLFlBQUEsQ0FBQSxrQkFBa0IsR0FBVyxDQUFDLENBQUM7QUFDL0IsWUFBQSxDQUFBLGFBQWEsR0FBVyxDQUFDLENBQUM7QUFDMUIsWUFBQSxDQUFBLE9BQU8sR0FBVSxFQUFFLENBQUM7QUFDcEIsWUFBQSxDQUFBLG1CQUFtQixHQUFhLElBQUksQ0FBQztBQUNyQyxZQUFBLENBQUEsT0FBTyxHQUFnQixJQUFJLENBQUM7S0FDcEM7O1FBRUQsV0FBQTtBQUNFLGlCQURGLFdBQUEsQ0FFWSxPQUFpQixFQUNTO2dCQUExQixNQUFNLHlEQUFnQixJQUFJOztBQUQxQixnQkFBQSxDQUFBLE9BQU8sR0FBUCxPQUFPLENBQVU7QUFDakIsZ0JBQUEsQ0FBQSxNQUFNLEdBQU4sTUFBTSxDQUFvQjtTQUNoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUpOLG1CQUFBLFdBTUUsZ0JBQWdCLEdBQUEsMEJBQUMsSUFBWSxFQUFBO2dCQUNyQixPQUFPLEdBQWEsSUFBSSxDQUF4QixPQUFPO2dCQUFFLE1BQU0sR0FBSyxJQUFJLENBQWYsTUFBTTs7QUFDckIsbUJBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUssTUFBTSxJQUFJLE1BQU0sQ0FBQyxnQkFB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RSxDQUFDLEVBQUUsRUFBRTtBQUNyQyxnQkFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXBCLGdCQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO0FBQzNELHlCQUFTO2FBQ1YsTUFBTTtBQUNMLHFCQUFLLEVBQUUsQ0FBQzthQUNUO0FBRUQsZ0JBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUNwQix1QkFBTyxLQUFLLENBQUM7YUFDZDtTQUNGO0FBRUQsZUFBTyxDQUFDLENBQUMsQ0FBQztLQUNYIiwiZmlsZSI6InRlbXBsYXRlLXZpc2l0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgcHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoO1xuXG5jbGFzcyBGcmFtZSB7XG4gIHB1YmxpYyBwYXJlbnROb2RlOiBPYmplY3QgPSBudWxsO1xuICBwdWJsaWMgY2hpbGRyZW46IE9iamVjdCA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZEluZGV4OiBudW1iZXIgPSBudWxsO1xuICBwdWJsaWMgY2hpbGRDb3VudDogbnVtYmVyID0gbnVsbDtcbiAgcHVibGljIGNoaWxkVGVtcGxhdGVDb3VudDogbnVtYmVyID0gMDtcbiAgcHVibGljIG11c3RhY2hlQ291bnQ6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBhY3Rpb25zOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgYmxhbmtDaGlsZFRleHROb2RlczogbnVtYmVyW10gPSBudWxsO1xuICBwdWJsaWMgc3ltYm9sczogU3ltYm9sVGFibGUgPSBudWxsO1xufVxuXG5leHBvcnQgY2xhc3MgU3ltYm9sVGFibGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN5bWJvbHM6IHN0cmluZ1tdLFxuICAgIHByaXZhdGUgcGFyZW50OiBTeW1ib2xUYWJsZSA9IG51bGxcbiAgKSB7fVxuXG4gIGhhc0xvY2FsVmFyaWFibGUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbGV0IHsgc3ltYm9scywgcGFyZW50IH0gPSB0aGlzO1xuICAgIHJldHVybiBzeW1ib2xzLmluZGV4T2YobmFtZSkgPj0gMCB8fCAocGFyZW50ICYmIHBhcmVudC5oYXNMb2NhbFZhcmlhYmxlKG5hbWUpKTtcbiAgfVxufVxuXG4vKipcbiAqIFRha2VzIGluIGFuIEFTVCBhbmQgb3V0cHV0cyBhIGxpc3Qgb2YgYWN0aW9ucyB0byBiZSBjb25zdW1lZFxuICogYnkgYSBjb21waWxlci4gRm9yIGV4YW1wbGUsIHRoZSB0ZW1wbGF0ZVxuICpcbiAqICAgICBmb297e2Jhcn19PGRpdj5iYXo8L2Rpdj5cbiAqXG4gKiBwcm9kdWNlcyB0aGUgYWN0aW9uc1xuICpcbiAqICAgICBbWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAzXV0sXG4gKiAgICAgIFsnbXVzdGFjaGUnLCBbbXVzdGFjaGVOb2RlLCAxLCAzXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDIsIDMsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV1dXG4gKlxuICogVGhpcyB2aXNpdG9yIHdhbGtzIHRoZSBBU1QgZGVwdGggZmlyc3QgYW5kIGJhY2t3YXJkcy4gQXNcbiAqIGEgcmVzdWx0IHRoZSBib3R0b20tbW9zdCBjaGlsZCB0ZW1wbGF0ZSB3aWxsIGFwcGVhciBhdCB0aGVcbiAqIHRvcCBvZiB0aGUgYWN0aW9ucyBsaXN0IHdoZXJlYXMgdGhlIHJvb3QgdGVtcGxhdGUgd2lsbCBhcHBlYXJcbiAqIGF0IHRoZSBib3R0b20gb2YgdGhlIGxpc3QuIEZvciBleGFtcGxlLFxuICpcbiAqICAgICA8ZGl2Pnt7I2lmfX1mb297e2Vsc2V9fWJhcjxiPjwvYj57ey9pZn19PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMiwgMF1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAxLCAyLCAwXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAxLCAyXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV0sXG4gKiAgICAgIFsnc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAyXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDAsIDEsIDFdXSxcbiAqICAgICAgWydibG9jaycsIFtibG9ja05vZGUsIDAsIDFdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV1dXG4gKlxuICogVGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwgaXMgbWFpbnRhaW5lZCBieSBhIHN0YWNrIG9mIGZyYW1lcy5cbiAqIFdoZW5ldmVyIGEgbm9kZSB3aXRoIGNoaWxkcmVuIGlzIGVudGVyZWQgKGVpdGhlciBhIFByb2dyYW1Ob2RlXG4gKiBvciBhbiBFbGVtZW50Tm9kZSkgYSBmcmFtZSBpcyBwdXNoZWQgb250byB0aGUgc3RhY2suIFRoZSBmcmFtZVxuICogY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwgb2YgdGhhdFxuICogbm9kZS4gRm9yIGV4YW1wbGUsXG4gKlxuICogICAtIGluZGV4IG9mIHRoZSBjdXJyZW50IGNoaWxkIG5vZGUgYmVpbmcgdmlzaXRlZFxuICogICAtIHRoZSBudW1iZXIgb2YgbXVzdGFjaGVzIGNvbnRhaW5lZCB3aXRoaW4gaXRzIGNoaWxkIG5vZGVzXG4gKiAgIC0gdGhlIGxpc3Qgb2YgYWN0aW9ucyBnZW5lcmF0ZWQgYnkgaXRzIGNoaWxkIG5vZGVzXG4gKi9cblxuZnVuY3Rpb24gVGVtcGxhdGVWaXNpdG9yKCkge1xuICB0aGlzLmZyYW1lU3RhY2sgPSBbXTtcbiAgdGhpcy5hY3Rpb25zID0gW107XG4gIHRoaXMucHJvZ3JhbURlcHRoID0gLTE7XG59XG5cbi8vIFRyYXZlcnNhbCBtZXRob2RzXG5cblRlbXBsYXRlVmlzaXRvci5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXNbbm9kZS50eXBlXShub2RlKTtcbn07XG5cblRlbXBsYXRlVmlzaXRvci5wcm90b3R5cGUuUHJvZ3JhbSA9IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgdGhpcy5wcm9ncmFtRGVwdGgrKztcblxuICBsZXQgcGFyZW50RnJhbWUgPSB0aGlzLmdldEN1cnJlbnRGcmFtZSgpO1xuICBsZXQgcHJvZ3JhbUZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcblxuICBpZiAocGFyZW50RnJhbWUpIHtcbiAgICBwcm9ncmFtLnN5bWJvbHMgPSBuZXcgU3ltYm9sVGFibGUocHJvZ3JhbS5ibG9ja1BhcmFtcywgcGFyZW50RnJhbWUuc3ltYm9scyk7XG4gIH0gZWxzZSB7XG4gICAgcHJvZ3JhbS5zeW1ib2xzID0gbmV3IFN5bWJvbFRhYmxlKHByb2dyYW0uYmxvY2tQYXJhbXMpO1xuICB9XG5cbiAgbGV0IHN0YXJ0VHlwZSwgZW5kVHlwZTtcblxuICBpZiAodGhpcy5wcm9ncmFtRGVwdGggPT09IDApIHtcbiAgICBzdGFydFR5cGUgPSAnc3RhcnRQcm9ncmFtJztcbiAgICBlbmRUeXBlID0gJ2VuZFByb2dyYW0nO1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0VHlwZSA9ICdzdGFydEJsb2NrJztcbiAgICBlbmRUeXBlID0gJ2VuZEJsb2NrJztcbiAgfVxuXG4gIHByb2dyYW1GcmFtZS5wYXJlbnROb2RlID0gcHJvZ3JhbTtcbiAgcHJvZ3JhbUZyYW1lLmNoaWxkcmVuID0gcHJvZ3JhbS5ib2R5O1xuICBwcm9ncmFtRnJhbWUuY2hpbGRDb3VudCA9IHByb2dyYW0uYm9keS5sZW5ndGg7XG4gIHByb2dyYW1GcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzID0gW107XG4gIHByb2dyYW1GcmFtZS5hY3Rpb25zLnB1c2goW2VuZFR5cGUsIFtwcm9ncmFtLCB0aGlzLnByb2dyYW1EZXB0aF1dKTtcbiAgcHJvZ3JhbUZyYW1lLnN5bWJvbHMgPSBwcm9ncmFtLnN5bWJvbHM7XG5cbiAgZm9yIChsZXQgaSA9IHByb2dyYW0uYm9keS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHByb2dyYW1GcmFtZS5jaGlsZEluZGV4ID0gaTtcbiAgICB0aGlzLnZpc2l0KHByb2dyYW0uYm9keVtpXSk7XG4gIH1cblxuICBwcm9ncmFtRnJhbWUuYWN0aW9ucy5wdXNoKFtzdGFydFR5cGUsIFtcbiAgICBwcm9ncmFtLCBwcm9ncmFtRnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50LFxuICAgIHByb2dyYW1GcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnJldmVyc2UoKVxuICBdXSk7XG4gIHRoaXMucG9wRnJhbWUoKTtcblxuICB0aGlzLnByb2dyYW1EZXB0aC0tO1xuXG4gIC8vIFB1c2ggdGhlIGNvbXBsZXRlZCB0ZW1wbGF0ZSBpbnRvIHRoZSBnbG9iYWwgYWN0aW9ucyBsaXN0XG4gIGlmIChwYXJlbnRGcmFtZSkgeyBwYXJlbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQrKzsgfVxuICBwdXNoLmFwcGx5KHRoaXMuYWN0aW9ucywgcHJvZ3JhbUZyYW1lLmFjdGlvbnMucmV2ZXJzZSgpKTtcbn07XG5cblRlbXBsYXRlVmlzaXRvci5wcm90b3R5cGUuRWxlbWVudE5vZGUgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIGxldCBwYXJlbnRGcmFtZSA9IHRoaXMuZ2V0Q3VycmVudEZyYW1lKCk7XG4gIGxldCBlbGVtZW50RnJhbWUgPSB0aGlzLnB1c2hGcmFtZSgpO1xuXG4gIGVsZW1lbnRGcmFtZS5wYXJlbnROb2RlID0gZWxlbWVudDtcbiAgZWxlbWVudEZyYW1lLmNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbjtcbiAgZWxlbWVudEZyYW1lLmNoaWxkQ291bnQgPSBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aDtcbiAgZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQgKz0gZWxlbWVudC5tb2RpZmllcnMubGVuZ3RoO1xuICBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICBlbGVtZW50RnJhbWUuc3ltYm9scyA9IHBhcmVudEZyYW1lLnN5bWJvbHM7XG5cbiAgbGV0IGFjdGlvbkFyZ3MgPSBbXG4gICAgZWxlbWVudCxcbiAgICBwYXJlbnRGcmFtZS5jaGlsZEluZGV4LFxuICAgIHBhcmVudEZyYW1lLmNoaWxkQ291bnRcbiAgXTtcblxuICBlbGVtZW50RnJhbWUuYWN0aW9ucy5wdXNoKFsnY2xvc2VFbGVtZW50JywgYWN0aW9uQXJnc10pO1xuXG4gIGZvciAobGV0IGkgPSBlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB0aGlzLnZpc2l0KGVsZW1lbnQuYXR0cmlidXRlc1tpXSk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGVsZW1lbnRGcmFtZS5jaGlsZEluZGV4ID0gaTtcbiAgICB0aGlzLnZpc2l0KGVsZW1lbnQuY2hpbGRyZW5baV0pO1xuICB9XG5cbiAgZWxlbWVudEZyYW1lLmFjdGlvbnMucHVzaChbJ29wZW5FbGVtZW50JywgYWN0aW9uQXJncy5jb25jYXQoW1xuICAgIGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50LCBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2Rlcy5yZXZlcnNlKCkgXSldKTtcbiAgdGhpcy5wb3BGcmFtZSgpO1xuXG4gIC8vIFByb3BhZ2F0ZSB0aGUgZWxlbWVudCdzIGZyYW1lIHN0YXRlIHRvIHRoZSBwYXJlbnQgZnJhbWVcbiAgaWYgKGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50ID4gMCkgeyBwYXJlbnRGcmFtZS5tdXN0YWNoZUNvdW50Kys7IH1cbiAgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50ICs9IGVsZW1lbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQ7XG4gIHB1c2guYXBwbHkocGFyZW50RnJhbWUuYWN0aW9ucywgZWxlbWVudEZyYW1lLmFjdGlvbnMpO1xufTtcblxuVGVtcGxhdGVWaXNpdG9yLnByb3RvdHlwZS5BdHRyTm9kZSA9IGZ1bmN0aW9uKGF0dHIpIHtcbiAgaWYgKGF0dHIudmFsdWUudHlwZSAhPT0gJ1RleHROb2RlJykge1xuICAgIHRoaXMuZ2V0Q3VycmVudEZyYW1lKCkubXVzdGFjaGVDb3VudCsrO1xuICB9XG59O1xuXG5UZW1wbGF0ZVZpc2l0b3IucHJvdG90eXBlLlRleHROb2RlID0gZnVuY3Rpb24odGV4dCkge1xuICBsZXQgZnJhbWUgPSB0aGlzLmdldEN1cnJlbnRGcmFtZSgpO1xuICBpZiAodGV4dC5jaGFycyA9PT0gJycpIHtcbiAgICBmcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnB1c2goZG9tSW5kZXhPZihmcmFtZS5jaGlsZHJlbiwgdGV4dCkpO1xuICB9XG4gIGZyYW1lLmFjdGlvbnMucHVzaChbJ3RleHQnLCBbdGV4dCwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dKTtcbn07XG5cblRlbXBsYXRlVmlzaXRvci5wcm90b3R5cGUuQmxvY2tTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIGxldCBmcmFtZSA9IHRoaXMuZ2V0Q3VycmVudEZyYW1lKCk7XG5cbiAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICBmcmFtZS5hY3Rpb25zLnB1c2goWydibG9jaycsIFtub2RlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0pO1xuXG4gIGlmIChub2RlLmludmVyc2UpIHsgdGhpcy52aXNpdChub2RlLmludmVyc2UpOyB9XG4gIGlmIChub2RlLnByb2dyYW0pIHsgdGhpcy52aXNpdChub2RlLnByb2dyYW0pOyB9XG59O1xuXG5UZW1wbGF0ZVZpc2l0b3IucHJvdG90eXBlLlBhcnRpYWxTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIGxldCBmcmFtZSA9IHRoaXMuZ2V0Q3VycmVudEZyYW1lKCk7XG4gIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbm9kZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dKTtcbn07XG5cblRlbXBsYXRlVmlzaXRvci5wcm90b3R5cGUuQ29tbWVudFN0YXRlbWVudCA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgbGV0IGZyYW1lID0gdGhpcy5nZXRDdXJyZW50RnJhbWUoKTtcbiAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnY29tbWVudCcsIFt0ZXh0LCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0pO1xufTtcblxuVGVtcGxhdGVWaXNpdG9yLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudCA9IGZ1bmN0aW9uKG11c3RhY2hlKSB7XG4gIGxldCBmcmFtZSA9IHRoaXMuZ2V0Q3VycmVudEZyYW1lKCk7XG4gIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbXVzdGFjaGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSk7XG59O1xuXG4vLyBGcmFtZSBoZWxwZXJzXG5cblRlbXBsYXRlVmlzaXRvci5wcm90b3R5cGUuZ2V0Q3VycmVudEZyYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmZyYW1lU3RhY2tbdGhpcy5mcmFtZVN0YWNrLmxlbmd0aCAtIDFdO1xufTtcblxuVGVtcGxhdGVWaXNpdG9yLnByb3RvdHlwZS5wdXNoRnJhbWUgPSBmdW5jdGlvbigpIHtcbiAgbGV0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gIHRoaXMuZnJhbWVTdGFjay5wdXNoKGZyYW1lKTtcbiAgcmV0dXJuIGZyYW1lO1xufTtcblxuVGVtcGxhdGVWaXNpdG9yLnByb3RvdHlwZS5wb3BGcmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5mcmFtZVN0YWNrLnBvcCgpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGVtcGxhdGVWaXNpdG9yO1xuXG4vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiBgZG9tTm9kZWAgaW4gdGhlIGBub2Rlc2AgYXJyYXksIHNraXBwaW5nXG4vLyBvdmVyIGFueSBub2RlcyB3aGljaCBkbyBub3QgcmVwcmVzZW50IERPTSBub2Rlcy5cbmZ1bmN0aW9uIGRvbUluZGV4T2Yobm9kZXMsIGRvbU5vZGUpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBub2RlID0gbm9kZXNbaV07XG5cbiAgICBpZiAobm9kZS50eXBlICE9PSAnVGV4dE5vZGUnICYmIG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykge1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGRvbU5vZGUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG4iXX0= -enifed("glimmer-compiler/lib/utils", ["exports"], function (exports) { - "use strict"; - exports.processOpcodes = processOpcodes; + var createMorphsProgram; + if (result.hasMorphs) { + createMorphsProgram = 'function buildRenderNodes(dom, fragment, contextualElement) {\n' + result.fragmentProcessingProgram + morphs; - function processOpcodes(compiler, opcodes) { - for (var i = 0, l = opcodes.length; i < l; i++) { - var method = opcodes[i][0]; - var params = opcodes[i][1]; - if (params) { - compiler[method].apply(compiler, params); - } else { - compiler[method].call(compiler); - } - } - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItY29tcGlsZXIvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsYUFBQSxjQUFBLENBQStCLFFBQVEsRUFBRSxPQUFPLEVBQUE7QUFDOUMsYUFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN4QyxnQkFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLGdCQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsZ0JBQUksTUFBTSxFQUFFO0FBQ1Ysd0JBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQzFDLE1BQU07QUFDTCx3QkFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNqQztTQUNGO0tBQ0YiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcHJvY2Vzc09wY29kZXMoY29tcGlsZXIsIG9wY29kZXMpIHtcbiAgZm9yIChsZXQgaT0wLCBsPW9wY29kZXMubGVuZ3RoOyBpPGw7IGkrKykge1xuICAgIGxldCBtZXRob2QgPSBvcGNvZGVzW2ldWzBdO1xuICAgIGxldCBwYXJhbXMgPSBvcGNvZGVzW2ldWzFdO1xuICAgIGlmIChwYXJhbXMpIHtcbiAgICAgIGNvbXBpbGVyW21ldGhvZF0uYXBwbHkoY29tcGlsZXIsIHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBpbGVyW21ldGhvZF0uY2FsbChjb21waWxlcik7XG4gICAgfVxuICB9XG59Il19 -enifed('glimmer-reference/index', ['exports', 'glimmer-reference/lib/reference', 'glimmer-reference/lib/const', 'glimmer-reference/lib/validators', 'glimmer-reference/lib/utils', 'glimmer-reference/lib/iterable'], function (exports, _glimmerReferenceLibReference, _glimmerReferenceLibConst, _glimmerReferenceLibValidators, _glimmerReferenceLibUtils, _glimmerReferenceLibIterable) { - 'use strict'; + if (this.hasOpenBoundary) { + createMorphsProgram += indent + " dom.insertBoundary(fragment, 0);\n"; + } - exports.BasicReference = _glimmerReferenceLibReference.Reference; - exports.BasicPathReference = _glimmerReferenceLibReference.PathReference; - exports.ConstReference = _glimmerReferenceLibConst.ConstReference; - exports.isConst = _glimmerReferenceLibConst.isConst; - babelHelpers.defaults(exports, babelHelpers.interopExportWildcard(_glimmerReferenceLibValidators, babelHelpers.defaults)); - exports.Reference = _glimmerReferenceLibValidators.VersionedReference; - exports.PathReference = _glimmerReferenceLibValidators.VersionedPathReference; - exports.referenceFromParts = _glimmerReferenceLibUtils.referenceFromParts; - exports.IterationItem = _glimmerReferenceLibIterable.IterationItem; - exports.Iterator = _glimmerReferenceLibIterable.Iterator; - exports.Iterable = _glimmerReferenceLibIterable.Iterable; - exports.OpaqueIterator = _glimmerReferenceLibIterable.OpaqueIterator; - exports.OpaqueIterable = _glimmerReferenceLibIterable.OpaqueIterable; - exports.AbstractIterator = _glimmerReferenceLibIterable.AbstractIterator; - exports.AbstractIterable = _glimmerReferenceLibIterable.AbstractIterable; - exports.IterationArtifacts = _glimmerReferenceLibIterable.IterationArtifacts; - exports.ReferenceIterator = _glimmerReferenceLibIterable.ReferenceIterator; - exports.IteratorSynchronizer = _glimmerReferenceLibIterable.IteratorSynchronizer; - exports.IteratorSynchronizerDelegate = _glimmerReferenceLibIterable.IteratorSynchronizerDelegate; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcmVmZXJlbmNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztVQUNlLGNBQWMsaUNBQTNCLFNBQVM7VUFDUSxrQkFBa0IsaUNBQW5DLGFBQWE7VUFJYixjQUFjLDZCQUFkLGNBQWM7VUFDZCxPQUFPLDZCQUFQLE9BQU87O1VBTWUsU0FBUyxrQ0FBL0Isa0JBQWtCO1VBQ1EsYUFBYSxrQ0FBdkMsc0JBQXNCO1VBSXRCLGtCQUFrQiw2QkFBbEIsa0JBQWtCO1VBSWxCLGFBQWEsZ0NBQWIsYUFBYTtVQUNiLFFBQVEsZ0NBQVIsUUFBUTtVQUNSLFFBQVEsZ0NBQVIsUUFBUTtVQUNSLGNBQWMsZ0NBQWQsY0FBYztVQUNkLGNBQWMsZ0NBQWQsY0FBYztVQUNkLGdCQUFnQixnQ0FBaEIsZ0JBQWdCO1VBQ2hCLGdCQUFnQixnQ0FBaEIsZ0JBQWdCO1VBQ2hCLGtCQUFrQixnQ0FBbEIsa0JBQWtCO1VBQ2xCLGlCQUFpQixnQ0FBakIsaUJBQWlCO1VBQ2pCLG9CQUFvQixnQ0FBcEIsb0JBQW9CO1VBQ3BCLDRCQUE0QixnQ0FBNUIsNEJBQTRCIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgUmVmZXJlbmNlIGFzIEJhc2ljUmVmZXJlbmNlLFxuICBQYXRoUmVmZXJlbmNlIGFzIEJhc2ljUGF0aFJlZmVyZW5jZVxufSBmcm9tICcuL2xpYi9yZWZlcmVuY2UnO1xuXG5leHBvcnQge1xuICBDb25zdFJlZmVyZW5jZSxcbiAgaXNDb25zdFxufSBmcm9tICcuL2xpYi9jb25zdCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQge1xuICBWZXJzaW9uZWRSZWZlcmVuY2UgYXMgUmVmZXJlbmNlLFxuICBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlIGFzIFBhdGhSZWZlcmVuY2Vcbn0gZnJvbSAnLi9saWIvdmFsaWRhdG9ycyc7XG5cbmV4cG9ydCB7XG4gIHJlZmVyZW5jZUZyb21QYXJ0c1xufSBmcm9tICcuL2xpYi91dGlscyc7XG5cbmV4cG9ydCB7XG4gIEl0ZXJhdGlvbkl0ZW0sXG4gIEl0ZXJhdG9yLFxuICBJdGVyYWJsZSxcbiAgT3BhcXVlSXRlcmF0b3IsXG4gIE9wYXF1ZUl0ZXJhYmxlLFxuICBBYnN0cmFjdEl0ZXJhdG9yLFxuICBBYnN0cmFjdEl0ZXJhYmxlLFxuICBJdGVyYXRpb25BcnRpZmFjdHMsXG4gIFJlZmVyZW5jZUl0ZXJhdG9yLFxuICBJdGVyYXRvclN5bmNocm9uaXplcixcbiAgSXRlcmF0b3JTeW5jaHJvbml6ZXJEZWxlZ2F0ZVxufSBmcm9tICcuL2xpYi9pdGVyYWJsZSc7XG4iXX0= -enifed('glimmer-reference/lib/const', ['exports', 'glimmer-reference/lib/validators'], function (exports, _glimmerReferenceLibValidators) { - 'use strict'; + if (this.hasCloseBoundary) { + createMorphsProgram += indent + " dom.insertBoundary(fragment, null);\n"; + } - exports.isConst = isConst; + createMorphsProgram += indent + ' return morphs;\n' + indent + '}'; + } else { + createMorphsProgram = 'function buildRenderNodes() { return []; }'; + } - var ConstReference = (function () { - function ConstReference(inner) { - this.inner = inner; - this.tag = _glimmerReferenceLibValidators.CONSTANT_TAG; - } + result.createMorphsProgram = createMorphsProgram; - ConstReference.prototype.value = function value() { - return this.inner; - }; + return result; + }; - return ConstReference; - })(); + prototype.prepareArray = function (length) { + var values = []; - exports.ConstReference = ConstReference; - - function isConst(reference) { - return reference.tag === _glimmerReferenceLibValidators.CONSTANT_TAG; + for (var i = 0; i < length; i++) { + values.push(this.expressionStack.pop()); } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcmVmZXJlbmNlL2xpYi9jb25zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQUdBLGNBQUE7QUFHRSxpQkFIRixjQUFBLENBR3dCLEtBQVEsRUFBQTtBQUFSLGdCQUFBLENBQUEsS0FBSyxHQUFMLEtBQUssQ0FBRztBQUZ2QixnQkFBQSxDQUFBLEdBQUcsa0NBSkgsWUFBWSxBQUltQixDQUFDO1NBRUo7O0FBSHJDLHNCQUFBLFdBS0UsS0FBSyxHQUFBLGlCQUFBO0FBQVEsbUJBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztTQUFFOztlQUxuQyxjQUFBOzs7OztBQVFBLGFBQUEsT0FBQSxDQUF3QixTQUFxQyxFQUFBO0FBQzNELGVBQU8sU0FBUyxDQUFDLEdBQUcsb0NBWmIsWUFBWSxBQVlrQixDQUFDO0tBQ3ZDIiwiZmlsZSI6ImNvbnN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ09OU1RBTlRfVEFHLCBWZXJzaW9uZWRSZWZlcmVuY2UsIFJldmlzaW9uVGFnIH0gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IE9wYXF1ZSB9IGZyb20gJ2dsaW1tZXItdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBDb25zdFJlZmVyZW5jZTxUPiBpbXBsZW1lbnRzIFZlcnNpb25lZFJlZmVyZW5jZTxUPiB7XG4gIHB1YmxpYyB0YWc6IFJldmlzaW9uVGFnID0gQ09OU1RBTlRfVEFHO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbm5lcjogVCkgeyB9XG5cbiAgdmFsdWUoKTogVCB7IHJldHVybiB0aGlzLmlubmVyOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0KHJlZmVyZW5jZTogVmVyc2lvbmVkUmVmZXJlbmNlPE9wYXF1ZT4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHJlZmVyZW5jZS50YWcgPT09IENPTlNUQU5UX1RBRztcbn1cbiJdfQ== -enifed("glimmer-reference/lib/iterable", ["exports", "glimmer-util"], function (exports, _glimmerUtil) { - "use strict"; - var ListItem = (function (_ListNode) { - babelHelpers.inherits(ListItem, _ListNode); + this.expressionStack.push(values); + }; - function ListItem(iterable, result) { - _ListNode.call(this, iterable.valueReferenceFor(result)); - this.retained = false; - this.seen = false; - this.key = result.key; - this.iterable = iterable; - this.memo = iterable.memoReferenceFor(result); - } + prototype.prepareObject = function (size) { + var pairs = []; - ListItem.prototype.update = function update(item) { - this.retained = true; - this.iterable.updateValueReference(this.value, item); - this.iterable.updateMemoReference(this.memo, item); - }; + for (var i = 0; i < size; i++) { + pairs.push(this.expressionStack.pop(), this.expressionStack.pop()); + } - ListItem.prototype.shouldRemove = function shouldRemove() { - return !this.retained; - }; + this.expressionStack.push(pairs); + }; - ListItem.prototype.reset = function reset() { - this.retained = false; - this.seen = false; - }; + prototype.openBoundary = function () { + this.hasOpenBoundary = true; + }; - return ListItem; - })(_glimmerUtil.ListNode); + prototype.closeBoundary = function () { + this.hasCloseBoundary = true; + }; - exports.ListItem = ListItem; + prototype.pushLiteral = function (value) { + this.expressionStack.push(value); + }; - var IterationArtifacts = (function () { - function IterationArtifacts(iterable) { - this.map = _glimmerUtil.dict(); - this.list = new _glimmerUtil.LinkedList(); - this.tag = iterable.tag; - this.iterable = iterable; - } + prototype.pushGetHook = function (path, meta) { + this.expressionStack.push(_htmlbarsUtilTemplateUtils.buildStatement('get', path, meta)); + }; - IterationArtifacts.prototype.isEmpty = function isEmpty() { - var iterator = this.iterator = this.iterable.iterate(); - return iterator.isEmpty(); - }; + prototype.pushSexprHook = function (meta) { + var statement = _htmlbarsUtilTemplateUtils.buildStatement('subexpr', this.expressionStack.pop(), this.expressionStack.pop(), this.expressionStack.pop(), meta); - IterationArtifacts.prototype.iterate = function iterate() { - var iterator = this.iterator || this.iterable.iterate(); - this.iterator = null; - return iterator; - }; + this.expressionStack.push(statement); + }; - IterationArtifacts.prototype.has = function has(key) { - return !!this.map[key]; - }; + prototype.pushConcatHook = function () { + this.expressionStack.push(_htmlbarsUtilTemplateUtils.buildStatement('concat', this.expressionStack.pop())); + }; - IterationArtifacts.prototype.get = function get(key) { - return this.map[key]; - }; + prototype.printSetHook = function (name) { + this.locals.push(name); + }; - IterationArtifacts.prototype.wasSeen = function wasSeen(key) { - var node = this.map[key]; - return node && node.seen; - }; + prototype.printBlockHook = function (templateId, inverseId, meta) { + this.pushStatement('block', this.expressionStack.pop(), // path + this.expressionStack.pop(), // params + this.expressionStack.pop(), // hash + templateId, inverseId, meta); + }; - IterationArtifacts.prototype.append = function append(item) { - var map = this.map; - var list = this.list; - var iterable = this.iterable; + prototype.printInlineHook = function (meta) { + var path = this.expressionStack.pop(); + var params = this.expressionStack.pop(); + var hash = this.expressionStack.pop(); - var node = map[item.key] = new ListItem(iterable, item); - list.append(node); - return node; - }; + this.pushStatement('inline', path, params, hash, meta); + }; - IterationArtifacts.prototype.insertBefore = function insertBefore(item, reference) { - var map = this.map; - var list = this.list; - var iterable = this.iterable; + prototype.printContentHook = function (meta) { + this.pushStatement('content', this.expressionStack.pop(), meta); + }; - var node = map[item.key] = new ListItem(iterable, item); - node.retained = true; - list.insertBefore(node, reference); - return node; - }; + prototype.printComponentHook = function (templateId) { + this.pushStatement('component', this.expressionStack.pop(), // path + this.expressionStack.pop(), // attrs + templateId); + }; - IterationArtifacts.prototype.move = function move(item, reference) { - var list = this.list; + prototype.printAttributeHook = function () { + this.pushStatement('attribute', this.expressionStack.pop(), // name + this.expressionStack.pop() // value; + ); + }; - item.retained = true; - list.remove(item); - list.insertBefore(item, reference); - }; + prototype.printElementHook = function (meta) { + this.pushStatement('element', this.expressionStack.pop(), // path + this.expressionStack.pop(), // params + this.expressionStack.pop(), // hash + meta); + }; - IterationArtifacts.prototype.remove = function remove(item) { - var list = this.list; + prototype.createMorph = function (morphNum, parentPath, startIndex, endIndex, escaped) { + var isRoot = parentPath.length === 0; + var parent = this.getParent(); - list.remove(item); - delete this.map[item.key]; - }; + var morphMethod = escaped ? 'createMorphAt' : 'createUnsafeMorphAt'; + var morph = "dom." + morphMethod + "(" + parent + "," + (startIndex === null ? "-1" : startIndex) + "," + (endIndex === null ? "-1" : endIndex) + (isRoot ? ",contextualElement)" : ")"); - IterationArtifacts.prototype.nextNode = function nextNode(item) { - return this.list.nextNode(item); - }; + this.morphs[morphNum] = morph; + }; - IterationArtifacts.prototype.head = function head() { - return this.list.head(); - }; + prototype.createAttrMorph = function (attrMorphNum, elementNum, name, escaped, namespace) { + var morphMethod = escaped ? 'createAttrMorph' : 'createUnsafeAttrMorph'; + var morph = "dom." + morphMethod + "(element" + elementNum + ", '" + name + (namespace ? "', '" + namespace : '') + "')"; + this.morphs[attrMorphNum] = morph; + }; - return IterationArtifacts; - })(); + prototype.createElementMorph = function (morphNum, elementNum) { + var morphMethod = 'createElementMorph'; + var morph = "dom." + morphMethod + "(element" + elementNum + ")"; + this.morphs[morphNum] = morph; + }; - exports.IterationArtifacts = IterationArtifacts; + prototype.repairClonedNode = function (blankChildTextNodes, isElementChecked) { + var parent = this.getParent(), + processing = 'if (this.cachedFragment) { dom.repairClonedNode(' + parent + ',' + _htmlbarsUtilQuoting.array(blankChildTextNodes) + (isElementChecked ? ',true' : '') + '); }'; + this.fragmentProcessing.push(processing); + }; - var ReferenceIterator = (function () { - // if anyone needs to construct this object with something other than - // an iterable, let @wycats know. + prototype.shareElement = function (elementNum) { + var elementNodesName = "element" + elementNum; + this.fragmentProcessing.push('var ' + elementNodesName + ' = ' + this.getParent() + ';'); + this.parents[this.parents.length - 1] = [elementNodesName]; + }; - function ReferenceIterator(iterable) { - this.iterator = null; - var artifacts = new IterationArtifacts(iterable); - this.artifacts = artifacts; - } + prototype.consumeParent = function (i) { + var newParent = this.lastParent().slice(); + newParent.push(i); - ReferenceIterator.prototype.next = function next() { - var artifacts = this.artifacts; + this.parents.push(newParent); + }; - var iterator = this.iterator = this.iterator || artifacts.iterate(); - var item = iterator.next(); - if (!item) return null; - return artifacts.append(item); - }; + prototype.popParent = function () { + this.parents.pop(); + }; - return ReferenceIterator; - })(); + prototype.getParent = function () { + var last = this.lastParent().slice(); + var frag = last.shift(); - exports.ReferenceIterator = ReferenceIterator; + if (!last.length) { + return frag; + } - var Phase; - (function (Phase) { - Phase[Phase["Append"] = 0] = "Append"; - Phase[Phase["Prune"] = 1] = "Prune"; - Phase[Phase["Done"] = 2] = "Done"; - })(Phase || (Phase = {})); + return 'dom.childAt(' + frag + ', [' + last.join(', ') + '])'; + }; - var IteratorSynchronizer = (function () { - function IteratorSynchronizer(_ref) { - var target = _ref.target; - var artifacts = _ref.artifacts; + prototype.lastParent = function () { + return this.parents[this.parents.length - 1]; + }; - this.target = target; - this.artifacts = artifacts; - this.iterator = artifacts.iterate(); - this.current = artifacts.head(); - } - - IteratorSynchronizer.prototype.sync = function sync() { - var phase = Phase.Append; - while (true) { - switch (phase) { - case Phase.Append: - phase = this.nextAppend(); - break; - case Phase.Prune: - phase = this.nextPrune(); - break; - case Phase.Done: - this.nextDone(); - return; - } - } - }; - - IteratorSynchronizer.prototype.advanceToKey = function advanceToKey(key) { - var current = this.current; - var artifacts = this.artifacts; - - var seek = current; - while (seek && seek.key !== key) { - seek.seen = true; - seek = artifacts.nextNode(seek); - } - this.current = seek && artifacts.nextNode(seek); - }; - - IteratorSynchronizer.prototype.nextAppend = function nextAppend() { - var iterator = this.iterator; - var current = this.current; - var artifacts = this.artifacts; - - var item = iterator.next(); - if (item === null) { - return this.startPrune(); - } - var key = item.key; - - if (current && current.key === key) { - this.nextRetain(item); - } else if (artifacts.has(key)) { - this.nextMove(item); - } else { - this.nextInsert(item); - } - return Phase.Append; - }; - - IteratorSynchronizer.prototype.nextRetain = function nextRetain(item) { - var artifacts = this.artifacts; - var current = this.current; - - current.update(item); - this.current = artifacts.nextNode(current); - this.target.retain(item.key, current.value, current.memo); - }; - - IteratorSynchronizer.prototype.nextMove = function nextMove(item) { - var current = this.current; - var artifacts = this.artifacts; - var target = this.target; - var key = item.key; - - var found = artifacts.get(item.key); - found.update(item); - if (artifacts.wasSeen(item.key)) { - artifacts.move(found, current); - target.move(found.key, found.value, found.memo, current ? current.key : null); - } else { - this.advanceToKey(key); - } - }; - - IteratorSynchronizer.prototype.nextInsert = function nextInsert(item) { - var artifacts = this.artifacts; - var target = this.target; - var current = this.current; - - var node = artifacts.insertBefore(item, current); - target.insert(node.key, node.value, node.memo, current ? current.key : null); - }; - - IteratorSynchronizer.prototype.startPrune = function startPrune() { - this.current = this.artifacts.head(); - return Phase.Prune; - }; - - IteratorSynchronizer.prototype.nextPrune = function nextPrune() { - var artifacts = this.artifacts; - var target = this.target; - var current = this.current; - - if (current === null) { - return Phase.Done; - } - var node = current; - this.current = artifacts.nextNode(node); - if (node.shouldRemove()) { - artifacts.remove(node); - target.delete(node.key); - } else { - node.reset(); - } - return Phase.Prune; - }; - - IteratorSynchronizer.prototype.nextDone = function nextDone() { - this.target.done(); - }; - - return IteratorSynchronizer; - })(); - - exports.IteratorSynchronizer = IteratorSynchronizer; + prototype.pushStatement = function () { + this.statements.push(_htmlbarsUtilTemplateUtils.buildStatement.apply(undefined, arguments)); + }; }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcmVmZXJlbmNlL2xpYi9pdGVyYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7UUFrQ0EsUUFBQTs4QkFBQSxRQUFBOztBQU9FLGlCQVBGLFFBQUEsQ0FPYyxRQUF3QixFQUFFLE1BQTJCLEVBQUE7QUFDL0QsaUNBQU0sUUFBUSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFMckMsZ0JBQUEsQ0FBQSxRQUFRLEdBQVksS0FBSyxDQUFDO0FBQzFCLGdCQUFBLENBQUEsSUFBSSxHQUFZLEtBQUssQ0FBQztBQUszQixnQkFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ3RCLGdCQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUN6QixnQkFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDL0M7O0FBWkgsZ0JBQUEsV0FjRSxNQUFNLEdBQUEsZ0JBQUMsSUFBeUIsRUFBQTtBQUM5QixnQkFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDckIsZ0JBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyRCxnQkFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3BEOztBQWxCSCxnQkFBQSxXQW9CRSxZQUFZLEdBQUEsd0JBQUE7QUFDVixtQkFBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDdkI7O0FBdEJILGdCQUFBLFdBd0JFLEtBQUssR0FBQSxpQkFBQTtBQUNILGdCQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUN0QixnQkFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDbkI7O2VBM0JILFFBQUE7b0JBbENxQixRQUFROzs7O1FBZ0U3QixrQkFBQTtBQVFFLGlCQVJGLGtCQUFBLENBUWMsUUFBd0IsRUFBQTtBQUg1QixnQkFBQSxDQUFBLEdBQUcsR0FBRyxhQXJFdUIsSUFBSSxFQXFFWCxDQUFDO0FBQ3ZCLGdCQUFBLENBQUEsSUFBSSxHQUFHLGlCQXRFUixVQUFVLEVBc0V3QixDQUFDO0FBR3hDLGdCQUFJLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7QUFDeEIsZ0JBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1NBQzFCOztBQVhILDBCQUFBLFdBYUUsT0FBTyxHQUFBLG1CQUFBO0FBQ0wsZ0JBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN2RCxtQkFBTyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDM0I7O0FBaEJILDBCQUFBLFdBa0JFLE9BQU8sR0FBQSxtQkFBQTtBQUNMLGdCQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDeEQsZ0JBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBRXJCLG1CQUFPLFFBQVEsQ0FBQztTQUNqQjs7QUF2QkgsMEJBQUEsV0F5QkUsR0FBRyxHQUFBLGFBQUMsR0FBVyxFQUFBO0FBQ2IsbUJBQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEI7O0FBM0JILDBCQUFBLFdBNkJFLEdBQUcsR0FBQSxhQUFDLEdBQVcsRUFBQTtBQUNiLG1CQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdEI7O0FBL0JILDBCQUFBLFdBaUNFLE9BQU8sR0FBQSxpQkFBQyxHQUFXLEVBQUE7QUFDakIsZ0JBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsbUJBQU8sSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDMUI7O0FBcENILDBCQUFBLFdBc0NFLE1BQU0sR0FBQSxnQkFBQyxJQUF5QixFQUFBO2dCQUN4QixHQUFHLEdBQXFCLElBQUksQ0FBNUIsR0FBRztnQkFBRSxJQUFJLEdBQWUsSUFBSSxDQUF2QixJQUFJO2dCQUFFLFFBQVEsR0FBSyxJQUFJLENBQWpCLFFBQVE7O0FBQ3pCLGdCQUFJLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUV4RCxnQkFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQixtQkFBTyxJQUFJLENBQUM7U0FDYjs7QUE1Q0gsMEJBQUEsV0E4Q0UsWUFBWSxHQUFBLHNCQUFDLElBQXlCLEVBQUUsU0FBbUIsRUFBQTtnQkFDbkQsR0FBRyxHQUFxQixJQUFJLENBQTVCLEdBQUc7Z0JBQUUsSUFBSSxHQUFlLElBQUksQ0FBdkIsSUFBSTtnQkFBRSxRQUFRLEdBQUssSUFBSSxDQUFqQixRQUFROztBQUV6QixnQkFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEQsZ0JBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLGdCQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNuQyxtQkFBTyxJQUFJLENBQUM7U0FDYjs7QUFyREgsMEJBQUEsV0F1REUsSUFBSSxHQUFBLGNBQUMsSUFBYyxFQUFFLFNBQW1CLEVBQUE7Z0JBQ2hDLElBQUksR0FBSyxJQUFJLENBQWIsSUFBSTs7QUFFVixnQkFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDckIsZ0JBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEIsZ0JBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ3BDOztBQTdESCwwQkFBQSxXQStERSxNQUFNLEdBQUEsZ0JBQUMsSUFBYyxFQUFBO2dCQUNiLElBQUksR0FBSyxJQUFJLENBQWIsSUFBSTs7QUFFVixnQkFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQixtQkFBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzQjs7QUFwRUgsMEJBQUEsV0FzRUUsUUFBUSxHQUFBLGtCQUFDLElBQWMsRUFBQTtBQUNyQixtQkFBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqQzs7QUF4RUgsMEJBQUEsV0EwRUUsSUFBSSxHQUFBLGdCQUFBO0FBQ0YsbUJBQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN6Qjs7ZUE1RUgsa0JBQUE7Ozs7O1FBK0VBLGlCQUFBOzs7O0FBTUUsaUJBTkYsaUJBQUEsQ0FNYyxRQUF3QixFQUFBO0FBSjVCLGdCQUFBLENBQUEsUUFBUSxHQUFtQixJQUFJLENBQUM7QUFLdEMsZ0JBQUksU0FBUyxHQUFHLElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakQsZ0JBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1NBQzVCOztBQVRILHlCQUFBLFdBV0UsSUFBSSxHQUFBLGdCQUFBO2dCQUNJLFNBQVMsR0FBSyxJQUFJLENBQWxCLFNBQVM7O0FBRWYsZ0JBQUksUUFBUSxHQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLEFBQUMsQ0FBQztBQUV0RSxnQkFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0FBRTNCLGdCQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBRXZCLG1CQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0I7O2VBckJILGlCQUFBOzs7OztBQXFDQSxRQUFLLEtBSUosQ0FBQTtBQUpELEtBQUEsVUFBSyxLQUFLLEVBQUE7QUFDUixhQUFBLENBQUEsS0FBQSxDQUFBLFFBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLFFBQU0sQ0FBQTtBQUNOLGFBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsT0FBSyxDQUFBO0FBQ0wsYUFBQSxDQUFBLEtBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxNQUFJLENBQUE7S0FDTCxDQUFBLENBSkksS0FBSyxLQUFMLEtBQUssR0FBQSxFQUFBLENBQUEsQ0FBQSxDQUlUOztRQUVELG9CQUFBO0FBTUUsaUJBTkYsb0JBQUEsQ0FNYyxJQUFrRCxFQUFBO2dCQUFoRCxNQUFNLEdBQVIsSUFBa0QsQ0FBaEQsTUFBTTtnQkFBRSxTQUFTLEdBQW5CLElBQWtELENBQXhDLFNBQVM7O0FBQzdCLGdCQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixnQkFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDM0IsZ0JBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3BDLGdCQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNqQzs7QUFYSCw0QkFBQSxXQWFFLElBQUksR0FBQSxnQkFBQTtBQUNGLGdCQUFJLEtBQUssR0FBVSxLQUFLLENBQUMsTUFBTSxDQUFDO0FBRWhDLG1CQUFPLElBQUksRUFBRTtBQUNYLHdCQUFRLEtBQUs7QUFDWCx5QkFBSyxLQUFLLENBQUMsTUFBTTtBQUFFLDZCQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQUMsOEJBQU07QUFBQSxBQUNwRCx5QkFBSyxLQUFLLENBQUMsS0FBSztBQUFFLDZCQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQUMsOEJBQU07QUFBQSxBQUNsRCx5QkFBSyxLQUFLLENBQUMsSUFBSTtBQUFFLDRCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFBQywrQkFBTztBQUFBLGlCQUMxQzthQUNGO1NBQ0Y7O0FBdkJILDRCQUFBLFdBeUJVLFlBQVksR0FBQSxzQkFBQyxHQUFXLEVBQUE7Z0JBQ3hCLE9BQU8sR0FBZ0IsSUFBSSxDQUEzQixPQUFPO2dCQUFFLFNBQVMsR0FBSyxJQUFJLENBQWxCLFNBQVM7O0FBRXhCLGdCQUFJLElBQUksR0FBRyxPQUFPLENBQUM7QUFFbkIsbUJBQU8sSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFO0FBQy9CLG9CQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixvQkFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakM7QUFFRCxnQkFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqRDs7QUFwQ0gsNEJBQUEsV0FzQ1UsVUFBVSxHQUFBLHNCQUFBO2dCQUNWLFFBQVEsR0FBeUIsSUFBSSxDQUFyQyxRQUFRO2dCQUFFLE9BQU8sR0FBZ0IsSUFBSSxDQUEzQixPQUFPO2dCQUFFLFNBQVMsR0FBSyxJQUFJLENBQWxCLFNBQVM7O0FBRWxDLGdCQUFJLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7QUFFM0IsZ0JBQUksSUFBSSxLQUFLLElBQUksRUFBRTtBQUNqQix1QkFBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDMUI7Z0JBRUssR0FBRyxHQUFLLElBQUksQ0FBWixHQUFHOztBQUVULGdCQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRTtBQUNsQyxvQkFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2QixNQUFNLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUM3QixvQkFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyQixNQUFNO0FBQ0wsb0JBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkI7QUFFRCxtQkFBTyxLQUFLLENBQUMsTUFBTSxDQUFDO1NBQ3JCOztBQTFESCw0QkFBQSxXQTREVSxVQUFVLEdBQUEsb0JBQUMsSUFBeUIsRUFBQTtnQkFDcEMsU0FBUyxHQUFjLElBQUksQ0FBM0IsU0FBUztnQkFBRSxPQUFPLEdBQUssSUFBSSxDQUFoQixPQUFPOztBQUV4QixtQkFBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixnQkFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLGdCQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNEOztBQWxFSCw0QkFBQSxXQW9FVSxRQUFRLEdBQUEsa0JBQUMsSUFBeUIsRUFBQTtnQkFDbEMsT0FBTyxHQUF3QixJQUFJLENBQW5DLE9BQU87Z0JBQUUsU0FBUyxHQUFhLElBQUksQ0FBMUIsU0FBUztnQkFBRSxNQUFNLEdBQUssSUFBSSxDQUFmLE1BQU07Z0JBQzFCLEdBQUcsR0FBSyxJQUFJLENBQVosR0FBRzs7QUFFVCxnQkFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsaUJBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFbkIsZ0JBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDL0IseUJBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLHNCQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQy9FLE1BQU07QUFDTCxvQkFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN4QjtTQUNGOztBQWpGSCw0QkFBQSxXQW1GVSxVQUFVLEdBQUEsb0JBQUMsSUFBeUIsRUFBQTtnQkFDcEMsU0FBUyxHQUFzQixJQUFJLENBQW5DLFNBQVM7Z0JBQUUsTUFBTSxHQUFjLElBQUksQ0FBeEIsTUFBTTtnQkFBRSxPQUFPLEdBQUssSUFBSSxDQUFoQixPQUFPOztBQUVoQyxnQkFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakQsa0JBQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7U0FDOUU7O0FBeEZILDRCQUFBLFdBMEZVLFVBQVUsR0FBQSxzQkFBQTtBQUNoQixnQkFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JDLG1CQUFPLEtBQUssQ0FBQyxLQUFLLENBQUM7U0FDcEI7O0FBN0ZILDRCQUFBLFdBK0ZVLFNBQVMsR0FBQSxxQkFBQTtnQkFDVCxTQUFTLEdBQXNCLElBQUksQ0FBbkMsU0FBUztnQkFBRSxNQUFNLEdBQWMsSUFBSSxDQUF4QixNQUFNO2dCQUFFLE9BQU8sR0FBSyxJQUFJLENBQWhCLE9BQU87O0FBRWhDLGdCQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsdUJBQU8sS0FBSyxDQUFDLElBQUksQ0FBQzthQUNuQjtBQUVELGdCQUFJLElBQUksR0FBRyxPQUFPLENBQUM7QUFDbkIsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUV4QyxnQkFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUU7QUFDdkIseUJBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkIsc0JBQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3pCLE1BQU07QUFDTCxvQkFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2Q7QUFFRCxtQkFBTyxLQUFLLENBQUMsS0FBSyxDQUFDO1NBQ3BCOztBQWpISCw0QkFBQSxXQW1IVSxRQUFRLEdBQUEsb0JBQUE7QUFDZCxnQkFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNwQjs7ZUFySEgsb0JBQUEiLCJmaWxlIjoiaXRlcmFibGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaW5rZWRMaXN0LCBMaXN0Tm9kZSwgT3BhcXVlLCBkaWN0IH0gZnJvbSAnZ2xpbW1lci11dGlsJztcbmltcG9ydCB7IFZlcnNpb25lZFBhdGhSZWZlcmVuY2UgYXMgUGF0aFJlZmVyZW5jZSwgUmV2aXNpb25UYWcgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEl0ZXJhdGlvbkl0ZW08VCwgVT4ge1xuICBrZXk6IHN0cmluZztcbiAgdmFsdWU6IFQ7XG4gIG1lbW86IFU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWJzdHJhY3RJdGVyYXRvcjxULCBVLCBWIGV4dGVuZHMgSXRlcmF0aW9uSXRlbTxULCBVPj4ge1xuICBpc0VtcHR5KCk6IGJvb2xlYW47XG4gIG5leHQoKTogVjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBYnN0cmFjdEl0ZXJhYmxlPFQsIFUsIEl0ZW1UeXBlIGV4dGVuZHMgSXRlcmF0aW9uSXRlbTxULCBVPiwgVmFsdWVSZWZlcmVuY2VUeXBlIGV4dGVuZHMgUGF0aFJlZmVyZW5jZTxUPiwgTWVtb1JlZmVyZW5jZVR5cGUgZXh0ZW5kcyBQYXRoUmVmZXJlbmNlPFU+PiB7XG4gIHRhZzogUmV2aXNpb25UYWc7XG4gIGl0ZXJhdGUoKTogQWJzdHJhY3RJdGVyYXRvcjxULCBVLCBJdGVtVHlwZT47XG5cbiAgdmFsdWVSZWZlcmVuY2VGb3IoaXRlbTogSXRlbVR5cGUpOiBWYWx1ZVJlZmVyZW5jZVR5cGU7XG4gIHVwZGF0ZVZhbHVlUmVmZXJlbmNlKHJlZmVyZW5jZTogVmFsdWVSZWZlcmVuY2VUeXBlLCBpdGVtOiBJdGVtVHlwZSk7XG5cbiAgbWVtb1JlZmVyZW5jZUZvcihpdGVtOiBJdGVtVHlwZSk6IE1lbW9SZWZlcmVuY2VUeXBlO1xuICB1cGRhdGVNZW1vUmVmZXJlbmNlKHJlZmVyZW5jZTogTWVtb1JlZmVyZW5jZVR5cGUsIGl0ZW06IEl0ZW1UeXBlKTtcbn1cblxuZXhwb3J0IHR5cGUgSXRlcmF0b3I8VCwgVT4gPSBBYnN0cmFjdEl0ZXJhdG9yPFQsIFUsIEl0ZXJhdGlvbkl0ZW08VCwgVT4+O1xuZXhwb3J0IHR5cGUgSXRlcmFibGU8VCwgVT4gPSBBYnN0cmFjdEl0ZXJhYmxlPFQsIFUsIEl0ZXJhdGlvbkl0ZW08VCwgVT4sIFBhdGhSZWZlcmVuY2U8VD4sIFBhdGhSZWZlcmVuY2U8VT4+O1xuXG5leHBvcnQgdHlwZSBPcGFxdWVJdGVyYXRpb25JdGVtID0gSXRlcmF0aW9uSXRlbTxPcGFxdWUsIE9wYXF1ZT47XG5leHBvcnQgdHlwZSBPcGFxdWVJdGVyYXRvciA9IEFic3RyYWN0SXRlcmF0b3I8T3BhcXVlLCBPcGFxdWUsIE9wYXF1ZUl0ZXJhdGlvbkl0ZW0+O1xuZXhwb3J0IHR5cGUgT3BhcXVlUGF0aFJlZmVyZW5jZSA9IFBhdGhSZWZlcmVuY2U8T3BhcXVlPjtcbmV4cG9ydCB0eXBlIE9wYXF1ZUl0ZXJhYmxlID0gQWJzdHJhY3RJdGVyYWJsZTxPcGFxdWUsIE9wYXF1ZSwgT3BhcXVlSXRlcmF0aW9uSXRlbSwgT3BhcXVlUGF0aFJlZmVyZW5jZSwgT3BhcXVlUGF0aFJlZmVyZW5jZT47XG5leHBvcnQgdHlwZSBPcGFxdWVQYXRoUmVmZXJlbmNlSXRlcmF0aW9uSXRlbSA9IEl0ZXJhdGlvbkl0ZW08T3BhcXVlUGF0aFJlZmVyZW5jZSwgT3BhcXVlUGF0aFJlZmVyZW5jZT47XG5cbmV4cG9ydCBjbGFzcyBMaXN0SXRlbSBleHRlbmRzIExpc3ROb2RlPE9wYXF1ZVBhdGhSZWZlcmVuY2U+IGltcGxlbWVudHMgT3BhcXVlSXRlcmF0aW9uSXRlbSB7XG4gIHB1YmxpYyBrZXk6IHN0cmluZztcbiAgcHVibGljIG1lbW86IE9wYXF1ZVBhdGhSZWZlcmVuY2U7XG4gIHB1YmxpYyByZXRhaW5lZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc2VlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGl0ZXJhYmxlOiBPcGFxdWVJdGVyYWJsZTtcblxuICBjb25zdHJ1Y3RvcihpdGVyYWJsZTogT3BhcXVlSXRlcmFibGUsIHJlc3VsdDogT3BhcXVlSXRlcmF0aW9uSXRlbSkge1xuICAgIHN1cGVyKGl0ZXJhYmxlLnZhbHVlUmVmZXJlbmNlRm9yKHJlc3VsdCkpO1xuICAgIHRoaXMua2V5ID0gcmVzdWx0LmtleTtcbiAgICB0aGlzLml0ZXJhYmxlID0gaXRlcmFibGU7XG4gICAgdGhpcy5tZW1vID0gaXRlcmFibGUubWVtb1JlZmVyZW5jZUZvcihyZXN1bHQpO1xuICB9XG5cbiAgdXBkYXRlKGl0ZW06IE9wYXF1ZUl0ZXJhdGlvbkl0ZW0pIHtcbiAgICB0aGlzLnJldGFpbmVkID0gdHJ1ZTtcbiAgICB0aGlzLml0ZXJhYmxlLnVwZGF0ZVZhbHVlUmVmZXJlbmNlKHRoaXMudmFsdWUsIGl0ZW0pO1xuICAgIHRoaXMuaXRlcmFibGUudXBkYXRlTWVtb1JlZmVyZW5jZSh0aGlzLm1lbW8sIGl0ZW0pO1xuICB9XG5cbiAgc2hvdWxkUmVtb3ZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5yZXRhaW5lZDtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMucmV0YWluZWQgPSBmYWxzZTtcbiAgICB0aGlzLnNlZW4gPSBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSXRlcmF0aW9uQXJ0aWZhY3RzIHtcbiAgcHVibGljIHRhZzogUmV2aXNpb25UYWc7XG5cbiAgcHJpdmF0ZSBpdGVyYWJsZTogT3BhcXVlSXRlcmFibGU7XG4gIHByaXZhdGUgaXRlcmF0b3I6IE9wYXF1ZUl0ZXJhdG9yO1xuICBwcml2YXRlIG1hcCA9IGRpY3Q8TGlzdEl0ZW0+KCk7XG4gIHByaXZhdGUgbGlzdCA9IG5ldyBMaW5rZWRMaXN0PExpc3RJdGVtPigpO1xuXG4gIGNvbnN0cnVjdG9yKGl0ZXJhYmxlOiBPcGFxdWVJdGVyYWJsZSkge1xuICAgIHRoaXMudGFnID0gaXRlcmFibGUudGFnO1xuICAgIHRoaXMuaXRlcmFibGUgPSBpdGVyYWJsZTtcbiAgfVxuXG4gIGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgbGV0IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvciA9IHRoaXMuaXRlcmFibGUuaXRlcmF0ZSgpO1xuICAgIHJldHVybiBpdGVyYXRvci5pc0VtcHR5KCk7XG4gIH1cblxuICBpdGVyYXRlKCk6IE9wYXF1ZUl0ZXJhdG9yIHtcbiAgICBsZXQgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yIHx8IHRoaXMuaXRlcmFibGUuaXRlcmF0ZSgpO1xuICAgIHRoaXMuaXRlcmF0b3IgPSBudWxsO1xuXG4gICAgcmV0dXJuIGl0ZXJhdG9yO1xuICB9XG5cbiAgaGFzKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5tYXBba2V5XTtcbiAgfVxuXG4gIGdldChrZXk6IHN0cmluZyk6IExpc3RJdGVtIHtcbiAgICByZXR1cm4gdGhpcy5tYXBba2V5XTtcbiAgfVxuXG4gIHdhc1NlZW4oa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgbm9kZSA9IHRoaXMubWFwW2tleV07XG4gICAgcmV0dXJuIG5vZGUgJiYgbm9kZS5zZWVuO1xuICB9XG5cbiAgYXBwZW5kKGl0ZW06IE9wYXF1ZUl0ZXJhdGlvbkl0ZW0pOiBMaXN0SXRlbSB7XG4gICAgbGV0IHsgbWFwLCBsaXN0LCBpdGVyYWJsZSB9ID0gdGhpcztcbiAgICBsZXQgbm9kZSA9IG1hcFtpdGVtLmtleV0gPSBuZXcgTGlzdEl0ZW0oaXRlcmFibGUsIGl0ZW0pO1xuXG4gICAgbGlzdC5hcHBlbmQobm9kZSk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBpbnNlcnRCZWZvcmUoaXRlbTogT3BhcXVlSXRlcmF0aW9uSXRlbSwgcmVmZXJlbmNlOiBMaXN0SXRlbSk6IExpc3RJdGVtIHtcbiAgICBsZXQgeyBtYXAsIGxpc3QsIGl0ZXJhYmxlIH0gPSB0aGlzO1xuXG4gICAgbGV0IG5vZGUgPSBtYXBbaXRlbS5rZXldID0gbmV3IExpc3RJdGVtKGl0ZXJhYmxlLCBpdGVtKTtcbiAgICBub2RlLnJldGFpbmVkID0gdHJ1ZTtcbiAgICBsaXN0Lmluc2VydEJlZm9yZShub2RlLCByZWZlcmVuY2UpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgbW92ZShpdGVtOiBMaXN0SXRlbSwgcmVmZXJlbmNlOiBMaXN0SXRlbSk6IHZvaWQge1xuICAgIGxldCB7IGxpc3QgfSA9IHRoaXM7XG5cbiAgICBpdGVtLnJldGFpbmVkID0gdHJ1ZTtcbiAgICBsaXN0LnJlbW92ZShpdGVtKTtcbiAgICBsaXN0Lmluc2VydEJlZm9yZShpdGVtLCByZWZlcmVuY2UpO1xuICB9XG5cbiAgcmVtb3ZlKGl0ZW06IExpc3RJdGVtKTogdm9pZCB7XG4gICAgbGV0IHsgbGlzdCB9ID0gdGhpcztcblxuICAgIGxpc3QucmVtb3ZlKGl0ZW0pO1xuICAgIGRlbGV0ZSB0aGlzLm1hcFtpdGVtLmtleV07XG4gIH1cblxuICBuZXh0Tm9kZShpdGVtOiBMaXN0SXRlbSk6IExpc3RJdGVtIHtcbiAgICByZXR1cm4gdGhpcy5saXN0Lm5leHROb2RlKGl0ZW0pO1xuICB9XG5cbiAgaGVhZCgpOiBMaXN0SXRlbSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5oZWFkKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlZmVyZW5jZUl0ZXJhdG9yIHtcbiAgcHVibGljIGFydGlmYWN0czogSXRlcmF0aW9uQXJ0aWZhY3RzO1xuICBwcml2YXRlIGl0ZXJhdG9yOiBPcGFxdWVJdGVyYXRvciA9IG51bGw7XG5cbiAgLy8gaWYgYW55b25lIG5lZWRzIHRvIGNvbnN0cnVjdCB0aGlzIG9iamVjdCB3aXRoIHNvbWV0aGluZyBvdGhlciB0aGFuXG4gIC8vIGFuIGl0ZXJhYmxlLCBsZXQgQHd5Y2F0cyBrbm93LlxuICBjb25zdHJ1Y3RvcihpdGVyYWJsZTogT3BhcXVlSXRlcmFibGUpIHtcbiAgICBsZXQgYXJ0aWZhY3RzID0gbmV3IEl0ZXJhdGlvbkFydGlmYWN0cyhpdGVyYWJsZSk7XG4gICAgdGhpcy5hcnRpZmFjdHMgPSBhcnRpZmFjdHM7XG4gIH1cblxuICBuZXh0KCk6IExpc3RJdGVtIHtcbiAgICBsZXQgeyBhcnRpZmFjdHMgfSA9IHRoaXM7XG5cbiAgICBsZXQgaXRlcmF0b3IgPSAodGhpcy5pdGVyYXRvciA9IHRoaXMuaXRlcmF0b3IgfHwgYXJ0aWZhY3RzLml0ZXJhdGUoKSk7XG5cbiAgICBsZXQgaXRlbSA9IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgIGlmICghaXRlbSkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gYXJ0aWZhY3RzLmFwcGVuZChpdGVtKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEl0ZXJhdG9yU3luY2hyb25pemVyRGVsZWdhdGUge1xuICByZXRhaW4oa2V5OiBzdHJpbmcsIGl0ZW06IFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgbWVtbzogUGF0aFJlZmVyZW5jZTxPcGFxdWU+KTtcbiAgaW5zZXJ0KGtleTogc3RyaW5nLCBpdGVtOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIG1lbW86IFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgYmVmb3JlOiBzdHJpbmcpO1xuICBtb3ZlKGtleTogc3RyaW5nLCBpdGVtOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIG1lbW86IFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgYmVmb3JlOiBzdHJpbmcpO1xuICBkZWxldGUoa2V5OiBzdHJpbmcpO1xuICBkb25lKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXRlcmF0b3JTeW5jaHJvbml6ZXJPcHRpb25zIHtcbiAgdGFyZ2V0OiBJdGVyYXRvclN5bmNocm9uaXplckRlbGVnYXRlO1xuICBhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cztcbn1cblxuZW51bSBQaGFzZSB7XG4gIEFwcGVuZCxcbiAgUHJ1bmUsXG4gIERvbmVcbn1cblxuZXhwb3J0IGNsYXNzIEl0ZXJhdG9yU3luY2hyb25pemVyIHtcbiAgcHJpdmF0ZSB0YXJnZXQ6IEl0ZXJhdG9yU3luY2hyb25pemVyRGVsZWdhdGU7XG4gIHByaXZhdGUgaXRlcmF0b3I6IE9wYXF1ZUl0ZXJhdG9yO1xuICBwcml2YXRlIGN1cnJlbnQ6IExpc3RJdGVtO1xuICBwcml2YXRlIGFydGlmYWN0czogSXRlcmF0aW9uQXJ0aWZhY3RzO1xuXG4gIGNvbnN0cnVjdG9yKHsgdGFyZ2V0LCBhcnRpZmFjdHMgfTogSXRlcmF0b3JTeW5jaHJvbml6ZXJPcHRpb25zKSB7XG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgdGhpcy5hcnRpZmFjdHMgPSBhcnRpZmFjdHM7XG4gICAgdGhpcy5pdGVyYXRvciA9IGFydGlmYWN0cy5pdGVyYXRlKCk7XG4gICAgdGhpcy5jdXJyZW50ID0gYXJ0aWZhY3RzLmhlYWQoKTtcbiAgfVxuXG4gIHN5bmMoKSB7XG4gICAgbGV0IHBoYXNlOiBQaGFzZSA9IFBoYXNlLkFwcGVuZDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzd2l0Y2ggKHBoYXNlKSB7XG4gICAgICAgIGNhc2UgUGhhc2UuQXBwZW5kOiBwaGFzZSA9IHRoaXMubmV4dEFwcGVuZCgpOyBicmVhaztcbiAgICAgICAgY2FzZSBQaGFzZS5QcnVuZTogcGhhc2UgPSB0aGlzLm5leHRQcnVuZSgpOyBicmVhaztcbiAgICAgICAgY2FzZSBQaGFzZS5Eb25lOiB0aGlzLm5leHREb25lKCk7IHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkdmFuY2VUb0tleShrZXk6IHN0cmluZykge1xuICAgIGxldCB7IGN1cnJlbnQsIGFydGlmYWN0cyB9ID0gdGhpcztcblxuICAgIGxldCBzZWVrID0gY3VycmVudDtcblxuICAgIHdoaWxlIChzZWVrICYmIHNlZWsua2V5ICE9PSBrZXkpIHtcbiAgICAgIHNlZWsuc2VlbiA9IHRydWU7XG4gICAgICBzZWVrID0gYXJ0aWZhY3RzLm5leHROb2RlKHNlZWspO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudCA9IHNlZWsgJiYgYXJ0aWZhY3RzLm5leHROb2RlKHNlZWspO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0QXBwZW5kKCk6IFBoYXNlIHtcbiAgICBsZXQgeyBpdGVyYXRvciwgY3VycmVudCwgYXJ0aWZhY3RzIH0gPSB0aGlzO1xuXG4gICAgbGV0IGl0ZW0gPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICBpZiAoaXRlbSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhcnRQcnVuZSgpO1xuICAgIH1cblxuICAgIGxldCB7IGtleSB9ID0gaXRlbTtcblxuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQua2V5ID09PSBrZXkpIHtcbiAgICAgIHRoaXMubmV4dFJldGFpbihpdGVtKTtcbiAgICB9IGVsc2UgaWYgKGFydGlmYWN0cy5oYXMoa2V5KSkge1xuICAgICAgdGhpcy5uZXh0TW92ZShpdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uZXh0SW5zZXJ0KGl0ZW0pO1xuICAgIH1cblxuICAgIHJldHVybiBQaGFzZS5BcHBlbmQ7XG4gIH1cblxuICBwcml2YXRlIG5leHRSZXRhaW4oaXRlbTogT3BhcXVlSXRlcmF0aW9uSXRlbSkge1xuICAgIGxldCB7IGFydGlmYWN0cywgY3VycmVudCB9ID0gdGhpcztcblxuICAgIGN1cnJlbnQudXBkYXRlKGl0ZW0pO1xuICAgIHRoaXMuY3VycmVudCA9IGFydGlmYWN0cy5uZXh0Tm9kZShjdXJyZW50KTtcbiAgICB0aGlzLnRhcmdldC5yZXRhaW4oaXRlbS5rZXksIGN1cnJlbnQudmFsdWUsIGN1cnJlbnQubWVtbyk7XG4gIH1cblxuICBwcml2YXRlIG5leHRNb3ZlKGl0ZW06IE9wYXF1ZUl0ZXJhdGlvbkl0ZW0pIHtcbiAgICBsZXQgeyBjdXJyZW50LCBhcnRpZmFjdHMsIHRhcmdldCB9ID0gdGhpcztcbiAgICBsZXQgeyBrZXkgfSA9IGl0ZW07XG5cbiAgICBsZXQgZm91bmQgPSBhcnRpZmFjdHMuZ2V0KGl0ZW0ua2V5KTtcbiAgICBmb3VuZC51cGRhdGUoaXRlbSk7XG5cbiAgICBpZiAoYXJ0aWZhY3RzLndhc1NlZW4oaXRlbS5rZXkpKSB7XG4gICAgICBhcnRpZmFjdHMubW92ZShmb3VuZCwgY3VycmVudCk7XG4gICAgICB0YXJnZXQubW92ZShmb3VuZC5rZXksIGZvdW5kLnZhbHVlLCBmb3VuZC5tZW1vLCBjdXJyZW50ID8gY3VycmVudC5rZXkgOiBudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZHZhbmNlVG9LZXkoa2V5KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5leHRJbnNlcnQoaXRlbTogT3BhcXVlSXRlcmF0aW9uSXRlbSkge1xuICAgIGxldCB7IGFydGlmYWN0cywgdGFyZ2V0LCBjdXJyZW50IH0gPSB0aGlzO1xuXG4gICAgbGV0IG5vZGUgPSBhcnRpZmFjdHMuaW5zZXJ0QmVmb3JlKGl0ZW0sIGN1cnJlbnQpO1xuICAgIHRhcmdldC5pbnNlcnQobm9kZS5rZXksIG5vZGUudmFsdWUsIG5vZGUubWVtbywgY3VycmVudCA/IGN1cnJlbnQua2V5IDogbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0UHJ1bmUoKTogUGhhc2Uge1xuICAgIHRoaXMuY3VycmVudCA9IHRoaXMuYXJ0aWZhY3RzLmhlYWQoKTtcbiAgICByZXR1cm4gUGhhc2UuUHJ1bmU7XG4gIH1cblxuICBwcml2YXRlIG5leHRQcnVuZSgpOiBQaGFzZSB7XG4gICAgbGV0IHsgYXJ0aWZhY3RzLCB0YXJnZXQsIGN1cnJlbnQgfSA9IHRoaXM7XG5cbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFBoYXNlLkRvbmU7XG4gICAgfVxuXG4gICAgbGV0IG5vZGUgPSBjdXJyZW50O1xuICAgIHRoaXMuY3VycmVudCA9IGFydGlmYWN0cy5uZXh0Tm9kZShub2RlKTtcblxuICAgIGlmIChub2RlLnNob3VsZFJlbW92ZSgpKSB7XG4gICAgICBhcnRpZmFjdHMucmVtb3ZlKG5vZGUpO1xuICAgICAgdGFyZ2V0LmRlbGV0ZShub2RlLmtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUucmVzZXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUGhhc2UuUHJ1bmU7XG4gIH1cblxuICBwcml2YXRlIG5leHREb25lKCkge1xuICAgIHRoaXMudGFyZ2V0LmRvbmUoKTtcbiAgfVxufVxuIl19 -enifed("glimmer-reference/lib/reference", ["exports"], function (exports) { +enifed("htmlbars-compiler/hydration-opcode-compiler", ["exports", "htmlbars-compiler/template-visitor", "htmlbars-compiler/utils", "htmlbars-util", "htmlbars-util/array-utils", "htmlbars-syntax/utils"], function (exports, _htmlbarsCompilerTemplateVisitor, _htmlbarsCompilerUtils, _htmlbarsUtil, _htmlbarsUtilArrayUtils, _htmlbarsSyntaxUtils) { "use strict"; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcmVmZXJlbmNlL2xpYi9yZWZlcmVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJyZWZlcmVuY2UuanMiLCJzb3VyY2VzQ29udGVudCI6W119 -enifed("glimmer-reference/lib/utils", ["exports"], function (exports) { - "use strict"; - exports.referenceFromParts = referenceFromParts; - - function referenceFromParts(root, parts) { - var reference = root; - for (var i = 0; i < parts.length; i++) { - reference = reference.get(parts[i]); - } - return reference; + function detectIsElementChecked(element) { + for (var i = 0, len = element.attributes.length; i < len; i++) { + if (element.attributes[i].name === 'checked') { + return true; + } } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcmVmZXJlbmNlL2xpYi91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUdBLGFBQUEsa0JBQUEsQ0FBbUMsSUFBb0MsRUFBRSxLQUFlLEVBQUE7QUFDdEYsWUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBRXJCLGFBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pDLHFCQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyQztBQUVELGVBQU8sU0FBUyxDQUFDO0tBQ2xCIiwiZmlsZSI6InV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSB9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBPcGFxdWUgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVBhcnRzKHJvb3Q6IFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgcGFydHM6IHN0cmluZ1tdKTogVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IHJvb3Q7XG5cbiAgZm9yIChsZXQgaT0wOyBpPHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlLmdldChwYXJ0c1tpXSk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuIl19 -enifed("glimmer-reference/lib/validators", ["exports"], function (exports) { - "use strict"; + return false; + } - exports.combineTagged = combineTagged; - exports.combineSlice = combineSlice; - exports.combine = combine; - exports.map = map; - exports.isModified = isModified; - var CONSTANT = 0; - exports.CONSTANT = CONSTANT; - var INITIAL = 1; - exports.INITIAL = INITIAL; - var VOLATILE = NaN; - exports.VOLATILE = VOLATILE; + function HydrationOpcodeCompiler() { + this.opcodes = []; + this.paths = []; + this.templateId = 0; + this.currentDOMChildIndex = 0; + this.morphs = []; + this.morphNum = 0; + this.element = null; + this.elementNum = -1; + } - var RevisionTag = (function () { - function RevisionTag() {} + exports.default = HydrationOpcodeCompiler; - RevisionTag.prototype.validate = function validate(snapshot) { - return this.value() === snapshot; - }; + HydrationOpcodeCompiler.prototype.compile = function (ast) { + var templateVisitor = new _htmlbarsCompilerTemplateVisitor.default(); + templateVisitor.visit(ast); - return RevisionTag; - })(); + _htmlbarsCompilerUtils.processOpcodes(this, templateVisitor.actions); - exports.RevisionTag = RevisionTag; + return this.opcodes; + }; - var $REVISION = INITIAL; + HydrationOpcodeCompiler.prototype.accept = function (node) { + this[node.type](node); + }; - var DirtyableTag = (function (_RevisionTag) { - babelHelpers.inherits(DirtyableTag, _RevisionTag); + HydrationOpcodeCompiler.prototype.opcode = function (type) { + var params = [].slice.call(arguments, 1); + this.opcodes.push([type, params]); + }; - function DirtyableTag() { - var revision = arguments.length <= 0 || arguments[0] === undefined ? $REVISION : arguments[0]; + HydrationOpcodeCompiler.prototype.startProgram = function (program, c, blankChildTextNodes) { + this.opcodes.length = 0; + this.paths.length = 0; + this.morphs.length = 0; + this.templateId = 0; + this.currentDOMChildIndex = -1; + this.morphNum = 0; - _RevisionTag.call(this); - this.revision = revision; - } + var blockParams = program.blockParams || []; - DirtyableTag.prototype.value = function value() { - return this.revision; - }; - - DirtyableTag.prototype.dirty = function dirty() { - this.revision = ++$REVISION; - }; - - return DirtyableTag; - })(RevisionTag); - - exports.DirtyableTag = DirtyableTag; - - function combineTagged(tagged) { - var optimized = []; - for (var i = 0, l = tagged.length; i < l; i++) { - var tag = tagged[i].tag; - if (tag === VOLATILE_TAG) return VOLATILE_TAG; - if (tag === CONSTANT_TAG) continue; - optimized.push(tag); - } - return _combine(optimized); + for (var i = 0; i < blockParams.length; i++) { + this.opcode('printSetHook', blockParams[i], i); } - function combineSlice(slice) { - var optimized = []; - var node = slice.head(); - while (node !== null) { - var tag = node.tag; - if (tag === VOLATILE_TAG) return VOLATILE_TAG; - if (tag !== CONSTANT_TAG) optimized.push(tag); - node = slice.nextNode(node); - } - return _combine(optimized); + if (blankChildTextNodes.length > 0) { + this.opcode('repairClonedNode', blankChildTextNodes); } + }; - function combine(tags) { - var optimized = []; - for (var i = 0, l = tags.length; i < l; i++) { - var tag = tags[i]; - if (tag === VOLATILE_TAG) return VOLATILE_TAG; - if (tag === CONSTANT_TAG) continue; - optimized.push(tag); - } - return _combine(optimized); - } + HydrationOpcodeCompiler.prototype.insertBoundary = function (first) { + this.opcode(first ? 'openBoundary' : 'closeBoundary'); + }; - function _combine(tags) { - switch (tags.length) { - case 0: - return CONSTANT_TAG; - case 1: - return tags[0]; - case 2: - return new TagsPair(tags[0], tags[1]); - default: - return new TagsCombinator(tags); - } - ; - } + HydrationOpcodeCompiler.prototype.endProgram = function () { + distributeMorphs(this.morphs, this.opcodes); + }; - var CachedTag = (function (_RevisionTag2) { - babelHelpers.inherits(CachedTag, _RevisionTag2); + HydrationOpcodeCompiler.prototype.text = function () { + ++this.currentDOMChildIndex; + }; - function CachedTag() { - _RevisionTag2.apply(this, arguments); - this.lastChecked = null; - this.lastValue = null; - } + HydrationOpcodeCompiler.prototype.comment = function () { + ++this.currentDOMChildIndex; + }; - CachedTag.prototype.value = function value() { - var lastChecked = this.lastChecked; - var lastValue = this.lastValue; + HydrationOpcodeCompiler.prototype.openElement = function (element, pos, len, mustacheCount, blankChildTextNodes) { + distributeMorphs(this.morphs, this.opcodes); + ++this.currentDOMChildIndex; - if (lastChecked !== $REVISION) { - this.lastChecked = $REVISION; - this.lastValue = lastValue = this.compute(); - } - return this.lastValue; - }; + this.element = this.currentDOMChildIndex; - CachedTag.prototype.invalidate = function invalidate() { - this.lastChecked = null; - }; + this.opcode('consumeParent', this.currentDOMChildIndex); - return CachedTag; - })(RevisionTag); + // If our parent reference will be used more than once, cache its reference. + if (mustacheCount > 1) { + shareElement(this); + } - exports.CachedTag = CachedTag; + var isElementChecked = detectIsElementChecked(element); + if (blankChildTextNodes.length > 0 || isElementChecked) { + this.opcode('repairClonedNode', blankChildTextNodes, isElementChecked); + } - var TagsPair = (function (_CachedTag) { - babelHelpers.inherits(TagsPair, _CachedTag); + this.paths.push(this.currentDOMChildIndex); + this.currentDOMChildIndex = -1; - function TagsPair(first, second) { - _CachedTag.call(this); - this.first = first; - this.second = second; - } + _htmlbarsUtilArrayUtils.forEach(element.attributes, this.attribute, this); + _htmlbarsUtilArrayUtils.forEach(element.modifiers, this.elementModifier, this); + }; - TagsPair.prototype.compute = function compute() { - return Math.max(this.first.value(), this.second.value()); - }; + HydrationOpcodeCompiler.prototype.closeElement = function () { + distributeMorphs(this.morphs, this.opcodes); + this.opcode('popParent'); + this.currentDOMChildIndex = this.paths.pop(); + }; - return TagsPair; - })(CachedTag); + HydrationOpcodeCompiler.prototype.mustache = function (mustache, childIndex, childCount) { + this.pushMorphPlaceholderNode(childIndex, childCount); - var TagsCombinator = (function (_CachedTag2) { - babelHelpers.inherits(TagsCombinator, _CachedTag2); + var opcode; - function TagsCombinator(tags) { - _CachedTag2.call(this); - this.tags = tags; - } + if (_htmlbarsSyntaxUtils.isHelper(mustache)) { + prepareHash(this, mustache.hash); + prepareParams(this, mustache.params); + preparePath(this, mustache.path); + opcode = 'printInlineHook'; + } else { + preparePath(this, mustache.path); + opcode = 'printContentHook'; + } - TagsCombinator.prototype.compute = function compute() { - var tags = this.tags; + var morphNum = this.morphNum++; + var start = this.currentDOMChildIndex; + var end = this.currentDOMChildIndex; + this.morphs.push([morphNum, this.paths.slice(), start, end, mustache.escaped]); - var max = -1; - for (var i = 0; i < tags.length; i++) { - var value = tags[i].value(); - max = Math.max(value, max); - } - return max; - }; + this.opcode(opcode, meta(mustache)); + }; - return TagsCombinator; - })(CachedTag); + function meta(node) { + var loc = node.loc; + if (!loc) { + return []; + } - var UpdatableTag = (function (_CachedTag3) { - babelHelpers.inherits(UpdatableTag, _CachedTag3); + var source = loc.source; + var start = loc.start; + var end = loc.end; - function UpdatableTag(tag) { - _CachedTag3.call(this); - this.tag = tag; - this.lastUpdated = INITIAL; - } + return ['loc', [source || null, [start.line, start.column], [end.line, end.column]]]; + } - ////////// + HydrationOpcodeCompiler.prototype.block = function (block, childIndex, childCount) { + this.pushMorphPlaceholderNode(childIndex, childCount); - UpdatableTag.prototype.compute = function compute() { - return Math.max(this.lastUpdated, this.tag.value()); - }; + prepareHash(this, block.hash); + prepareParams(this, block.params); + preparePath(this, block.path); - UpdatableTag.prototype.update = function update(tag) { - if (tag !== this.tag) { - this.tag = tag; - this.lastUpdated = $REVISION; - this.invalidate(); - } - }; + var morphNum = this.morphNum++; + var start = this.currentDOMChildIndex; + var end = this.currentDOMChildIndex; + this.morphs.push([morphNum, this.paths.slice(), start, end, true]); - return UpdatableTag; - })(CachedTag); + var templateId = this.templateId++; + var inverseId = block.inverse === null ? null : this.templateId++; - exports.UpdatableTag = UpdatableTag; - var CONSTANT_TAG = new ((function (_RevisionTag3) { - babelHelpers.inherits(ConstantTag, _RevisionTag3); + this.opcode('printBlockHook', templateId, inverseId, meta(block)); + }; - function ConstantTag() { - _RevisionTag3.apply(this, arguments); - } + HydrationOpcodeCompiler.prototype.component = function (component, childIndex, childCount) { + this.pushMorphPlaceholderNode(childIndex, childCount, component.isStatic); - ConstantTag.prototype.value = function value() { - return CONSTANT; - }; + var program = component.program || {}; + var blockParams = program.blockParams || []; - return ConstantTag; - })(RevisionTag))(); - exports.CONSTANT_TAG = CONSTANT_TAG; - var VOLATILE_TAG = new ((function (_RevisionTag4) { - babelHelpers.inherits(VolatileTag, _RevisionTag4); + var attrs = component.attributes; + for (var i = attrs.length - 1; i >= 0; i--) { + var name = attrs[i].name; + var value = attrs[i].value; - function VolatileTag() { - _RevisionTag4.apply(this, arguments); - } + // TODO: Introduce context specific AST nodes to avoid switching here. + if (value.type === 'TextNode') { + this.opcode('pushLiteral', value.chars); + } else if (value.type === 'MustacheStatement') { + this.accept(_htmlbarsSyntaxUtils.unwrapMustache(value)); + } else if (value.type === 'ConcatStatement') { + prepareParams(this, value.parts); + this.opcode('pushConcatHook', this.morphNum); + } - VolatileTag.prototype.value = function value() { - return VOLATILE; - }; + this.opcode('pushLiteral', name); + } - return VolatileTag; - })(RevisionTag))(); - exports.VOLATILE_TAG = VOLATILE_TAG; - var CURRENT_TAG = new ((function (_DirtyableTag) { - babelHelpers.inherits(CurrentTag, _DirtyableTag); + var morphNum = this.morphNum++; + var start = this.currentDOMChildIndex; + var end = this.currentDOMChildIndex; + this.morphs.push([morphNum, this.paths.slice(), start, end, true]); - function CurrentTag() { - _DirtyableTag.apply(this, arguments); - } + this.opcode('prepareObject', attrs.length); + this.opcode('pushLiteral', component.tag); + this.opcode('printComponentHook', this.templateId++, blockParams.length, meta(component)); + }; - CurrentTag.prototype.value = function value() { - return $REVISION; - }; + HydrationOpcodeCompiler.prototype.attribute = function (attr) { + var value = attr.value; + var escaped = true; + var namespace = _htmlbarsUtil.getAttrNamespace(attr.name); - return CurrentTag; - })(DirtyableTag))(); - exports.CURRENT_TAG = CURRENT_TAG; - - var CachedReference = (function () { - function CachedReference() { - this.lastRevision = null; - this.lastValue = null; - } - - CachedReference.prototype.value = function value() { - var tag = this.tag; - var lastRevision = this.lastRevision; - var lastValue = this.lastValue; - - if (!lastRevision || !tag.validate(lastRevision)) { - lastValue = this.lastValue = this.compute(); - this.lastRevision = tag.value(); - } - return lastValue; - }; - - CachedReference.prototype.invalidate = function invalidate() { - this.lastRevision = null; - }; - - return CachedReference; - })(); - - exports.CachedReference = CachedReference; - - var MapperReference = (function (_CachedReference) { - babelHelpers.inherits(MapperReference, _CachedReference); - - function MapperReference(reference, mapper) { - _CachedReference.call(this); - this.tag = reference.tag; - this.reference = reference; - this.mapper = mapper; - } - - MapperReference.prototype.compute = function compute() { - var reference = this.reference; - var mapper = this.mapper; - - return mapper(reference.value()); - }; - - return MapperReference; - })(CachedReference); - - function map(reference, mapper) { - return new MapperReference(reference, mapper); + // TODO: Introduce context specific AST nodes to avoid switching here. + if (value.type === 'TextNode') { + return; + } else if (value.type === 'MustacheStatement') { + escaped = value.escaped; + this.accept(_htmlbarsSyntaxUtils.unwrapMustache(value)); + } else if (value.type === 'ConcatStatement') { + prepareParams(this, value.parts); + this.opcode('pushConcatHook', this.morphNum); } - ////////// + this.opcode('pushLiteral', attr.name); - var ReferenceCache = (function () { - function ReferenceCache(reference) { - this.lastValue = null; - this.lastRevision = null; - this.initialized = false; - this.tag = reference.tag; - this.reference = reference; - } + var attrMorphNum = this.morphNum++; - ReferenceCache.prototype.peek = function peek() { - if (!this.initialized) { - return this.initialize(); - } - return this.lastValue; - }; - - ReferenceCache.prototype.revalidate = function revalidate() { - if (!this.initialized) { - return this.initialize(); - } - var reference = this.reference; - var lastRevision = this.lastRevision; - - var tag = reference.tag; - if (tag.validate(lastRevision)) return NOT_MODIFIED; - this.lastRevision = tag.value(); - var lastValue = this.lastValue; - - var value = reference.value(); - if (value === lastValue) return NOT_MODIFIED; - this.lastValue = value; - return value; - }; - - ReferenceCache.prototype.initialize = function initialize() { - var reference = this.reference; - - var value = this.lastValue = reference.value(); - this.lastRevision = reference.tag.value(); - this.initialized = true; - return value; - }; - - return ReferenceCache; - })(); - - exports.ReferenceCache = ReferenceCache; - - var NOT_MODIFIED = "adb3b78e-3d22-4e4b-877a-6317c2c5c145"; - - function isModified(value) { - return value !== NOT_MODIFIED; + if (this.element !== null) { + shareElement(this); } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcmVmZXJlbmNlL2xpYi92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBa0JPLFFBQU0sUUFBUSxHQUFhLENBQUMsQ0FBQzs7QUFDN0IsUUFBTSxPQUFPLEdBQWMsQ0FBQyxDQUFDOztBQUM3QixRQUFNLFFBQVEsR0FBYSxHQUFHLENBQUM7OztRQUV0QyxXQUFBO2lCQUFBLFdBQUE7O0FBQUEsbUJBQUEsV0FHRSxRQUFRLEdBQUEsa0JBQUMsUUFBa0IsRUFBQTtBQUN6QixtQkFBTyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssUUFBUSxDQUFDO1NBQ2xDOztlQUxILFdBQUE7Ozs7O0FBUUEsUUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDOztRQUV4QixZQUFBOzhCQUFBLFlBQUE7O0FBR0UsaUJBSEYsWUFBQSxHQUdrQztnQkFBcEIsUUFBUSx5REFBRyxTQUFTOztBQUM5QixtQ0FBTyxDQUFDO0FBQ1IsZ0JBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1NBQzFCOztBQU5ILG9CQUFBLFdBUUUsS0FBSyxHQUFBLGlCQUFBO0FBQ0gsbUJBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN0Qjs7QUFWSCxvQkFBQSxXQVlFLEtBQUssR0FBQSxpQkFBQTtBQUNILGdCQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsU0FBUyxDQUFDO1NBQzdCOztlQWRILFlBQUE7T0FBa0MsV0FBVzs7OztBQWlCN0MsYUFBQSxhQUFBLENBQThCLE1BQTBCLEVBQUE7QUFDdEQsWUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBRW5CLGFBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsZ0JBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDeEIsZ0JBQUksR0FBRyxL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QixnQkFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLE9BQU8sWUFBWSxDQUFDO0FBQzdDLGdCQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUV2QixtQkFBTyxLQUFLLENBQUM7U0FDZDs7QUF0Q0gsc0JBQUEsV0F3Q1UsVUFBVSxHQUFBLHNCQUFBO2dCQUNWLFNBQVMsR0FBSyxJQUFJLENBQWxCLFNBQVM7O0FBRWYsZ0JBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9DLGdCQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUMsZ0JBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBRXhCLG1CQUFPLEtBQUssQ0FBQztTQUNkOztlQWhESCxjQUFBOzs7OztBQXVEQSxRQUFNLFlBQVksR0FBZ0Isc0NBQXNDLENBQUM7O0FBRXpFLGFBQUEsVUFBQSxDQUE4QixLQUFvQixFQUFBO0FBQ2hELGVBQU8sS0FBSyxLQUFLLFlBQVksQ0FBQztLQUMvQiIsImZpbGUiOiJ2YWxpZGF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlZmVyZW5jZSwgeyBQYXRoUmVmZXJlbmNlIH0gZnJvbSAnLi9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgT3BhcXVlLCBTbGljZSwgTGlua2VkTGlzdE5vZGUgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VGFnPFQ+IGV4dGVuZHMgUmVmZXJlbmNlPFQ+IHtcbiAgdmFsdWUoKTogVDtcbiAgdmFsaWRhdGUoc25hcHNob3Q6IFQpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZ2dlZDxUPiB7XG4gIHRhZzogRW50aXR5VGFnPFQ+O1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFJldmlzaW9uID0gbnVtYmVyO1xuXG5leHBvcnQgY29uc3QgQ09OU1RBTlQ6IFJldmlzaW9uID0gMDtcbmV4cG9ydCBjb25zdCBJTklUSUFMOiAgUmV2aXNpb24gPSAxO1xuZXhwb3J0IGNvbnN0IFZPTEFUSUxFOiBSZXZpc2lvbiA9IE5hTjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJldmlzaW9uVGFnIGltcGxlbWVudHMgUmV2aXNpb25UYWcge1xuICBhYnN0cmFjdCB2YWx1ZSgpOiBSZXZpc2lvbjtcblxuICB2YWxpZGF0ZShzbmFwc2hvdDogUmV2aXNpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSgpID09PSBzbmFwc2hvdDtcbiAgfVxufVxuXG5sZXQgJFJFVklTSU9OID0gSU5JVElBTDtcblxuZXhwb3J0IGNsYXNzIERpcnR5YWJsZVRhZyBleHRlbmRzIFJldmlzaW9uVGFnIHtcbiAgcHJpdmF0ZSByZXZpc2lvbjogUmV2aXNpb247XG5cbiAgY29uc3RydWN0b3IocmV2aXNpb24gPSAkUkVWSVNJT04pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucmV2aXNpb24gPSByZXZpc2lvbjtcbiAgfVxuXG4gIHZhbHVlKCk6IFJldmlzaW9uIHtcbiAgICByZXR1cm4gdGhpcy5yZXZpc2lvbjtcbiAgfVxuXG4gIGRpcnR5KCkge1xuICAgIHRoaXMucmV2aXNpb24gPSArKyRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZVRhZ2dlZCh0YWdnZWQ6IFRhZ2dlZDxSZXZpc2lvbj5bXSk6IFJldmlzaW9uVGFnIHtcbiAgbGV0IG9wdGltaXplZCA9IFtdO1xuXG4gIGZvciAobGV0IGk9MCwgbD10YWdnZWQubGVuZ3RoOyBpPGw7IGkrKykge1xuICAgIGxldCB0YWcgPSB0YWdnZWRbaV0udGFnO1xuICAgIGlmICh0YWcgPT09IFZPTEFUSUxFX1RBRykgcmV0dXJuIFZPTEFUSUxFX1RBRztcbiAgICBpZiAodGFnID09PSBDT05TVEFOVF9UQUcpIGNvbnRpbnVlO1xuICAgIG9wdGltaXplZC5wdXNoKHRhZyk7XG4gIH1cblxuICByZXR1cm4gX2NvbWJpbmUob3B0aW1pemVkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVTbGljZShzbGljZTogU2xpY2U8VGFnZ2VkPFJldmlzaW9uPiAmIExpbmtlZExpc3ROb2RlPik6IFJldmlzaW9uVGFnIHtcbiAgbGV0IG9wdGltaXplZCA9IFtdO1xuXG4gIGxldCBub2RlID0gc2xpY2UuaGVhZCgpO1xuXG4gIHdoaWxlKG5vZGUgIT09IG51bGwpIHtcbiAgICBsZXQgdGFnID0gbm9kZS50YWc7XG5cbiAgICBpZiAodGFnID09PSBWT0xBVElMRV9UQUcpIHJldHVybiBWT0xBVElMRV9UQUc7XG4gICAgaWYgKHRhZyAhPT0gQ09OU1RBTlRfVEFHKSBvcHRpbWl6ZWQucHVzaCh0YWcpO1xuXG4gICAgbm9kZSA9IHNsaWNlLm5leHROb2RlKG5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIF9jb21iaW5lKG9wdGltaXplZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhZ3M6IFJldmlzaW9uVGFnW10pOiBSZXZpc2lvblRhZyB7XG4gIGxldCBvcHRpbWl6ZWQgPSBbXTtcblxuICBmb3IgKGxldCBpPTAsIGw9dGFncy5sZW5ndGg7IGk8bDsgaSsrKSB7XG4gICAgbGV0IHRhZyA9IHRhZ3NbaV07XG4gICAgaWYgKHRhZyA9PT0gVk9MQVRJTEVfVEFHKSByZXR1cm4gVk9MQVRJTEVfVEFHO1xuICAgIGlmICh0YWcgPT09IENPTlNUQU5UX1RBRykgY29udGludWU7XG4gICAgb3B0aW1pemVkLnB1c2godGFnKTtcbiAgfVxuXG4gIHJldHVybiBfY29tYmluZShvcHRpbWl6ZWQpO1xufVxuXG5mdW5jdGlvbiBfY29tYmluZSh0YWdzOiBSZXZpc2lvblRhZ1tdKTogUmV2aXNpb25UYWcge1xuICBzd2l0Y2ggKHRhZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gdGFnc1swXTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gbmV3IFRhZ3NQYWlyKHRhZ3NbMF0sIHRhZ3NbMV0pO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbmV3IFRhZ3NDb21iaW5hdG9yKHRhZ3MpO1xuICB9O1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2FjaGVkVGFnIGV4dGVuZHMgUmV2aXNpb25UYWcge1xuICBwcml2YXRlIGxhc3RDaGVja2VkOiBSZXZpc2lvbiA9IG51bGw7XG4gIHByaXZhdGUgbGFzdFZhbHVlOiBSZXZpc2lvbiA9IG51bGw7XG5cbiAgdmFsdWUoKTogUmV2aXNpb24ge1xuICAgIGxldCB7IGxhc3RDaGVja2VkLCBsYXN0VmFsdWUgfSA9IHRoaXM7XG5cbiAgICBpZiAobGFzdENoZWNrZWQgIT09ICRSRVZJU0lPTikge1xuICAgICAgdGhpcy5sYXN0Q2hlY2tlZCA9ICRSRVZJU0lPTjtcbiAgICAgIHRoaXMubGFzdFZhbHVlID0gbGFzdFZhbHVlID0gdGhpcy5jb21wdXRlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubGFzdFZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGludmFsaWRhdGUoKSB7XG4gICAgdGhpcy5sYXN0Q2hlY2tlZCA9IG51bGw7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY29tcHV0ZSgpOiBSZXZpc2lvbjtcbn1cblxuY2xhc3MgVGFnc1BhaXIgZXh0ZW5kcyBDYWNoZWRUYWcge1xuICBwcml2YXRlIGZpcnN0OiBSZXZpc2lvblRhZztcbiAgcHJpdmF0ZSBzZWNvbmQ6IFJldmlzaW9uVGFnO1xuXG4gIGNvbnN0cnVjdG9yKGZpcnN0OiBSZXZpc2lvblRhZywgc2Vjb25kOiBSZXZpc2lvblRhZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5maXJzdCA9IGZpcnN0O1xuICAgIHRoaXMuc2Vjb25kID0gc2Vjb25kO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbXB1dGUoKTogUmV2aXNpb24ge1xuICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmZpcnN0LnZhbHVlKCksIHRoaXMuc2Vjb25kLnZhbHVlKCkpO1xuICB9XG59XG5cbmNsYXNzIFRhZ3NDb21iaW5hdG9yIGV4dGVuZHMgQ2FjaGVkVGFnIHtcbiAgcHJpdmF0ZSB0YWdzOiBSZXZpc2lvblRhZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHRhZ3M6IFJldmlzaW9uVGFnW10pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFncyA9IHRhZ3M7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZSgpOiBSZXZpc2lvbiB7XG4gICAgbGV0IHsgdGFncyB9ID0gdGhpcztcblxuICAgIGxldCBtYXggPSAtMTtcblxuICAgIGZvciAobGV0IGk9MDsgaTx0YWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgdmFsdWUgPSB0YWdzW2ldLnZhbHVlKCk7XG4gICAgICBtYXggPSBNYXRoLm1heCh2YWx1ZSwgbWF4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF4O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGFibGVUYWcgZXh0ZW5kcyBDYWNoZWRUYWcge1xuICBwcml2YXRlIHRhZzogUmV2aXNpb25UYWc7XG4gIHByaXZhdGUgbGFzdFVwZGF0ZWQ6IFJldmlzaW9uO1xuXG4gIGNvbnN0cnVjdG9yKHRhZzogUmV2aXNpb25UYWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gdGFnO1xuICAgIHRoaXMubGFzdFVwZGF0ZWQgPSBJTklUSUFMO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbXB1dGUoKTogUmV2aXNpb24ge1xuICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmxhc3RVcGRhdGVkLCB0aGlzLnRhZy52YWx1ZSgpKTtcbiAgfVxuXG4gIHVwZGF0ZSh0YWc6IFJldmlzaW9uVGFnKSB7XG4gICAgaWYgKHRhZyAhPT0gdGhpcy50YWcpIHtcbiAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgdGhpcy5sYXN0VXBkYXRlZCA9ICRSRVZJU0lPTjtcbiAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgIH1cbiAgfVxufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT05TVEFOVF9UQUc6IFJldmlzaW9uVGFnID0gbmV3IChcbiAgY2xhc3MgQ29uc3RhbnRUYWcgZXh0ZW5kcyBSZXZpc2lvblRhZyB7XG4gICAgdmFsdWUoKTogUmV2aXNpb24ge1xuICAgICAgcmV0dXJuIENPTlNUQU5UO1xuICAgIH1cbiAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IFZPTEFUSUxFX1RBRzogUmV2aXNpb25UYWcgPSBuZXcgKFxuICBjbGFzcyBWb2xhdGlsZVRhZyBleHRlbmRzIFJldmlzaW9uVGFnIHtcbiAgICB2YWx1ZSgpOiBSZXZpc2lvbiB7XG4gICAgICByZXR1cm4gVk9MQVRJTEU7XG4gICAgfVxuICB9XG4pO1xuXG5leHBvcnQgY29uc3QgQ1VSUkVOVF9UQUc6IERpcnR5YWJsZVRhZyA9IG5ldyAoXG4gIGNsYXNzIEN1cnJlbnRUYWcgZXh0ZW5kcyBEaXJ0eWFibGVUYWcge1xuICAgIHZhbHVlKCk6IFJldmlzaW9uIHtcbiAgICAgIHJldHVybiAkUkVWSVNJT047XG4gICAgfVxuICB9XG4pO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbmVkUmVmZXJlbmNlPFQ+IGV4dGVuZHMgUmVmZXJlbmNlPFQ+LCBUYWdnZWQ8UmV2aXNpb24+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxUPiBleHRlbmRzIFBhdGhSZWZlcmVuY2U8VD4sIFRhZ2dlZDxSZXZpc2lvbj4ge1xuICBnZXQocHJvcGVydHk6IHN0cmluZyk6IFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENhY2hlZFJlZmVyZW5jZTxUPiBpbXBsZW1lbnRzIFZlcnNpb25lZFJlZmVyZW5jZTxUPiB7XG4gIHB1YmxpYyBhYnN0cmFjdCB0YWc6IFJldmlzaW9uVGFnO1xuXG4gIHByaXZhdGUgbGFzdFJldmlzaW9uOiBSZXZpc2lvbiA9IG51bGw7XG4gIHByaXZhdGUgbGFzdFZhbHVlOiBUID0gbnVsbDtcblxuICB2YWx1ZSgpOiBUIHtcbiAgICBsZXQgeyB0YWcsIGxhc3RSZXZpc2lvbiwgbGFzdFZhbHVlIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFsYXN0UmV2aXNpb24gfHwgIXRhZy52YWxpZGF0ZShsYXN0UmV2aXNpb24pKSB7XG4gICAgICBsYXN0VmFsdWUgPSB0aGlzLmxhc3RWYWx1ZSA9IHRoaXMuY29tcHV0ZSgpO1xuICAgICAgdGhpcy5sYXN0UmV2aXNpb24gPSB0YWcudmFsdWUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdFZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNvbXB1dGUoKTogVDtcblxuICBwcm90ZWN0ZWQgaW52YWxpZGF0ZSgpIHtcbiAgICB0aGlzLmxhc3RSZXZpc2lvbiA9IG51bGw7XG4gIH1cbn1cblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgdHlwZSBNYXBwZXI8VCwgVT4gPSAodmFsdWU6IFQpID0+IFU7XG5cbmNsYXNzIE1hcHBlclJlZmVyZW5jZTxULCBVPiBleHRlbmRzIENhY2hlZFJlZmVyZW5jZTxVPiB7XG4gIHB1YmxpYyB0YWc6IFJldmlzaW9uVGFnO1xuXG4gIHByaXZhdGUgcmVmZXJlbmNlOiBWZXJzaW9uZWRSZWZlcmVuY2U8VD47XG4gIHByaXZhdGUgbWFwcGVyOiBNYXBwZXI8VCwgVT47XG5cbiAgY29uc3RydWN0b3IocmVmZXJlbmNlOiBWZXJzaW9uZWRSZWZlcmVuY2U8VD4sIG1hcHBlcjogTWFwcGVyPFQsIFU+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IHJlZmVyZW5jZS50YWc7XG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgdGhpcy5tYXBwZXIgPSBtYXBwZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZSgpOiBVIHtcbiAgICBsZXQgeyByZWZlcmVuY2UsIG1hcHBlciB9ID0gdGhpcztcbiAgICByZXR1cm4gbWFwcGVyKHJlZmVyZW5jZS52YWx1ZSgpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwPFQsIFU+KHJlZmVyZW5jZTogVmVyc2lvbmVkUmVmZXJlbmNlPFQ+LCBtYXBwZXI6IE1hcHBlcjxULCBVPik6IFZlcnNpb25lZFJlZmVyZW5jZTxVPiB7XG4gIHJldHVybiBuZXcgTWFwcGVyUmVmZXJlbmNlPFQsIFU+KHJlZmVyZW5jZSwgbWFwcGVyKTtcbn1cblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgY2xhc3MgUmVmZXJlbmNlQ2FjaGU8VD4gaW1wbGVtZW50cyBUYWdnZWQ8UmV2aXNpb24+IHtcbiAgcHVibGljIHRhZzogUmV2aXNpb25UYWc7XG5cbiAgcHJpdmF0ZSByZWZlcmVuY2U6IFZlcnNpb25lZFJlZmVyZW5jZTxUPjtcbiAgcHJpdmF0ZSBsYXN0VmFsdWU6IFQgPSBudWxsO1xuICBwcml2YXRlIGxhc3RSZXZpc2lvbjogUmV2aXNpb24gPSBudWxsO1xuICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocmVmZXJlbmNlOiBWZXJzaW9uZWRSZWZlcmVuY2U8VD4pIHtcbiAgICB0aGlzLnRhZyA9IHJlZmVyZW5jZS50YWc7XG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gIH1cblxuICBwZWVrKCk6IFQge1xuICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxhc3RWYWx1ZTtcbiAgfVxuXG4gIHJldmFsaWRhdGUoKTogVmFsaWRhdGlvbjxUPiB7XG4gICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplKCk7XG4gICAgfVxuXG4gICAgbGV0IHsgcmVmZXJlbmNlLCBsYXN0UmV2aXNpb24gfSA9IHRoaXM7XG4gICAgbGV0IHRhZyA9IHJlZmVyZW5jZS50YWc7XG5cbiAgICBpZiAodGFnLnZhbGlkYXRlKGxhc3RSZXZpc2lvbikpIHJldHVybiBOT1RfTU9ESUZJRUQ7XG4gICAgdGhpcy5sYXN0UmV2aXNpb24gPSB0YWcudmFsdWUoKTtcblxuICAgIGxldCB7IGxhc3RWYWx1ZSB9ID0gdGhpcztcbiAgICBsZXQgdmFsdWUgPSByZWZlcmVuY2UudmFsdWUoKTtcbiAgICBpZiAodmFsdWUgPT09IGxhc3RWYWx1ZSkgcmV0dXJuIE5PVF9NT0RJRklFRDtcbiAgICB0aGlzLmxhc3RWYWx1ZSA9IHZhbHVlO1xuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplKCk6IFQge1xuICAgIGxldCB7IHJlZmVyZW5jZSB9ID0gdGhpcztcblxuICAgIGxldCB2YWx1ZSA9IHRoaXMubGFzdFZhbHVlID0gcmVmZXJlbmNlLnZhbHVlKCk7XG4gICAgdGhpcy5sYXN0UmV2aXNpb24gPSByZWZlcmVuY2UudGFnLnZhbHVlKCk7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbjxUPiA9IFQgfCBOb3RNb2RpZmllZDtcblxuZXhwb3J0IHR5cGUgTm90TW9kaWZpZWQgPSBcImFkYjNiNzhlLTNkMjItNGU0Yi04NzdhLTYzMTdjMmM1YzE0NVwiO1xuXG5jb25zdCBOT1RfTU9ESUZJRUQ6IE5vdE1vZGlmaWVkID0gXCJhZGIzYjc4ZS0zZDIyLTRlNGItODc3YS02MzE3YzJjNWMxNDVcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTW9kaWZpZWQ8VD4odmFsdWU6IFZhbGlkYXRpb248VD4pOiB2YWx1ZSBpcyBUIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBOT1RfTU9ESUZJRUQ7XG59XG4iXX0= -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/attribute-managers', '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/syntax/builtins/in-element', '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, _glimmerRuntimeLibDomAttributeManagers, _glimmerRuntimeLibCompiledOpcodesContent, _glimmerRuntimeLibCompiledExpressions, _glimmerRuntimeLibCompiledExpressionsArgs, _glimmerRuntimeLibCompiledExpressionsValue, _glimmerRuntimeLibCompiledExpressionsFunction, _glimmerRuntimeLibHelpersGetDynamicVar, _glimmerRuntimeLibSyntaxBuiltinsWithDynamicVars, _glimmerRuntimeLibSyntaxBuiltinsInElement, _glimmerRuntimeLibVm, _glimmerRuntimeLibUpsert, _glimmerRuntimeLibEnvironment, _glimmerRuntimeLibPartial, _glimmerRuntimeLibComponentInterfaces, _glimmerRuntimeLibModifierInterfaces, _glimmerRuntimeLibDomHelper, _glimmerRuntimeLibBuilder, _glimmerRuntimeLibBounds) { - 'use strict'; - exports.ATTRIBUTE_SYNTAX = _glimmerRuntimeLibSyntax.ATTRIBUTE; - exports.StatementSyntax = _glimmerRuntimeLibSyntax.Statement; - exports.ExpressionSyntax = _glimmerRuntimeLibSyntax.Expression; - exports.AttributeSyntax = _glimmerRuntimeLibSyntax.Attribute; - exports.StatementCompilationBuffer = _glimmerRuntimeLibSyntax.StatementCompilationBuffer; - exports.SymbolLookup = _glimmerRuntimeLibSyntax.SymbolLookup; - exports.CompileInto = _glimmerRuntimeLibSyntax.CompileInto; - exports.isAttribute = _glimmerRuntimeLibSyntax.isAttribute; - exports.templateFactory = _glimmerRuntimeLibTemplate.default; - exports.TemplateFactory = _glimmerRuntimeLibTemplate.TemplateFactory; - exports.Template = _glimmerRuntimeLibTemplate.Template; - exports.SymbolTable = _glimmerRuntimeLibSymbolTable.default; - exports.ConditionalReference = _glimmerRuntimeLibReferences.ConditionalReference; - exports.NULL_REFERENCE = _glimmerRuntimeLibReferences.NULL_REFERENCE; - exports.UNDEFINED_REFERENCE = _glimmerRuntimeLibReferences.UNDEFINED_REFERENCE; - exports.Templates = _glimmerRuntimeLibSyntaxCore.Templates; - exports.OptimizedAppend = _glimmerRuntimeLibSyntaxCore.OptimizedAppend; - exports.UnoptimizedAppend = _glimmerRuntimeLibSyntaxCore.UnoptimizedAppend; - exports.Unknown = _glimmerRuntimeLibSyntaxCore.Unknown; - exports.StaticAttr = _glimmerRuntimeLibSyntaxCore.StaticAttr; - exports.DynamicAttr = _glimmerRuntimeLibSyntaxCore.DynamicAttr; - exports.ArgsSyntax = _glimmerRuntimeLibSyntaxCore.Args; - exports.NamedArgsSyntax = _glimmerRuntimeLibSyntaxCore.NamedArgs; - exports.PositionalArgsSyntax = _glimmerRuntimeLibSyntaxCore.PositionalArgs; - exports.RefSyntax = _glimmerRuntimeLibSyntaxCore.Ref; - exports.GetNamedParameterSyntax = _glimmerRuntimeLibSyntaxCore.GetArgument; - exports.GetSyntax = _glimmerRuntimeLibSyntaxCore.Get; - exports.ValueSyntax = _glimmerRuntimeLibSyntaxCore.Value; - 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.Block = _glimmerRuntimeLibCompiledBlocks.Block; - exports.CompiledBlock = _glimmerRuntimeLibCompiledBlocks.CompiledBlock; - exports.Layout = _glimmerRuntimeLibCompiledBlocks.Layout; - exports.InlineBlock = _glimmerRuntimeLibCompiledBlocks.InlineBlock; - exports.EntryPoint = _glimmerRuntimeLibCompiledBlocks.EntryPoint; - exports.IAttributeManager = _glimmerRuntimeLibDomAttributeManagers.AttributeManager; - exports.AttributeManager = _glimmerRuntimeLibDomAttributeManagers.AttributeManager; - exports.PropertyManager = _glimmerRuntimeLibDomAttributeManagers.PropertyManager; - exports.INPUT_VALUE_PROPERTY_MANAGER = _glimmerRuntimeLibDomAttributeManagers.INPUT_VALUE_PROPERTY_MANAGER; - exports.defaultManagers = _glimmerRuntimeLibDomAttributeManagers.defaultManagers; - exports.defaultAttributeManagers = _glimmerRuntimeLibDomAttributeManagers.defaultAttributeManagers; - exports.defaultPropertyManagers = _glimmerRuntimeLibDomAttributeManagers.defaultPropertyManagers; - exports.readDOMAttr = _glimmerRuntimeLibDomAttributeManagers.readDOMAttr; - exports.normalizeTextValue = _glimmerRuntimeLibCompiledOpcodesContent.normalizeTextValue; - exports.CompiledExpression = _glimmerRuntimeLibCompiledExpressions.CompiledExpression; - exports.CompiledArgs = _glimmerRuntimeLibCompiledExpressionsArgs.CompiledArgs; - exports.CompiledNamedArgs = _glimmerRuntimeLibCompiledExpressionsArgs.CompiledNamedArgs; - exports.CompiledPositionalArgs = _glimmerRuntimeLibCompiledExpressionsArgs.CompiledPositionalArgs; - exports.EvaluatedArgs = _glimmerRuntimeLibCompiledExpressionsArgs.EvaluatedArgs; - exports.EvaluatedNamedArgs = _glimmerRuntimeLibCompiledExpressionsArgs.EvaluatedNamedArgs; - exports.EvaluatedPositionalArgs = _glimmerRuntimeLibCompiledExpressionsArgs.EvaluatedPositionalArgs; - exports.ValueReference = _glimmerRuntimeLibCompiledExpressionsValue.ValueReference; - exports.FunctionExpression = _glimmerRuntimeLibCompiledExpressionsFunction.FunctionExpression; - exports.getDynamicVar = _glimmerRuntimeLibHelpersGetDynamicVar.default; - exports.WithDynamicVarsSyntax = _glimmerRuntimeLibSyntaxBuiltinsWithDynamicVars.default; - exports.InElementSyntax = _glimmerRuntimeLibSyntaxBuiltinsInElement.default; - exports.VM = _glimmerRuntimeLibVm.PublicVM; - exports.UpdatingVM = _glimmerRuntimeLibVm.UpdatingVM; - exports.RenderResult = _glimmerRuntimeLibVm.RenderResult; - exports.SafeString = _glimmerRuntimeLibUpsert.SafeString; - exports.isSafeString = _glimmerRuntimeLibUpsert.isSafeString; - exports.Scope = _glimmerRuntimeLibEnvironment.Scope; - exports.Environment = _glimmerRuntimeLibEnvironment.default; - exports.Helper = _glimmerRuntimeLibEnvironment.Helper; - exports.ParsedStatement = _glimmerRuntimeLibEnvironment.ParsedStatement; - exports.DynamicScope = _glimmerRuntimeLibEnvironment.DynamicScope; - exports.PartialDefinition = _glimmerRuntimeLibPartial.PartialDefinition; - exports.Component = _glimmerRuntimeLibComponentInterfaces.Component; - exports.ComponentClass = _glimmerRuntimeLibComponentInterfaces.ComponentClass; - exports.ComponentManager = _glimmerRuntimeLibComponentInterfaces.ComponentManager; - exports.ComponentDefinition = _glimmerRuntimeLibComponentInterfaces.ComponentDefinition; - exports.ComponentLayoutBuilder = _glimmerRuntimeLibComponentInterfaces.ComponentLayoutBuilder; - exports.ComponentAttrsBuilder = _glimmerRuntimeLibComponentInterfaces.ComponentAttrsBuilder; - exports.isComponentDefinition = _glimmerRuntimeLibComponentInterfaces.isComponentDefinition; - exports.ModifierManager = _glimmerRuntimeLibModifierInterfaces.ModifierManager; - exports.DOMChanges = _glimmerRuntimeLibDomHelper.default; - exports.IDOMChanges = _glimmerRuntimeLibDomHelper.DOMChanges; - exports.DOMTreeConstruction = _glimmerRuntimeLibDomHelper.DOMTreeConstruction; - exports.isWhitespace = _glimmerRuntimeLibDomHelper.isWhitespace; - exports.insertHTMLBefore = _glimmerRuntimeLibDomHelper.insertHTMLBefore; - exports.Simple = _glimmerRuntimeLibDomInterfaces; - exports.ElementStack = _glimmerRuntimeLibBuilder.ElementStack; - exports.ElementOperations = _glimmerRuntimeLibBuilder.ElementOperations; - exports.Bounds = _glimmerRuntimeLibBounds.default; - exports.ConcreteBounds = _glimmerRuntimeLibBounds.ConcreteBounds; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7VUFDZSxnQkFBZ0IsNEJBQTdCLFNBQVM7VUFDSSxlQUFlLDRCQUE1QixTQUFTO1VBQ0ssZ0JBQWdCLDRCQUE5QixVQUFVO1VBQ0csZUFBZSw0QkFBNUIsU0FBUztVQUNULDBCQUEwQiw0QkFBMUIsMEJBQTBCO1VBQzFCLFlBQVksNEJBQVosWUFBWTtVQUNaLFdBQVcsNEJBQVgsV0FBVztVQUNYLFdBQVcsNEJBQVgsV0FBVztVQUdPLGVBQWUsOEJBQTFCLE9BQU87VUFBcUIsZUFBZSw4QkFBZixlQUFlO1VBQUUsUUFBUSw4QkFBUixRQUFRO1VBRTFDLFdBQVcsaUNBQXRCLE9BQU87VUFFUCxvQkFBb0IsZ0NBQXBCLG9CQUFvQjtVQUFFLGNBQWMsZ0NBQWQsY0FBYztVQUFFLG1CQUFtQixnQ0FBbkIsbUJBQW1CO1VBR2hFLFNBQVMsZ0NBQVQsU0FBUztVQUNULGVBQWUsZ0NBQWYsZUFBZTtVQUNmLGlCQUFpQixnQ0FBakIsaUJBQWlCO1VBQ2pCLE9BQU8sZ0NBQVAsT0FBTztVQUNQLFVBQVUsZ0NBQVYsVUFBVTtVQUNWLFdBQVcsZ0NBQVgsV0FBVztVQUNILFVBQVUsZ0NBQWxCLElBQUk7VUFDUyxlQUFlLGdDQUE1QixTQUFTO1VBQ1Msb0JBQW9CLGdDQUF0QyxjQUFjO1VBQ1AsU0FBUyxnQ0FBaEIsR0FBRztVQUNZLHVCQUF1QixnQ0FBdEMsV0FBVztVQUNKLFNBQVMsZ0NBQWhCLEdBQUc7VUFDTSxXQUFXLGdDQUFwQixLQUFLO1VBQ0wsV0FBVyxnQ0FBWCxXQUFXO1VBQ0QsWUFBWSxnQ0FBdEIsTUFBTTtVQUNHLFdBQVcsZ0NBQXBCLEtBQUs7VUFDbUIsMEJBQTBCLGdDQUFsRCxvQkFBb0I7VUFDSixrQkFBa0IsZ0NBQWxDLFlBQVk7VUFJQSxnQkFBZ0IsNENBQTNCLE9BQU87VUFJRyxRQUFRLDhCQUFuQixPQUFPO1VBQ1AsVUFBVSw4QkFBVixVQUFVO1VBQ1YsZUFBZSw4QkFBZixlQUFlO1VBQ2YsYUFBYSw4QkFBYixhQUFhO1VBSWIsZ0JBQWdCLG1DQUFoQixnQkFBZ0I7VUFDaEIsZ0JBQWdCLG1DQUFoQixnQkFBZ0I7VUFDaEIsaUJBQWlCLG1DQUFqQixpQkFBaUI7VUFJakIsS0FBSyxvQ0FBTCxLQUFLO1VBQ0wsYUFBYSxvQ0FBYixhQUFhO1VBQ2IsTUFBTSxvQ0FBTixNQUFNO1VBQ04sV0FBVyxvQ0FBWCxXQUFXO1VBQ1gsVUFBVSxvQ0FBVixVQUFVO1VBSVUsaUJBQWlCLDBDQUFyQyxnQkFBZ0I7VUFDaEIsZ0JBQWdCLDBDQUFoQixnQkFBZ0I7VUFDaEIsZUFBZSwwQ0FBZixlQUFlO1VBQ2YsNEJBQTRCLDBDQUE1Qiw0QkFBNEI7VUFDNUIsZUFBZSwwQ0FBZixlQUFlO1VBQ2Ysd0JBQXdCLDBDQUF4Qix3QkFBd0I7VUFDeEIsdUJBQXVCLDBDQUF2Qix1QkFBdUI7VUFDdkIsV0FBVywwQ0FBWCxXQUFXO1VBSVgsa0JBQWtCLDRDQUFsQixrQkFBa0I7VUFJbEIsa0JBQWtCLHlDQUFsQixrQkFBa0I7VUFJbEIsWUFBWSw2Q0FBWixZQUFZO1VBQ1osaUJBQWlCLDZDQUFqQixpQkFBaUI7VUFDakIsc0JBQXNCLDZDQUF0QixzQkFBc0I7VUFDdEIsYUFBYSw2Q0FBYixhQUFhO1VBQ2Isa0JBQWtCLDZDQUFsQixrQkFBa0I7VUFDbEIsdUJBQXVCLDZDQUF2Qix1QkFBdUI7VUFJdkIsY0FBYyw4Q0FBZCxjQUFjO1VBSWQsa0JBQWtCLGlEQUFsQixrQkFBa0I7VUFJUCxhQUFhLDBDQUF4QixPQUFPO1VBSUkscUJBQXFCLG1EQUFoQyxPQUFPO1VBSUksZUFBZSw2Q0FBMUIsT0FBTztVQUdZLEVBQUUsd0JBQWQsUUFBUTtVQUFRLFVBQVUsd0JBQVYsVUFBVTtVQUFFLFlBQVksd0JBQVosWUFBWTtVQUV4QyxVQUFVLDRCQUFWLFVBQVU7VUFBRSxZQUFZLDRCQUFaLFlBQVk7VUFHL0IsS0FBSyxpQ0FBTCxLQUFLO1VBQ00sV0FBVyxpQ0FBdEIsT0FBTztVQUNQLE1BQU0saUNBQU4sTUFBTTtVQUNOLGVBQWUsaUNBQWYsZUFBZTtVQUNmLFlBQVksaUNBQVosWUFBWTtVQUlaLGlCQUFpQiw2QkFBakIsaUJBQWlCO1VBSWpCLFNBQVMseUNBQVQsU0FBUztVQUNULGNBQWMseUNBQWQsY0FBYztVQUNkLGdCQUFnQix5Q0FBaEIsZ0JBQWdCO1VBQ2hCLG1CQUFtQix5Q0FBbkIsbUJBQW1CO1VBQ25CLHNCQUFzQix5Q0FBdEIsc0JBQXNCO1VBQ3RCLHFCQUFxQix5Q0FBckIscUJBQXFCO1VBQ3JCLHFCQUFxQix5Q0FBckIscUJBQXFCO1VBSXJCLGVBQWUsd0NBQWYsZUFBZTtVQUdHLFVBQVUsK0JBQXJCLE9BQU87VUFBOEIsV0FBVywrQkFBekIsVUFBVTtVQUFpQixtQkFBbUIsK0JBQW5CLG1CQUFtQjtVQUFFLFlBQVksK0JBQVosWUFBWTtVQUFFLGdCQUFnQiwrQkFBaEIsZ0JBQWdCO1VBRXJHLE1BQU07VUFDTixZQUFZLDZCQUFaLFlBQVk7VUFBRSxpQkFBaUIsNkJBQWpCLGlCQUFpQjtVQUNwQixNQUFNLDRCQUFqQixPQUFPO1VBQVksY0FBYyw0QkFBZCxjQUFjIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgQVRUUklCVVRFIGFzIEFUVFJJQlVURV9TWU5UQVgsXG4gIFN0YXRlbWVudCBhcyBTdGF0ZW1lbnRTeW50YXgsXG4gIEV4cHJlc3Npb24gYXMgRXhwcmVzc2lvblN5bnRheCxcbiAgQXR0cmlidXRlIGFzIEF0dHJpYnV0ZVN5bnRheCxcbiAgU3RhdGVtZW50Q29tcGlsYXRpb25CdWZmZXIsXG4gIFN5bWJvbExvb2t1cCxcbiAgQ29tcGlsZUludG8sXG4gIGlzQXR0cmlidXRlXG59IGZyb20gJy4vbGliL3N5bnRheCc7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGVtcGxhdGVGYWN0b3J5LCBUZW1wbGF0ZUZhY3RvcnksIFRlbXBsYXRlIH0gZnJvbSAnLi9saWIvdGVtcGxhdGUnO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFN5bWJvbFRhYmxlIH0gZnJvbSAnLi9saWIvc3ltYm9sLXRhYmxlJztcblxuZXhwb3J0IHsgQ29uZGl0aW9uYWxSZWZlcmVuY2UsIE5VTExfUkVGRVJFTkNFLCBVTkRFRklORURfUkVGRVJFTkNFIH0gZnJvbSAnLi9saWIvcmVmZXJlbmNlcyc7XG5cbmV4cG9ydCB7XG4gIFRlbXBsYXRlcyxcbiAgT3B0aW1pemVkQXBwZW5kLFxuICBVbm9wdGltaXplZEFwcGVuZCxcbiAgVW5rbm93bixcbiAgU3RhdGljQXR0cixcbiAgRHluYW1pY0F0dHIsXG4gIEFyZ3MgYXMgQXJnc1N5bnRheCxcbiAgTmFtZWRBcmdzIGFzIE5hbWVkQXJnc1N5bnRheCxcbiAgUG9zaXRpb25hbEFyZ3MgYXMgUG9zaXRpb25hbEFyZ3NTeW50YXgsXG4gIFJlZiBhcyBSZWZTeW50YXgsXG4gIEdldEFyZ3VtZW50IGFzIEdldE5hbWVkUGFyYW1ldGVyU3ludGF4LFxuICBHZXQgYXMgR2V0U3ludGF4LFxuICBWYWx1ZSBhcyBWYWx1ZVN5bnRheCxcbiAgT3BlbkVsZW1lbnQsXG4gIEhlbHBlciBhcyBIZWxwZXJTeW50YXgsXG4gIEJsb2NrIGFzIEJsb2NrU3ludGF4LFxuICBPcGVuUHJpbWl0aXZlRWxlbWVudCBhcyBPcGVuUHJpbWl0aXZlRWxlbWVudFN5bnRheCxcbiAgQ2xvc2VFbGVtZW50IGFzIENsb3NlRWxlbWVudFN5bnRheFxufSBmcm9tICcuL2xpYi9zeW50YXgvY29yZSc7XG5cbmV4cG9ydCB7XG4gICBkZWZhdWx0IGFzIE9wY29kZUJ1aWxkZXJEU0xcbn0gZnJvbSAnLi9saWIvY29tcGlsZWQvb3Bjb2Rlcy9idWlsZGVyJztcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBDb21waWxlcixcbiAgQ29tcGlsYWJsZSxcbiAgQ29tcGlsZUludG9MaXN0LFxuICBjb21waWxlTGF5b3V0XG59IGZyb20gJy4vbGliL2NvbXBpbGVyJztcblxuZXhwb3J0IHtcbiAgQ29tcG9uZW50QnVpbGRlcixcbiAgU3RhdGljRGVmaW5pdGlvbixcbiAgRHluYW1pY0RlZmluaXRpb25cbn0gZnJvbSAnLi9saWIvb3Bjb2RlLWJ1aWxkZXInO1xuXG5leHBvcnQge1xuICBCbG9jayxcbiAgQ29tcGlsZWRCbG9jayxcbiAgTGF5b3V0LFxuICBJbmxpbmVCbG9jayxcbiAgRW50cnlQb2ludFxufSBmcm9tICcuL2xpYi9jb21waWxlZC9ibG9ja3MnO1xuXG5leHBvcnQge1xuICBBdHRyaWJ1dGVNYW5hZ2VyIGFzIElBdHRyaWJ1dGVNYW5hZ2VyLFxuICBBdHRyaWJ1dGVNYW5hZ2VyLFxuICBQcm9wZXJ0eU1hbmFnZXIsXG4gIElOUFVUX1ZBTFVFX1BST1BFUlRZX01BTkFHRVIsXG4gIGRlZmF1bHRNYW5hZ2VycyxcbiAgZGVmYXVsdEF0dHJpYnV0ZU1hbmFnZXJzLFxuICBkZWZhdWx0UHJvcGVydHlNYW5hZ2VycyxcbiAgcmVhZERPTUF0dHJcbn0gZnJvbSAnLi9saWIvZG9tL2F0dHJpYnV0ZS1tYW5hZ2Vycyc7XG5cbmV4cG9ydCB7XG4gIG5vcm1hbGl6ZVRleHRWYWx1ZVxufSBmcm9tICcuL2xpYi9jb21waWxlZC9vcGNvZGVzL2NvbnRlbnQnO1xuXG5leHBvcnQge1xuICBDb21waWxlZEV4cHJlc3Npb25cbn0gZnJvbSAnLi9saWIvY29tcGlsZWQvZXhwcmVzc2lvbnMnO1xuXG5leHBvcnQge1xuICBDb21waWxlZEFyZ3MsXG4gIENvbXBpbGVkTmFtZWRBcmdzLFxuICBDb21waWxlZFBvc2l0aW9uYWxBcmdzLFxuICBFdmFsdWF0ZWRBcmdzLFxuICBFdmFsdWF0ZWROYW1lZEFyZ3MsXG4gIEV2YWx1YXRlZFBvc2l0aW9uYWxBcmdzXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL2V4cHJlc3Npb25zL2FyZ3MnO1xuXG5leHBvcnQge1xuICBWYWx1ZVJlZmVyZW5jZVxufSBmcm9tICcuL2xpYi9jb21waWxlZC9leHByZXNzaW9ucy92YWx1ZSc7XG5cbmV4cG9ydCB7XG4gIEZ1bmN0aW9uRXhwcmVzc2lvblxufSBmcm9tICcuL2xpYi9jb21waWxlZC9leHByZXNzaW9ucy9mdW5jdGlvbic7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgZ2V0RHluYW1pY1ZhclxufSBmcm9tICcuL2xpYi9oZWxwZXJzL2dldC1keW5hbWljLXZhcic7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgV2l0aER5bmFtaWNWYXJzU3ludGF4XG59IGZyb20gJy4vbGliL3N5bnRheC9idWlsdGlucy93aXRoLWR5bmFtaWMtdmFycyc7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgSW5FbGVtZW50U3ludGF4XG59IGZyb20gJy4vbGliL3N5bnRheC9idWlsdGlucy9pbi1lbGVtZW50JztcblxuZXhwb3J0IHsgUHVibGljVk0gYXMgVk0sIFVwZGF0aW5nVk0sIFJlbmRlclJlc3VsdCB9IGZyb20gJy4vbGliL3ZtJztcblxuZXhwb3J0IHsgU2FmZVN0cmluZywgaXNTYWZlU3RyaW5nIH0gZnJvbSAnLi9saWIvdXBzZXJ0JztcblxuZXhwb3J0IHtcbiAgU2NvcGUsXG4gIGRlZmF1bHQgYXMgRW52aXJvbm1lbnQsXG4gIEhlbHBlcixcbiAgUGFyc2VkU3RhdGVtZW50LFxuICBEeW5hbWljU2NvcGUsXG59IGZyb20gJy4vbGliL2Vudmlyb25tZW50JztcblxuZXhwb3J0IHtcbiAgUGFydGlhbERlZmluaXRpb25cbn0gZnJvbSAnLi9saWIvcGFydGlhbCc7XG5cbmV4cG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50Q2xhc3MsXG4gIENvbXBvbmVudE1hbmFnZXIsXG4gIENvbXBvbmVudERlZmluaXRpb24sXG4gIENvbXBvbmVudExheW91dEJ1aWxkZXIsXG4gIENvbXBvbmVudEF0dHJzQnVpbGRlcixcbiAgaXNDb21wb25lbnREZWZpbml0aW9uXG59IGZyb20gJy4vbGliL2NvbXBvbmVudC9pbnRlcmZhY2VzJztcblxuZXhwb3J0IHtcbiAgTW9kaWZpZXJNYW5hZ2VyXG59IGZyb20gJy4vbGliL21vZGlmaWVyL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIERPTUNoYW5nZXMsIERPTUNoYW5nZXMgYXMgSURPTUNoYW5nZXMsIERPTVRyZWVDb25zdHJ1Y3Rpb24sIGlzV2hpdGVzcGFjZSwgaW5zZXJ0SFRNTEJlZm9yZSB9IGZyb20gJy4vbGliL2RvbS9oZWxwZXInO1xuaW1wb3J0ICAqIGFzIFNpbXBsZSBmcm9tICcuL2xpYi9kb20vaW50ZXJmYWNlcyc7XG5leHBvcnQgeyBTaW1wbGUgfTtcbmV4cG9ydCB7IEVsZW1lbnRTdGFjaywgRWxlbWVudE9wZXJhdGlvbnMgfSBmcm9tICcuL2xpYi9idWlsZGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm91bmRzLCBDb25jcmV0ZUJvdW5kcyB9IGZyb20gJy4vbGliL2JvdW5kcyc7XG4iXX0= -enifed("glimmer-runtime/lib/bounds", ["exports"], function (exports) { - "use strict"; + this.opcode('createAttrMorph', attrMorphNum, this.elementNum, attr.name, escaped, namespace); + this.opcode('printAttributeHook'); + }; - exports.bounds = bounds; - exports.single = single; - exports.move = move; - exports.clear = clear; + HydrationOpcodeCompiler.prototype.elementModifier = function (modifier) { + prepareHash(this, modifier.hash); + prepareParams(this, modifier.params); + preparePath(this, modifier.path); - var Cursor = function Cursor(element, nextSibling) { - this.element = element; - this.nextSibling = nextSibling; - }; - - exports.Cursor = Cursor; - - var RealDOMBounds = (function () { - function RealDOMBounds(bounds) { - this.bounds = bounds; - } - - RealDOMBounds.prototype.parentElement = function parentElement() { - return this.bounds.parentElement(); - }; - - RealDOMBounds.prototype.firstNode = function firstNode() { - return this.bounds.firstNode(); - }; - - RealDOMBounds.prototype.lastNode = function lastNode() { - return this.bounds.lastNode(); - }; - - return RealDOMBounds; - })(); - - exports.RealDOMBounds = RealDOMBounds; - - var ConcreteBounds = (function () { - function ConcreteBounds(parentNode, first, last) { - this.parentNode = parentNode; - this.first = first; - this.last = last; - } - - ConcreteBounds.prototype.parentElement = function parentElement() { - return this.parentNode; - }; - - ConcreteBounds.prototype.firstNode = function firstNode() { - return this.first; - }; - - ConcreteBounds.prototype.lastNode = function lastNode() { - return this.last; - }; - - return ConcreteBounds; - })(); - - exports.ConcreteBounds = ConcreteBounds; - - var SingleNodeBounds = (function () { - function SingleNodeBounds(parentNode, node) { - this.parentNode = parentNode; - this.node = node; - } - - SingleNodeBounds.prototype.parentElement = function parentElement() { - return this.parentNode; - }; - - SingleNodeBounds.prototype.firstNode = function firstNode() { - return this.node; - }; - - SingleNodeBounds.prototype.lastNode = function lastNode() { - return this.node; - }; - - return SingleNodeBounds; - })(); - - exports.SingleNodeBounds = SingleNodeBounds; - - function bounds(parent, first, last) { - return new ConcreteBounds(parent, first, last); + // If we have a helper in a node, and this element has not been cached, cache it + if (this.element !== null) { + shareElement(this); } - function single(parent, node) { - return new SingleNodeBounds(parent, node); - } + publishElementMorph(this); + this.opcode('printElementHook', meta(modifier)); + }; - function move(bounds, reference) { - var parent = bounds.parentElement(); - var first = bounds.firstNode(); - var last = bounds.lastNode(); - var node = first; - while (node) { - var next = node.nextSibling; - parent.insertBefore(node, reference); - if (node === last) return next; - node = next; + HydrationOpcodeCompiler.prototype.pushMorphPlaceholderNode = function (childIndex, childCount, skipBoundaryNodes) { + if (!skipBoundaryNodes) { + if (this.paths.length === 0) { + if (childIndex === 0) { + this.opcode('openBoundary'); } - return null; - } - - function clear(bounds) { - var parent = bounds.parentElement(); - var first = bounds.firstNode(); - var last = bounds.lastNode(); - var node = first; - while (node) { - var next = node.nextSibling; - parent.removeChild(node); - if (node === last) return next; - node = next; + if (childIndex === childCount - 1) { + this.opcode('closeBoundary'); } - return null; + } } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvYm91bmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O1FBVUEsTUFBQSxHQUNFLFNBREYsTUFBQSxDQUNxQixPQUF1QixFQUFTLFdBQXdCLEVBQUE7QUFBeEQsWUFBQSxDQUFBLE9BQU8sR0FBUCxPQUFPLENBQWdCO0FBQVMsWUFBQSxDQUFBLFdBQVcsR0FBWCxXQUFXLENBQWE7S0FBSTs7OztRQU9qRixhQUFBO0FBQ0UsaUJBREYsYUFBQSxDQUNzQixNQUFjLEVBQUE7QUFBZCxnQkFBQSxDQUFBLE1BQU0sR0FBTixNQUFNLENBQVE7U0FBSTs7QUFEeEMscUJBQUEsV0FHRSxhQUFhLEdBQUEseUJBQUE7QUFBSyxtQkFBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBYSxDQUFDO1NBQUU7O0FBSHBFLHFCQUFBLFdBSUUsU0FBUyxHQUFBLHFCQUFBO0FBQUssbUJBQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQVUsQ0FBQztTQUFFOztBQUp6RCxxQkFBQSxXQUtFLFFBQVEsR0FBQSxvQkFBQTtBQUFLLG1CQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFVLENBQUM7U0FBRTs7ZUFMdkQsYUFBQTs7Ozs7UUFRQSxjQUFBO0FBQ0UsaUJBREYsY0FBQSxDQUNxQixVQUEwQixFQUFVLEtBQWtCLEVBQVUsSUFBaUIsRUFBQTtBQUFqRixnQkFBQSxDQUFBLFVBQVUsR0FBVixVQUFVLENBQWdCO0FBQVUsZ0JBQUEsQ0FBQSxLQUFLLEdBQUwsS0FBSyxDQUFhO0FBQVUsZ0JBQUEsQ0FBQSxJQUFJLEdBQUosSUFBSSxDQUFhO1NBQUk7O0FBRDFHLHNCQUFBLFdBR0UsYUFBYSxHQUFBLHlCQUFBO0FBQUssbUJBQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFFOztBQUg3QyxzQkFBQSxXQUlFLFNBQVMsR0FBQSxxQkFBQTtBQUFLLG1CQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7U0FBRTs7QUFKcEMsc0JBQUEsV0FLRSxRQUFRLEdBQUEsb0JBQUE7QUFBSyxtQkFBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQUU7O2VBTGxDLGNBQUE7Ozs7O1FBUUEsZ0JBQUE7QUFJRSxpQkFKRixnQkFBQSxDQUljLFVBQTBCLEVBQUUsSUFBaUIsRUFBQTtBQUN2RCxnQkFBSSxDQUFDLFVBQVUsR0FBRyxVQUFxQixDQUFDO0FBQ3hDLGdCQUFJLENBQUMsSUFBSSxHQUFHLElBQVksQ0FBQztTQUMxQjs7QUFQSCx3QkFBQSxXQVNFLGFBQWEsR0FBQSx5QkFBQTtBQUFLLG1CQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBRTs7QUFUN0Msd0JBQUEsV0FVRSxTQUFTLEdBQUEscUJBQUE7QUFBSyxtQkFBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQUU7O0FBVm5DLHdCQUFBLFdBV0UsUUFBUSxHQUFBLG9CQUFBO0FBQUssbUJBQU8sSUFBSSxDQUFDLElBQUksQ0FBQztTQUFFOztlQVhsQyxnQkFBQTs7Ozs7QUFjQSxhQUFBLE1BQUEsQ0FBdUIsTUFBc0IsRUFBRSxLQUFrQixFQUFFLElBQWlCLEVBQUE7QUFDbEYsZUFBTyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ2hEOztBQUVELGFBQUEsTUFBQSxDQUF1QixNQUFzQixFQUFFLElBQWlCLEVBQUE7QUFDOUQsZUFBTyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMzQzs7QUFFRCxhQUFBLElBQUEsQ0FBcUIsTUFBYyxFQUFFLFNBQXNCLEVBQUE7QUFDekQsWUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQ3BDLFlBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUMvQixZQUFJLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFFN0IsWUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBRWpCLGVBQU8sSUFBSSxFQUFFO0FBQ1gsZ0JBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDNUIsa0JBQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3JDLGdCQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDL0IsZ0JBQUksR0FBRyxJQUFJLENBQUM7U0FDYjtBQUVELGVBQU8sSUFBSSxDQUFDO0tBQ2I7O0FBRUQsYUFBQSxLQUFBLENBQXNCLE1BQWMsRUFBQTtBQUNsQyxZQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDcEMsWUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQy9CLFlBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUU3QixZQUFJLElBQUksR0FBRyxLQUFLLENBQUM7QUFFakIsZUFBTyxJQUFJLEVBQUU7QUFDWCxnQkFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUM1QixrQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QixnQkFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQy9CLGdCQUFJLEdBQUcsSUFBSSxDQUFDO1NBQ2I7QUFFRCxlQUFPLElBQUksQ0FBQztLQUNiIiwiZmlsZSI6ImJvdW5kcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFNpbXBsZSBmcm9tICcuL2RvbS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERlc3Ryb3lhYmxlIH0gZnJvbSAnZ2xpbW1lci11dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBCb3VuZHMge1xuICAvLyBhIG1ldGhvZCB0byBmdXR1cmUtcHJvb2YgZm9yIHdvcm1ob2xpbmc7IG1heSBub3QgYmUgbmVlZGVkIHVsdGltYXRlbHlcbiAgcGFyZW50RWxlbWVudCgpOiBTaW1wbGUuRWxlbWVudDtcbiAgZmlyc3ROb2RlKCk6IFNpbXBsZS5Ob2RlO1xuICBsYXN0Tm9kZSgpOiBTaW1wbGUuTm9kZTtcbn1cblxuZXhwb3J0IGNsYXNzIEN1cnNvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgcHVibGljIG5leHRTaWJsaW5nOiBTaW1wbGUuTm9kZSkge31cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm91bmRzO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlc3Ryb3lhYmxlQm91bmRzIGV4dGVuZHMgQm91bmRzLCBEZXN0cm95YWJsZSB7fVxuXG5leHBvcnQgY2xhc3MgUmVhbERPTUJvdW5kcyBpbXBsZW1lbnRzIEJvdW5kcyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYm91bmRzOiBCb3VuZHMpIHt9XG5cbiAgcGFyZW50RWxlbWVudCgpIHsgcmV0dXJuIHRoaXMuYm91bmRzLnBhcmVudEVsZW1lbnQoKSBhcyBFbGVtZW50OyB9XG4gIGZpcnN0Tm9kZSgpIHsgcmV0dXJuIHRoaXMuYm91bmRzLmZpcnN0Tm9kZSgpIGFzIE5vZGU7IH1cbiAgbGFzdE5vZGUoKSB7IHJldHVybiB0aGlzLmJvdW5kcy5sYXN0Tm9kZSgpIGFzIE5vZGU7IH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbmNyZXRlQm91bmRzIGltcGxlbWVudHMgQm91bmRzIHtcbiAgY29uc3RydWN0b3IocHVibGljIHBhcmVudE5vZGU6IFNpbXBsZS5FbGVtZW50LCBwcml2YXRlIGZpcnN0OiBTaW1wbGUuTm9kZSwgcHJpdmF0ZSBsYXN0OiBTaW1wbGUuTm9kZSkge31cblxuICBwYXJlbnRFbGVtZW50KCkgeyByZXR1cm4gdGhpcy5wYXJlbnROb2RlOyB9XG4gIGZpcnN0Tm9kZSgpIHsgcmV0dXJuIHRoaXMuZmlyc3Q7IH1cbiAgbGFzdE5vZGUoKSB7IHJldHVybiB0aGlzLmxhc3Q7IH1cbn1cblxuZXhwb3J0IGNsYXNzIFNpbmdsZU5vZGVCb3VuZHMgaW1wbGVtZW50cyBCb3VuZHMge1xuICBwcml2YXRlIHBhcmVudE5vZGU6IEVsZW1lbnQ7XG4gIHByaXZhdGUgbm9kZTogTm9kZTtcblxuICBjb25zdHJ1Y3RvcihwYXJlbnROb2RlOiBTaW1wbGUuRWxlbWVudCwgbm9kZTogU2ltcGxlLk5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlIGFzIEVsZW1lbnQ7XG4gICAgdGhpcy5ub2RlID0gbm9kZSBhcyBOb2RlO1xuICB9XG5cbiAgcGFyZW50RWxlbWVudCgpIHsgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTsgfVxuICBmaXJzdE5vZGUoKSB7IHJldHVybiB0aGlzLm5vZGU7IH1cbiAgbGFzdE5vZGUoKSB7IHJldHVybiB0aGlzLm5vZGU7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdW5kcyhwYXJlbnQ6IFNpbXBsZS5FbGVtZW50LCBmaXJzdDogU2ltcGxlLk5vZGUsIGxhc3Q6IFNpbXBsZS5Ob2RlKTogQm91bmRzIHtcbiAgcmV0dXJuIG5ldyBDb25jcmV0ZUJvdW5kcyhwYXJlbnQsIGZpcnN0LCBsYXN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbmdsZShwYXJlbnQ6IFNpbXBsZS5FbGVtZW50LCBub2RlOiBTaW1wbGUuTm9kZSk6IEJvdW5kcyB7XG4gIHJldHVybiBuZXcgU2luZ2xlTm9kZUJvdW5kcyhwYXJlbnQsIG5vZGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW92ZShib3VuZHM6IEJvdW5kcywgcmVmZXJlbmNlOiBTaW1wbGUuTm9kZSkge1xuICBsZXQgcGFyZW50ID0gYm91bmRzLnBhcmVudEVsZW1lbnQoKTtcbiAgbGV0IGZpcnN0ID0gYm91bmRzLmZpcnN0Tm9kZSgpO1xuICBsZXQgbGFzdCA9IGJvdW5kcy5sYXN0Tm9kZSgpO1xuXG4gIGxldCBub2RlID0gZmlyc3Q7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBsZXQgbmV4dCA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgcGFyZW50Lmluc2VydEJlZm9yZShub2RlLCByZWZlcmVuY2UpO1xuICAgIGlmIChub2RlID09PSBsYXN0KSByZXR1cm4gbmV4dDtcbiAgICBub2RlID0gbmV4dDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYm91bmRzOiBCb3VuZHMpOiBTaW1wbGUuTm9kZSB7XG4gIGxldCBwYXJlbnQgPSBib3VuZHMucGFyZW50RWxlbWVudCgpO1xuICBsZXQgZmlyc3QgPSBib3VuZHMuZmlyc3ROb2RlKCk7XG4gIGxldCBsYXN0ID0gYm91bmRzLmxhc3ROb2RlKCk7XG5cbiAgbGV0IG5vZGUgPSBmaXJzdDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGxldCBuZXh0ID0gbm9kZS5uZXh0U2libGluZztcbiAgICBwYXJlbnQucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgaWYgKG5vZGUgPT09IGxhc3QpIHJldHVybiBuZXh0O1xuICAgIG5vZGUgPSBuZXh0O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXX0= -enifed('glimmer-runtime/lib/builder', ['exports', 'glimmer-runtime/lib/bounds', 'glimmer-util', 'glimmer-runtime/lib/compiled/opcodes/dom'], function (exports, _glimmerRuntimeLibBounds, _glimmerUtil, _glimmerRuntimeLibCompiledOpcodesDom) { - 'use strict'; - var First = (function () { - function First(node) { - this.node = node; - } + this.comment(); + }; - First.prototype.firstNode = function firstNode() { - return this.node; - }; + HydrationOpcodeCompiler.prototype.MustacheStatement = function (mustache) { + prepareHash(this, mustache.hash); + prepareParams(this, mustache.params); + preparePath(this, mustache.path); + this.opcode('pushSexprHook', meta(mustache)); + }; - return First; - })(); + HydrationOpcodeCompiler.prototype.SubExpression = function (sexpr) { + prepareHash(this, sexpr.hash); + prepareParams(this, sexpr.params); + preparePath(this, sexpr.path); + this.opcode('pushSexprHook', meta(sexpr)); + }; - var Last = (function () { - function Last(node) { - this.node = node; - } + HydrationOpcodeCompiler.prototype.PathExpression = function (path) { + this.opcode('pushGetHook', path.original, meta(path)); + }; - Last.prototype.lastNode = function lastNode() { - return this.node; - }; + HydrationOpcodeCompiler.prototype.StringLiteral = function (node) { + this.opcode('pushLiteral', node.value); + }; - return Last; - })(); + HydrationOpcodeCompiler.prototype.BooleanLiteral = function (node) { + this.opcode('pushLiteral', node.value); + }; - var Fragment = (function () { - function Fragment(bounds) { - this.bounds = bounds; - } + HydrationOpcodeCompiler.prototype.NumberLiteral = function (node) { + this.opcode('pushLiteral', node.value); + }; - Fragment.prototype.parentElement = function parentElement() { - return this.bounds.parentElement(); - }; + HydrationOpcodeCompiler.prototype.UndefinedLiteral = function (node) { + this.opcode('pushLiteral', node.value); + }; - Fragment.prototype.firstNode = function firstNode() { - return this.bounds.firstNode(); - }; + HydrationOpcodeCompiler.prototype.NullLiteral = function (node) { + this.opcode('pushLiteral', node.value); + }; - Fragment.prototype.lastNode = function lastNode() { - return this.bounds.lastNode(); - }; + function preparePath(compiler, path) { + compiler.opcode('pushLiteral', path.original); + } - Fragment.prototype.update = function update(bounds) { - this.bounds = bounds; - }; + function prepareParams(compiler, params) { + for (var i = params.length - 1; i >= 0; i--) { + var param = params[i]; + compiler[param.type](param); + } - return Fragment; - })(); + compiler.opcode('prepareArray', params.length); + } - exports.Fragment = Fragment; + function prepareHash(compiler, hash) { + var pairs = hash.pairs; - var ElementStack = (function () { - function ElementStack(env, parentNode, nextSibling) { - this.constructing = null; - this.operations = null; - this.elementStack = new _glimmerUtil.Stack(); - this.nextSiblingStack = new _glimmerUtil.Stack(); - this.blockStack = new _glimmerUtil.Stack(); - this.env = env; - this.dom = env.getAppendOperations(); - this.updateOperations = env.getDOM(); - this.element = parentNode; - this.nextSibling = nextSibling; - this.defaultOperations = new _glimmerRuntimeLibCompiledOpcodesDom.SimpleElementOperations(env); - this.elementStack.push(this.element); - this.nextSiblingStack.push(this.nextSibling); - } + for (var i = pairs.length - 1; i >= 0; i--) { + var key = pairs[i].key; + var value = pairs[i].value; - ElementStack.forInitialRender = function forInitialRender(env, parentNode, nextSibling) { - return new ElementStack(env, parentNode, nextSibling); - }; + compiler[value.type](value); + compiler.opcode('pushLiteral', key); + } - ElementStack.resume = function resume(env, tracker, nextSibling) { - var parentNode = tracker.parentElement(); - var stack = new ElementStack(env, parentNode, nextSibling); - stack.pushBlockTracker(tracker); - return stack; - }; + compiler.opcode('prepareObject', pairs.length); + } - ElementStack.prototype.block = function block() { - return this.blockStack.current; - }; + function shareElement(compiler) { + compiler.opcode('shareElement', ++compiler.elementNum); + compiler.element = null; // Set element to null so we don't cache it twice + } - ElementStack.prototype.popElement = function popElement() { - var elementStack = this.elementStack; - var nextSiblingStack = this.nextSiblingStack; + function publishElementMorph(compiler) { + var morphNum = compiler.morphNum++; + compiler.opcode('createElementMorph', morphNum, compiler.elementNum); + } - var topElement = elementStack.pop(); - nextSiblingStack.pop(); - this.element = elementStack.current; - this.nextSibling = nextSiblingStack.current; - return topElement; - }; - - ElementStack.prototype.pushSimpleBlock = function pushSimpleBlock() { - var tracker = new SimpleBlockTracker(this.element); - this.pushBlockTracker(tracker); - return tracker; - }; - - ElementStack.prototype.pushUpdatableBlock = function pushUpdatableBlock() { - var tracker = new UpdatableBlockTracker(this.element); - this.pushBlockTracker(tracker); - return tracker; - }; - - ElementStack.prototype.pushBlockTracker = function pushBlockTracker(tracker) { - var isRemote = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; - - var current = this.blockStack.current; - if (current !== null) { - current.newDestroyable(tracker); - if (!isRemote) { - current.newBounds(tracker); - } - } - this.blockStack.push(tracker); - return tracker; - }; - - ElementStack.prototype.pushBlockList = function pushBlockList(list) { - var tracker = new BlockListTracker(this.element, list); - var current = this.blockStack.current; - if (current !== null) { - current.newDestroyable(tracker); - current.newBounds(tracker); - } - this.blockStack.push(tracker); - return tracker; - }; - - ElementStack.prototype.popBlock = function popBlock() { - this.blockStack.current.finalize(this); - return this.blockStack.pop(); - }; - - ElementStack.prototype.openElement = function openElement(tag) { - var operations = arguments.length <= 1 || arguments[1] === undefined ? this.defaultOperations : arguments[1]; - - var element = this.dom.createElement(tag, this.element); - this.constructing = element; - this.operations = operations; - return element; - }; - - ElementStack.prototype.flushElement = function flushElement() { - var parent = this.element; - var element = this.constructing; - this.dom.insertBefore(parent, element, this.nextSibling); - this.constructing = null; - this.operations = null; - this.pushElement(element); - this.blockStack.current.openElement(element); - }; - - ElementStack.prototype.pushRemoteElement = function pushRemoteElement(element) { - this.pushElement(element); - var tracker = new RemoteBlockTracker(element); - this.pushBlockTracker(tracker, true); - }; - - ElementStack.prototype.popRemoteElement = function popRemoteElement() { - this.popBlock(); - this.popElement(); - }; - - ElementStack.prototype.pushElement = function pushElement(element) { - this.element = element; - this.elementStack.push(element); - this.nextSibling = null; - this.nextSiblingStack.push(null); - }; - - ElementStack.prototype.newDestroyable = function newDestroyable(d) { - this.blockStack.current.newDestroyable(d); - }; - - ElementStack.prototype.newBounds = function newBounds(bounds) { - this.blockStack.current.newBounds(bounds); - }; - - ElementStack.prototype.appendText = function appendText(string) { - var dom = this.dom; - - var text = dom.createTextNode(string); - dom.insertBefore(this.element, text, this.nextSibling); - this.blockStack.current.newNode(text); - return text; - }; - - ElementStack.prototype.appendComment = function appendComment(string) { - var dom = this.dom; - - var comment = dom.createComment(string); - dom.insertBefore(this.element, comment, this.nextSibling); - this.blockStack.current.newNode(comment); - return comment; - }; - - ElementStack.prototype.setStaticAttribute = function setStaticAttribute(name, value) { - this.operations.addStaticAttribute(this.constructing, name, value); - }; - - ElementStack.prototype.setStaticAttributeNS = function setStaticAttributeNS(namespace, name, value) { - this.operations.addStaticAttributeNS(this.constructing, namespace, name, value); - }; - - ElementStack.prototype.setDynamicAttribute = function setDynamicAttribute(name, reference, isTrusting) { - this.operations.addDynamicAttribute(this.constructing, name, reference, isTrusting); - }; - - ElementStack.prototype.setDynamicAttributeNS = function setDynamicAttributeNS(namespace, name, reference, isTrusting) { - this.operations.addDynamicAttributeNS(this.constructing, namespace, name, reference, isTrusting); - }; - - ElementStack.prototype.closeElement = function closeElement() { - this.blockStack.current.closeElement(); - this.popElement(); - }; - - return ElementStack; - })(); - - exports.ElementStack = ElementStack; - - var SimpleBlockTracker = (function () { - function SimpleBlockTracker(parent) { - this.parent = parent; - this.first = null; - this.last = null; - this.destroyables = null; - this.nesting = 0; - } - - SimpleBlockTracker.prototype.destroy = function destroy() { - var destroyables = this.destroyables; - - if (destroyables && destroyables.length) { - for (var i = 0; i < destroyables.length; i++) { - destroyables[i].destroy(); - } - } - }; - - SimpleBlockTracker.prototype.parentElement = function parentElement() { - return this.parent; - }; - - SimpleBlockTracker.prototype.firstNode = function firstNode() { - return this.first && this.first.firstNode(); - }; - - SimpleBlockTracker.prototype.lastNode = function lastNode() { - return this.last && this.last.lastNode(); - }; - - SimpleBlockTracker.prototype.openElement = function openElement(element) { - this.newNode(element); - this.nesting++; - }; - - SimpleBlockTracker.prototype.closeElement = function closeElement() { - this.nesting--; - }; - - SimpleBlockTracker.prototype.newNode = function newNode(node) { - if (this.nesting !== 0) return; - if (!this.first) { - this.first = new First(node); - } - this.last = new Last(node); - }; - - SimpleBlockTracker.prototype.newBounds = function newBounds(bounds) { - if (this.nesting !== 0) return; - if (!this.first) { - this.first = bounds; - } - this.last = bounds; - }; - - SimpleBlockTracker.prototype.newDestroyable = function newDestroyable(d) { - this.destroyables = this.destroyables || []; - this.destroyables.push(d); - }; - - SimpleBlockTracker.prototype.finalize = function finalize(stack) { - if (!this.first) { - stack.appendComment(''); - } - }; - - return SimpleBlockTracker; - })(); - - exports.SimpleBlockTracker = SimpleBlockTracker; - - var RemoteBlockTracker = (function (_SimpleBlockTracker) { - babelHelpers.inherits(RemoteBlockTracker, _SimpleBlockTracker); - - function RemoteBlockTracker() { - _SimpleBlockTracker.apply(this, arguments); - } - - RemoteBlockTracker.prototype.destroy = function destroy() { - _SimpleBlockTracker.prototype.destroy.call(this); - _glimmerRuntimeLibBounds.clear(this); - }; - - return RemoteBlockTracker; - })(SimpleBlockTracker); - - var UpdatableBlockTracker = (function (_SimpleBlockTracker2) { - babelHelpers.inherits(UpdatableBlockTracker, _SimpleBlockTracker2); - - function UpdatableBlockTracker() { - _SimpleBlockTracker2.apply(this, arguments); - } - - UpdatableBlockTracker.prototype.reset = function reset(env) { - var destroyables = this.destroyables; - - if (destroyables && destroyables.length) { - for (var i = 0; i < destroyables.length; i++) { - env.didDestroy(destroyables[i]); - } - } - var nextSibling = _glimmerRuntimeLibBounds.clear(this); - this.destroyables = null; - this.first = null; - this.last = null; - return nextSibling; - }; - - return UpdatableBlockTracker; - })(SimpleBlockTracker); - - exports.UpdatableBlockTracker = UpdatableBlockTracker; - - var BlockListTracker = (function () { - function BlockListTracker(parent, boundList) { - this.parent = parent; - this.boundList = boundList; - this.parent = parent; - this.boundList = boundList; - } - - BlockListTracker.prototype.destroy = function destroy() { - this.boundList.forEachNode(function (node) { - return node.destroy(); - }); - }; - - BlockListTracker.prototype.parentElement = function parentElement() { - return this.parent; - }; - - BlockListTracker.prototype.firstNode = function firstNode() { - return this.boundList.head().firstNode(); - }; - - BlockListTracker.prototype.lastNode = function lastNode() { - return this.boundList.tail().lastNode(); - }; - - BlockListTracker.prototype.openElement = function openElement(element) { - _glimmerUtil.assert(false, 'Cannot openElement directly inside a block list'); - }; - - BlockListTracker.prototype.closeElement = function closeElement() { - _glimmerUtil.assert(false, 'Cannot closeElement directly inside a block list'); - }; - - BlockListTracker.prototype.newNode = function newNode(node) { - _glimmerUtil.assert(false, 'Cannot create a new node directly inside a block list'); - }; - - BlockListTracker.prototype.newBounds = function newBounds(bounds) {}; - - BlockListTracker.prototype.newDestroyable = function newDestroyable(d) {}; - - BlockListTracker.prototype.finalize = function finalize(stack) {}; - - return BlockListTracker; - })(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7UUE0QkEsS0FBQTtBQUNFLGlCQURGLEtBQUEsQ0FDc0IsSUFBVSxFQUFBO0FBQVYsZ0JBQUEsQ0FBQSxJQUFJLEdBQUosSUFBSSxDQUFNO1NBQUs7O0FBRHJDLGFBQUEsV0FHRSxTQUFTLEdBQUEscUJBQUE7QUFDUCxtQkFBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ2xCOztlQUxILEtBQUE7OztRQVFBLElBQUE7QUFDRSxpQkFERixJQUFBLENBQ3NCLElBQVUsRUFBQTtBQUFWLGdCQUFBLENBQUEsSUFBSSxHQUFKLElBQUksQ0FBTTtTQUFLOztBQURyQyxZQUFBLFdBR0UsUUFBUSxHQUFBLG9CQUFBO0FBQ04sbUJBQU8sSUFBSSxDQUFDLElBQUksQ0FBQztTQUNsQjs7ZUFMSCxJQUFBOzs7UUFnQkEsUUFBQTtBQUdFLGlCQUhGLFFBQUEsQ0FHYyxNQUFjLEVBQUE7QUFDeEIsZ0JBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1NBQ3RCOztBQUxILGdCQUFBLFdBT0UsYUFBYSxHQUFBLHlCQUFBO0FBQ1gsbUJBQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUNwQzs7QUFUSCxnQkFBQSxXQVdFLFNBQVMsR0FBQSxxQkFBQTtBQUNQLG1CQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDaEM7O0FBYkgsZ0JBQUEsV0FlRSxRQUFRLEdBQUEsb0JBQUE7QUFDTixtQkFBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQy9COztBQWpCSCxnQkFBQSxXQW1CRSxNQUFNLEdBQUEsZ0JBQUMsTUFBYyxFQUFBO0FBQ25CLGdCQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztTQUN0Qjs7ZUFyQkgsUUFBQTs7Ozs7UUF3QkEsWUFBQTtBQTRCRSxpQkE1QkYsWUFBQSxDQTRCYyxHQUFn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RUFBQSxFQUM1Qjs7QUF0Q0gsd0JBQUEsV0F3Q0UsUUFBUSxHQUFBLGtCQUFDLEtBQW1CLEVBQUEsRUFDM0I7O2VBekNILGdCQUFBIiwiZmlsZSI6ImJ1aWxkZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQm91bmRzLCB7IEN1cnNvciwgRGVzdHJveWFibGVCb3VuZHMsIGNsZWFyIH0gZnJvbSAnLi9ib3VuZHMnO1xuXG5pbXBvcnQgeyBET01DaGFuZ2VzLCBET01UcmVlQ29uc3RydWN0aW9uIH0gZnJvbSAnLi9kb20vaGVscGVyJztcblxuaW1wb3J0IHsgRGVzdHJveWFibGUsIFN0YWNrLCBMaW5rZWRMaXN0LCBMaW5rZWRMaXN0Tm9kZSwgYXNzZXJ0IH0gZnJvbSAnZ2xpbW1lci11dGlsJztcblxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuL2Vudmlyb25tZW50JztcblxuaW1wb3J0IHsgVk0gfSBmcm9tICcuL3ZtJztcblxuaW1wb3J0IHtcbiAgUGF0aFJlZmVyZW5jZVxufSBmcm9tICdnbGltbWVyLXJlZmVyZW5jZSc7XG5cbmltcG9ydCB7XG4gIFNpbXBsZUVsZW1lbnRPcGVyYXRpb25zXG59IGZyb20gJy4vY29tcGlsZWQvb3Bjb2Rlcy9kb20nO1xuXG5pbXBvcnQgKiBhcyBTaW1wbGUgZnJvbSAnLi9kb20vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlyc3ROb2RlIHtcbiAgZmlyc3ROb2RlKCk6IFNpbXBsZS5Ob2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhc3ROb2RlIHtcbiAgbGFzdE5vZGUoKTogU2ltcGxlLk5vZGU7XG59XG5cbmNsYXNzIEZpcnN0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBub2RlOiBOb2RlKSB7IH1cblxuICBmaXJzdE5vZGUoKTogTm9kZSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxufVxuXG5jbGFzcyBMYXN0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBub2RlOiBOb2RlKSB7IH1cblxuICBsYXN0Tm9kZSgpOiBOb2RlIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudE9wZXJhdGlvbnMge1xuICBhZGRTdGF0aWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk7XG4gIGFkZFN0YXRpY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTtcbiAgYWRkRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogUGF0aFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKTtcbiAgYWRkRHluYW1pY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogUGF0aFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKTtcbiAgZmx1c2goZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIHZtOiBWTSk7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFnbWVudCBpbXBsZW1lbnRzIEJvdW5kcyB7XG4gIHByaXZhdGUgYm91bmRzOiBCb3VuZHM7XG5cbiAgY29uc3RydWN0b3IoYm91bmRzOiBCb3VuZHMpIHtcbiAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgfVxuXG4gIHBhcmVudEVsZW1lbnQoKTogU2ltcGxlLkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5wYXJlbnRFbGVtZW50KCk7XG4gIH1cblxuICBmaXJzdE5vZGUoKTogU2ltcGxlLk5vZGUge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5maXJzdE5vZGUoKTtcbiAgfVxuXG4gIGxhc3ROb2RlKCk6IFNpbXBsZS5Ob2RlIHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMubGFzdE5vZGUoKTtcbiAgfVxuXG4gIHVwZGF0ZShib3VuZHM6IEJvdW5kcykge1xuICAgIHRoaXMuYm91bmRzID0gYm91bmRzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50U3RhY2sgaW1wbGVtZW50cyBDdXJzb3Ige1xuICBwdWJsaWMgbmV4dFNpYmxpbmc6IFNpbXBsZS5Ob2RlO1xuICBwdWJsaWMgZG9tOiBET01UcmVlQ29uc3RydWN0aW9uO1xuICBwdWJsaWMgdXBkYXRlT3BlcmF0aW9uczogRE9NQ2hhbmdlcztcbiAgcHVibGljIGNvbnN0cnVjdGluZzogU2ltcGxlLkVsZW1lbnQgPSBudWxsO1xuICBwdWJsaWMgb3BlcmF0aW9uczogRWxlbWVudE9wZXJhdGlvbnMgPSBudWxsO1xuICBwdWJsaWMgZWxlbWVudDogU2ltcGxlLkVsZW1lbnQ7XG4gIHB1YmxpYyBlbnY6IEVudmlyb25tZW50O1xuXG4gIHByaXZhdGUgZWxlbWVudFN0YWNrID0gbmV3IFN0YWNrPFNpbXBsZS5FbGVtZW50PigpO1xuICBwcml2YXRlIG5leHRTaWJsaW5nU3RhY2sgPSBuZXcgU3RhY2s8U2ltcGxlLk5vZGU+KCk7XG4gIHByaXZhdGUgYmxvY2tTdGFjayA9IG5ldyBTdGFjazxUcmFja2VyPigpO1xuXG4gIHByaXZhdGUgZGVmYXVsdE9wZXJhdGlvbnM6IEVsZW1lbnRPcGVyYXRpb25zO1xuXG4gIHN0YXRpYyBmb3JJbml0aWFsUmVuZGVyKGVudjogRW52aXJvbm1lbnQsIHBhcmVudE5vZGU6IFNpbXBsZS5FbGVtZW50LCBuZXh0U2libGluZzogU2ltcGxlLk5vZGUpIHtcbiAgICByZXR1cm4gbmV3IEVsZW1lbnRTdGFjayhlbnYsIHBhcmVudE5vZGUsIG5leHRTaWJsaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyByZXN1bWUoZW52OiBFbnZpcm9ubWVudCwgdHJhY2tlcjogVHJhY2tlciwgbmV4dFNpYmxpbmc6IE5vZGUpIHtcbiAgICBsZXQgcGFyZW50Tm9kZSA9IHRyYWNrZXIucGFyZW50RWxlbWVudCgpO1xuXG4gICAgbGV0IHN0YWNrID0gbmV3IEVsZW1lbnRTdGFjayhlbnYsIHBhcmVudE5vZGUsIG5leHRTaWJsaW5nKTtcbiAgICBzdGFjay5wdXNoQmxvY2tUcmFja2VyKHRyYWNrZXIpO1xuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZW52OiBFbnZpcm9ubWVudCwgcGFyZW50Tm9kZTogU2ltcGxlLkVsZW1lbnQsIG5leHRTaWJsaW5nOiBTaW1wbGUuTm9kZSkge1xuICAgIHRoaXMuZW52ID0gZW52O1xuICAgIHRoaXMuZG9tID0gZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKTtcbiAgICB0aGlzLnVwZGF0ZU9wZXJhdGlvbnMgPSBlbnYuZ2V0RE9NKCk7XG4gICAgdGhpcy5lbGVtZW50ID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLm5leHRTaWJsaW5nID0gbmV4dFNpYmxpbmc7XG5cbiAgICB0aGlzLmRlZmF1bHRPcGVyYXRpb25zID0gbmV3IFNpbXBsZUVsZW1lbnRPcGVyYXRpb25zKGVudik7XG5cbiAgICB0aGlzLmVsZW1lbnRTdGFjay5wdXNoKHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy5uZXh0U2libGluZ1N0YWNrLnB1c2godGhpcy5uZXh0U2libGluZyk7XG4gIH1cblxuICBibG9jaygpOiBUcmFja2VyIHtcbiAgICByZXR1cm4gdGhpcy5ibG9ja1N0YWNrLmN1cnJlbnQ7XG4gIH1cblxuICBwb3BFbGVtZW50KCkge1xuICAgIGxldCB7IGVsZW1lbnRTdGFjaywgbmV4dFNpYmxpbmdTdGFjayB9ICA9IHRoaXM7XG5cbiAgICBsZXQgdG9wRWxlbWVudCA9IGVsZW1lbnRTdGFjay5wb3AoKTtcbiAgICBuZXh0U2libGluZ1N0YWNrLnBvcCgpO1xuXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudFN0YWNrLmN1cnJlbnQ7XG4gICAgdGhpcy5uZXh0U2libGluZyA9IG5leHRTaWJsaW5nU3RhY2suY3VycmVudDtcblxuICAgIHJldHVybiB0b3BFbGVtZW50O1xuICB9XG5cbiAgcHVzaFNpbXBsZUJsb2NrKCk6IFRyYWNrZXIge1xuICAgIGxldCB0cmFja2VyID0gbmV3IFNpbXBsZUJsb2NrVHJhY2tlcih0aGlzLmVsZW1lbnQpO1xuICAgIHRoaXMucHVzaEJsb2NrVHJhY2tlcih0cmFja2VyKTtcbiAgICByZXR1cm4gdHJhY2tlcjtcbiAgfVxuXG4gIHB1c2hVcGRhdGFibGVCbG9jaygpOiBVcGRhdGFibGVUcmFja2VyIHtcbiAgICBsZXQgdHJhY2tlciA9IG5ldyBVcGRhdGFibGVCbG9ja1RyYWNrZXIodGhpcy5lbGVtZW50KTtcbiAgICB0aGlzLnB1c2hCbG9ja1RyYWNrZXIodHJhY2tlcik7XG4gICAgcmV0dXJuIHRyYWNrZXI7XG4gIH1cblxuICBwcml2YXRlIHB1c2hCbG9ja1RyYWNrZXIodHJhY2tlcjogVHJhY2tlciwgaXNSZW1vdGUgPSBmYWxzZSkge1xuICAgIGxldCBjdXJyZW50ID0gdGhpcy5ibG9ja1N0YWNrLmN1cnJlbnQ7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgY3VycmVudC5uZXdEZXN0cm95YWJsZSh0cmFja2VyKTtcblxuICAgICAgaWYgKCFpc1JlbW90ZSkge1xuICAgICAgICBjdXJyZW50Lm5ld0JvdW5kcyh0cmFja2VyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJsb2NrU3RhY2sucHVzaCh0cmFja2VyKTtcbiAgICByZXR1cm4gdHJhY2tlcjtcbiAgfVxuXG4gIHB1c2hCbG9ja0xpc3QobGlzdDogTGlua2VkTGlzdDxMaW5rZWRMaXN0Tm9kZSAmIEJvdW5kcyAmIERlc3Ryb3lhYmxlPik6IFRyYWNrZXIge1xuICAgIGxldCB0cmFja2VyID0gbmV3IEJsb2NrTGlzdFRyYWNrZXIodGhpcy5lbGVtZW50LCBsaXN0KTtcbiAgICBsZXQgY3VycmVudCA9IHRoaXMuYmxvY2tTdGFjay5jdXJyZW50O1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGN1cnJlbnQubmV3RGVzdHJveWFibGUodHJhY2tlcik7XG4gICAgICBjdXJyZW50Lm5ld0JvdW5kcyh0cmFja2VyKTtcbiAgICB9XG5cbiAgICB0aGlzLmJsb2NrU3RhY2sucHVzaCh0cmFja2VyKTtcbiAgICByZXR1cm4gdHJhY2tlcjtcbiAgfVxuXG4gIHBvcEJsb2NrKCk6IFRyYWNrZXIge1xuICAgIHRoaXMuYmxvY2tTdGFjay5jdXJyZW50LmZpbmFsaXplKHRoaXMpO1xuXG4gICAgcmV0dXJuIHRoaXMuYmxvY2tTdGFjay5wb3AoKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KHRhZzogc3RyaW5nLCBvcGVyYXRpb25zID0gdGhpcy5kZWZhdWx0T3BlcmF0aW9ucyk6IFNpbXBsZS5FbGVtZW50IHtcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQodGFnLCB0aGlzLmVsZW1lbnQpO1xuXG4gICAgdGhpcy5jb25zdHJ1Y3RpbmcgPSBlbGVtZW50O1xuICAgIHRoaXMub3BlcmF0aW9ucyA9IG9wZXJhdGlvbnM7XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIGZsdXNoRWxlbWVudCgpIHtcbiAgICBsZXQgcGFyZW50ICA9IHRoaXMuZWxlbWVudDtcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuY29uc3RydWN0aW5nO1xuXG4gICAgdGhpcy5kb20uaW5zZXJ0QmVmb3JlKHBhcmVudCwgZWxlbWVudCwgdGhpcy5uZXh0U2libGluZyk7XG5cbiAgICB0aGlzLmNvbnN0cnVjdGluZyA9IG51bGw7XG4gICAgdGhpcy5vcGVyYXRpb25zID0gbnVsbDtcblxuICAgIHRoaXMucHVzaEVsZW1lbnQoZWxlbWVudCk7XG4gICAgdGhpcy5ibG9ja1N0YWNrLmN1cnJlbnQub3BlbkVsZW1lbnQoZWxlbWVudCk7XG4gIH1cblxuICBwdXNoUmVtb3RlRWxlbWVudChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCkge1xuICAgIHRoaXMucHVzaEVsZW1lbnQoZWxlbWVudCk7XG5cbiAgICBsZXQgdHJhY2tlciA9IG5ldyBSZW1vdGVCbG9ja1RyYWNrZXIoZWxlbWVudCk7XG4gICAgdGhpcy5wdXNoQmxvY2tUcmFja2VyKHRyYWNrZXIsIHRydWUpO1xuICB9XG5cbiAgcG9wUmVtb3RlRWxlbWVudCgpIHtcbiAgICB0aGlzLnBvcEJsb2NrKCk7XG4gICAgdGhpcy5wb3BFbGVtZW50KCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hFbGVtZW50KGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50KSB7XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmVsZW1lbnRTdGFjay5wdXNoKGVsZW1lbnQpO1xuXG4gICAgdGhpcy5uZXh0U2libGluZyA9IG51bGw7XG4gICAgdGhpcy5uZXh0U2libGluZ1N0YWNrLnB1c2gobnVsbCk7XG4gIH1cblxuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSkge1xuICAgIHRoaXMuYmxvY2tTdGFjay5jdXJyZW50Lm5ld0Rlc3Ryb3lhYmxlKGQpO1xuICB9XG5cbiAgbmV3Qm91bmRzKGJvdW5kczogQm91bmRzKSB7XG4gICAgdGhpcy5ibG9ja1N0YWNrLmN1cnJlbnQubmV3Qm91bmRzKGJvdW5kcyk7XG4gIH1cblxuICBhcHBlbmRUZXh0KHN0cmluZzogc3RyaW5nKTogU2ltcGxlLlRleHQge1xuICAgIGxldCB7IGRvbSB9ID0gdGhpcztcbiAgICBsZXQgdGV4dCA9IGRvbS5jcmVhdGVUZXh0Tm9kZShzdHJpbmcpO1xuICAgIGRvbS5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50LCB0ZXh0LCB0aGlzLm5leHRTaWJsaW5nKTtcbiAgICB0aGlzLmJsb2NrU3RhY2suY3VycmVudC5uZXdOb2RlKHRleHQpO1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgYXBwZW5kQ29tbWVudChzdHJpbmc6IHN0cmluZyk6IFNpbXBsZS5Db21tZW50IHtcbiAgICBsZXQgeyBkb20gfSA9IHRoaXM7XG4gICAgbGV0IGNvbW1lbnQgPSBkb20uY3JlYXRlQ29tbWVudChzdHJpbmcpO1xuICAgIGRvbS5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50LCBjb21tZW50LCB0aGlzLm5leHRTaWJsaW5nKTtcbiAgICB0aGlzLmJsb2NrU3RhY2suY3VycmVudC5uZXdOb2RlKGNvbW1lbnQpO1xuICAgIHJldHVybiBjb21tZW50O1xuICB9XG5cbiAgc2V0U3RhdGljQXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMub3BlcmF0aW9ucy5hZGRTdGF0aWNBdHRyaWJ1dGUodGhpcy5jb25zdHJ1Y3RpbmcsIG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIHNldFN0YXRpY0F0dHJpYnV0ZU5TKG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9wZXJhdGlvbnMuYWRkU3RhdGljQXR0cmlidXRlTlModGhpcy5jb25zdHJ1Y3RpbmcsIG5hbWVzcGFjZSwgbmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgc2V0RHluYW1pY0F0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogUGF0aFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5vcGVyYXRpb25zLmFkZER5bmFtaWNBdHRyaWJ1dGUodGhpcy5jb25zdHJ1Y3RpbmcsIG5hbWUsIHJlZmVyZW5jZSwgaXNUcnVzdGluZyk7XG4gIH1cblxuICBzZXREeW5hbWljQXR0cmlidXRlTlMobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBQYXRoUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm9wZXJhdGlvbnMuYWRkRHluYW1pY0F0dHJpYnV0ZU5TKHRoaXMuY29uc3RydWN0aW5nLCBuYW1lc3BhY2UsIG5hbWUsIHJlZmVyZW5jZSwgaXNUcnVzdGluZyk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoKSB7XG4gICAgdGhpcy5ibG9ja1N0YWNrLmN1cnJlbnQuY2xvc2VFbGVtZW50KCk7XG4gICAgdGhpcy5wb3BFbGVtZW50KCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFja2VyIGV4dGVuZHMgRGVzdHJveWFibGVCb3VuZHMge1xuICBvcGVuRWxlbWVudChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCk7XG4gIGNsb3NlRWxlbWVudCgpO1xuICBuZXdOb2RlKG5vZGU6IFNpbXBsZS5Ob2RlKTtcbiAgbmV3Qm91bmRzKGJvdW5kczogQm91bmRzKTtcbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpO1xuICBmaW5hbGl6ZShzdGFjazogRWxlbWVudFN0YWNrKTtcbn1cblxuZXhwb3J0IGNsYXNzIFNpbXBsZUJsb2NrVHJhY2tlciBpbXBsZW1lbnRzIFRyYWNrZXIge1xuICBwcm90ZWN0ZWQgZmlyc3Q6IEZpcnN0Tm9kZSA9IG51bGw7XG4gIHByb3RlY3RlZCBsYXN0OiBMYXN0Tm9kZSA9IG51bGw7XG4gIHByb3RlY3RlZCBkZXN0cm95YWJsZXM6IERlc3Ryb3lhYmxlW10gPSBudWxsO1xuICBwcm90ZWN0ZWQgbmVzdGluZyA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJlbnQ6IFNpbXBsZS5FbGVtZW50KXt9XG5cbiAgZGVzdHJveSgpIHtcbiAgICBsZXQgeyBkZXN0cm95YWJsZXMgfSA9IHRoaXM7XG5cbiAgICBpZiAoZGVzdHJveWFibGVzICYmIGRlc3Ryb3lhYmxlcy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGk9MDsgaTxkZXN0cm95YWJsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGVzdHJveWFibGVzW2ldLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwYXJlbnRFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maXJzdCAmJiB0aGlzLmZpcnN0LmZpcnN0Tm9kZSgpO1xuICB9XG5cbiAgbGFzdE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFzdCAmJiB0aGlzLmxhc3QubGFzdE5vZGUoKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICB0aGlzLm5ld05vZGUoZWxlbWVudCk7XG4gICAgdGhpcy5uZXN0aW5nKys7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoKSB7XG4gICAgdGhpcy5uZXN0aW5nLS07XG4gIH1cblxuICBuZXdOb2RlKG5vZGU6IE5vZGUpIHtcbiAgICBpZiAodGhpcy5uZXN0aW5nICE9PSAwKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuZmlyc3QpIHtcbiAgICAgIHRoaXMuZmlyc3QgPSBuZXcgRmlyc3Qobm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0ID0gbmV3IExhc3Qobm9kZSk7XG4gIH1cblxuICBuZXdCb3VuZHMoYm91bmRzOiBCb3VuZHMpIHtcbiAgICBpZiAodGhpcy5uZXN0aW5nICE9PSAwKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuZmlyc3QpIHtcbiAgICAgIHRoaXMuZmlyc3QgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0ID0gYm91bmRzO1xuICB9XG5cbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpIHtcbiAgICB0aGlzLmRlc3Ryb3lhYmxlcyA9IHRoaXMuZGVzdHJveWFibGVzIHx8IFtdO1xuICAgIHRoaXMuZGVzdHJveWFibGVzLnB1c2goZCk7XG4gIH1cblxuICBmaW5hbGl6ZShzdGFjazogRWxlbWVudFN0YWNrKSB7XG4gICAgaWYgKCF0aGlzLmZpcnN0KSB7XG4gICAgICBzdGFjay5hcHBlbmRDb21tZW50KCcnKTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgUmVtb3RlQmxvY2tUcmFja2VyIGV4dGVuZHMgU2ltcGxlQmxvY2tUcmFja2VyIHtcbiAgZGVzdHJveSgpIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG5cbiAgICBjbGVhcih0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0YWJsZVRyYWNrZXIgZXh0ZW5kcyBUcmFja2VyIHtcbiAgcmVzZXQoZW52OiBFbnZpcm9ubWVudCk7XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGFibGVCbG9ja1RyYWNrZXIgZXh0ZW5kcyBTaW1wbGVCbG9ja1RyYWNrZXIgaW1wbGVtZW50cyBVcGRhdGFibGVUcmFja2VyIHtcbiAgcmVzZXQoZW52OiBFbnZpcm9ubWVudCkge1xuICAgIGxldCB7IGRlc3Ryb3lhYmxlcyB9ID0gdGhpcztcblxuICAgIGlmIChkZXN0cm95YWJsZXMgJiYgZGVzdHJveWFibGVzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaT0wOyBpPGRlc3Ryb3lhYmxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbnYuZGlkRGVzdHJveShkZXN0cm95YWJsZXNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBuZXh0U2libGluZyA9IGNsZWFyKHRoaXMpO1xuXG4gICAgdGhpcy5kZXN0cm95YWJsZXMgPSBudWxsO1xuICAgIHRoaXMuZmlyc3QgPSBudWxsO1xuICAgIHRoaXMubGFzdCA9IG51bGw7XG5cbiAgICByZXR1cm4gbmV4dFNpYmxpbmc7XG4gIH1cbn1cblxuY2xhc3MgQmxvY2tMaXN0VHJhY2tlciBpbXBsZW1lbnRzIFRyYWNrZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhcmVudDogU2ltcGxlLkVsZW1lbnQsIHByaXZhdGUgYm91bmRMaXN0OiBMaW5rZWRMaXN0PExpbmtlZExpc3ROb2RlICYgQm91bmRzICYgRGVzdHJveWFibGU+KSB7XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgdGhpcy5ib3VuZExpc3QgPSBib3VuZExpc3Q7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuYm91bmRMaXN0LmZvckVhY2hOb2RlKG5vZGUgPT4gbm9kZS5kZXN0cm95KCkpO1xuICB9XG5cbiAgcGFyZW50RWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gIH1cblxuICBmaXJzdE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRMaXN0LmhlYWQoKS5maXJzdE5vZGUoKTtcbiAgfVxuXG4gIGxhc3ROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmJvdW5kTGlzdC50YWlsKCkubGFzdE5vZGUoKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICBhc3NlcnQoZmFsc2UsICdDYW5ub3Qgb3BlbkVsZW1lbnQgZGlyZWN0bHkgaW5zaWRlIGEgYmxvY2sgbGlzdCcpO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KCkge1xuICAgIGFzc2VydChmYWxzZSwgJ0Nhbm5vdCBjbG9zZUVsZW1lbnQgZGlyZWN0bHkgaW5zaWRlIGEgYmxvY2sgbGlzdCcpO1xuICB9XG5cbiAgbmV3Tm9kZShub2RlOiBOb2RlKSB7XG4gICAgYXNzZXJ0KGZhbHNlLCAnQ2Fubm90IGNyZWF0ZSBhIG5ldyBub2RlIGRpcmVjdGx5IGluc2lkZSBhIGJsb2NrIGxpc3QnKTtcbiAgfVxuXG4gIG5ld0JvdW5kcyhib3VuZHM6IEJvdW5kcykge1xuICB9XG5cbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpIHtcbiAgfVxuXG4gIGZpbmFsaXplKHN0YWNrOiBFbGVtZW50U3RhY2spIHtcbiAgfVxufVxuIl19 -enifed('glimmer-runtime/lib/compat/inner-html-fix', ['exports', 'glimmer-runtime/lib/bounds', 'glimmer-runtime/lib/dom/helper'], function (exports, _glimmerRuntimeLibBounds, _glimmerRuntimeLibDomHelper) { - 'use strict'; - - exports.domChanges = domChanges; - exports.treeConstruction = treeConstruction; - - var innerHTMLWrapper = { - colgroup: { depth: 2, before: '<table><colgroup>', after: '</colgroup></table>' }, - table: { depth: 1, before: '<table>', after: '</table>' }, - tbody: { depth: 2, before: '<table><tbody>', after: '</tbody></table>' }, - tfoot: { depth: 2, before: '<table><tfoot>', after: '</tfoot></table>' }, - thead: { depth: 2, before: '<table><thead>', after: '</thead></table>' }, - tr: { depth: 3, before: '<table><tbody><tr>', after: '</tr></tbody></table>' } - }; - // Patch: innerHTML Fix - // Browsers: IE9 - // Reason: IE9 don't allow us to set innerHTML on col, colgroup, frameset, - // html, style, table, tbody, tfoot, thead, title, tr. - // Fix: Wrap the innerHTML we are about to set in its parents, apply the - // wrapped innerHTML on a div, then move the unwrapped nodes into the - // target position. - - function domChanges(document, DOMChangesClass) { - if (!document) return DOMChangesClass; - if (!shouldApplyFix(document)) { - return DOMChangesClass; - } - var div = document.createElement('div'); - return (function (_DOMChangesClass) { - babelHelpers.inherits(DOMChangesWithInnerHTMLFix, _DOMChangesClass); - - function DOMChangesWithInnerHTMLFix() { - _DOMChangesClass.apply(this, arguments); - } - - DOMChangesWithInnerHTMLFix.prototype.insertHTMLBefore = function insertHTMLBefore(parent, nextSibling, html) { - if (html === null || html === '') { - return _DOMChangesClass.prototype.insertHTMLBefore.call(this, parent, nextSibling, html); - } - var parentTag = parent.tagName.toLowerCase(); - var wrapper = innerHTMLWrapper[parentTag]; - if (wrapper === undefined) { - return _DOMChangesClass.prototype.insertHTMLBefore.call(this, parent, nextSibling, html); - } - return fixInnerHTML(parent, wrapper, div, html, nextSibling); - }; - - return DOMChangesWithInnerHTMLFix; - })(DOMChangesClass); + function distributeMorphs(morphs, opcodes) { + if (morphs.length === 0) { + return; } - function treeConstruction(document, DOMTreeConstructionClass) { - if (!document) return DOMTreeConstructionClass; - if (!shouldApplyFix(document)) { - return DOMTreeConstructionClass; - } - var div = document.createElement('div'); - return (function (_DOMTreeConstructionClass) { - babelHelpers.inherits(DOMTreeConstructionWithInnerHTMLFix, _DOMTreeConstructionClass); - - function DOMTreeConstructionWithInnerHTMLFix() { - _DOMTreeConstructionClass.apply(this, arguments); - } - - DOMTreeConstructionWithInnerHTMLFix.prototype.insertHTMLBefore = function insertHTMLBefore(parent, html, reference) { - if (html === null || html === '') { - return _DOMTreeConstructionClass.prototype.insertHTMLBefore.call(this, parent, html, reference); - } - var parentTag = parent.tagName.toLowerCase(); - var wrapper = innerHTMLWrapper[parentTag]; - if (wrapper === undefined) { - return _DOMTreeConstructionClass.prototype.insertHTMLBefore.call(this, parent, html, reference); - } - return fixInnerHTML(parent, wrapper, div, html, reference); - }; - - return DOMTreeConstructionWithInnerHTMLFix; - })(DOMTreeConstructionClass); + // Splice morphs after the most recent shareParent/consumeParent. + var o; + for (o = opcodes.length - 1; o >= 0; --o) { + var opcode = opcodes[o][0]; + if (opcode === 'shareElement' || opcode === 'consumeParent' || opcode === 'popParent') { + break; + } } - function fixInnerHTML(parent, wrapper, div, html, reference) { - var wrappedHtml = wrapper.before + html + wrapper.after; - div.innerHTML = wrappedHtml; - var parentNode = div; - for (var i = 0; i < wrapper.depth; i++) { - parentNode = parentNode.childNodes[0]; - } - - var _moveNodesBefore = _glimmerRuntimeLibDomHelper.moveNodesBefore(parentNode, parent, reference); - - var first = _moveNodesBefore[0]; - var last = _moveNodesBefore[1]; - - return new _glimmerRuntimeLibBounds.ConcreteBounds(parent, first, last); + var spliceArgs = [o + 1, 0]; + for (var i = 0; i < morphs.length; ++i) { + spliceArgs.push(['createMorph', morphs[i].slice()]); } - function shouldApplyFix(document) { - var table = document.createElement('table'); - try { - table.innerHTML = '<tbody></tbody>'; - } catch (e) {} finally { - if (table.childNodes.length !== 0) { - // It worked as expected, no fix required - return false; - } - } - return true; - } + opcodes.splice.apply(opcodes, spliceArgs); + morphs.length = 0; + } }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGF0L2lubmVyLWh0bWwtZml4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQVNBLFFBQUksZ0JBQWdCLEdBQUc7QUFDckIsZ0JBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRTtBQUNqRixhQUFLLEVBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtBQUM1RCxhQUFLLEVBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUU7QUFDM0UsYUFBSyxFQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFO0FBQzNFLGFBQUssRUFBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRTtBQUMzRSxVQUFFLEVBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUU7S0FDckYsQ0FBQzs7Ozs7Ozs7O0FBU0YsYUFBQSxVQUFBLENBQTJCLFFBQWtCLEVBQUUsZUFBa0MsRUFBQTtBQUMvRSxZQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sZUFBZSxDQUFDO0FBRXRDLFlBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDN0IsbUJBQU8sZUFBZSxDQUFDO1NBQ3hCO0FBRUQsWUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV4QztrQ0FBTywwQkFBQTs7cUJBQUEsMEJBQUE7Ozs7QUFBQSxzQ0FB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QUFBLGNBQUEsQ0FBd0IsUUFBUSxFQUFBO0FBQzlCLFlBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUMsWUFBSTtBQUNGLGlCQUFLLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDO1NBQ3BDLENBQUEsT0FBTyxDQUFDLEVBQUUsRUFDWCxTQUFTO0FBQ1IsZ0JBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFOztBQUVqQyx1QkFBTyxLQUFLLENBQUM7YUFDZDtTQUNGO0FBRUQsZUFBTyxJQUFJLENBQUM7S0FDYiIsImZpbGUiOiJpbm5lci1odG1sLWZpeC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvdW5kcywgQ29uY3JldGVCb3VuZHMgfSBmcm9tICcuLi9ib3VuZHMnO1xuaW1wb3J0IHsgbW92ZU5vZGVzQmVmb3JlLCBET01DaGFuZ2VzLCBET01UcmVlQ29uc3RydWN0aW9uIH0gZnJvbSAnLi4vZG9tL2hlbHBlcic7XG5cbmludGVyZmFjZSBXcmFwcGVyIHtcbiAgZGVwdGg6IG51bWJlcjtcbiAgYmVmb3JlOiBzdHJpbmc7XG4gIGFmdGVyOiBzdHJpbmc7XG59XG5cbmxldCBpbm5lckhUTUxXcmFwcGVyID0ge1xuICBjb2xncm91cDogeyBkZXB0aDogMiwgYmVmb3JlOiAnPHRhYmxlPjxjb2xncm91cD4nLCBhZnRlcjogJzwvY29sZ3JvdXA+PC90YWJsZT4nIH0sXG4gIHRhYmxlOiAgICB7IGRlcHRoOiAxLCBiZWZvcmU6ICc8dGFibGU+JywgYWZ0ZXI6ICc8L3RhYmxlPicgfSxcbiAgdGJvZHk6ICAgIHsgZGVwdGg6IDIsIGJlZm9yZTogJzx0YWJsZT48dGJvZHk+JywgYWZ0ZXI6ICc8L3Rib2R5PjwvdGFibGU+JyB9LFxuICB0Zm9vdDogICAgeyBkZXB0aDogMiwgYmVmb3JlOiAnPHRhYmxlPjx0Zm9vdD4nLCBhZnRlcjogJzwvdGZvb3Q+PC90YWJsZT4nIH0sXG4gIHRoZWFkOiAgICB7IGRlcHRoOiAyLCBiZWZvcmU6ICc8dGFibGU+PHRoZWFkPicsIGFmdGVyOiAnPC90aGVhZD48L3RhYmxlPicgfSxcbiAgdHI6ICAgICAgIHsgZGVwdGg6IDMsIGJlZm9yZTogJzx0YWJsZT48dGJvZHk+PHRyPicsIGFmdGVyOiAnPC90cj48L3Rib2R5PjwvdGFibGU+JyB9XG59O1xuXG4vLyBQYXRjaDogICAgaW5uZXJIVE1MIEZpeFxuLy8gQnJvd3NlcnM6IElFOVxuLy8gUmVhc29uOiAgIElFOSBkb24ndCBhbGxvdyB1cyB0byBzZXQgaW5uZXJIVE1MIG9uIGNvbCwgY29sZ3JvdXAsIGZyYW1lc2V0LFxuLy8gICAgICAgICAgIGh0bWwsIHN0eWxlLCB0YWJsZSwgdGJvZHksIHRmb290LCB0aGVhZCwgdGl0bGUsIHRyLlxuLy8gRml4OiAgICAgIFdyYXAgdGhlIGlubmVySFRNTCB3ZSBhcmUgYWJvdXQgdG8gc2V0IGluIGl0cyBwYXJlbnRzLCBhcHBseSB0aGVcbi8vICAgICAgICAgICB3cmFwcGVkIGlubmVySFRNTCBvbiBhIGRpdiwgdGhlbiBtb3ZlIHRoZSB1bndyYXBwZWQgbm9kZXMgaW50byB0aGVcbi8vICAgICAgICAgICB0YXJnZXQgcG9zaXRpb24uXG5leHBvcnQgZnVuY3Rpb24gZG9tQ2hhbmdlcyhkb2N1bWVudDogRG9jdW1lbnQsIERPTUNoYW5nZXNDbGFzczogdHlwZW9mIERPTUNoYW5nZXMpOiB0eXBlb2YgRE9NQ2hhbmdlcyB7XG4gIGlmICghZG9jdW1lbnQpIHJldHVybiBET01DaGFuZ2VzQ2xhc3M7XG5cbiAgaWYgKCFzaG91bGRBcHBseUZpeChkb2N1bWVudCkpIHtcbiAgICByZXR1cm4gRE9NQ2hhbmdlc0NsYXNzO1xuICB9XG5cbiAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gIHJldHVybiBjbGFzcyBET01DaGFuZ2VzV2l0aElubmVySFRNTEZpeCBleHRlbmRzIERPTUNoYW5nZXNDbGFzcyB7XG4gICAgaW5zZXJ0SFRNTEJlZm9yZShwYXJlbnQ6IEhUTUxFbGVtZW50LCBuZXh0U2libGluZzogTm9kZSwgaHRtbDogc3RyaW5nKTogQm91bmRzIHtcbiAgICAgIGlmIChodG1sID09PSBudWxsIHx8IGh0bWwgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiBzdXBlci5pbnNlcnRIVE1MQmVmb3JlKHBhcmVudCwgbmV4dFNpYmxpbmcsIGh0bWwpO1xuICAgICAgfVxuXG4gICAgICBsZXQgcGFyZW50VGFnID0gcGFyZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIGxldCB3cmFwcGVyID0gaW5uZXJIVE1MV3JhcHBlcltwYXJlbnRUYWddO1xuXG4gICAgICBpZih3cmFwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmluc2VydEhUTUxCZWZvcmUocGFyZW50LCBuZXh0U2libGluZywgaHRtbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmaXhJbm5lckhUTUwocGFyZW50LCB3cmFwcGVyLCBkaXYsIGh0bWwsIG5leHRTaWJsaW5nKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmVlQ29uc3RydWN0aW9uKGRvY3VtZW50OiBEb2N1bWVudCwgRE9NVHJlZUNvbnN0cnVjdGlvbkNsYXNzOiB0eXBlb2YgRE9NVHJlZUNvbnN0cnVjdGlvbik6IHR5cGVvZiBET01UcmVlQ29uc3RydWN0aW9uIHtcbiAgaWYgKCFkb2N1bWVudCkgcmV0dXJuIERPTVRyZWVDb25zdHJ1Y3Rpb25DbGFzcztcblxuICBpZiAoIXNob3VsZEFwcGx5Rml4KGRvY3VtZW50KSkge1xuICAgIHJldHVybiBET01UcmVlQ29uc3RydWN0aW9uQ2xhc3M7XG4gIH1cblxuICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgcmV0dXJuIGNsYXNzIERPTVRyZWVDb25zdHJ1Y3Rpb25XaXRoSW5uZXJIVE1MRml4IGV4dGVuZHMgRE9NVHJlZUNvbnN0cnVjdGlvbkNsYXNzIHtcbiAgICBpbnNlcnRIVE1MQmVmb3JlKHBhcmVudDogSFRNTEVsZW1lbnQsIGh0bWw6IHN0cmluZywgcmVmZXJlbmNlOiBOb2RlKTogQm91bmRzIHtcbiAgICAgIGlmIChodG1sID09PSBudWxsIHx8IGh0bWwgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiBzdXBlci5pbnNlcnRIVE1MQmVmb3JlKHBhcmVudCwgaHRtbCwgcmVmZXJlbmNlKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHBhcmVudFRhZyA9IHBhcmVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBsZXQgd3JhcHBlciA9IGlubmVySFRNTFdyYXBwZXJbcGFyZW50VGFnXTtcblxuICAgICAgaWYod3JhcHBlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBzdXBlci5pbnNlcnRIVE1MQmVmb3JlKHBhcmVudCwgaHRtbCwgcmVmZXJlbmNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpeElubmVySFRNTChwYXJlbnQsIHdyYXBwZXIsIGRpdiwgaHRtbCwgcmVmZXJlbmNlKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpeElubmVySFRNTChwYXJlbnQ6IEhUTUxFbGVtZW50LCB3cmFwcGVyOiBXcmFwcGVyLCBkaXY6IEhUTUxFbGVtZW50LCBodG1sOiBzdHJpbmcsIHJlZmVyZW5jZTogTm9kZSk6IEJvdW5kcyB7XG4gIGxldCB3cmFwcGVkSHRtbCA9IHdyYXBwZXIuYmVmb3JlICsgaHRtbCArIHdyYXBwZXIuYWZ0ZXI7XG5cbiAgZGl2LmlubmVySFRNTCA9IHdyYXBwZWRIdG1sO1xuXG4gIGxldCBwYXJlbnROb2RlOiBOb2RlID0gZGl2O1xuXG4gIGZvciAobGV0IGk9MDsgaTx3cmFwcGVyLmRlcHRoOyBpKyspIHtcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5jaGlsZE5vZGVzWzBdO1xuICB9XG5cbiAgbGV0IFtmaXJzdCwgbGFzdF0gPSBtb3ZlTm9kZXNCZWZvcmUocGFyZW50Tm9kZSwgcGFyZW50LCByZWZlcmVuY2UpO1xuICByZXR1cm4gbmV3IENvbmNyZXRlQm91bmRzKHBhcmVudCwgZmlyc3QsIGxhc3QpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRBcHBseUZpeChkb2N1bWVudCkge1xuICBsZXQgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xuICB0cnkge1xuICAgIHRhYmxlLmlubmVySFRNTCA9ICc8dGJvZHk+PC90Ym9keT4nO1xuICB9IGNhdGNoIChlKSB7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKHRhYmxlLmNoaWxkTm9kZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAvLyBJdCB3b3JrZWQgYXMgZXhwZWN0ZWQsIG5vIGZpeCByZXF1aXJlZFxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuIl19 -enifed('glimmer-runtime/lib/compat/svg-inner-html-fix', ['exports', 'glimmer-runtime/lib/bounds', 'glimmer-runtime/lib/dom/helper'], function (exports, _glimmerRuntimeLibBounds, _glimmerRuntimeLibDomHelper) { - 'use strict'; +enifed('htmlbars-compiler/template-compiler', ['exports', 'htmlbars-compiler/fragment-opcode-compiler', 'htmlbars-compiler/fragment-javascript-compiler', 'htmlbars-compiler/hydration-opcode-compiler', 'htmlbars-compiler/hydration-javascript-compiler', 'htmlbars-compiler/template-visitor', 'htmlbars-compiler/utils', 'htmlbars-util/quoting', 'htmlbars-util/array-utils'], function (exports, _htmlbarsCompilerFragmentOpcodeCompiler, _htmlbarsCompilerFragmentJavascriptCompiler, _htmlbarsCompilerHydrationOpcodeCompiler, _htmlbarsCompilerHydrationJavascriptCompiler, _htmlbarsCompilerTemplateVisitor, _htmlbarsCompilerUtils, _htmlbarsUtilQuoting, _htmlbarsUtilArrayUtils) { + 'use strict'; - exports.domChanges = domChanges; - exports.treeConstruction = treeConstruction; + function TemplateCompiler(options) { + this.options = options || {}; + this.consumerBuildMeta = this.options.buildMeta || function () {}; + this.fragmentOpcodeCompiler = new _htmlbarsCompilerFragmentOpcodeCompiler.default(); + this.fragmentCompiler = new _htmlbarsCompilerFragmentJavascriptCompiler.default(); + this.hydrationOpcodeCompiler = new _htmlbarsCompilerHydrationOpcodeCompiler.default(); + this.hydrationCompiler = new _htmlbarsCompilerHydrationJavascriptCompiler.default(); + this.templates = []; + this.childTemplates = []; + } - var SVG_NAMESPACE = 'http://www.w3.org/2000/svg'; - // Patch: insertAdjacentHTML on SVG Fix - // Browsers: Safari, IE, Edge, Firefox ~33-34 - // Reason: insertAdjacentHTML does not exist on SVG elements in Safari. It is - // present but throws an exception on IE and Edge. Old versions of - // Firefox create nodes in the incorrect namespace. - // Fix: Since IE and Edge silently fail to create SVG nodes using - // innerHTML, and because Firefox may create nodes in the incorrect - // namespace using innerHTML on SVG elements, an HTML-string wrapping - // approach is used. A pre/post SVG tag is added to the string, then - // that whole string is added to a div. The created nodes are plucked - // out and applied to the target location on DOM. + exports.default = TemplateCompiler; - function domChanges(document, DOMChangesClass, svgNamespace) { - if (!document) return DOMChangesClass; - if (!shouldApplyFix(document, svgNamespace)) { - return DOMChangesClass; - } - var div = document.createElement('div'); - return (function (_DOMChangesClass) { - babelHelpers.inherits(DOMChangesWithSVGInnerHTMLFix, _DOMChangesClass); + TemplateCompiler.prototype.compile = function (ast) { + var templateVisitor = new _htmlbarsCompilerTemplateVisitor.default(); + templateVisitor.visit(ast); - function DOMChangesWithSVGInnerHTMLFix() { - _DOMChangesClass.apply(this, arguments); - } + _htmlbarsCompilerUtils.processOpcodes(this, templateVisitor.actions); - DOMChangesWithSVGInnerHTMLFix.prototype.insertHTMLBefore = function insertHTMLBefore(parent, nextSibling, html) { - if (html === null || html === '') { - return _DOMChangesClass.prototype.insertHTMLBefore.call(this, parent, nextSibling, html); - } - if (parent.namespaceURI !== svgNamespace) { - return _DOMChangesClass.prototype.insertHTMLBefore.call(this, parent, nextSibling, html); - } - return fixSVG(parent, div, html, nextSibling); - }; + return this.templates.pop(); + }; - return DOMChangesWithSVGInnerHTMLFix; - })(DOMChangesClass); - } + TemplateCompiler.prototype.startProgram = function (program, childTemplateCount, blankChildTextNodes) { + this.fragmentOpcodeCompiler.startProgram(program, childTemplateCount, blankChildTextNodes); + this.hydrationOpcodeCompiler.startProgram(program, childTemplateCount, blankChildTextNodes); - function treeConstruction(document, TreeConstructionClass, svgNamespace) { - if (!document) return TreeConstructionClass; - if (!shouldApplyFix(document, svgNamespace)) { - return TreeConstructionClass; - } - var div = document.createElement('div'); - return (function (_TreeConstructionClass) { - babelHelpers.inherits(TreeConstructionWithSVGInnerHTMLFix, _TreeConstructionClass); - - function TreeConstructionWithSVGInnerHTMLFix() { - _TreeConstructionClass.apply(this, arguments); - } - - TreeConstructionWithSVGInnerHTMLFix.prototype.insertHTMLBefore = function insertHTMLBefore(parent, html, reference) { - if (html === null || html === '') { - return _TreeConstructionClass.prototype.insertHTMLBefore.call(this, parent, html, reference); - } - if (parent.namespaceURI !== svgNamespace) { - return _TreeConstructionClass.prototype.insertHTMLBefore.call(this, parent, html, reference); - } - return fixSVG(parent, div, html, reference); - }; - - return TreeConstructionWithSVGInnerHTMLFix; - })(TreeConstructionClass); + this.childTemplates.length = 0; + while (childTemplateCount--) { + this.childTemplates.push(this.templates.pop()); } + }; - function fixSVG(parent, div, html, reference) { - // IE, Edge: also do not correctly support using `innerHTML` on SVG - // namespaced elements. So here a wrapper is used. - var wrappedHtml = '<svg>' + html + '</svg>'; - div.innerHTML = wrappedHtml; + TemplateCompiler.prototype.insertBoundary = function (first) { + this.hydrationOpcodeCompiler.insertBoundary(first); + }; - var _moveNodesBefore = _glimmerRuntimeLibDomHelper.moveNodesBefore(div.firstChild, parent, reference); - - var first = _moveNodesBefore[0]; - var last = _moveNodesBefore[1]; - - return new _glimmerRuntimeLibBounds.ConcreteBounds(parent, first, last); + TemplateCompiler.prototype.getChildTemplateVars = function (indent) { + var vars = ''; + if (this.childTemplates) { + for (var i = 0; i < this.childTemplates.length; i++) { + vars += indent + 'var child' + i + ' = ' + this.childTemplates[i] + ';\n'; + } } - function shouldApplyFix(document, svgNamespace) { - var svg = document.createElementNS(svgNamespace, 'svg'); - try { - svg['insertAdjacentHTML']('beforeEnd', '<circle></circle>'); - } catch (e) {} finally { - // FF: Old versions will create a node in the wrong namespace - if (svg.childNodes.length === 1 && svg.firstChild.namespaceURI === SVG_NAMESPACE) { - // The test worked as expected, no fix required - return false; - } - svg = null; - return true; - } - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGF0L3N2Zy1pbm5lci1odG1sLWZpeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFHQSxRQUFNLGFBQWEsR0FBRyw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWFuRCxhQUFBLFVBQUEsQ0FBMkIsUUFBa0IsRUFBRSxlQUFrQyxFQUFFLFlBQW9CLEVBQUE7QUFDckcsWUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLGVBQWUsQ0FBQztBQUV0QyxZQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBRTtBQUMzQyxtQkFBTyxlQUFlLENBQUM7U0FDeEI7QUFFRCxZQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRXhDO2tDQUFPLDZCQUFBOztxQkFBQSw2QkFBQTs7OztBQUFBLHlDQUFBLFdBQ0wsZ0JBQWdCLEdBQUEsMEJBQUMsTUFBbUIsRUFBRSxXQUFpQixFQUFFLElBQVksRUFBQTtBQUNuRSxvQkFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDaEMsMkJBQU8sMkJBQU0sZ0JBQWdCLEtBQUEsT0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUMxRDtBQUVELG9CQUFJLE1BQU0sQ0FBQyxZQUFZLEtBQUssWUFBWSxFQUFFO0FBQ3hDLDJCQUFPLDJCQUFNLGdCQUFnQixLQUFBLE9BQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDMUQ7QUFFRCx1QkFBTyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDL0M7O21CQVhJLDZCQUFBO1dBQTRDLGVBQWUsRUFZaEU7S0FDSDs7QUFFRCxhQUFBLGdCQUFBLENBQWlDLFFBQWtCLEVBQUUscUJBQWlELEVBQUUsWUFBb0IsRUFBQTtBQUMxSCxZQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8scUJBQXFCLENBQUM7QUFFNUMsWUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUU7QUFDM0MsbUJBQU8scUJBQXFCLENBQUM7U0FDOUI7QUFFRCxZQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRXhDO2tDQUFPLG1DQUFBOztxQkFBQSxtQ0FBQTs7OztBQUFBLCtDQUFBLFdBQ0wsZ0JBQWdCLEdBQUEsMEJBQUMsTUFBbUIsRUFBRSxJQUFZLEVBQUcsU0FBZSxFQUFBO0FBQ2xFLG9CQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUNoQywyQkFBTyxpQ0FBTSxnQkFBZ0IsS0FBQSxPQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7aUJBQ3hEO0FBRUQsb0JBQUksTUFBTSxDQUFDLFlBQVksS0FBSyxZQUFZLEVBQUU7QUFDeEMsMkJBQU8saUNBQU0sZ0JBQWdCLEtBQUEsT0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2lCQUN4RDtBQUVELHVCQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQzthQUM3Qzs7bUJBWEksbUNBQUE7V0FBa0QscUJBQXFCLEVBWTVFO0tBQ0g7O0FBRUQsYUFBQSxNQUFBLENBQWdCLE1BQWUsRUFBRSxHQUFnQixFQUFFLElBQVksRUFBRSxTQUFlLEVBQUE7OztBQUc5RSxZQUFJLFdBQVcsR0FBRyxPQUFPLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQztBQUU1QyxXQUFHLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQzs7K0JBRVIsNEJBdEViLGVBQWUsQ0FzRWMsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDOztZQUFqRSxLQUFLO1lBQUUsSUFBSTs7QUFDaEIsZUFBTyw2QkF4RVEsY0FBYyxDQXdFSCxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ2hEO0FBRUQsYUFBQSxjQUFBLENBQXdCLFFBQVEsRUFBRSxZQUFZLEVBQUE7QUFDNUMsWUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFFeEQsWUFBSTtBQUNGLGVBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1NBQzVELENBQUEsT0FBTyxDQUFDLEVBQUUsRUFHWCxTQUFTOztBQUVSLGdCQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFlBQVksS0FBSyxhQUFhLEVBQUU7O0FBRWhGLHVCQUFPLEtBQUssQ0FBQzthQUNkO0FBQ0QsZUFBRyxHQUFHLElBQUksQ0FBQztBQUVYLG1CQUFPLElBQUksQ0FBQztTQUNiO0tBQ0YiLCJmaWxlIjoic3ZnLWlubmVyLWh0bWwtZml4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQm91bmRzLCBDb25jcmV0ZUJvdW5kcyB9IGZyb20gJy4uL2JvdW5kcyc7XG5pbXBvcnQgeyBtb3ZlTm9kZXNCZWZvcmUsIERPTUNoYW5nZXMsIERPTVRyZWVDb25zdHJ1Y3Rpb24gfSBmcm9tICcuLi9kb20vaGVscGVyJztcblxuY29uc3QgU1ZHX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG5cbi8vIFBhdGNoOiAgICBpbnNlcnRBZGphY2VudEhUTUwgb24gU1ZHIEZpeFxuLy8gQnJvd3NlcnM6IFNhZmFyaSwgSUUsIEVkZ2UsIEZpcmVmb3ggfjMzLTM0XG4vLyBSZWFzb246ICAgaW5zZXJ0QWRqYWNlbnRIVE1MIGRvZXMgbm90IGV4aXN0IG9uIFNWRyBlbGVtZW50cyBpbiBTYWZhcmkuIEl0IGlzXG4vLyAgICAgICAgICAgcHJlc2VudCBidXQgdGhyb3dzIGFuIGV4Y2VwdGlvbiBvbiBJRSBhbmQgRWRnZS4gT2xkIHZlcnNpb25zIG9mXG4vLyAgICAgICAgICAgRmlyZWZveCBjcmVhdGUgbm9kZXMgaW4gdGhlIGluY29ycmVjdCBuYW1lc3BhY2UuXG4vLyBGaXg6ICAgICAgU2luY2UgSUUgYW5kIEVkZ2Ugc2lsZW50bHkgZmFpbCB0byBjcmVhdGUgU1ZHIG5vZGVzIHVzaW5nXG4vLyAgICAgICAgICAgaW5uZXJIVE1MLCBhbmQgYmVjYXVzZSBGaXJlZm94IG1heSBjcmVhdGUgbm9kZXMgaW4gdGhlIGluY29ycmVjdFxuLy8gICAgICAgICAgIG5hbWVzcGFjZSB1c2luZyBpbm5lckhUTUwgb24gU1ZHIGVsZW1lbnRzLCBhbiBIVE1MLXN0cmluZyB3cmFwcGluZ1xuLy8gICAgICAgICAgIGFwcHJvYWNoIGlzIHVzZWQuIEEgcHJlL3Bvc3QgU1ZHIHRhZyBpcyBhZGRlZCB0byB0aGUgc3RyaW5nLCB0aGVuXG4vLyAgICAgICAgICAgdGhhdCB3aG9sZSBzdHJpbmcgaXMgYWRkZWQgdG8gYSBkaXYuIFRoZSBjcmVhdGVkIG5vZGVzIGFyZSBwbHVja2VkXG4vLyAgICAgICAgICAgb3V0IGFuZCBhcHBsaWVkIHRvIHRoZSB0YXJnZXQgbG9jYXRpb24gb24gRE9NLlxuZXhwb3J0IGZ1bmN0aW9uIGRvbUNoYW5nZXMoZG9jdW1lbnQ6IERvY3VtZW50LCBET01DaGFuZ2VzQ2xhc3M6IHR5cGVvZiBET01DaGFuZ2VzLCBzdmdOYW1lc3BhY2U6IHN0cmluZyk6IHR5cGVvZiBET01DaGFuZ2VzIHtcbiAgaWYgKCFkb2N1bWVudCkgcmV0dXJuIERPTUNoYW5nZXNDbGFzcztcblxuICBpZiAoIXNob3VsZEFwcGx5Rml4KGRvY3VtZW50LCBzdmdOYW1lc3BhY2UpKSB7XG4gICAgcmV0dXJuIERPTUNoYW5nZXNDbGFzcztcbiAgfVxuXG4gIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICByZXR1cm4gY2xhc3MgRE9NQ2hhbmdlc1dpdGhTVkdJbm5lckhUTUxGaXggZXh0ZW5kcyBET01DaGFuZ2VzQ2xhc3Mge1xuICAgIGluc2VydEhUTUxCZWZvcmUocGFyZW50OiBIVE1MRWxlbWVudCwgbmV4dFNpYmxpbmc6IE5vZGUsIGh0bWw6IHN0cmluZyk6IEJvdW5kcyB7XG4gICAgICBpZiAoaHRtbCA9PT0gbnVsbCB8fCBodG1sID09PSAnJykge1xuICAgICAgICByZXR1cm4gc3VwZXIuaW5zZXJ0SFRNTEJlZm9yZShwYXJlbnQsIG5leHRTaWJsaW5nLCBodG1sKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgIT09IHN2Z05hbWVzcGFjZSkge1xuICAgICAgICByZXR1cm4gc3VwZXIuaW5zZXJ0SFRNTEJlZm9yZShwYXJlbnQsIG5leHRTaWJsaW5nLCBodG1sKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpeFNWRyhwYXJlbnQsIGRpdiwgaHRtbCwgbmV4dFNpYmxpbmcpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyZWVDb25zdHJ1Y3Rpb24oZG9jdW1lbnQ6IERvY3VtZW50LCBUcmVlQ29uc3RydWN0aW9uQ2xhc3M6IHR5cGVvZiBET01UcmVlQ29uc3RydWN0aW9uLCBzdmdOYW1lc3BhY2U6IHN0cmluZyk6IHR5cGVvZiBET01UcmVlQ29uc3RydWN0aW9uIHtcbiAgaWYgKCFkb2N1bWVudCkgcmV0dXJuIFRyZWVDb25zdHJ1Y3Rpb25DbGFzcztcblxuICBpZiAoIXNob3VsZEFwcGx5Rml4KGRvY3VtZW50LCBzdmdOYW1lc3BhY2UpKSB7XG4gICAgcmV0dXJuIFRyZWVDb25zdHJ1Y3Rpb25DbGFzcztcbiAgfVxuXG4gIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICByZXR1cm4gY2xhc3MgVHJlZUNvbnN0cnVjdGlvbldpdGhTVkdJbm5lckhUTUxGaXggZXh0ZW5kcyBUcmVlQ29uc3RydWN0aW9uQ2xhc3Mge1xuICAgIGluc2VydEhUTUxCZWZvcmUocGFyZW50OiBIVE1MRWxlbWVudCwgaHRtbDogc3RyaW5nLCAgcmVmZXJlbmNlOiBOb2RlLCk6IEJvdW5kcyB7XG4gICAgICBpZiAoaHRtbCA9PT0gbnVsbCB8fCBodG1sID09PSAnJykge1xuICAgICAgICByZXR1cm4gc3VwZXIuaW5zZXJ0SFRNTEJlZm9yZShwYXJlbnQsIGh0bWwsIHJlZmVyZW5jZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJICE9PSBzdmdOYW1lc3BhY2UpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmluc2VydEhUTUxCZWZvcmUocGFyZW50LCBodG1sLCByZWZlcmVuY2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZml4U1ZHKHBhcmVudCwgZGl2LCBodG1sLCByZWZlcmVuY2UpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZml4U1ZHKHBhcmVudDogRWxlbWVudCwgZGl2OiBIVE1MRWxlbWVudCwgaHRtbDogc3RyaW5nLCByZWZlcmVuY2U6IE5vZGUpOiBCb3VuZHMge1xuICAvLyBJRSwgRWRnZTogYWxzbyBkbyBub3QgY29ycmVjdGx5IHN1cHBvcnQgdXNpbmcgYGlubmVySFRNTGAgb24gU1ZHXG4gIC8vIG5hbWVzcGFjZWQgZWxlbWVudHMuIFNvIGhlcmUgYSB3cmFwcGVyIGlzIHVzZWQuXG4gIGxldCB3cmFwcGVkSHRtbCA9ICc8c3ZnPicgKyBodG1sICsgJzwvc3ZnPic7XG5cbiAgZGl2LmlubmVySFRNTCA9IHdyYXBwZWRIdG1sO1xuXG4gIGxldCBbZmlyc3QsIGxhc3RdID0gbW92ZU5vZGVzQmVmb3JlKGRpdi5maXJzdENoaWxkLCBwYXJlbnQsIHJlZmVyZW5jZSk7XG4gIHJldHVybiBuZXcgQ29uY3JldGVCb3VuZHMocGFyZW50LCBmaXJzdCwgbGFzdCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEFwcGx5Rml4KGRvY3VtZW50LCBzdmdOYW1lc3BhY2UpIHtcbiAgbGV0IHN2ZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOYW1lc3BhY2UsICdzdmcnKTtcblxuICB0cnkge1xuICAgIHN2Z1snaW5zZXJ0QWRqYWNlbnRIVE1MJ10oJ2JlZm9yZUVuZCcsICc8Y2lyY2xlPjwvY2lyY2xlPicpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSUUsIEVkZ2U6IFdpbGwgdGhyb3csIGluc2VydEFkamFjZW50SFRNTCBpcyB1bnN1cHBvcnRlZCBvbiBTVkdcbiAgICAvLyBTYWZhcmk6IFdpbGwgdGhyb3csIGluc2VydEFkamFjZW50SFRNTCBpcyBub3QgcHJlc2VudCBvbiBTVkdcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBGRjogT2xkIHZlcnNpb25zIHdpbGwgY3JlYXRlIGEgbm9kZSBpbiB0aGUgd3JvbmcgbmFtZXNwYWNlXG4gICAgaWYgKHN2Zy5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSAmJiBzdmcuZmlyc3RDaGlsZC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UpIHtcbiAgICAgIC8vIFRoZSB0ZXN0IHdvcmtlZCBhcyBleHBlY3RlZCwgbm8gZml4IHJlcXVpcmVkXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHN2ZyA9IG51bGw7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19 -enifed('glimmer-runtime/lib/compat/text-node-merging-fix', ['exports'], function (exports) { - // Patch: Adjacent text node merging fix - // Browsers: IE, Edge, Firefox w/o inspector open - // Reason: These browsers will merge adjacent text nodes. For exmaple given - // <div>Hello</div> with div.insertAdjacentHTML(' world') browsers - // with proper behavior will populate div.childNodes with two items. - // These browsers will populate it with one merged node instead. - // Fix: Add these nodes to a wrapper element, then iterate the childNodes - // of that wrapper and move the nodes to their target location. Note - // that potential SVG bugs will have been handled before this fix. - // Note that this fix must only apply to the previous text node, as - // the base implementation of `insertHTMLBefore` already handles - // following text nodes correctly. - 'use strict'; + return vars; + }; - exports.domChanges = domChanges; - exports.treeConstruction = treeConstruction; - - function domChanges(document, DOMChangesClass) { - if (!document) return DOMChangesClass; - if (!shouldApplyFix(document)) { - return DOMChangesClass; - } - return (function (_DOMChangesClass) { - babelHelpers.inherits(DOMChangesWithTextNodeMergingFix, _DOMChangesClass); - - function DOMChangesWithTextNodeMergingFix(document) { - _DOMChangesClass.call(this, document); - this.uselessComment = document.createComment(''); - } - - DOMChangesWithTextNodeMergingFix.prototype.insertHTMLBefore = function insertHTMLBefore(parent, nextSibling, html) { - if (html === null) { - return _DOMChangesClass.prototype.insertHTMLBefore.call(this, parent, nextSibling, html); - } - var didSetUselessComment = false; - var nextPrevious = nextSibling ? nextSibling.previousSibling : parent.lastChild; - if (nextPrevious && nextPrevious instanceof Text) { - didSetUselessComment = true; - parent.insertBefore(this.uselessComment, nextSibling); - } - var bounds = _DOMChangesClass.prototype.insertHTMLBefore.call(this, parent, nextSibling, html); - if (didSetUselessComment) { - parent.removeChild(this.uselessComment); - } - return bounds; - }; - - return DOMChangesWithTextNodeMergingFix; - })(DOMChangesClass); + TemplateCompiler.prototype.getHydrationHooks = function (indent, hooks) { + var hookVars = []; + for (var hook in hooks) { + hookVars.push(hook + ' = hooks.' + hook); } - function treeConstruction(document, TreeConstructionClass) { - if (!document) return TreeConstructionClass; - if (!shouldApplyFix(document)) { - return TreeConstructionClass; - } - return (function (_TreeConstructionClass) { - babelHelpers.inherits(TreeConstructionWithTextNodeMergingFix, _TreeConstructionClass); - - function TreeConstructionWithTextNodeMergingFix(document) { - _TreeConstructionClass.call(this, document); - this.uselessComment = this.createComment(''); - } - - TreeConstructionWithTextNodeMergingFix.prototype.insertHTMLBefore = function insertHTMLBefore(parent, html, reference) { - if (html === null) { - return _TreeConstructionClass.prototype.insertHTMLBefore.call(this, parent, html, reference); - } - var didSetUselessComment = false; - var nextPrevious = reference ? reference.previousSibling : parent.lastChild; - if (nextPrevious && nextPrevious instanceof Text) { - didSetUselessComment = true; - parent.insertBefore(this.uselessComment, reference); - } - var bounds = _TreeConstructionClass.prototype.insertHTMLBefore.call(this, parent, html, reference); - if (didSetUselessComment) { - parent.removeChild(this.uselessComment); - } - return bounds; - }; - - return TreeConstructionWithTextNodeMergingFix; - })(TreeConstructionClass); + if (hookVars.length > 0) { + return indent + 'var hooks = env.hooks, ' + hookVars.join(', ') + ';\n'; + } else { + return ''; } + }; - function shouldApplyFix(document) { - var mergingTextDiv = document.createElement('div'); - mergingTextDiv.innerHTML = 'first'; - mergingTextDiv.insertAdjacentHTML('beforeEnd', 'second'); - if (mergingTextDiv.childNodes.length === 2) { - mergingTextDiv = null; - // It worked as expected, no fix required - return false; - } - mergingTextDiv = null; - return true; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGF0L3RleHQtbm9kZS1tZXJnaW5nLWZpeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQSxhQUFBLFVBQUEsQ0FBMkIsUUFBa0IsRUFBRSxlQUFrQyxFQUFBO0FBQy9FLFlBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxlQUFlLENBQUM7QUFFdEMsWUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUM3QixtQkFBTyxlQUFlLENBQUM7U0FDeEI7QUFFRDtrQ0FBTyxnQ0FBQTs7QUFHTCxxQkFISyxnQ0FBQSxDQUdPLFFBQVEsRUFBQTtBQUNsQiw0Q0FBTSxRQUFRLENBQUMsQ0FBQztBQUNoQixvQkFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2xEOztBQU5JLDRDQUFBLFdBUUwsZ0JBQWdCLEdBQUEsMEJBQUMsTUFBbUIsRUFBRSxXQUFpQixFQUFFLElBQVksRUFBQTtBQUNuRSxvQkFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ2pCLDJCQUFPLDJCQUFNLGdCQUFnQixLQUFBLE9BQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDMUQ7QUFFRCxvQkFBSSxvQkFBb0IsR0FBRyxLQUFLLENBQUM7QUFFakMsb0JBQUksWUFBWSxHQUFHLFdBQVcsR0FBRyxXQUFXLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7QUFDaEYsb0JBQUksWUFBWSxJQUFJLFlBQVksWUFBWSxJQUFJLEVBQUU7QUFDaEQsd0NBQW9CLEdBQUcsSUFBSSxDQUFDO0FBQzVCLDBCQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7aUJBQ3ZEO0FBRUQsb0JBQUksTUFBTSxHQUFHLDJCQUFNLGdCQUFnQixLQUFBLE9BQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUUvRCxvQkFBSSxvQkFBb0IsRUFBRTtBQUN4QiwwQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQ3pDO0FBRUQsdUJBQU8sTUFBTSxDQUFDO2FBQ2Y7O21CQTVCSSxnQ0FBQTtXQUErQyxlQUFlLEVBNkJuRTtLQUNIOztBQUVELGFBQUEsZ0JBQUEsQ0FBaUMsUUFBa0IsRUFBRSxxQkFBaUQsRUFBQTtBQUNwRyxZQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8scUJBQXFCLENBQUM7QUFFNUMsWUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUM3QixtQkFBTyxxQkFBcUIsQ0FBQztTQUM5QjtBQUVEO2tDQUFPLHNDQUFBOztBQUdMLHFCQUhLLHNDQUFBLENBR08sUUFBUSxFQUFBO0FBQ2xCLGtEQUFNLFFBQVEsQ0FBQyxDQUFDO0FBQ2hCLG9CQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFZLENBQUM7YUFDekQ7O0FBTkksa0RBQUEsV0FRTCxnQkFBZ0IsR0FBQSwwQkFBQyxNQUFtQixFQUFFLElBQVksRUFBRSxTQUFlLEVBQUE7QUFDakUsb0JBQUksSUFBSSxLQUFLLElBQUksRUFBRTtBQUNqQiwyQkFBTyxpQ0FBTSxnQkFBZ0IsS0FBQSxPQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7aUJBQ3hEO0FBRUQsb0JBQUksb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0FBRWpDLG9CQUFJLFlBQVksR0FBRyxTQUFTLEdBQUcsU0FBUyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQzVFLG9CQUFJLFlBQVksSUFBSSxZQUFZLFlBQVksSUFBSSxFQUFFO0FBQ2hELHdDQUFvQixHQUFHLElBQUksQ0FBQztBQUM1QiwwQkFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2lCQUNyRDtBQUVELG9CQUFJLE1BQU0sR0FBRyxpQ0FBTSxnQkFBZ0IsS0FBQSxPQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFFN0Qsb0JBQUksb0JBQW9CLEVBQUU7QUFDeEIsMEJBQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUN6QztBQUVELHVCQUFPLE1BQU0sQ0FBQzthQUNmOzttQkE1Qkksc0NBQUE7V0FBcUQscUJBQXFCLEVBNkIvRTtLQUNIOztBQUVELGFBQUEsY0FBQSxDQUF3QixRQUFRLEVBQUE7QUFDOUIsWUFBSSxjQUFjLEdBQWlCLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFakUsc0JBQWMsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO0FBQ25DLHNCQUFjLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBRXpELFlBQUksY0FBYyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzFDLDBCQUFjLEdBQUcsSUFBSSxDQUFDOztBQUV0QixtQkFBTyxLQUFLLENBQUM7U0FDZDtBQUVELHNCQUFjLEdBQUcsSUFBSSxDQUFDO0FBRXRCLGVBQU8sSUFBSSxDQUFDO0tBQ2IiLCJmaWxlIjoidGV4dC1ub2RlLW1lcmdpbmctZml4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQm91bmRzIH0gZnJvbSAnLi4vYm91bmRzJztcbmltcG9ydCB7IERPTUNoYW5nZXMsIERPTVRyZWVDb25zdHJ1Y3Rpb24gfSBmcm9tICcuLi9kb20vaGVscGVyJztcblxuLy8gUGF0Y2g6ICAgIEFkamFjZW50IHRleHQgbm9kZSBtZXJnaW5nIGZpeFxuLy8gQnJvd3NlcnM6IElFLCBFZGdlLCBGaXJlZm94IHcvbyBpbnNwZWN0b3Igb3BlblxuLy8gUmVhc29uOiAgIFRoZXNlIGJyb3dzZXJzIHdpbGwgbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlcy4gRm9yIGV4bWFwbGUgZ2l2ZW5cbi8vICAgICAgICAgICA8ZGl2PkhlbGxvPC9kaXY+IHdpdGggZGl2Lmluc2VydEFkamFjZW50SFRNTCgnIHdvcmxkJykgYnJvd3NlcnNcbi8vICAgICAgICAgICB3aXRoIHByb3BlciBiZWhhdmlvciB3aWxsIHBvcHVsYXRlIGRpdi5jaGlsZE5vZGVzIHdpdGggdHdvIGl0ZW1zLlxuLy8gICAgICAgICAgIFRoZXNlIGJyb3dzZXJzIHdpbGwgcG9wdWxhdGUgaXQgd2l0aCBvbmUgbWVyZ2VkIG5vZGUgaW5zdGVhZC5cbi8vIEZpeDogICAgICBBZGQgdGhlc2Ugbm9kZXMgdG8gYSB3cmFwcGVyIGVsZW1lbnQsIHRoZW4gaXRlcmF0ZSB0aGUgY2hpbGROb2Rlc1xuLy8gICAgICAgICAgIG9mIHRoYXQgd3JhcHBlciBhbmQgbW92ZSB0aGUgbm9kZXMgdG8gdGhlaXIgdGFyZ2V0IGxvY2F0aW9uLiBOb3RlXG4vLyAgICAgICAgICAgdGhhdCBwb3RlbnRpYWwgU1ZHIGJ1Z3Mgd2lsbCBoYXZlIGJlZW4gaGFuZGxlZCBiZWZvcmUgdGhpcyBmaXguXG4vLyAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgZml4IG11c3Qgb25seSBhcHBseSB0byB0aGUgcHJldmlvdXMgdGV4dCBub2RlLCBhc1xuLy8gICAgICAgICAgIHRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBpbnNlcnRIVE1MQmVmb3JlYCBhbHJlYWR5IGhhbmRsZXNcbi8vICAgICAgICAgICBmb2xsb3dpbmcgdGV4dCBub2RlcyBjb3JyZWN0bHkuXG5leHBvcnQgZnVuY3Rpb24gZG9tQ2hhbmdlcyhkb2N1bWVudDogRG9jdW1lbnQsIERPTUNoYW5nZXNDbGFzczogdHlwZW9mIERPTUNoYW5nZXMpOiB0eXBlb2YgRE9NQ2hhbmdlcyB7XG4gIGlmICghZG9jdW1lbnQpIHJldHVybiBET01DaGFuZ2VzQ2xhc3M7XG5cbiAgaWYgKCFzaG91bGRBcHBseUZpeChkb2N1bWVudCkpIHtcbiAgICByZXR1cm4gRE9NQ2hhbmdlc0NsYXNzO1xuICB9XG5cbiAgcmV0dXJuIGNsYXNzIERPTUNoYW5nZXNXaXRoVGV4dE5vZGVNZXJnaW5nRml4IGV4dGVuZHMgRE9NQ2hhbmdlc0NsYXNzIHtcbiAgICBwcml2YXRlIHVzZWxlc3NDb21tZW50OiBDb21tZW50O1xuXG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQpIHtcbiAgICAgIHN1cGVyKGRvY3VtZW50KTtcbiAgICAgIHRoaXMudXNlbGVzc0NvbW1lbnQgPSBkb2N1bWVudC5jcmVhdGVDb21tZW50KCcnKTtcbiAgICB9XG5cbiAgICBpbnNlcnRIVE1MQmVmb3JlKHBhcmVudDogSFRNTEVsZW1lbnQsIG5leHRTaWJsaW5nOiBOb2RlLCBodG1sOiBzdHJpbmcpOiBCb3VuZHMge1xuICAgICAgaWYgKGh0bWwgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmluc2VydEhUTUxCZWZvcmUocGFyZW50LCBuZXh0U2libGluZywgaHRtbCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBkaWRTZXRVc2VsZXNzQ29tbWVudCA9IGZhbHNlO1xuXG4gICAgICBsZXQgbmV4dFByZXZpb3VzID0gbmV4dFNpYmxpbmcgPyBuZXh0U2libGluZy5wcmV2aW91c1NpYmxpbmcgOiBwYXJlbnQubGFzdENoaWxkO1xuICAgICAgaWYgKG5leHRQcmV2aW91cyAmJiBuZXh0UHJldmlvdXMgaW5zdGFuY2VvZiBUZXh0KSB7XG4gICAgICAgIGRpZFNldFVzZWxlc3NDb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZSh0aGlzLnVzZWxlc3NDb21tZW50LCBuZXh0U2libGluZyk7XG4gICAgICB9XG5cbiAgICAgIGxldCBib3VuZHMgPSBzdXBlci5pbnNlcnRIVE1MQmVmb3JlKHBhcmVudCwgbmV4dFNpYmxpbmcsIGh0bWwpO1xuXG4gICAgICBpZiAoZGlkU2V0VXNlbGVzc0NvbW1lbnQpIHtcbiAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMudXNlbGVzc0NvbW1lbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYm91bmRzO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyZWVDb25zdHJ1Y3Rpb24oZG9jdW1lbnQ6IERvY3VtZW50LCBUcmVlQ29uc3RydWN0aW9uQ2xhc3M6IHR5cGVvZiBET01UcmVlQ29uc3RydWN0aW9uKTogdHlwZW9mIERPTVRyZWVDb25zdHJ1Y3Rpb24ge1xuICBpZiAoIWRvY3VtZW50KSByZXR1cm4gVHJlZUNvbnN0cnVjdGlvbkNsYXNzO1xuXG4gIGlmICghc2hvdWxkQXBwbHlGaXgoZG9jdW1lbnQpKSB7XG4gICAgcmV0dXJuIFRyZWVDb25zdHJ1Y3Rpb25DbGFzcztcbiAgfVxuXG4gIHJldHVybiBjbGFzcyBUcmVlQ29uc3RydWN0aW9uV2l0aFRleHROb2RlTWVyZ2luZ0ZpeCBleHRlbmRzIFRyZWVDb25zdHJ1Y3Rpb25DbGFzcyB7XG4gICAgcHJpdmF0ZSB1c2VsZXNzQ29tbWVudDogQ29tbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50KSB7XG4gICAgICBzdXBlcihkb2N1bWVudCk7XG4gICAgICB0aGlzLnVzZWxlc3NDb21tZW50ID0gdGhpcy5jcmVhdGVDb21tZW50KCcnKSBhcyBDb21tZW50O1xuICAgIH1cblxuICAgIGluc2VydEhUTUxCZWZvcmUocGFyZW50OiBIVE1MRWxlbWVudCwgaHRtbDogc3RyaW5nLCByZWZlcmVuY2U6IE5vZGUpOiBCb3VuZHMge1xuICAgICAgaWYgKGh0bWwgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmluc2VydEhUTUxCZWZvcmUocGFyZW50LCBodG1sLCByZWZlcmVuY2UpO1xuICAgICAgfVxuXG4gICAgICBsZXQgZGlkU2V0VXNlbGVzc0NvbW1lbnQgPSBmYWxzZTtcblxuICAgICAgbGV0IG5leHRQcmV2aW91cyA9IHJlZmVyZW5jZSA/IHJlZmVyZW5jZS5wcmV2aW91c1NpYmxpbmcgOiBwYXJlbnQubGFzdENoaWxkO1xuICAgICAgaWYgKG5leHRQcmV2aW91cyAmJiBuZXh0UHJldmlvdXMgaW5zdGFuY2VvZiBUZXh0KSB7XG4gICAgICAgIGRpZFNldFVzZWxlc3NDb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZSh0aGlzLnVzZWxlc3NDb21tZW50LCByZWZlcmVuY2UpO1xuICAgICAgfVxuXG4gICAgICBsZXQgYm91bmRzID0gc3VwZXIuaW5zZXJ0SFRNTEJlZm9yZShwYXJlbnQsIGh0bWwsIHJlZmVyZW5jZSk7XG5cbiAgICAgIGlmIChkaWRTZXRVc2VsZXNzQ29tbWVudCkge1xuICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy51c2VsZXNzQ29tbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBib3VuZHM7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBzaG91bGRBcHBseUZpeChkb2N1bWVudCkge1xuICBsZXQgbWVyZ2luZ1RleHREaXYgPSA8SFRNTEVsZW1lbnQ+IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gIG1lcmdpbmdUZXh0RGl2LmlubmVySFRNTCA9ICdmaXJzdCc7XG4gIG1lcmdpbmdUZXh0RGl2Lmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlRW5kJywgJ3NlY29uZCcpO1xuXG4gIGlmIChtZXJnaW5nVGV4dERpdi5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMikge1xuICAgIG1lcmdpbmdUZXh0RGl2ID0gbnVsbDtcbiAgICAvLyBJdCB3b3JrZWQgYXMgZXhwZWN0ZWQsIG5vIGZpeCByZXF1aXJlZFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG1lcmdpbmdUZXh0RGl2ID0gbnVsbDtcblxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ== -enifed('glimmer-runtime/lib/compiled/blocks', ['exports', 'glimmer-runtime/lib/utils', 'glimmer-runtime/lib/compiler'], function (exports, _glimmerRuntimeLibUtils, _glimmerRuntimeLibCompiler) { - 'use strict'; + TemplateCompiler.prototype.endProgram = function (program, programDepth) { + this.fragmentOpcodeCompiler.endProgram(program); + this.hydrationOpcodeCompiler.endProgram(program); - var CompiledBlock = function CompiledBlock(ops, symbols) { - this.ops = ops; - this.symbols = symbols; + var indent = _htmlbarsUtilQuoting.repeat(" ", programDepth); + var options = { + indent: indent + " " }; - exports.CompiledBlock = CompiledBlock; + // function build(dom) { return fragment; } + var fragmentProgram = this.fragmentCompiler.compile(this.fragmentOpcodeCompiler.opcodes, options); - var Block = function Block(program, symbolTable) { - this.program = program; - this.symbolTable = symbolTable; - this.compiled = null; - }; + // function hydrate(fragment) { return mustaches; } + var hydrationPrograms = this.hydrationCompiler.compile(this.hydrationOpcodeCompiler.opcodes, options); - exports.Block = Block; + var blockParams = program.blockParams || []; - var InlineBlock = (function (_Block) { - babelHelpers.inherits(InlineBlock, _Block); + var templateSignature = 'context, rootNode, env, options'; + if (blockParams.length > 0) { + templateSignature += ', blockArguments'; + } - function InlineBlock(program, symbolTable) { - var locals = arguments.length <= 2 || arguments[2] === undefined ? _glimmerRuntimeLibUtils.EMPTY_ARRAY : arguments[2]; + var statements = _htmlbarsUtilArrayUtils.map(hydrationPrograms.statements, function (s) { + return indent + ' ' + JSON.stringify(s); + }).join(",\n"); - _Block.call(this, program, symbolTable); - this.locals = locals; - } + var locals = JSON.stringify(hydrationPrograms.locals); - InlineBlock.prototype.hasPositionalParameters = function hasPositionalParameters() { - return !!this.locals.length; - }; + var templates = _htmlbarsUtilArrayUtils.map(this.childTemplates, function (_, index) { + return 'child' + index; + }).join(', '); - InlineBlock.prototype.compile = function compile(env) { - var compiled = this.compiled; - if (compiled) return compiled; - var ops = new _glimmerRuntimeLibCompiler.InlineBlockCompiler(this, env).compile(); - return this.compiled = new CompiledBlock(ops, this.symbolTable.size); - }; + var template = '(function() {\n' + this.getChildTemplateVars(indent + ' ') + indent + ' return {\n' + this.buildMeta(indent + ' ', program) + indent + ' isEmpty: ' + (program.body.length ? 'false' : 'true') + ',\n' + indent + ' arity: ' + blockParams.length + ',\n' + indent + ' cachedFragment: null,\n' + indent + ' hasRendered: false,\n' + indent + ' buildFragment: ' + fragmentProgram + ',\n' + indent + ' buildRenderNodes: ' + hydrationPrograms.createMorphsProgram + ',\n' + indent + ' statements: [\n' + statements + '\n' + indent + ' ],\n' + indent + ' locals: ' + locals + ',\n' + indent + ' templates: [' + templates + ']\n' + indent + ' };\n' + indent + '}())'; - return InlineBlock; - })(Block); + this.templates.push(template); + }; - exports.InlineBlock = InlineBlock; + TemplateCompiler.prototype.buildMeta = function (indent, program) { + var meta = this.consumerBuildMeta(program) || {}; - var PartialBlock = (function (_InlineBlock) { - babelHelpers.inherits(PartialBlock, _InlineBlock); + var head = indent + 'meta: '; + var stringMeta = JSON.stringify(meta, null, 2).replace(/\n/g, '\n' + indent); + var tail = ',\n'; - function PartialBlock() { - _InlineBlock.apply(this, arguments); - } + return head + stringMeta + tail; + }; - return PartialBlock; - })(InlineBlock); + TemplateCompiler.prototype.openElement = function (element, i, l, r, c, b) { + this.fragmentOpcodeCompiler.openElement(element, i, l, r, c, b); + this.hydrationOpcodeCompiler.openElement(element, i, l, r, c, b); + }; - exports.PartialBlock = PartialBlock; + TemplateCompiler.prototype.closeElement = function (element, i, l, r) { + this.fragmentOpcodeCompiler.closeElement(element, i, l, r); + this.hydrationOpcodeCompiler.closeElement(element, i, l, r); + }; - var TopLevelTemplate = (function (_Block2) { - babelHelpers.inherits(TopLevelTemplate, _Block2); + TemplateCompiler.prototype.component = function (component, i, l, s) { + this.fragmentOpcodeCompiler.component(component, i, l, s); + this.hydrationOpcodeCompiler.component(component, i, l, s); + }; - function TopLevelTemplate() { - _Block2.apply(this, arguments); - } + TemplateCompiler.prototype.block = function (block, i, l, s) { + this.fragmentOpcodeCompiler.block(block, i, l, s); + this.hydrationOpcodeCompiler.block(block, i, l, s); + }; - return TopLevelTemplate; - })(Block); + TemplateCompiler.prototype.text = function (string, i, l, r) { + this.fragmentOpcodeCompiler.text(string, i, l, r); + this.hydrationOpcodeCompiler.text(string, i, l, r); + }; - exports.TopLevelTemplate = TopLevelTemplate; + TemplateCompiler.prototype.comment = function (string, i, l, r) { + this.fragmentOpcodeCompiler.comment(string, i, l, r); + this.hydrationOpcodeCompiler.comment(string, i, l, r); + }; - var EntryPoint = (function (_TopLevelTemplate) { - babelHelpers.inherits(EntryPoint, _TopLevelTemplate); + TemplateCompiler.prototype.mustache = function (mustache, i, l, s) { + this.fragmentOpcodeCompiler.mustache(mustache, i, l, s); + this.hydrationOpcodeCompiler.mustache(mustache, i, l, s); + }; - function EntryPoint() { - _TopLevelTemplate.apply(this, arguments); - } - - EntryPoint.prototype.compile = function compile(env) { - var compiled = this.compiled; - if (compiled) return compiled; - var ops = new _glimmerRuntimeLibCompiler.EntryPointCompiler(this, env).compile(); - return this.compiled = new CompiledBlock(ops, this.symbolTable.size); - }; - - return EntryPoint; - })(TopLevelTemplate); - - exports.EntryPoint = EntryPoint; - - var Layout = (function (_TopLevelTemplate2) { - babelHelpers.inherits(Layout, _TopLevelTemplate2); - - function Layout(program, symbolTable, named, yields, hasPartials) { - _TopLevelTemplate2.call(this, program, symbolTable); - this.named = named; - this.yields = yields; - this.hasPartials = hasPartials; - this.hasNamedParameters = !!this.named.length; - this.hasYields = !!this.yields.length; - ; - } - - return Layout; - })(TopLevelTemplate); - - exports.Layout = Layout; + TemplateCompiler.prototype.setNamespace = function (namespace) { + this.fragmentOpcodeCompiler.setNamespace(namespace); + }; }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvYmxvY2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztRQVdBLGFBQUEsR0FJRSxTQUpGLGFBQUEsQ0FJYyxHQUFVLEVBQUUsT0FBZSxFQUFBO0FBQ3JDLFlBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2YsWUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7S0FDeEI7Ozs7UUFHSCxLQUFBLEdBR0UsU0FIRixLQUFBLENBR3FCLE9BQWdCLEVBQVMsV0FBd0IsRUFBQTtBQUFqRCxZQUFBLENBQUEsT0FBTyxHQUFQLE9BQU8sQ0FBUztBQUFTLFlBQUEsQ0FBQSxXQUFXLEdBQVgsV0FBVyxDQUFhO0FBRjFELFlBQUEsQ0FBQSxRQUFRLEdBQWtCLElBQUksQ0FBQztLQUUrQjs7OztRQUcxRSxXQUFBOzhCQUFBLFdBQUE7O0FBQ0UsaUJBREYsV0FBQSxDQUNjLE9BQWdCLEVBQUUsV0FBd0IsRUFBdUM7Z0JBQTlCLE1BQU0saUZBeEI5RCxXQUFXOztBQXlCaEIsOEJBQU0sT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBRGlDLGdCQUFBLENBQUEsTUFBTSxHQUFOLE1BQU0sQ0FBd0I7U0FFNUY7O0FBSEgsbUJBQUEsV0FLRSx1QkFBdUIsR0FBQSxtQ0FBQTtBQUNyQixtQkFBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDN0I7O0FBUEgsbUJBQUEsV0FTRSxPQUFPLEdBQUEsaUJBQUMsR0FBZ0IsRUFBQTtBQUN0QixnQkFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUM3QixnQkFBSSxRQUFRLEVBQUUsT0FBTyxRQUFRLENBQUM7QUFFOUIsZ0JBQUksR0FBRyxHQUFHLCtCQWhDWixtQkFBbUIsQ0FnQ2lCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN2RCxtQkFBTyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RFOztlQWZILFdBQUE7T0FBaUMsS0FBSzs7OztRQWtCdEMsWUFBQTs4QkFBQSxZQUFBOztpQkFBQSxZQUFBOzs7O2VBQUEsWUFBQTtPQUFrQyxXQUFXOzs7O1FBRzdDLGdCQUFBOzhCQUFBLGdCQUFBOztpQkFBQSxnQkFBQTs7OztlQUFBLGdCQUFBO09BQStDLEtBQUs7Ozs7UUFHcEQsVUFBQTs4QkFBQSxVQUFBOztpQkFBQSxVQUFBOzs7O0FBQUEsa0JBQUEsV0FDRSxPQUFPLEdBQUEsaUJBQUMsR0FBZ0IsRUFBQTtBQUN0QixnQkFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUM3QixnQkFBSSxRQUFRLEVBQUUsT0FBTyxRQUFRLENBQUM7QUFFOUIsZ0JBQUksR0FBRyxHQUFHLCtCQWpEWixrQkFBa0IsQ0FpRGlCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN0RCxtQkFBTyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RFOztlQVBILFVBQUE7T0FBZ0MsZ0JBQWdCOzs7O1FBVWhELE1BQUE7OEJBQUEsTUFBQTs7QUFHRSxpQkFIRixNQUFBLENBR2MsT0FBZ0IsRUFBRSxXQUF3QixFQUFTLEtBQWUsRUFBUyxNQUFnQixFQUFTLFdBQW9CLEVBQUE7QUFDbEksMENBQU0sT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBRGlDLGdCQUFBLENBQUEsS0FBSyxHQUFMLEtBQUssQ0FBVTtBQUFTLGdCQUFBLENBQUEsTUFBTSxHQUFOLE1BQU0sQ0FBVTtBQUFTLGdCQUFBLENBQUEsV0FBVyxHQUFYLFdBQVcsQ0FBUztBQUVsSSxnQkFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUM5QyxnQkFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFBQSxhQUFDO1NBQ3hDOztlQVBILE1BQUE7T0FBNEIsZ0JBQWdCIiwiZmlsZSI6ImJsb2Nrcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wU2VxIH0gZnJvbSAnLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBQcm9ncmFtIH0gZnJvbSAnLi4vc3ludGF4JztcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IFN5bWJvbFRhYmxlIGZyb20gJy4uL3N5bWJvbC10YWJsZSc7XG5pbXBvcnQgeyBFTVBUWV9BUlJBWSB9IGZyb20gJy4uL3V0aWxzJztcblxuaW1wb3J0IHtcbiAgRW50cnlQb2ludENvbXBpbGVyLFxuICBJbmxpbmVCbG9ja0NvbXBpbGVyXG59IGZyb20gJy4uL2NvbXBpbGVyJztcblxuZXhwb3J0IGNsYXNzIENvbXBpbGVkQmxvY2sge1xuICBwdWJsaWMgb3BzOiBPcFNlcTtcbiAgcHVibGljIHN5bWJvbHM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihvcHM6IE9wU2VxLCBzeW1ib2xzOiBudW1iZXIpIHtcbiAgICB0aGlzLm9wcyA9IG9wcztcbiAgICB0aGlzLnN5bWJvbHMgPSBzeW1ib2xzO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9jayB7XG4gIHByb3RlY3RlZCBjb21waWxlZDogQ29tcGlsZWRCbG9jayA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHByb2dyYW06IFByb2dyYW0sIHB1YmxpYyBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBJbmxpbmVCbG9jayBleHRlbmRzIEJsb2NrIHtcbiAgY29uc3RydWN0b3IocHJvZ3JhbTogUHJvZ3JhbSwgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlLCBwdWJsaWMgbG9jYWxzOiBzdHJpbmdbXSA9IEVNUFRZX0FSUkFZKSB7XG4gICAgc3VwZXIocHJvZ3JhbSwgc3ltYm9sVGFibGUpO1xuICB9XG5cbiAgaGFzUG9zaXRpb25hbFBhcmFtZXRlcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5sb2NhbHMubGVuZ3RoO1xuICB9XG5cbiAgY29tcGlsZShlbnY6IEVudmlyb25tZW50KTogQ29tcGlsZWRCbG9jayB7XG4gICAgbGV0IGNvbXBpbGVkID0gdGhpcy5jb21waWxlZDtcbiAgICBpZiAoY29tcGlsZWQpIHJldHVybiBjb21waWxlZDtcblxuICAgIGxldCBvcHMgPSBuZXcgSW5saW5lQmxvY2tDb21waWxlcih0aGlzLCBlbnYpLmNvbXBpbGUoKTtcbiAgICByZXR1cm4gdGhpcy5jb21waWxlZCA9IG5ldyBDb21waWxlZEJsb2NrKG9wcywgdGhpcy5zeW1ib2xUYWJsZS5zaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGFydGlhbEJsb2NrIGV4dGVuZHMgSW5saW5lQmxvY2sge1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVG9wTGV2ZWxUZW1wbGF0ZSBleHRlbmRzIEJsb2NrIHtcbn1cblxuZXhwb3J0IGNsYXNzIEVudHJ5UG9pbnQgZXh0ZW5kcyBUb3BMZXZlbFRlbXBsYXRlIHtcbiAgY29tcGlsZShlbnY6IEVudmlyb25tZW50KSB7XG4gICAgbGV0IGNvbXBpbGVkID0gdGhpcy5jb21waWxlZDtcbiAgICBpZiAoY29tcGlsZWQpIHJldHVybiBjb21waWxlZDtcblxuICAgIGxldCBvcHMgPSBuZXcgRW50cnlQb2ludENvbXBpbGVyKHRoaXMsIGVudikuY29tcGlsZSgpO1xuICAgIHJldHVybiB0aGlzLmNvbXBpbGVkID0gbmV3IENvbXBpbGVkQmxvY2sob3BzLCB0aGlzLnN5bWJvbFRhYmxlLnNpemUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYXlvdXQgZXh0ZW5kcyBUb3BMZXZlbFRlbXBsYXRlIHtcbiAgcHVibGljIGhhc05hbWVkUGFyYW1ldGVyczogYm9vbGVhbjtcbiAgcHVibGljIGhhc1lpZWxkczogYm9vbGVhbjtcbiAgY29uc3RydWN0b3IocHJvZ3JhbTogUHJvZ3JhbSwgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlLCBwdWJsaWMgbmFtZWQ6IHN0cmluZ1tdLCBwdWJsaWMgeWllbGRzOiBzdHJpbmdbXSwgcHVibGljIGhhc1BhcnRpYWxzOiBib29sZWFuKSB7XG4gICAgc3VwZXIocHJvZ3JhbSwgc3ltYm9sVGFibGUpO1xuICAgIHRoaXMuaGFzTmFtZWRQYXJhbWV0ZXJzID0gISF0aGlzLm5hbWVkLmxlbmd0aDtcbiAgICB0aGlzLmhhc1lpZWxkcyA9ICEhdGhpcy55aWVsZHMubGVuZ3RoOztcbiAgfVxufVxuIl19 -enifed("glimmer-runtime/lib/compiled/expressions", ["exports"], function (exports) { - "use strict"; +enifed('htmlbars-compiler/template-visitor', ['exports'], function (exports) { + 'use strict'; - var CompiledExpression = (function () { - function CompiledExpression() {} + var push = Array.prototype.push; - CompiledExpression.prototype.toJSON = function toJSON() { - return "UNIMPL: " + this.type.toUpperCase(); - }; + function Frame() { + this.parentNode = null; + this.children = null; + this.childIndex = null; + this.childCount = null; + this.childTemplateCount = 0; + this.mustacheCount = 0; + this.actions = []; + } - return CompiledExpression; - })(); + /** + * Takes in an AST and outputs a list of actions to be consumed + * by a compiler. For example, the template + * + * foo{{bar}}<div>baz</div> + * + * produces the actions + * + * [['startProgram', [programNode, 0]], + * ['text', [textNode, 0, 3]], + * ['mustache', [mustacheNode, 1, 3]], + * ['openElement', [elementNode, 2, 3, 0]], + * ['text', [textNode, 0, 1]], + * ['closeElement', [elementNode, 2, 3], + * ['endProgram', [programNode]]] + * + * This visitor walks the AST depth first and backwards. As + * a result the bottom-most child template will appear at the + * top of the actions list whereas the root template will appear + * at the bottom of the list. For example, + * + * <div>{{#if}}foo{{else}}bar<b></b>{{/if}}</div> + * + * produces the actions + * + * [['startProgram', [programNode, 0]], + * ['text', [textNode, 0, 2, 0]], + * ['openElement', [elementNode, 1, 2, 0]], + * ['closeElement', [elementNode, 1, 2]], + * ['endProgram', [programNode]], + * ['startProgram', [programNode, 0]], + * ['text', [textNode, 0, 1]], + * ['endProgram', [programNode]], + * ['startProgram', [programNode, 2]], + * ['openElement', [elementNode, 0, 1, 1]], + * ['block', [blockNode, 0, 1]], + * ['closeElement', [elementNode, 0, 1]], + * ['endProgram', [programNode]]] + * + * The state of the traversal is maintained by a stack of frames. + * Whenever a node with children is entered (either a ProgramNode + * or an ElementNode) a frame is pushed onto the stack. The frame + * contains information about the state of the traversal of that + * node. For example, + * + * - index of the current child node being visited + * - the number of mustaches contained within its child nodes + * - the list of actions generated by its child nodes + */ - exports.CompiledExpression = CompiledExpression; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvZXhwcmVzc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O1FBR0Esa0JBQUE7aUJBQUEsa0JBQUE7O0FBQUEsMEJBQUEsV0FJRSxNQUFNLEdBQUEsa0JBQUE7QUFDSixnQ0FBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBRztTQUM3Qzs7ZUFOSCxrQkFBQSIsImZpbGUiOiJleHByZXNzaW9ucy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBWTSBmcm9tICcuLi92bS9hcHBlbmQnO1xuaW1wb3J0IHsgUGF0aFJlZmVyZW5jZSB9IGZyb20gJ2dsaW1tZXItcmVmZXJlbmNlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBpbGVkRXhwcmVzc2lvbjxUPiB7XG4gIHR5cGU6IHN0cmluZztcbiAgYWJzdHJhY3QgZXZhbHVhdGUodm06IFZNKTogUGF0aFJlZmVyZW5jZTxUPjtcblxuICB0b0pTT04oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFVOSU1QTDogJHt0aGlzLnR5cGUudG9VcHBlckNhc2UoKX1gO1xuICB9XG59XG4iXX0= -enifed('glimmer-runtime/lib/compiled/expressions/args', ['exports', 'glimmer-runtime/lib/compiled/expressions/positional-args', 'glimmer-runtime/lib/compiled/expressions/named-args', 'glimmer-reference'], function (exports, _glimmerRuntimeLibCompiledExpressionsPositionalArgs, _glimmerRuntimeLibCompiledExpressionsNamedArgs, _glimmerReference) { - 'use strict'; + function TemplateVisitor() { + this.frameStack = []; + this.actions = []; + this.programDepth = -1; + } - var CompiledArgs = (function () { - function CompiledArgs(positional, named) { - this.positional = positional; - this.named = named; - } + // Traversal methods - CompiledArgs.create = function create(positional, named) { - if (positional === _glimmerRuntimeLibCompiledExpressionsPositionalArgs.COMPILED_EMPTY_POSITIONAL_ARGS && named === _glimmerRuntimeLibCompiledExpressionsNamedArgs.COMPILED_EMPTY_NAMED_ARGS) { - return this.empty(); - } else { - return new this(positional, named); - } - }; + TemplateVisitor.prototype.visit = function (node) { + this[node.type](node); + }; - CompiledArgs.empty = function empty() { - return COMPILED_EMPTY_ARGS; - }; + TemplateVisitor.prototype.Program = function (program) { + this.programDepth++; - CompiledArgs.prototype.evaluate = function evaluate(vm) { - return EvaluatedArgs.create(this.positional.evaluate(vm), this.named.evaluate(vm)); - }; + var parentFrame = this.getCurrentFrame(); + var programFrame = this.pushFrame(); - return CompiledArgs; - })(); + programFrame.parentNode = program; + programFrame.children = program.body; + programFrame.childCount = program.body.length; + programFrame.blankChildTextNodes = []; + programFrame.actions.push(['endProgram', [program, this.programDepth]]); - exports.CompiledArgs = CompiledArgs; + for (var i = program.body.length - 1; i >= 0; i--) { + programFrame.childIndex = i; + this.visit(program.body[i]); + } - var COMPILED_EMPTY_ARGS = new ((function (_CompiledArgs) { - babelHelpers.inherits(_class, _CompiledArgs); + programFrame.actions.push(['startProgram', [program, programFrame.childTemplateCount, programFrame.blankChildTextNodes.reverse()]]); + this.popFrame(); - function _class() { - _CompiledArgs.call(this, _glimmerRuntimeLibCompiledExpressionsPositionalArgs.COMPILED_EMPTY_POSITIONAL_ARGS, _glimmerRuntimeLibCompiledExpressionsNamedArgs.COMPILED_EMPTY_NAMED_ARGS); - } + this.programDepth--; - _class.prototype.evaluate = function evaluate(vm) { - return EMPTY_EVALUATED_ARGS; - }; + // Push the completed template into the global actions list + if (parentFrame) { + parentFrame.childTemplateCount++; + } + push.apply(this.actions, programFrame.actions.reverse()); + }; - return _class; - })(CompiledArgs))(); + TemplateVisitor.prototype.ElementNode = function (element) { + var parentFrame = this.getCurrentFrame(); + var elementFrame = this.pushFrame(); - var EvaluatedArgs = (function () { - function EvaluatedArgs(positional, named) { - this.positional = positional; - this.named = named; - this.tag = _glimmerReference.combineTagged([positional, named]); - } + elementFrame.parentNode = element; + elementFrame.children = element.children; + elementFrame.childCount = element.children.length; + elementFrame.mustacheCount += element.modifiers.length; + elementFrame.blankChildTextNodes = []; - EvaluatedArgs.empty = function empty() { - return EMPTY_EVALUATED_ARGS; - }; + var actionArgs = [element, parentFrame.childIndex, parentFrame.childCount]; - EvaluatedArgs.create = function create(positional, named) { - return new this(positional, named); - }; + elementFrame.actions.push(['closeElement', actionArgs]); - EvaluatedArgs.positional = function positional(values) { - return new this(_glimmerRuntimeLibCompiledExpressionsPositionalArgs.EvaluatedPositionalArgs.create(values), _glimmerRuntimeLibCompiledExpressionsNamedArgs.EVALUATED_EMPTY_NAMED_ARGS); - }; + for (var i = element.attributes.length - 1; i >= 0; i--) { + this.visit(element.attributes[i]); + } - EvaluatedArgs.named = function named(map) { - return new this(_glimmerRuntimeLibCompiledExpressionsPositionalArgs.EVALUATED_EMPTY_POSITIONAL_ARGS, _glimmerRuntimeLibCompiledExpressionsNamedArgs.EvaluatedNamedArgs.create(map)); - }; + for (i = element.children.length - 1; i >= 0; i--) { + elementFrame.childIndex = i; + this.visit(element.children[i]); + } - return EvaluatedArgs; - })(); + elementFrame.actions.push(['openElement', actionArgs.concat([elementFrame.mustacheCount, elementFrame.blankChildTextNodes.reverse()])]); + this.popFrame(); - exports.EvaluatedArgs = EvaluatedArgs; + // Propagate the element's frame state to the parent frame + if (elementFrame.mustacheCount > 0) { + parentFrame.mustacheCount++; + } + parentFrame.childTemplateCount += elementFrame.childTemplateCount; + push.apply(parentFrame.actions, elementFrame.actions); + }; - var EMPTY_EVALUATED_ARGS = new EvaluatedArgs(_glimmerRuntimeLibCompiledExpressionsPositionalArgs.EVALUATED_EMPTY_POSITIONAL_ARGS, _glimmerRuntimeLibCompiledExpressionsNamedArgs.EVALUATED_EMPTY_NAMED_ARGS); - exports.CompiledPositionalArgs = _glimmerRuntimeLibCompiledExpressionsPositionalArgs.CompiledPositionalArgs; - exports.EvaluatedPositionalArgs = _glimmerRuntimeLibCompiledExpressionsPositionalArgs.EvaluatedPositionalArgs; - exports.CompiledNamedArgs = _glimmerRuntimeLibCompiledExpressionsNamedArgs.CompiledNamedArgs; - exports.EvaluatedNamedArgs = _glimmerRuntimeLibCompiledExpressionsNamedArgs.EvaluatedNamedArgs; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvZXhwcmVzc2lvbnMvYXJncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7UUFNQSxZQUFBO0FBYUUsaUJBYkYsWUFBQSxDQWNXLFVBQWtDLEVBQ2xDLEtBQXdCLEVBQUE7QUFEeEIsZ0JBQUEsQ0FBQSxVQUFVLEdBQVYsVUFBVSxDQUF3QjtBQUNsQyxnQkFBQSxDQUFBLEtBQUssR0FBTCxLQUFLLENBQW1CO1NBRWhDOztBQWpCSCxvQkFBQSxDQUNTLE1BQU0sR0FBQSxnQkFBQyxVQUFrQyxFQUFFLEtBQXdCLEVBQUE7QUFDeEUsZ0JBQUksVUFBVSx5REFQVCw4QkFBOEIsQUFPYyxJQUFJLEtBQUssb0RBTnJELHlCQUF5QixBQU0yRCxFQUFFO0FBQ3pGLHVCQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNyQixNQUFNO0FBQ0wsdUJBQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3BDO1NBQ0Y7O0FBUEgsb0JBQUEsQ0FTUyxLQUFLLEdBQUEsaUJBQUE7QUFDVixtQkFBTyxtQkFBbUIsQ0FBQztTQUM1Qjs7QUFYSCxvQkFBQSxXQW1CRSxRQUFRLEdBQUEsa0JBQUMsRUFBTSxFQUFBO0FBQ2IsbUJBQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BGOztlQXJCSCxZQUFBOzs7OztBQXdCQSxRQUFNLG1CQUFtQixHQUFpQjs7O0FBQ3hDLDBCQUFBO0FBQ0UseUZBL0JLLDhCQUE4QixpREFDOUIseUJBQXlCLENBOEJrQyxDQUFDO1NBQ2xFOzt5QkFFRCxRQUFRLEdBQUEsa0JBQUMsRUFBTSxFQUFBO0FBQ2IsbUJBQU8sb0JBQW9CLENBQUM7U0FDN0I7OztPQVAwRCxZQUFZLElBUXZFLENBQUM7O1FBRUgsYUFBQTtBQW1CRSxpQkFuQkYsYUFBQSxDQW9CVyxVQUFtQyxFQUNuQyxLQUF5QixFQUFBO0FBRHpCLGdCQUFBLENBQUEsVUFBVSxHQUFWLFVBQVUsQ0FBeUI7QUFDbkMsZ0JBQUEsQ0FBQSxLQUFLLEdBQUwsS0FBSyxDQUFvQjtBQUVoQyxnQkFBSSxDQUFDLEdBQUcsR0FBRyxrQkE1RHNCLGFBQWEsQ0E0RHJCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDL0M7O0FBeEJILHFCQUFBLENBQ1MsS0FBSyxHQUFBLGlCQUFBO0FBQ1YsbUJBQU8sb0JBQW9CLENBQUM7U0FDN0I7O0FBSEgscUJBQUEsQ0FLUyxNQUFNLEdBQUEsZ0JBQUMsVUFBbUMsRUFBRSxLQUF5QixFQUFBO0FBQzFFLG1CQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNwQzs7QUFQSCxxQkFBQSxDQVNTLFVBQVUsR0FBQSxvQkFBQyxNQUErQixFQUFBO0FBQy9DLG1CQUFPLElBQUksSUFBSSxDQUFDLG9EQWpEOEUsdUJBQXVCLENBaUQ3RSxNQUFNLENBQUMsTUFBTSxDQUFDLGlEQWhEdEIsMEJBQTBCLENBZ0R5QixDQUFDO1NBQ3JGOztBQVhILHFCQUFBLENBYVMsS0FBSyxHQUFBLGVBQUMsR0FBZ0MsRUFBQTtBQUMzQyxtQkFBTyxJQUFJLElBQUkscURBckRzQiwrQkFBK0IsRUFxRG5CLCtDQXBEOEIsa0JBQWtCLENBb0Q3QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNsRjs7ZUFmSCxhQUFBOzs7OztBQTJCQSxRQUFNLG9CQUFvQixHQUFHLElBQUksYUFBYSxxREFsRUwsK0JBQStCLGlEQUNwQywwQkFBMEIsQ0FpRTZDLENBQUM7WUFFbkcsc0JBQXNCLHVEQXBFMkMsc0JBQXNCO1lBb0UvRCx1QkFBdUIsdURBcEUwQyx1QkFBdUI7WUFvRS9ELGlCQUFpQixrREFuRVgsaUJBQWlCO1lBbUVKLGtCQUFrQixrREFuRVosa0JBQWtCIiwiZmlsZSI6ImFyZ3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVk0gZnJvbSAnLi4vLi4vdm0vYXBwZW5kJztcbmltcG9ydCB7IENPTVBJTEVEX0VNUFRZX1BPU0lUSU9OQUxfQVJHUywgRVZBTFVBVEVEX0VNUFRZX1BPU0lUSU9OQUxfQVJHUywgQ29tcGlsZWRQb3NpdGlvbmFsQXJncywgRXZhbHVhdGVkUG9zaXRpb25hbEFyZ3MgfSBmcm9tICcuL3Bvc2l0aW9uYWwtYXJncyc7XG5pbXBvcnQgeyBDT01QSUxFRF9FTVBUWV9OQU1FRF9BUkdTLCBFVkFMVUFURURfRU1QVFlfTkFNRURfQVJHUywgQ29tcGlsZWROYW1lZEFyZ3MsIEV2YWx1YXRlZE5hbWVkQXJncyB9IGZyb20gJy4vbmFtZWQtYXJncyc7XG5pbXBvcnQgeyBSZXZpc2lvblRhZywgUGF0aFJlZmVyZW5jZSwgY29tYmluZVRhZ2dlZCB9IGZyb20gJ2dsaW1tZXItcmVmZXJlbmNlJztcbmltcG9ydCB7IE9wYXF1ZSwgRGljdCB9IGZyb20gJ2dsaW1tZXItdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBDb21waWxlZEFyZ3Mge1xuICBzdGF0aWMgY3JlYXRlKHBvc2l0aW9uYWw6IENvbXBpbGVkUG9zaXRpb25hbEFyZ3MsIG5hbWVkOiBDb21waWxlZE5hbWVkQXJncyk6IENvbXBpbGVkQXJncyB7XG4gICAgaWYgKHBvc2l0aW9uYWwgPT09IENPTVBJTEVEX0VNUFRZX1BPU0lUSU9OQUxfQVJHUyAmJiBuYW1lZCA9PT0gIENPTVBJTEVEX0VNUFRZX05BTUVEX0FSR1MpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtcHR5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgdGhpcyhwb3NpdGlvbmFsLCBuYW1lZCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGVtcHR5KCk6IENvbXBpbGVkQXJncyB7XG4gICAgcmV0dXJuIENPTVBJTEVEX0VNUFRZX0FSR1M7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcG9zaXRpb25hbDogQ29tcGlsZWRQb3NpdGlvbmFsQXJncyxcbiAgICBwdWJsaWMgbmFtZWQ6IENvbXBpbGVkTmFtZWRBcmdzXG4gICkge1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFZNKTogRXZhbHVhdGVkQXJncyB7XG4gICAgcmV0dXJuIEV2YWx1YXRlZEFyZ3MuY3JlYXRlKHRoaXMucG9zaXRpb25hbC5ldmFsdWF0ZSh2bSksIHRoaXMubmFtZWQuZXZhbHVhdGUodm0pKTtcbiAgfVxufVxuXG5jb25zdCBDT01QSUxFRF9FTVBUWV9BUkdTOiBDb21waWxlZEFyZ3MgPSBuZXcgKGNsYXNzIGV4dGVuZHMgQ29tcGlsZWRBcmdzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoQ09NUElMRURfRU1QVFlfUE9TSVRJT05BTF9BUkdTLCBDT01QSUxFRF9FTVBUWV9OQU1FRF9BUkdTKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSk6IEV2YWx1YXRlZEFyZ3Mge1xuICAgIHJldHVybiBFTVBUWV9FVkFMVUFURURfQVJHUztcbiAgfVxufSk7XG5cbmV4cG9ydCBjbGFzcyBFdmFsdWF0ZWRBcmdzIHtcbiAgc3RhdGljIGVtcHR5KCk6IEV2YWx1YXRlZEFyZ3Mge1xuICAgIHJldHVybiBFTVBUWV9FVkFMVUFURURfQVJHUztcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUocG9zaXRpb25hbDogRXZhbHVhdGVkUG9zaXRpb25hbEFyZ3MsIG5hbWVkOiBFdmFsdWF0ZWROYW1lZEFyZ3MpOiBFdmFsdWF0ZWRBcmdzIHtcbiAgICByZXR1cm4gbmV3IHRoaXMocG9zaXRpb25hbCwgbmFtZWQpO1xuICB9XG5cbiAgc3RhdGljIHBvc2l0aW9uYWwodmFsdWVzOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT5bXSk6IEV2YWx1YXRlZEFyZ3Mge1xuICAgIHJldHVybiBuZXcgdGhpcyhFdmFsdWF0ZWRQb3NpdGlvbmFsQXJncy5jcmVhdGUodmFsdWVzKSwgRVZBTFVBVEVEX0VNUFRZX05BTUVEX0FSR1MpO1xuICB9XG5cbiAgc3RhdGljIG5hbWVkKG1hcDogRGljdDxQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKEVWQUxVQVRFRF9FTVBUWV9QT1NJVElPTkFMX0FSR1MsIEV2YWx1YXRlZE5hbWVkQXJncy5jcmVhdGUobWFwKSk7XG4gIH1cblxuICBwdWJsaWMgdGFnOiBSZXZpc2lvblRhZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcG9zaXRpb25hbDogRXZhbHVhdGVkUG9zaXRpb25hbEFyZ3MsXG4gICAgcHVibGljIG5hbWVkOiBFdmFsdWF0ZWROYW1lZEFyZ3NcbiAgKSB7XG4gICAgdGhpcy50YWcgPSBjb21iaW5lVGFnZ2VkKFtwb3NpdGlvbmFsLCBuYW1lZF0pO1xuICB9XG59XG5cbmNvbnN0IEVNUFRZX0VWQUxVQVRFRF9BUkdTID0gbmV3IEV2YWx1YXRlZEFyZ3MoRVZBTFVBVEVEX0VNUFRZX1BPU0lUSU9OQUxfQVJHUywgRVZBTFVBVEVEX0VNUFRZX05BTUVEX0FSR1MpO1xuXG5leHBvcnQgeyBDb21waWxlZFBvc2l0aW9uYWxBcmdzLCBFdmFsdWF0ZWRQb3NpdGlvbmFsQXJncywgQ29tcGlsZWROYW1lZEFyZ3MsIEV2YWx1YXRlZE5hbWVkQXJncyB9O1xuIl19 -enifed("glimmer-runtime/lib/compiled/expressions/concat", ["exports", "glimmer-reference"], function (exports, _glimmerReference) { - "use strict"; + TemplateVisitor.prototype.AttrNode = function (attr) { + if (attr.value.type !== 'TextNode') { + this.getCurrentFrame().mustacheCount++; + } + }; - var CompiledConcat = (function () { - function CompiledConcat(parts) { - this.parts = parts; - this.type = "concat"; - } + TemplateVisitor.prototype.TextNode = function (text) { + var frame = this.getCurrentFrame(); + if (text.chars === '') { + frame.blankChildTextNodes.push(domIndexOf(frame.children, text)); + } + frame.actions.push(['text', [text, frame.childIndex, frame.childCount]]); + }; - CompiledConcat.prototype.evaluate = function evaluate(vm) { - var parts = new Array(this.parts.length); - for (var i = 0; i < this.parts.length; i++) { - parts[i] = this.parts[i].evaluate(vm); - } - return new ConcatReference(parts); - }; + TemplateVisitor.prototype.BlockStatement = function (node) { + var frame = this.getCurrentFrame(); - CompiledConcat.prototype.toJSON = function toJSON() { - return "concat(" + this.parts.map(function (expr) { - return expr.toJSON(); - }).join(", ") + ")"; - }; + frame.mustacheCount++; + frame.actions.push(['block', [node, frame.childIndex, frame.childCount]]); - return CompiledConcat; - })(); - - exports.default = CompiledConcat; - - var ConcatReference = (function (_CachedReference) { - babelHelpers.inherits(ConcatReference, _CachedReference); - - function ConcatReference(parts) { - _CachedReference.call(this); - this.parts = parts; - this.tag = _glimmerReference.combineTagged(parts); - } - - ConcatReference.prototype.compute = function compute() { - var parts = new Array(); - for (var i = 0; i < this.parts.length; i++) { - var value = this.parts[i].value(); - if (value !== null && value !== undefined) { - parts[i] = castToString(this.parts[i].value()); - } - } - if (parts.length > 0) { - return parts.join(''); - } - return null; - }; - - return ConcatReference; - })(_glimmerReference.CachedReference); - - function castToString(value) { - if (typeof value['toString'] !== 'function') { - return ''; - } - return String(value); + if (node.inverse) { + this.visit(node.inverse); } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvZXhwcmVzc2lvbnMvY29uY2F0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztRQU1BLGNBQUE7QUFHRSxpQkFIRixjQUFBLENBR3NCLEtBQW1DLEVBQUE7QUFBbkMsZ0JBQUEsQ0FBQSxLQUFLLEdBQUwsS0FBSyxDQUE4QjtBQUZoRCxnQkFBQSxDQUFBLElBQUksR0FBRyxRQUFRLENBQUM7U0FFb0M7O0FBSDdELHNCQUFBLFdBS0UsUUFBUSxHQUFBLGtCQUFDLEVBQU0sRUFBQTtBQUNiLGdCQUFJLEtBQUssR0FBNEIsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRSxpQkFBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLHFCQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDdkM7QUFDRCxtQkFBTyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuQzs7QUFYSCxzQkFBQSxXQWFFLE1BQU0sR0FBQSxrQkFBQTtBQUNKLCtCQUFpQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFBLElBQUk7dUJBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTthQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQUk7U0FDdEU7O2VBZkgsY0FBQTs7O3NCQUFBLGNBQUE7O1FBa0JBLGVBQUE7OEJBQUEsZUFBQTs7QUFHRSxpQkFIRixlQUFBLENBR3NCLEtBQThCLEVBQUE7QUFDaEQsdUNBQU8sQ0FBQztBQURVLGdCQUFBLENBQUEsS0FBSyxHQUFMLEtBQUssQ0FBeUI7QUFFaEQsZ0JBQUksQ0FBQyxHQUFHLEdBQUcsa0JBMUJ1QyxhQUFhLENBMEJ0QyxLQUFLLENBQUMsQ0FBQztTQUNqQzs7QUFOSCx1QkFBQSxXQVFZLE9BQU8sR0FBQSxtQkFBQTtBQUNmLGdCQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO0FBRWhDLGlCQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsb0JBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFFbEMsb0JBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO0FBQ3pDLHlCQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQW9ELENBQUM7aUJBQ25HO2FBQ0Y7QUFFRCxnQkFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNwQix1QkFBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3ZCO0FBRUQsbUJBQU8sSUFBSSxDQUFDO1NBQ2I7O2VBeEJILGVBQUE7eUJBckJ3QixlQUFlOztBQWdEdkMsYUFBQSxZQUFBLENBQXNCLEtBQUssRUFBQTtBQUN6QixZQUFJLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFVBQVUsRUFBRTtBQUMzQyxtQkFBTyxFQUFFLENBQUM7U0FDWDtBQUVELGVBQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3RCIiwiZmlsZSI6ImNvbmNhdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBpbGVkRXhwcmVzc2lvbiB9IGZyb20gJy4uL2V4cHJlc3Npb25zJztcbmltcG9ydCB7IEZJWE1FIH0gZnJvbSAnZ2xpbW1lci11dGlsJztcbmltcG9ydCBWTSBmcm9tICcuLi8uLi92bS9hcHBlbmQnO1xuaW1wb3J0IHsgUGF0aFJlZmVyZW5jZSwgQ2FjaGVkUmVmZXJlbmNlLCBSZXZpc2lvblRhZywgY29tYmluZVRhZ2dlZCB9IGZyb20gJ2dsaW1tZXItcmVmZXJlbmNlJztcbmltcG9ydCB7IE9wYXF1ZSB9IGZyb20gJ2dsaW1tZXItdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbXBpbGVkQ29uY2F0IHtcbiAgcHVibGljIHR5cGUgPSBcImNvbmNhdFwiO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFydHM6IENvbXBpbGVkRXhwcmVzc2lvbjxPcGFxdWU+W10pIHt9XG5cbiAgZXZhbHVhdGUodm06IFZNKTogQ2FjaGVkUmVmZXJlbmNlPHN0cmluZz4ge1xuICAgIGxldCBwYXJ0czogUGF0aFJlZmVyZW5jZTxPcGFxdWU+W10gPSBuZXcgQXJyYXkodGhpcy5wYXJ0cy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgcGFydHNbaV0gPSB0aGlzLnBhcnRzW2ldLmV2YWx1YXRlKHZtKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDb25jYXRSZWZlcmVuY2UocGFydHMpO1xuICB9XG5cbiAgdG9KU09OKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBjb25jYXQoJHt0aGlzLnBhcnRzLm1hcChleHByID0+IGV4cHIudG9KU09OKCkpLmpvaW4oXCIsIFwiKX0pYDtcbiAgfVxufVxuXG5jbGFzcyBDb25jYXRSZWZlcmVuY2UgZXh0ZW5kcyBDYWNoZWRSZWZlcmVuY2U8c3RyaW5nPiB7XG4gIHB1YmxpYyB0YWc6IFJldmlzaW9uVGFnO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFydHM6IFBhdGhSZWZlcmVuY2U8T3BhcXVlPltdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IGNvbWJpbmVUYWdnZWQocGFydHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbXB1dGUoKTogc3RyaW5nIHtcbiAgICBsZXQgcGFydHMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLnBhcnRzW2ldLnZhbHVlKCk7XG5cbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBhcnRzW2ldID0gY2FzdFRvU3RyaW5nKHRoaXMucGFydHNbaV0udmFsdWUoKSkgYXMgRklYTUU8c3RyaW5nLCAnQ29lcmNlIGZhbHN5IHZhbHVlcyB0byBzdHJpbmdzJz47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYXN0VG9TdHJpbmcodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZVsndG9TdHJpbmcnXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuIl19 -enifed('glimmer-runtime/lib/compiled/expressions/function', ['exports', 'glimmer-runtime/lib/syntax', 'glimmer-runtime/lib/compiled/expressions'], function (exports, _glimmerRuntimeLibSyntax, _glimmerRuntimeLibCompiledExpressions) { - 'use strict'; - - exports.default = make; - - function make(func) { - return new FunctionExpressionSyntax(func); + if (node.program) { + this.visit(node.program); } + }; - var FunctionExpressionSyntax = (function (_ExpressionSyntax) { - babelHelpers.inherits(FunctionExpressionSyntax, _ExpressionSyntax); + TemplateVisitor.prototype.ComponentNode = function (node) { + var frame = this.getCurrentFrame(); - function FunctionExpressionSyntax(func) { - _ExpressionSyntax.call(this); - this.type = "function-expression"; - this.func = func; - } + frame.mustacheCount++; + frame.actions.push(['component', [node, frame.childIndex, frame.childCount]]); - FunctionExpressionSyntax.prototype.compile = function compile(lookup, env, symbolTable) { - return new CompiledFunctionExpression(this.func, symbolTable); - }; + if (node.program) { + this.visit(node.program); + } + }; - return FunctionExpressionSyntax; - })(_glimmerRuntimeLibSyntax.Expression); + TemplateVisitor.prototype.PartialStatement = function (node) { + var frame = this.getCurrentFrame(); + frame.mustacheCount++; + frame.actions.push(['mustache', [node, frame.childIndex, frame.childCount]]); + }; - var CompiledFunctionExpression = (function (_CompiledExpression) { - babelHelpers.inherits(CompiledFunctionExpression, _CompiledExpression); + TemplateVisitor.prototype.CommentStatement = function (text) { + var frame = this.getCurrentFrame(); + frame.actions.push(['comment', [text, frame.childIndex, frame.childCount]]); + }; - function CompiledFunctionExpression(func, symbolTable) { - _CompiledExpression.call(this); - this.func = func; - this.symbolTable = symbolTable; - this.type = "function"; - this.func = func; - } + TemplateVisitor.prototype.MustacheStatement = function (mustache) { + var frame = this.getCurrentFrame(); + frame.mustacheCount++; + frame.actions.push(['mustache', [mustache, frame.childIndex, frame.childCount]]); + }; - CompiledFunctionExpression.prototype.evaluate = function evaluate(vm) { - var func = this.func; - var symbolTable = this.symbolTable; + // Frame helpers - return func(vm, symbolTable); - }; + TemplateVisitor.prototype.getCurrentFrame = function () { + return this.frameStack[this.frameStack.length - 1]; + }; - CompiledFunctionExpression.prototype.toJSON = function toJSON() { - var func = this.func; + TemplateVisitor.prototype.pushFrame = function () { + var frame = new Frame(); + this.frameStack.push(frame); + return frame; + }; - if (func.name) { - return '`' + func.name + '(...)`'; - } else { - return "`func(...)`"; - } - }; + TemplateVisitor.prototype.popFrame = function () { + return this.frameStack.pop(); + }; - return CompiledFunctionExpression; - })(_glimmerRuntimeLibCompiledExpressions.CompiledExpression); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvZXhwcmVzc2lvbnMvZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O3NCQVFBLElBQUE7O0FBQUEsYUFBQSxJQUFBLENBQWdDLElBQTJCLEVBQUE7QUFDekQsZUFBTyxJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzNDOztRQUVELHdCQUFBOzhCQUFBLHdCQUFBOztBQUlFLGlCQUpGLHdCQUFBLENBSWMsSUFBMkIsRUFBQTtBQUNyQyx3Q0FBTyxDQUFDO0FBSkgsZ0JBQUEsQ0FBQSxJQUFJLEdBQUcscUJBQXFCLENBQUM7QUFLbEMsZ0JBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQ2xCOztBQVBILGdDQUFBLFdBU0UsT0FBTyxHQUFBLGlCQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBd0IsRUFBQTtBQUMzQyxtQkFBTyxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDL0Q7O2VBWEgsd0JBQUE7Z0NBWFMsVUFBVTs7UUF5Qm5CLDBCQUFBOzhCQUFBLDBCQUFBOztBQUdFLGlCQUhGLDBCQUFBLENBR3NCLElBQTJCLEVBQVUsV0FBd0IsRUFBQTtBQUMvRSwwQ0FBTyxDQUFDO0FBRFUsZ0JBQUEsQ0FBQSxJQUFJLEdBQUosSUFBSSxDQUF1QjtBQUFVLGdCQUFBLENBQUEsV0FBVyxHQUFYLFdBQVcsQ0FBYTtBQUYxRSxnQkFBQSxDQUFBLElBQUksR0FBRyxVQUFVLENBQUM7QUFJdkIsZ0JBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQ2xCOztBQU5ILGtDQUFBLFdBUUUsUUFBUSxHQUFBLGtCQUFDLEVBQU0sRUFBQTtnQkFDUCxJQUFJLEdBQWtCLElBQUksQ0FBMUIsSUFBSTtnQkFBRSxXQUFXLEdBQUssSUFBSSxDQUFwQixXQUFXOztBQUN2QixtQkFBTyxJQUFJLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQzlCOztBQVhILGtDQUFBLFdBYUUsTUFBTSxHQUFBLGtCQUFBO2dCQUNFLElBQUksR0FBSyxJQUFJLENBQWIsSUFBSTs7QUFFVixnQkFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2IsNkJBQVksSUFBSSxDQUFDLElBQUksWUFBVTthQUNoQyxNQUFNO0FBQ0wsdUJBQU8sYUFBYSxDQUFDO2FBQ3RCO1NBQ0Y7O2VBckJILDBCQUFBOzZDQXhCUyxrQkFBa0IiLCJmaWxlIjoiZnVuY3Rpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXRoUmVmZXJlbmNlIH0gZnJvbSAnZ2xpbW1lci1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uU3ludGF4IH0gZnJvbSAnLi4vLi4vc3ludGF4JztcbmltcG9ydCB7IENvbXBpbGVkRXhwcmVzc2lvbiB9IGZyb20gJy4uL2V4cHJlc3Npb25zJztcbmltcG9ydCB7IFB1YmxpY1ZNIGFzIFZNIH0gZnJvbSAnLi4vLi4vdm0nO1xuaW1wb3J0IFN5bWJvbFRhYmxlIGZyb20gJy4uLy4uL3N5bWJvbC10YWJsZSc7XG5cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uRXhwcmVzc2lvbjxUPiA9IChWTTogVk0sIHN5bWJvbFRhYmxlOiBTeW1ib2xUYWJsZSkgPT4gUGF0aFJlZmVyZW5jZTxUPjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZTxUPihmdW5jOiBGdW5jdGlvbkV4cHJlc3Npb248VD4pOiBFeHByZXNzaW9uU3ludGF4PFQ+IHtcbiAgcmV0dXJuIG5ldyBGdW5jdGlvbkV4cHJlc3Npb25TeW50YXgoZnVuYyk7XG59XG5cbmNsYXNzIEZ1bmN0aW9uRXhwcmVzc2lvblN5bnRheDxUPiBleHRlbmRzIEV4cHJlc3Npb25TeW50YXg8VD4ge1xuICBwdWJsaWMgdHlwZSA9IFwiZnVuY3Rpb24tZXhwcmVzc2lvblwiO1xuICBwcml2YXRlIGZ1bmM6IEZ1bmN0aW9uRXhwcmVzc2lvbjxUPjtcblxuICBjb25zdHJ1Y3RvcihmdW5jOiBGdW5jdGlvbkV4cHJlc3Npb248VD4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZnVuYyA9IGZ1bmM7XG4gIH1cblxuICBjb21waWxlKGxvb2t1cCwgZW52LCBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpOiBDb21waWxlZEV4cHJlc3Npb248VD4ge1xuICAgIHJldHVybiBuZXcgQ29tcGlsZWRGdW5jdGlvbkV4cHJlc3Npb24odGhpcy5mdW5jLCBzeW1ib2xUYWJsZSk7XG4gIH1cbn1cblxuY2xhc3MgQ29tcGlsZWRGdW5jdGlvbkV4cHJlc3Npb248VD4gZXh0ZW5kcyBDb21waWxlZEV4cHJlc3Npb248VD4ge1xuICBwdWJsaWMgdHlwZSA9IFwiZnVuY3Rpb25cIjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZ1bmM6IEZ1bmN0aW9uRXhwcmVzc2lvbjxUPiwgcHJpdmF0ZSBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZnVuYyA9IGZ1bmM7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pOiBQYXRoUmVmZXJlbmNlPFQ+IHtcbiAgICBsZXQgeyBmdW5jLCBzeW1ib2xUYWJsZSB9ID0gdGhpcztcbiAgICByZXR1cm4gZnVuYyh2bSwgc3ltYm9sVGFibGUpO1xuICB9XG5cbiAgdG9KU09OKCk6IHN0cmluZyB7XG4gICAgbGV0IHsgZnVuYyB9ID0gdGhpcztcblxuICAgIGlmIChmdW5jLm5hbWUpIHtcbiAgICAgIHJldHVybiBgXFxgJHtmdW5jLm5hbWV9KC4uLilcXGBgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJgZnVuYyguLi4pYFwiO1xuICAgIH1cbiAgfVxufVxuIl19 -enifed('glimmer-runtime/lib/compiled/expressions/has-block-params', ['exports', 'glimmer-runtime/lib/compiled/expressions', 'glimmer-runtime/lib/compiled/expressions/value'], function (exports, _glimmerRuntimeLibCompiledExpressions, _glimmerRuntimeLibCompiledExpressionsValue) { - 'use strict'; + exports.default = TemplateVisitor; - var CompiledHasBlockParams = (function (_CompiledExpression) { - babelHelpers.inherits(CompiledHasBlockParams, _CompiledExpression); + // Returns the index of `domNode` in the `nodes` array, skipping + // over any nodes which do not represent DOM nodes. + function domIndexOf(nodes, domNode) { + var index = -1; - function CompiledHasBlockParams(blockName, blockSymbol) { - _CompiledExpression.call(this); - this.blockName = blockName; - this.blockSymbol = blockSymbol; - this.type = "has-block-params"; - } + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; - CompiledHasBlockParams.prototype.evaluate = function evaluate(vm) { - var blockRef = vm.scope().getBlock(this.blockSymbol); - return new _glimmerRuntimeLibCompiledExpressionsValue.ValueReference(!!(blockRef && blockRef.locals.length > 0)); - }; + if (node.type !== 'TextNode' && node.type !== 'ElementNode') { + continue; + } else { + index++; + } - CompiledHasBlockParams.prototype.toJSON = function toJSON() { - return 'has-block-params(' + this.blockName + ')'; - }; + if (node === domNode) { + return index; + } + } - return CompiledHasBlockParams; - })(_glimmerRuntimeLibCompiledExpressions.CompiledExpression); - - exports.default = CompiledHasBlockParams; + return -1; + } }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvZXhwcmVzc2lvbnMvaGFzLWJsb2NrLXBhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7UUFJQSxzQkFBQTs4QkFBQSxzQkFBQTs7QUFHRSxpQkFIRixzQkFBQSxDQUdxQixTQUFpQixFQUFTLFdBQW1CLEVBQUE7QUFDOUQsMENBQU8sQ0FBQztBQURTLGdCQUFBLENBQUEsU0FBUyxHQUFULFNBQVMsQ0FBUTtBQUFTLGdCQUFBLENBQUEsV0FBVyxHQUFYLFdBQVcsQ0FBUTtBQUZ6RCxnQkFBQSxDQUFBLElBQUksR0FBRyxrQkFBa0IsQ0FBQztTQUloQzs7QUFMSCw4QkFBQSxXQU9FLFFBQVEsR0FBQSxrQkFBQyxFQUFNLEVBQUE7QUFDYixnQkFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDckQsbUJBQU8sK0NBWEYsY0FBYyxDQVdPLENBQUMsRUFBRSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBLEFBQUMsQ0FBQyxDQUFDO1NBQ3ZFOztBQVZILDhCQUFBLFdBWUUsTUFBTSxHQUFBLGtCQUFBO0FBQ0oseUNBQTJCLElBQUksQ0FBQyxTQUFTLE9BQUk7U0FDOUM7O2VBZEgsc0JBQUE7NkNBSFMsa0JBQWtCOztzQkFHM0Isc0JBQUEiLCJmaWxlIjoiaGFzLWJsb2NrLXBhcmFtcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBWTSBmcm9tICcuLi8uLi92bS9hcHBlbmQnO1xuaW1wb3J0IHsgQ29tcGlsZWRFeHByZXNzaW9uIH0gZnJvbSAnLi4vZXhwcmVzc2lvbnMnO1xuaW1wb3J0IHsgVmFsdWVSZWZlcmVuY2UgfSBmcm9tICcuL3ZhbHVlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tcGlsZWRIYXNCbG9ja1BhcmFtcyBleHRlbmRzIENvbXBpbGVkRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIHB1YmxpYyB0eXBlID0gXCJoYXMtYmxvY2stcGFyYW1zXCI7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGJsb2NrTmFtZTogc3RyaW5nLCBwdWJsaWMgYmxvY2tTeW1ib2w6IG51bWJlcikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pOiBWYWx1ZVJlZmVyZW5jZTxib29sZWFuPiB7XG4gICAgbGV0IGJsb2NrUmVmID0gdm0uc2NvcGUoKS5nZXRCbG9jayh0aGlzLmJsb2NrU3ltYm9sKTtcbiAgICByZXR1cm4gbmV3IFZhbHVlUmVmZXJlbmNlKCEhKGJsb2NrUmVmICYmIGJsb2NrUmVmLmxvY2Fscy5sZW5ndGggPiAwKSk7XG4gIH1cblxuICB0b0pTT04oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGhhcy1ibG9jay1wYXJhbXMoJHt0aGlzLmJsb2NrTmFtZX0pYDtcbiAgfVxufVxuIl19 -enifed('glimmer-runtime/lib/compiled/expressions/has-block', ['exports', 'glimmer-runtime/lib/compiled/expressions', 'glimmer-runtime/lib/compiled/expressions/value'], function (exports, _glimmerRuntimeLibCompiledExpressions, _glimmerRuntimeLibCompiledExpressionsValue) { - 'use strict'; +enifed("htmlbars-compiler/utils", ["exports"], function (exports) { + "use strict"; - var CompiledHasBlock = (function (_CompiledExpression) { - babelHelpers.inherits(CompiledHasBlock, _CompiledExpression); + exports.processOpcodes = processOpcodes; - function CompiledHasBlock(blockName, blockSymbol) { - _CompiledExpression.call(this); - this.blockName = blockName; - this.blockSymbol = blockSymbol; - this.type = "has-block"; - } - - CompiledHasBlock.prototype.evaluate = function evaluate(vm) { - var blockRef = vm.scope().getBlock(this.blockSymbol); - return new _glimmerRuntimeLibCompiledExpressionsValue.ValueReference(!!blockRef); - }; - - CompiledHasBlock.prototype.toJSON = function toJSON() { - return 'has-block(' + this.blockName + ')'; - }; - - return CompiledHasBlock; - })(_glimmerRuntimeLibCompiledExpressions.CompiledExpression); - - exports.default = CompiledHasBlock; + function processOpcodes(compiler, opcodes) { + for (var i = 0, l = opcodes.length; i < l; i++) { + var method = opcodes[i][0]; + var params = opcodes[i][1]; + if (params) { + compiler[method].apply(compiler, params); + } else { + compiler[method].call(compiler); + } + } + } }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvZXhwcmVzc2lvbnMvaGFzLWJsb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztRQUlBLGdCQUFBOzhCQUFBLGdCQUFBOztBQUdFLGlCQUhGLGdCQUFBLENBR3FCLFNBQWlCLEVBQVMsV0FBbUIsRUFBQTtBQUM5RCwwQ0FBTyxDQUFDO0FBRFMsZ0JBQUEsQ0FBQSxTQUFTLEdBQVQsU0FBUyxDQUFRO0FBQVMsZ0JBQUEsQ0FBQSxXQUFXLEdBQVgsV0FBVyxDQUFRO0FBRnpELGdCQUFBLENBQUEsSUFBSSxHQUFHLFdBQVcsQ0FBQztTQUl6Qjs7QUFMSCx3QkFBQSxXQU9FLFFBQVEsR0FBQSxrQkFBQyxFQUFNLEVBQUE7QUFDYixnQkFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDckQsbUJBQU8sK0NBWEYsY0FBYyxDQVdPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN2Qzs7QUFWSCx3QkFBQSxXQVlFLE1BQU0sR0FBQSxrQkFBQTtBQUNKLGtDQUFvQixJQUFJLENBQUMsU0FBUyxPQUFJO1NBQ3ZDOztlQWRILGdCQUFBOzZDQUhTLGtCQUFrQjs7c0JBRzNCLGdCQUFBIiwiZmlsZSI6Imhhcy1ibG9jay5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBWTSBmcm9tICcuLi8uLi92bS9hcHBlbmQnO1xuaW1wb3J0IHsgQ29tcGlsZWRFeHByZXNzaW9uIH0gZnJvbSAnLi4vZXhwcmVzc2lvbnMnO1xuaW1wb3J0IHsgVmFsdWVSZWZlcmVuY2UgfSBmcm9tICcuL3ZhbHVlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tcGlsZWRIYXNCbG9jayBleHRlbmRzIENvbXBpbGVkRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIHB1YmxpYyB0eXBlID0gXCJoYXMtYmxvY2tcIjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgYmxvY2tOYW1lOiBzdHJpbmcsIHB1YmxpYyBibG9ja1N5bWJvbDogbnVtYmVyKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSk6IFZhbHVlUmVmZXJlbmNlPGJvb2xlYW4+IHtcbiAgICBsZXQgYmxvY2tSZWYgPSB2bS5zY29wZSgpLmdldEJsb2NrKHRoaXMuYmxvY2tTeW1ib2wpO1xuICAgIHJldHVybiBuZXcgVmFsdWVSZWZlcmVuY2UoISFibG9ja1JlZik7XG4gIH1cblxuICB0b0pTT04oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGhhcy1ibG9jaygke3RoaXMuYmxvY2tOYW1lfSlgO1xuICB9XG59XG4iXX0= -enifed('glimmer-runtime/lib/compiled/expressions/helper', ['exports', 'glimmer-runtime/lib/compiled/expressions'], function (exports, _glimmerRuntimeLibCompiledExpressions) { - 'use strict'; +enifed('htmlbars-runtime', ['exports', 'htmlbars-runtime/hooks', 'htmlbars-runtime/render', 'htmlbars-util/morph-utils', 'htmlbars-util/template-utils'], function (exports, _htmlbarsRuntimeHooks, _htmlbarsRuntimeRender, _htmlbarsUtilMorphUtils, _htmlbarsUtilTemplateUtils) { + 'use strict'; - var CompiledHelper = (function (_CompiledExpression) { - babelHelpers.inherits(CompiledHelper, _CompiledExpression); + var internal = { + blockFor: _htmlbarsUtilTemplateUtils.blockFor, + manualElement: _htmlbarsRuntimeRender.manualElement, + hostBlock: _htmlbarsRuntimeHooks.hostBlock, + continueBlock: _htmlbarsRuntimeHooks.continueBlock, + hostYieldWithShadowTemplate: _htmlbarsRuntimeHooks.hostYieldWithShadowTemplate, + visitChildren: _htmlbarsUtilMorphUtils.visitChildren, + validateChildMorphs: _htmlbarsUtilMorphUtils.validateChildMorphs, + clearMorph: _htmlbarsUtilTemplateUtils.clearMorph + }; - function CompiledHelper(name, helper, args, symbolTable) { - _CompiledExpression.call(this); - this.name = name; - this.helper = helper; - this.args = args; - this.symbolTable = symbolTable; - this.type = "helper"; - } - - CompiledHelper.prototype.evaluate = function evaluate(vm) { - var helper = this.helper; - - return helper(vm, this.args.evaluate(vm), this.symbolTable); - }; - - CompiledHelper.prototype.toJSON = function toJSON() { - return '`' + this.name.join('.') + '($ARGS)`'; - }; - - return CompiledHelper; - })(_glimmerRuntimeLibCompiledExpressions.CompiledExpression); - - exports.default = CompiledHelper; + exports.hooks = _htmlbarsRuntimeHooks.default; + exports.render = _htmlbarsRuntimeRender.default; + exports.internal = internal; }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvZXhwcmVzc2lvbnMvaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztRQVFBLGNBQUE7OEJBQUEsY0FBQTs7QUFHRSxpQkFIRixjQUFBLENBR3FCLElBQWMsRUFBUyxNQUFjLEVBQVMsSUFBa0IsRUFBUyxXQUF3QixFQUFBO0FBQ2xILDBDQUFPLENBQUM7QUFEUyxnQkFBQSxDQUFBLElBQUksR0FBSixJQUFJLENBQVU7QUFBUyxnQkFBQSxDQUFBLE1BQU0sR0FBTixNQUFNLENBQVE7QUFBUyxnQkFBQSxDQUFBLElBQUksR0FBSixJQUFJLENBQWM7QUFBUyxnQkFBQSxDQUFBLFdBQVcsR0FBWCxXQUFXLENBQWE7QUFGN0csZ0JBQUEsQ0FBQSxJQUFJLEdBQUcsUUFBUSxDQUFDO1NBSXRCOztBQUxILHNCQUFBLFdBT0UsUUFBUSxHQUFBLGtCQUFDLEVBQU0sRUFBQTtnQkFDUCxNQUFNLEdBQUssSUFBSSxDQUFmLE1BQU07O0FBQ1osbUJBQU8sTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDN0Q7O0FBVkgsc0JBQUEsV0FZRSxNQUFNLEdBQUEsa0JBQUE7QUFDSix5QkFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBWTtTQUM1Qzs7ZUFkSCxjQUFBOzZDQVJTLGtCQUFrQjs7c0JBUTNCLGNBQUEiLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcGlsZWRFeHByZXNzaW9uIH0gZnJvbSAnLi4vZXhwcmVzc2lvbnMnO1xuaW1wb3J0IHsgQ29tcGlsZWRBcmdzIH0gZnJvbSAnLi9hcmdzJztcbmltcG9ydCBWTSBmcm9tICcuLi8uLi92bS9hcHBlbmQnO1xuaW1wb3J0IHsgSGVscGVyIH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IFN5bWJvbFRhYmxlIGZyb20gJy4uLy4uL3N5bWJvbC10YWJsZSc7XG5pbXBvcnQgeyBQYXRoUmVmZXJlbmNlIH0gZnJvbSAnZ2xpbW1lci1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgT3BhcXVlIH0gZnJvbSAnZ2xpbW1lci11dGlsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tcGlsZWRIZWxwZXIgZXh0ZW5kcyBDb21waWxlZEV4cHJlc3Npb248T3BhcXVlPiB7XG4gIHB1YmxpYyB0eXBlID0gXCJoZWxwZXJcIjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nW10sIHB1YmxpYyBoZWxwZXI6IEhlbHBlciwgcHVibGljIGFyZ3M6IENvbXBpbGVkQXJncywgcHVibGljIHN5bWJvbFRhYmxlOiBTeW1ib2xUYWJsZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4ge1xuICAgIGxldCB7IGhlbHBlciB9ID0gdGhpcztcbiAgICByZXR1cm4gaGVscGVyKHZtLCB0aGlzLmFyZ3MuZXZhbHVhdGUodm0pLCB0aGlzLnN5bWJvbFRhYmxlKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXFxgJHt0aGlzLm5hbWUuam9pbignLicpfSgkQVJHUylcXGBgO1xuICB9XG59XG4iXX0= -enifed('glimmer-runtime/lib/compiled/expressions/lookups', ['exports', 'glimmer-runtime/lib/compiled/expressions', 'glimmer-reference'], function (exports, _glimmerRuntimeLibCompiledExpressions, _glimmerReference) { - 'use strict'; +enifed('htmlbars-runtime/expression-visitor', ['exports'], function (exports) { + /** + # Expression Nodes: + + These nodes are not directly responsible for any part of the DOM, but are + eventually passed to a Statement Node. + + * get + * subexpr + * concat + */ - var CompiledLocalLookup = (function (_CompiledExpression) { - babelHelpers.inherits(CompiledLocalLookup, _CompiledExpression); + 'use strict'; - function CompiledLocalLookup(symbol, path, debug) { - _CompiledExpression.call(this); - this.symbol = symbol; - this.path = path; - this.debug = debug; - this.type = "local-lookup"; - } + exports.acceptParams = acceptParams; + exports.acceptHash = acceptHash; - CompiledLocalLookup.prototype.evaluate = function evaluate(vm) { - var base = vm.referenceForSymbol(this.symbol); - return _glimmerReference.referenceFromParts(base, this.path); - }; + function acceptParams(nodes, env, scope) { + var array = []; - CompiledLocalLookup.prototype.toJSON = function toJSON() { - var debug = this.debug; - var symbol = this.symbol; - var path = this.path; + for (var i = 0, l = nodes.length; i < l; i++) { + array.push(acceptExpression(nodes[i], env, scope).value); + } - if (path.length) { - return '$' + symbol + '(' + debug + ').' + path.join('.'); - } else { - return '$' + symbol + '(' + debug + ')'; - } - }; + return array; + } - return CompiledLocalLookup; - })(_glimmerRuntimeLibCompiledExpressions.CompiledExpression); + function acceptHash(pairs, env, scope) { + var object = {}; - exports.CompiledLocalLookup = CompiledLocalLookup; + for (var i = 0, l = pairs.length; i < l; i += 2) { + var key = pairs[i]; + var value = pairs[i + 1]; + object[key] = acceptExpression(value, env, scope).value; + } - var CompiledSelfLookup = (function (_CompiledExpression2) { - babelHelpers.inherits(CompiledSelfLookup, _CompiledExpression2); + return object; + } - function CompiledSelfLookup(parts) { - _CompiledExpression2.call(this); - this.parts = parts; - this.type = "self-lookup"; - } + function acceptExpression(node, env, scope) { + var ret = { value: null }; - CompiledSelfLookup.prototype.evaluate = function evaluate(vm) { - return _glimmerReference.referenceFromParts(vm.getSelf(), this.parts); - }; + // Primitive literals are unambiguously non-array representations of + // themselves. + if (Array.isArray(node)) { + // if (node.length !== 7) { throw new Error('FIXME: Invalid statement length!'); } - CompiledSelfLookup.prototype.toJSON = function toJSON() { - var path = ['self']; - path.push.apply(path, this.parts); - return path.join('.'); - }; + ret.value = evaluateNode(node, env, scope); + } else { + ret.value = node; + } - return CompiledSelfLookup; - })(_glimmerRuntimeLibCompiledExpressions.CompiledExpression); + return ret; + } - exports.CompiledSelfLookup = CompiledSelfLookup; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvZXhwcmVzc2lvbnMvbG9va3Vwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7UUFLQSxtQkFBQTs4QkFBQSxtQkFBQTs7QUFHRSxpQkFIRixtQkFBQSxDQUlZLE1BQWMsRUFDZCxJQUFjLEVBQ2QsS0FBYSxFQUFBO0FBRXJCLDBDQUFPLENBQUM7QUFKQSxnQkFBQSxDQUFBLE1BQU0sR0FBTixNQUFNLENBQVE7QUFDZCxnQkFBQSxDQUFBLElBQUksR0FBSixJQUFJLENBQVU7QUFDZCxnQkFBQSxDQUFBLEtBQUssR0FBTCxLQUFLLENBQVE7QUFMaEIsZ0JBQUEsQ0FBQSxJQUFJLEdBQUcsY0FBYyxDQUFDO1NBUTVCOztBQVRILDJCQUFBLFdBV0UsUUFBUSxHQUFBLGtCQUFDLEVBQU0sRUFBQTtBQUNiLGdCQUFJLElBQUksR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlDLG1CQUFPLGtCQWZGLGtCQUFrQixDQWVHLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUM7O0FBZEgsMkJBQUEsV0FnQkUsTUFBTSxHQUFBLGtCQUFBO2dCQUNFLEtBQUssR0FBbUIsSUFBSSxDQUE1QixLQUFLO2dCQUFFLE1BQU0sR0FBVyxJQUFJLENBQXJCLE1BQU07Z0JBQUUsSUFBSSxHQUFLLElBQUksQ0FBYixJQUFJOztBQUV6QixnQkFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2YsNkJBQVcsTUFBTSxTQUFJLEtBQUssVUFBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFHO2FBQ2pELE1BQU07QUFDTCw2QkFBVyxNQUFNLFNBQUksS0FBSyxPQUFJO2FBQy9CO1NBQ0Y7O2VBeEJILG1CQUFBOzZDQUxTLGtCQUFrQjs7OztRQWdDM0Isa0JBQUE7OEJBQUEsa0JBQUE7O0FBR0UsaUJBSEYsa0JBQUEsQ0FHc0IsS0FBZSxFQUFBO0FBQ2pDLDJDQUFPLENBQUM7QUFEVSxnQkFBQSxDQUFBLEtBQUssR0FBTCxLQUFLLENBQVU7QUFGNUIsZ0JBQUEsQ0FBQSxJQUFJLEdBQUcsYUFBYSxDQUFDO1NBSTNCOztBQUxILDBCQUFBLFdBT0UsUUFBUSxHQUFBLGtCQUFDLEVBQU0sRUFBQTtBQUNiLG1CQUFPLGtCQXJDRixrQkFBa0IsQ0FxQ0csRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyRDs7QUFUSCwwQkFBQSxXQVdFLE1BQU0sR0FBQSxrQkFBQTtBQUNKLGdCQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BCLGdCQUFJLENBQUMsSUFBSSxNQUFBLENBQVQsSUFBSSxFQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QixtQkFBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCOztlQWZILGtCQUFBOzZDQWhDUyxrQkFBa0IiLCJmaWxlIjoibG9va3Vwcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBpbGVkRXhwcmVzc2lvbiB9IGZyb20gJy4uL2V4cHJlc3Npb25zJztcbmltcG9ydCBWTSBmcm9tICcuLi8uLi92bS9hcHBlbmQnO1xuaW1wb3J0IHsgUGF0aFJlZmVyZW5jZSB9IGZyb20gJ2dsaW1tZXItcmVmZXJlbmNlJztcbmltcG9ydCB7IHJlZmVyZW5jZUZyb21QYXJ0cyB9IGZyb20gJ2dsaW1tZXItcmVmZXJlbmNlJztcblxuZXhwb3J0IGNsYXNzIENvbXBpbGVkTG9jYWxMb29rdXAgZXh0ZW5kcyBDb21waWxlZEV4cHJlc3Npb248YW55PiB7XG4gIHB1YmxpYyB0eXBlID0gXCJsb2NhbC1sb29rdXBcIjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN5bWJvbDogbnVtYmVyLFxuICAgIHByaXZhdGUgcGF0aDogc3RyaW5nW10sXG4gICAgcHJpdmF0ZSBkZWJ1Zzogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pOiBQYXRoUmVmZXJlbmNlPGFueT4ge1xuICAgIGxldCBiYXNlID0gdm0ucmVmZXJlbmNlRm9yU3ltYm9sKHRoaXMuc3ltYm9sKTtcbiAgICByZXR1cm4gcmVmZXJlbmNlRnJvbVBhcnRzKGJhc2UsIHRoaXMucGF0aCk7XG4gIH1cblxuICB0b0pTT04oKTogc3RyaW5nIHtcbiAgICBsZXQgeyBkZWJ1Zywgc3ltYm9sLCBwYXRoIH0gPSB0aGlzO1xuXG4gICAgaWYgKHBhdGgubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYCQke3N5bWJvbH0oJHtkZWJ1Z30pLiR7cGF0aC5qb2luKCcuJyl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAkJHtzeW1ib2x9KCR7ZGVidWd9KWA7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21waWxlZFNlbGZMb29rdXAgZXh0ZW5kcyBDb21waWxlZEV4cHJlc3Npb248YW55PiB7XG4gIHB1YmxpYyB0eXBlID0gXCJzZWxmLWxvb2t1cFwiO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFydHM6IHN0cmluZ1tdKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSk6IFBhdGhSZWZlcmVuY2U8YW55PiB7XG4gICAgcmV0dXJuIHJlZmVyZW5jZUZyb21QYXJ0cyh2bS5nZXRTZWxmKCksIHRoaXMucGFydHMpO1xuICB9XG5cbiAgdG9KU09OKCk6IHN0cmluZyB7XG4gICAgbGV0IHBhdGggPSBbJ3NlbGYnXTtcbiAgICBwYXRoLnB1c2goLi4udGhpcy5wYXJ0cyk7XG4gICAgcmV0dXJuIHBhdGguam9pbignLicpO1xuICB9XG59XG4iXX0= -enifed('glimmer-runtime/lib/compiled/expressions/named-args', ['exports', 'glimmer-runtime/lib/references', 'glimmer-runtime/lib/utils', 'glimmer-reference', 'glimmer-util'], function (exports, _glimmerRuntimeLibReferences, _glimmerRuntimeLibUtils, _glimmerReference, _glimmerUtil) { - 'use strict'; + function evaluateNode(node, env, scope) { + switch (node[0]) { + // can be used by manualElement + case 'value': + return node[1]; + case 'get': + return evaluateGet(node, env, scope); + case 'subexpr': + return evaluateSubexpr(node, env, scope); + case 'concat': + return evaluateConcat(node, env, scope); + } + } - var CompiledNamedArgs = (function () { - function CompiledNamedArgs(keys, values) { - this.keys = keys; - this.values = values; - this.length = keys.length; - _glimmerUtil.assert(keys.length === values.length, 'Keys and values do not have the same length'); - } + function evaluateGet(node, env, scope) { + var path = node[1]; - CompiledNamedArgs.empty = function empty() { - return COMPILED_EMPTY_NAMED_ARGS; - }; + return env.hooks.get(env, scope, path); + } - CompiledNamedArgs.create = function create(map) { - var keys = Object.keys(map); - var length = keys.length; - if (length > 0) { - var values = []; - for (var i = 0; i < length; i++) { - values[i] = map[keys[i]]; - } - return new this(keys, values); - } else { - return COMPILED_EMPTY_NAMED_ARGS; - } - }; + function evaluateSubexpr(node, env, scope) { + var path = node[1]; + var rawParams = node[2]; + var rawHash = node[3]; - CompiledNamedArgs.prototype.evaluate = function evaluate(vm) { - var keys = this.keys; - var values = this.values; - var length = this.length; + var params = acceptParams(rawParams, env, scope); + var hash = acceptHash(rawHash, env, scope); - var evaluated = new Array(length); - for (var i = 0; i < length; i++) { - evaluated[i] = values[i].evaluate(vm); - } - return new EvaluatedNamedArgs(keys, evaluated); - }; + return env.hooks.subexpr(env, scope, path, params, hash); + } - CompiledNamedArgs.prototype.toJSON = function toJSON() { - var keys = this.keys; - var values = this.values; + function evaluateConcat(node, env, scope) { + var rawParts = node[1]; - var inner = keys.map(function (key, i) { - return key + ': ' + values[i].toJSON(); - }).join(", "); - return '{' + inner + '}'; - }; + var parts = acceptParams(rawParts, env, scope); - return CompiledNamedArgs; - })(); - - exports.CompiledNamedArgs = CompiledNamedArgs; - var COMPILED_EMPTY_NAMED_ARGS = new ((function (_CompiledNamedArgs) { - babelHelpers.inherits(_class, _CompiledNamedArgs); - - function _class() { - _CompiledNamedArgs.call(this, _glimmerRuntimeLibUtils.EMPTY_ARRAY, _glimmerRuntimeLibUtils.EMPTY_ARRAY); - } - - _class.prototype.evaluate = function evaluate(vm) { - return EVALUATED_EMPTY_NAMED_ARGS; - }; - - _class.prototype.toJSON = function toJSON() { - return '<EMPTY>'; - }; - - return _class; - })(CompiledNamedArgs))(); - exports.COMPILED_EMPTY_NAMED_ARGS = COMPILED_EMPTY_NAMED_ARGS; - - var EvaluatedNamedArgs = (function () { - function EvaluatedNamedArgs(keys, values) { - var _map = arguments.length <= 2 || arguments[2] === undefined ? undefined : arguments[2]; - - this.keys = keys; - this.values = values; - this._map = _map; - this.tag = _glimmerReference.combineTagged(values); - this.length = keys.length; - _glimmerUtil.assert(keys.length === values.length, 'Keys and values do not have the same length'); - } - - EvaluatedNamedArgs.create = function create(map) { - var keys = Object.keys(map); - var length = keys.length; - if (length > 0) { - var values = new Array(length); - for (var i = 0; i < length; i++) { - values[i] = map[keys[i]]; - } - return new this(keys, values, map); - } else { - return EVALUATED_EMPTY_NAMED_ARGS; - } - }; - - EvaluatedNamedArgs.empty = function empty() { - return EVALUATED_EMPTY_NAMED_ARGS; - }; - - EvaluatedNamedArgs.prototype.get = function get(key) { - var keys = this.keys; - var values = this.values; - - var index = keys.indexOf(key); - return index === -1 ? _glimmerRuntimeLibReferences.UNDEFINED_REFERENCE : values[index]; - }; - - EvaluatedNamedArgs.prototype.has = function has(key) { - return this.keys.indexOf(key) !== -1; - }; - - EvaluatedNamedArgs.prototype.value = function value() { - var keys = this.keys; - var values = this.values; - - var out = _glimmerUtil.dict(); - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - var ref = values[i]; - out[key] = ref.value(); - } - return out; - }; - - babelHelpers.createClass(EvaluatedNamedArgs, [{ - key: 'map', - get: function () { - var map = this._map; - - if (map) { - return map; - } - map = this._map = _glimmerUtil.dict(); - var keys = this.keys; - var values = this.values; - var length = this.length; - - for (var i = 0; i < length; i++) { - map[keys[i]] = values[i]; - } - return map; - } - }]); - return EvaluatedNamedArgs; - })(); - - exports.EvaluatedNamedArgs = EvaluatedNamedArgs; - var EVALUATED_EMPTY_NAMED_ARGS = new ((function (_EvaluatedNamedArgs) { - babelHelpers.inherits(_class2, _EvaluatedNamedArgs); - - function _class2() { - _EvaluatedNamedArgs.call(this, _glimmerRuntimeLibUtils.EMPTY_ARRAY, _glimmerRuntimeLibUtils.EMPTY_ARRAY, _glimmerRuntimeLibUtils.EMPTY_DICT); - } - - _class2.prototype.get = function get() { - return _glimmerRuntimeLibReferences.UNDEFINED_REFERENCE; - }; - - _class2.prototype.has = function has(key) { - return false; - }; - - _class2.prototype.value = function value() { - return _glimmerRuntimeLibUtils.EMPTY_DICT; - }; - - return _class2; - })(EvaluatedNamedArgs))(); - exports.EVALUATED_EMPTY_NAMED_ARGS = EVALUATED_EMPTY_NAMED_ARGS; + return env.hooks.concat(env, parts); + } }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvZXhwcmVzc2lvbnMvbmFtZWQtYXJncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7UUFPQSxpQkFBQTtBQXdCRSxpQkF4QkYsaUJBQUEsQ0F5QlcsSUFBYyxFQUNkLE1BQW9DLEVBQUE7QUFEcEMsZ0JBQUEsQ0FBQSxJQUFJLEdBQUosSUFBSSxDQUFVO0FBQ2QsZ0JBQUEsQ0FBQSxNQUFNLEdBQU4sTUFBTSxDQUE4QjtBQUUzQyxnQkFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzFCLHlCQS9CbUIsTUFBTSxDQStCbEIsSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLDZDQUE2QyxDQUFDLENBQUM7U0FDdEY7O0FBOUJILHlCQUFBLENBQ1MsS0FBSyxHQUFBLGlCQUFBO0FBQ1YsbUJBQU8seUJBQXlCLENBQUM7U0FDbEM7O0FBSEgseUJBQUEsQ0FLUyxNQUFNLEdBQUEsZ0JBQUMsR0FBcUMsRUFBQTtBQUNqRCxnQkFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixnQkFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUV6QixnQkFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2Qsb0JBQUksTUFBTSxHQUFpQyxFQUFFLENBQUM7QUFFOUMscUJBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0IsMEJBQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzFCO0FBRUQsdUJBQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQy9CLE1BQU07QUFDTCx1QkFBTyx5QkFBeUIsQ0FBQzthQUNsQztTQUNGOztBQXBCSCx5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O0FBRVYsb0JBQUksR0FBRyxFQUFFO0FBQ1AsMkJBQU8sR0FBRyxDQUFDO2lCQUNaO0FBRUQsbUJBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLGFBNUdTLElBQUksRUE0R2dCLENBQUM7b0JBRTFDLElBQUksR0FBcUIsSUFBSSxDQUE3QixJQUFJO29CQUFFLE1BQU0sR0FBYSxJQUFJLENBQXZCLE1BQU07b0JBQUUsTUFBTSxHQUFLLElBQUksQ0FBZixNQUFNOztBQUUxQixxQkFBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQix1QkFBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDMUI7QUFFRCx1QkFBTyxHQUFHLENBQUM7YUFDWjs7ZUFuREgsa0JBQUE7Ozs7QUE4RU8sUUFBTSwwQkFBMEIsR0FBdUI7OztBQUM1RCwyQkFBQTtBQUNFLG1FQXBKSyxXQUFXLDBCQUFYLFdBQVcsMEJBQUUsVUFBVSxDQW9KZSxDQUFDO1NBQzdDOzswQkFFRCxHQUFHLEdBQUEsZUFBQTtBQUNELGdEQTNKSyxtQkFBbUIsQ0EySkc7U0FDNUI7OzBCQUVELEdBQUcsR0FBQSxhQUFDLEdBQVcsRUFBQTtBQUNiLG1CQUFPLEtBQUssQ0FBQztTQUNkOzswQkFFRCxLQUFLLEdBQUEsaUJBQUE7QUFDSCwyQ0FoS2tCLFVBQVUsQ0FnS1Y7U0FDbkI7OztPQWY4RSxrQkFBa0IsSUFnQmpHLENBQUMiLCJmaWxlIjoibmFtZWQtYXJncy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVOREVGSU5FRF9SRUZFUkVOQ0UgfSBmcm9tICcuLi8uLi9yZWZlcmVuY2VzJztcbmltcG9ydCB7IENvbXBpbGVkRXhwcmVzc2lvbiB9IGZyb20gJy4uL2V4cHJlc3Npb25zJztcbmltcG9ydCBWTSBmcm9tICcuLi8uLi92bS9hcHBlbmQnO1xuaW1wb3J0IHsgRU1QVFlfQVJSQVksIEVNUFRZX0RJQ1QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBQYXRoUmVmZXJlbmNlLCBSZXZpc2lvblRhZywgY29tYmluZVRhZ2dlZCB9IGZyb20gJ2dsaW1tZXItcmVmZXJlbmNlJztcbmltcG9ydCB7IERpY3QsIE9wYXF1ZSwgYXNzZXJ0LCBkaWN0IH0gZnJvbSAnZ2xpbW1lci11dGlsJztcblxuZXhwb3J0IGNsYXNzIENvbXBpbGVkTmFtZWRBcmdzIHtcbiAgc3RhdGljIGVtcHR5KCk6IENvbXBpbGVkTmFtZWRBcmdzIHtcbiAgICByZXR1cm4gQ09NUElMRURfRU1QVFlfTkFNRURfQVJHUztcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUobWFwOiBEaWN0PENvbXBpbGVkRXhwcmVzc2lvbjxPcGFxdWU+Pik6IENvbXBpbGVkTmFtZWRBcmdzIHtcbiAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKG1hcCk7XG4gICAgbGV0IGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgIGxldCB2YWx1ZXM6IENvbXBpbGVkRXhwcmVzc2lvbjxPcGFxdWU+W10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZXNbaV0gPSBtYXBba2V5c1tpXV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgdGhpcyhrZXlzLCB2YWx1ZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gQ09NUElMRURfRU1QVFlfTkFNRURfQVJHUztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbGVuZ3RoOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGtleXM6IHN0cmluZ1tdLFxuICAgIHB1YmxpYyB2YWx1ZXM6IENvbXBpbGVkRXhwcmVzc2lvbjxPcGFxdWU+W11cbiAgKSB7XG4gICAgdGhpcy5sZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICBhc3NlcnQoa2V5cy5sZW5ndGggPT09IHZhbHVlcy5sZW5ndGgsICdLZXlzIGFuZCB2YWx1ZXMgZG8gbm90IGhhdmUgdGhlIHNhbWUgbGVuZ3RoJyk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pOiBFdmFsdWF0ZWROYW1lZEFyZ3Mge1xuICAgIGxldCB7IGtleXMsIHZhbHVlcywgbGVuZ3RoIH0gPSB0aGlzO1xuICAgIGxldCBldmFsdWF0ZWQ6IFBhdGhSZWZlcmVuY2U8T3BhcXVlPltdID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8bGVuZ3RoOyBpKyspIHtcbiAgICAgIGV2YWx1YXRlZFtpXSA9IHZhbHVlc1tpXS5ldmFsdWF0ZSh2bSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBFdmFsdWF0ZWROYW1lZEFyZ3Moa2V5cywgZXZhbHVhdGVkKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIGxldCB7IGtleXMsIHZhbHVlcyB9ID0gdGhpcztcbiAgICBsZXQgaW5uZXIgPSBrZXlzLm1hcCgoa2V5LCBpKSA9PiBgJHtrZXl9OiAke3ZhbHVlc1tpXS50b0pTT04oKX1gKS5qb2luKFwiLCBcIik7XG4gICAgcmV0dXJuIGB7JHtpbm5lcn19YDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQ09NUElMRURfRU1QVFlfTkFNRURfQVJHUzogQ29tcGlsZWROYW1lZEFyZ3MgPSBuZXcgKGNsYXNzIGV4dGVuZHMgQ29tcGlsZWROYW1lZEFyZ3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihFTVBUWV9BUlJBWSwgRU1QVFlfQVJSQVkpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFZNKTogRXZhbHVhdGVkTmFtZWRBcmdzIHtcbiAgICByZXR1cm4gRVZBTFVBVEVEX0VNUFRZX05BTUVEX0FSR1M7XG4gIH1cblxuICB0b0pTT04oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYDxFTVBUWT5gO1xuICB9XG59KTtcblxuZXhwb3J0IGNsYXNzIEV2YWx1YXRlZE5hbWVkQXJncyB7XG4gIHN0YXRpYyBjcmVhdGUobWFwOiBEaWN0PFBhdGhSZWZlcmVuY2U8T3BhcXVlPj4pIHtcbiAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKG1hcCk7XG4gICAgbGV0IGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgIGxldCB2YWx1ZXM6IFBhdGhSZWZlcmVuY2U8T3BhcXVlPltdID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIGZvciAobGV0IGk9MDsgaTxsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZXNbaV0gPSBtYXBba2V5c1tpXV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgdGhpcyhrZXlzLCB2YWx1ZXMsIG1hcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBFVkFMVUFURURfRU1QVFlfTkFNRURfQVJHUztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZW1wdHkoKTogRXZhbHVhdGVkTmFtZWRBcmdzIHtcbiAgICByZXR1cm4gRVZBTFVBVEVEX0VNUFRZX05BTUVEX0FSR1M7XG4gIH1cblxuICBwdWJsaWMgdGFnOiBSZXZpc2lvblRhZztcbiAgcHVibGljIGxlbmd0aDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBrZXlzOiBzdHJpbmdbXSxcbiAgICBwdWJsaWMgdmFsdWVzOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT5bXSxcbiAgICBwcml2YXRlIF9tYXA6IERpY3Q8UGF0aFJlZmVyZW5jZTxPcGFxdWU+PiA9IHVuZGVmaW5lZFxuICApIHtcbiAgICB0aGlzLnRhZyA9IGNvbWJpbmVUYWdnZWQodmFsdWVzKTtcbiAgICB0aGlzLmxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGFzc2VydChrZXlzLmxlbmd0aCA9PT0gdmFsdWVzLmxlbmd0aCwgJ0tleXMgYW5kIHZhbHVlcyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgfVxuXG4gIGdldCBtYXAoKTogRGljdDxQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+IHtcbiAgICBsZXQgeyBfbWFwOiBtYXAgfSA9IHRoaXM7XG5cbiAgICBpZiAobWFwKSB7XG4gICAgICByZXR1cm4gbWFwO1xuICAgIH1cblxuICAgIG1hcCA9IHRoaXMuX21hcCA9IGRpY3Q8UGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuXG4gICAgbGV0IHsga2V5cywgdmFsdWVzLCBsZW5ndGggfSA9IHRoaXM7XG5cbiAgICBmb3IobGV0IGk9MDsgaTxsZW5ndGg7IGkrKykge1xuICAgICAgbWFwW2tleXNbaV1dID0gdmFsdWVzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcpOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4ge1xuICAgIGxldCB7IGtleXMsIHZhbHVlcyB9ID0gdGhpcztcbiAgICBsZXQgaW5kZXggPSBrZXlzLmluZGV4T2Yoa2V5KTtcbiAgICByZXR1cm4gKGluZGV4ID09PSAtMSkgPyBVTkRFRklORURfUkVGRVJFTkNFIDogdmFsdWVzW2luZGV4XTtcbiAgfVxuXG4gIGhhcyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmtleXMuaW5kZXhPZihrZXkpICE9PSAtMTtcbiAgfVxuXG4gIHZhbHVlKCk6IERpY3Q8T3BhcXVlPiB7XG4gICAgbGV0IHsga2V5cywgdmFsdWVzIH0gPSB0aGlzO1xuXG4gICAgbGV0IG91dCA9IGRpY3Q8T3BhcXVlPigpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQga2V5ID0ga2V5c1tpXTtcbiAgICAgIGxldCByZWYgPSB2YWx1ZXNbaV07XG4gICAgICBvdXRba2V5XSA9IHJlZi52YWx1ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEVWQUxVQVRFRF9FTVBUWV9OQU1FRF9BUkdTOiBFdmFsdWF0ZWROYW1lZEFyZ3MgPSBuZXcgKGNsYXNzIGV4dGVuZHMgRXZhbHVhdGVkTmFtZWRBcmdzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoRU1QVFlfQVJSQVksIEVNUFRZX0FSUkFZLCBFTVBUWV9ESUNUKTtcbiAgfVxuXG4gIGdldCgpOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4ge1xuICAgIHJldHVybiBVTkRFRklORURfUkVGRVJFTkNFO1xuICB9XG5cbiAgaGFzKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFsdWUoKTogRGljdDxPcGFxdWU+IHtcbiAgICByZXR1cm4gRU1QVFlfRElDVDtcbiAgfVxufSk7XG4iXX0= -enifed('glimmer-runtime/lib/compiled/expressions/positional-args', ['exports', 'glimmer-runtime/lib/references', 'glimmer-runtime/lib/utils', 'glimmer-reference'], function (exports, _glimmerRuntimeLibReferences, _glimmerRuntimeLibUtils, _glimmerReference) { - 'use strict'; +enifed("htmlbars-runtime/hooks", ["exports", "htmlbars-runtime/render", "morph-range/morph-list", "htmlbars-util/object-utils", "htmlbars-util/morph-utils", "htmlbars-util/template-utils"], function (exports, _htmlbarsRuntimeRender, _morphRangeMorphList, _htmlbarsUtilObjectUtils, _htmlbarsUtilMorphUtils, _htmlbarsUtilTemplateUtils) { + "use strict"; - var CompiledPositionalArgs = (function () { - function CompiledPositionalArgs(values) { - this.values = values; - this.length = values.length; - } + exports.wrap = wrap; + exports.wrapForHelper = wrapForHelper; + exports.createScope = createScope; + exports.createFreshScope = createFreshScope; + exports.bindShadowScope = bindShadowScope; + exports.createChildScope = createChildScope; + exports.bindSelf = bindSelf; + exports.updateSelf = updateSelf; + exports.bindLocal = bindLocal; + exports.updateLocal = updateLocal; + exports.bindBlock = bindBlock; + exports.block = block; + exports.continueBlock = continueBlock; + exports.hostBlock = hostBlock; + exports.handleRedirect = handleRedirect; + exports.handleKeyword = handleKeyword; + exports.linkRenderNode = linkRenderNode; + exports.inline = inline; + exports.keyword = keyword; + exports.invokeHelper = invokeHelper; + exports.classify = classify; + exports.partial = partial; + exports.range = range; + exports.element = element; + exports.attribute = attribute; + exports.subexpr = subexpr; + exports.get = get; + exports.getRoot = getRoot; + exports.getBlock = getBlock; + exports.getChild = getChild; + exports.getValue = getValue; + exports.getCellOrValue = getCellOrValue; + exports.component = component; + exports.concat = concat; + exports.hasHelper = hasHelper; + exports.lookupHelper = lookupHelper; + exports.bindScope = bindScope; + exports.updateScope = updateScope; - CompiledPositionalArgs.create = function create(values) { - if (values.length) { - return new this(values); - } else { - return COMPILED_EMPTY_POSITIONAL_ARGS; - } - }; + /** + HTMLBars delegates the runtime behavior of a template to + hooks provided by the host environment. These hooks explain + the lexical environment of a Handlebars template, the internal + representation of references, and the interaction between an + HTMLBars template and the DOM it is managing. + + While HTMLBars host hooks have access to all of this internal + machinery, templates and helpers have access to the abstraction + provided by the host hooks. + + ## The Lexical Environment + + The default lexical environment of an HTMLBars template includes: + + * Any local variables, provided by *block arguments* + * The current value of `self` + + ## Simple Nesting + + Let's look at a simple template with a nested block: + + ```hbs + <h1>{{title}}</h1> + + {{#if author}} + <p class="byline">{{author}}</p> + {{/if}} + ``` + + In this case, the lexical environment at the top-level of the + template does not change inside of the `if` block. This is + achieved via an implementation of `if` that looks like this: + + ```js + registerHelper('if', function(params) { + if (!!params[0]) { + return this.yield(); + } + }); + ``` + + A call to `this.yield` invokes the child template using the + current lexical environment. + + ## Block Arguments + + It is possible for nested blocks to introduce new local + variables: + + ```hbs + {{#count-calls as |i|}} + <h1>{{title}}</h1> + <p>Called {{i}} times</p> + {{/count}} + ``` + + In this example, the child block inherits its surrounding + lexical environment, but augments it with a single new + variable binding. + + The implementation of `count-calls` supplies the value of + `i`, but does not otherwise alter the environment: + + ```js + var count = 0; + registerHelper('count-calls', function() { + return this.yield([ ++count ]); + }); + ``` + */ - CompiledPositionalArgs.empty = function empty() { - return COMPILED_EMPTY_POSITIONAL_ARGS; - }; + function wrap(template) { + if (template === null) { + return null; + } - CompiledPositionalArgs.prototype.evaluate = function evaluate(vm) { - var values = this.values; - var length = this.length; + return { + meta: template.meta, + arity: template.arity, + raw: template, + render: function (self, env, options, blockArguments) { + var scope = env.hooks.createFreshScope(); - var references = new Array(length); - for (var i = 0; i < length; i++) { - references[i] = values[i].evaluate(vm); - } - return EvaluatedPositionalArgs.create(references); - }; + var contextualElement = options && options.contextualElement; + var renderOptions = new _htmlbarsRuntimeRender.RenderOptions(null, self, blockArguments, contextualElement); - CompiledPositionalArgs.prototype.toJSON = function toJSON() { - return '[' + this.values.map(function (value) { - return value.toJSON(); - }).join(", ") + ']'; - }; + return _htmlbarsRuntimeRender.default(template, env, scope, renderOptions); + } + }; + } - return CompiledPositionalArgs; - })(); + function wrapForHelper(template, env, scope, morph, renderState, visitor) { + if (!template) { + return {}; + } - exports.CompiledPositionalArgs = CompiledPositionalArgs; - var COMPILED_EMPTY_POSITIONAL_ARGS = new ((function (_CompiledPositionalArgs) { - babelHelpers.inherits(_class, _CompiledPositionalArgs); + var yieldArgs = yieldTemplate(template, env, scope, morph, renderState, visitor); - function _class() { - _CompiledPositionalArgs.call(this, _glimmerRuntimeLibUtils.EMPTY_ARRAY); - } + return { + meta: template.meta, + arity: template.arity, + 'yield': yieldArgs, // quoted since it's a reserved word, see issue #420 + yieldItem: yieldItem(template, env, scope, morph, renderState, visitor), + raw: template, - _class.prototype.evaluate = function evaluate(vm) { - return EVALUATED_EMPTY_POSITIONAL_ARGS; - }; + render: function (self, blockArguments) { + yieldArgs(blockArguments, self); + } + }; + } - _class.prototype.toJSON = function toJSON() { - return '<EMPTY>'; - }; + // Called by a user-land helper to render a template. + function yieldTemplate(template, env, parentScope, morph, renderState, visitor) { + return function (blockArguments, self) { + // Render state is used to track the progress of the helper (since it + // may call into us multiple times). As the user-land helper calls + // into library code, we track what needs to be cleaned up after the + // helper has returned. + // + // Here, we remember that a template has been yielded and so we do not + // need to remove the previous template. (If no template is yielded + // this render by the helper, we assume nothing should be shown and + // remove any previous rendered templates.) + renderState.morphToClear = null; - return _class; - })(CompiledPositionalArgs))(); - exports.COMPILED_EMPTY_POSITIONAL_ARGS = COMPILED_EMPTY_POSITIONAL_ARGS; + // In this conditional is true, it means that on the previous rendering pass + // the helper yielded multiple items via `yieldItem()`, but this time they + // are yielding a single template. In that case, we mark the morph list for + // cleanup so it is removed from the DOM. + if (morph.morphList) { + _htmlbarsUtilTemplateUtils.clearMorphList(morph.morphList, morph, env); + renderState.morphListToClear = null; + } - var EvaluatedPositionalArgs = (function () { - function EvaluatedPositionalArgs(values) { - this.values = values; - this.tag = _glimmerReference.combineTagged(values); - this.length = values.length; - } + var scope = parentScope; - EvaluatedPositionalArgs.create = function create(values) { - return new this(values); - }; + if (morph.lastYielded && isStableTemplate(template, morph.lastYielded)) { + return morph.lastResult.revalidateWith(env, undefined, self, blockArguments, visitor); + } - EvaluatedPositionalArgs.empty = function empty() { - return EVALUATED_EMPTY_POSITIONAL_ARGS; - }; + // Check to make sure that we actually **need** a new scope, and can't + // share the parent scope. Note that we need to move this check into + // a host hook, because the host's notion of scope may require a new + // scope in more cases than the ones we can determine statically. + if (self !== undefined || parentScope === null || template.arity) { + scope = env.hooks.createChildScope(parentScope); + } - EvaluatedPositionalArgs.prototype.at = function at(index) { - var values = this.values; - var length = this.length; + morph.lastYielded = { self: self, template: template, shadowTemplate: null }; - return index < length ? values[index] : _glimmerRuntimeLibReferences.UNDEFINED_REFERENCE; - }; + // Render the template that was selected by the helper + var renderOptions = new _htmlbarsRuntimeRender.RenderOptions(morph, self, blockArguments); + _htmlbarsRuntimeRender.default(template, env, scope, renderOptions); + }; + } - EvaluatedPositionalArgs.prototype.value = function value() { - var values = this.values; - var length = this.length; + function yieldItem(template, env, parentScope, morph, renderState, visitor) { + // Initialize state that tracks multiple items being + // yielded in. + var currentMorph = null; - var ret = new Array(length); - for (var i = 0; i < length; i++) { - ret[i] = values[i].value(); - } - return ret; - }; + // Candidate morphs for deletion. + var candidates = {}; - return EvaluatedPositionalArgs; - })(); + // Reuse existing MorphList if this is not a first-time + // render. + var morphList = morph.morphList; + if (morphList) { + currentMorph = morphList.firstChildMorph; + } - exports.EvaluatedPositionalArgs = EvaluatedPositionalArgs; - var EVALUATED_EMPTY_POSITIONAL_ARGS = new ((function (_EvaluatedPositionalArgs) { - babelHelpers.inherits(_class2, _EvaluatedPositionalArgs); + // Advances the currentMorph pointer to the morph in the previously-rendered + // list that matches the yielded key. While doing so, it marks any morphs + // that it advances past as candidates for deletion. Assuming those morphs + // are not yielded in later, they will be removed in the prune step during + // cleanup. + // Note that this helper function assumes that the morph being seeked to is + // guaranteed to exist in the previous MorphList; if this is called and the + // morph does not exist, it will result in an infinite loop + function advanceToKey(key) { + var seek = currentMorph; - function _class2() { - _EvaluatedPositionalArgs.call(this, _glimmerRuntimeLibUtils.EMPTY_ARRAY); - } + while (seek.key !== key) { + candidates[seek.key] = seek; + seek = seek.nextMorph; + } - _class2.prototype.at = function at() { - return _glimmerRuntimeLibReferences.UNDEFINED_REFERENCE; - }; + currentMorph = seek.nextMorph; + return seek; + } - _class2.prototype.value = function value() { - return this.values; - }; + return function (_key, blockArguments, self) { + if (typeof _key !== 'string') { + throw new Error("You must provide a string key when calling `yieldItem`; you provided " + _key); + } - return _class2; - })(EvaluatedPositionalArgs))(); - exports.EVALUATED_EMPTY_POSITIONAL_ARGS = EVALUATED_EMPTY_POSITIONAL_ARGS; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvZXhwcmVzc2lvbnMvcG9zaXRpb25hbC1hcmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztRQU9BLHNCQUFBO0FBZUUsaUJBZkYsc0JBQUEsQ0FlcUIsTUFBb0MsRUFBQTtBQUFwQyxnQkFBQSxDQUFBLE1BQU0sR0FBTixNQUFNLENBQThCO0FBQ3JELGdCQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDN0I7O0FBakJILDhCQUFBLENBQ1MsTUFBTSxHQUFBLGdCQUFDLE1BQW9DLEVBQUE7QUFDaEQsZ0JBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUNqQix1QkFBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN6QixNQUFNO0FBQ0wsdUJBQU8sOEJBQThCLENBQUM7YUFDdkM7U0FDRjs7QUFQSCw4QkFBQSxDQVNTLEtBQUssR0FBQSxpQkFBQTtBQUNWLG1CQUFPLDhCQUE4QixDQUFDO1NBQ3ZDOztBQVhILDhCQUFBLFdBbUJFLFFBQVEsR0FBQSxrQkFBQyxFQUFNLEVBQUE7Z0JBQ1AsTUFBTSxHQUFhLElBQUksQ0FBdkIsTUFBTTtnQkFBRSxNQUFNLEdBQUssSUFBSSxDQUFmLE1BQU07O0FBQ3BCLGdCQUFJLFVBQVUsR0FBNEIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFNUQsaUJBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0IsMEJBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3hDO0FBRUQsbUJBQU8sdUJBQXVCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ25EOztBQTVCSCw4QkFBQSxXQThCRSxNQUFNLEdBQUEsa0JBQUE7QUFDSix5QkFBVyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFBLEtBQUs7dUJBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTthQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQUk7U0FDbkU7O2VBaENILHNCQUFBOzs7O0FBbUNPLFFBQU0sOEJBQThCLEdBQTJCOzs7QUFDcEUsMEJBQUE7QUFDRSx1RUF6Q0ssV0FBVyxDQXlDRSxDQUFDO1NBQ3BCOzt5QkFFRCxRQUFRLEdBQUEsa0JBQUMsRUFBTSxFQUFBO0FBQ2IsbUJBQU8sK0JBQStCLENBQUM7U0FDeEM7O3lCQUVELE1BQU0sR0FBQSxrQkFBQTtBQUNKLDZCQUFpQjtTQUNsQjs7O09BWHNGLHNCQUFzQixJQVk3RyxDQUFDOzs7UUFFSCx1QkFBQTtBQVlFLGlCQVpGLHVCQUFBLENBWXFCLE1BQStCLEVBQUE7QUFBL0IsZ0JBQUEsQ0FBQSxNQUFNLEdBQU4sTUFBTSxDQUF5QjtBQUNoRCxnQkFBSSxDQUFDLEdBQUcsR0FBRyxrQkFqRXNCLGFBQWEsQ0FpRXJCLE1BQU0sQ0FBQyxDQUFDO0FBQ2pDLGdCQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDN0I7O0FBZkgsK0JBQUEsQ0FDUyxNQUFNLEdBQUEsZ0JBQUMsTUFBK0IsRUFBQTtBQUMzQyxtQkFBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN6Qjs7QUFISCwrQkFBQSxDQUtTLEtBQUssR0FBQSxpQkFBQTtBQUNWLG1CQUFPLCtCQUErQixDQUFDO1NBQ3hDOztBQVBILCtCQUFBLFdBaUJFLEVBQUUsR0FBQSxZQUFDLEtBQWEsRUFBQTtnQkFDUixNQUFNLEdBQWEsSUFBSSxDQUF2QixNQUFNO2dCQUFFLE1BQU0sR0FBSyxJQUFJLENBQWYsTUFBTTs7QUFDcEIsbUJBQU8sQUFBQyxLQUFLLEdBQUcsTUFBTSxHQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0NBM0VsQyxtQkFBbUIsQUEyRXFDLENBQUM7U0FDL0Q7O0FBcEJILCtCQUFBLFdBc0JFLEtBQUssR0FBQSxpQkFBQTtnQkFDRyxNQUFNLEdBQWEsSUFBSSxDQUF2QixNQUFNO2dCQUFFLE1BQU0sR0FBSyxJQUFJLENBQWYsTUFBTTs7QUFDcEIsZ0JBQUksR0FBRyxHQUFhLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRXRDLGlCQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9CLG1CQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzVCO0FBRUQsbUJBQU8sR0FBRyxDQUFDO1NBQ1o7O2VBL0JILHVCQUFBOzs7O0FBa0NPLFFBQU0sK0JBQStCLEdBQTRCOzs7QUFDdEUsMkJBQUE7QUFDRSx3RUF6RkssV0FBVyxDQXlGRSxDQUFDO1NBQ3BCOzswQkFFRCxFQUFFLEdBQUEsY0FBQTtBQUNBLGdEQWhHSyxtQkFBbUIsQ0FnR0c7U0FDNUI7OzBCQUVELEtBQUssR0FBQSxpQkFBQTtBQUNILG1CQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDcEI7OztPQVh3Rix1QkFBdUIsSUFZaEgsQ0FBQyIsImZpbGUiOiJwb3NpdGlvbmFsLWFyZ3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVTkRFRklORURfUkVGRVJFTkNFIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcyc7XG5pbXBvcnQgeyBDb21waWxlZEV4cHJlc3Npb24gfSBmcm9tICcuLi9leHByZXNzaW9ucyc7XG5pbXBvcnQgVk0gZnJvbSAnLi4vLi4vdm0vYXBwZW5kJztcbmltcG9ydCB7IEVNUFRZX0FSUkFZIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgUGF0aFJlZmVyZW5jZSwgUmV2aXNpb25UYWcsIGNvbWJpbmVUYWdnZWQgfSBmcm9tICdnbGltbWVyLXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBPcGFxdWUgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ29tcGlsZWRQb3NpdGlvbmFsQXJncyB7XG4gIHN0YXRpYyBjcmVhdGUodmFsdWVzOiBDb21waWxlZEV4cHJlc3Npb248T3BhcXVlPltdKTogQ29tcGlsZWRQb3NpdGlvbmFsQXJncyB7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgdGhpcyh2YWx1ZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gQ09NUElMRURfRU1QVFlfUE9TSVRJT05BTF9BUkdTO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBlbXB0eSgpIHtcbiAgICByZXR1cm4gQ09NUElMRURfRU1QVFlfUE9TSVRJT05BTF9BUkdTO1xuICB9XG5cbiAgcHVibGljIGxlbmd0aDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZXM6IENvbXBpbGVkRXhwcmVzc2lvbjxPcGFxdWU+W10pIHtcbiAgICB0aGlzLmxlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pOiBFdmFsdWF0ZWRQb3NpdGlvbmFsQXJncyB7XG4gICAgbGV0IHsgdmFsdWVzLCBsZW5ndGggfSA9IHRoaXM7XG4gICAgbGV0IHJlZmVyZW5jZXM6IFBhdGhSZWZlcmVuY2U8T3BhcXVlPltdID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZWZlcmVuY2VzW2ldID0gdmFsdWVzW2ldLmV2YWx1YXRlKHZtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gRXZhbHVhdGVkUG9zaXRpb25hbEFyZ3MuY3JlYXRlKHJlZmVyZW5jZXMpO1xuICB9XG5cbiAgdG9KU09OKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBbJHt0aGlzLnZhbHVlcy5tYXAodmFsdWUgPT4gdmFsdWUudG9KU09OKCkpLmpvaW4oXCIsIFwiKX1dYDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQ09NUElMRURfRU1QVFlfUE9TSVRJT05BTF9BUkdTOiBDb21waWxlZFBvc2l0aW9uYWxBcmdzID0gbmV3IChjbGFzcyBleHRlbmRzIENvbXBpbGVkUG9zaXRpb25hbEFyZ3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihFTVBUWV9BUlJBWSk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pOiBFdmFsdWF0ZWRQb3NpdGlvbmFsQXJncyB7XG4gICAgcmV0dXJuIEVWQUxVQVRFRF9FTVBUWV9QT1NJVElPTkFMX0FSR1M7XG4gIH1cblxuICB0b0pTT04oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYDxFTVBUWT5gO1xuICB9XG59KTtcblxuZXhwb3J0IGNsYXNzIEV2YWx1YXRlZFBvc2l0aW9uYWxBcmdzIHtcbiAgc3RhdGljIGNyZWF0ZSh2YWx1ZXM6IFBhdGhSZWZlcmVuY2U8T3BhcXVlPltdKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKHZhbHVlcyk7XG4gIH1cblxuICBzdGF0aWMgZW1wdHkoKTogRXZhbHVhdGVkUG9zaXRpb25hbEFyZ3Mge1xuICAgIHJldHVybiBFVkFMVUFURURfRU1QVFlfUE9TSVRJT05BTF9BUkdTO1xuICB9XG5cbiAgcHVibGljIHRhZzogUmV2aXNpb25UYWc7XG4gIHB1YmxpYyBsZW5ndGg6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmFsdWVzOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT5bXSkge1xuICAgIHRoaXMudGFnID0gY29tYmluZVRhZ2dlZCh2YWx1ZXMpO1xuICAgIHRoaXMubGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcbiAgfVxuXG4gIGF0KGluZGV4OiBudW1iZXIpOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4ge1xuICAgIGxldCB7IHZhbHVlcywgbGVuZ3RoIH0gPSB0aGlzO1xuICAgIHJldHVybiAoaW5kZXggPCBsZW5ndGgpID8gdmFsdWVzW2luZGV4XSA6IFVOREVGSU5FRF9SRUZFUkVOQ0U7XG4gIH1cblxuICB2YWx1ZSgpOiBPcGFxdWVbXSB7XG4gICAgbGV0IHsgdmFsdWVzLCBsZW5ndGggfSA9IHRoaXM7XG4gICAgbGV0IHJldDogT3BhcXVlW10gPSBuZXcgQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHJldFtpXSA9IHZhbHVlc1tpXS52YWx1ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEVWQUxVQVRFRF9FTVBUWV9QT1NJVElPTkFMX0FSR1M6IEV2YWx1YXRlZFBvc2l0aW9uYWxBcmdzID0gbmV3IChjbGFzcyBleHRlbmRzIEV2YWx1YXRlZFBvc2l0aW9uYWxBcmdzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoRU1QVFlfQVJSQVkpO1xuICB9XG5cbiAgYXQoKTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+IHtcbiAgICByZXR1cm4gVU5ERUZJTkVEX1JFRkVSRU5DRTtcbiAgfVxuXG4gIHZhbHVlKCk6IE9wYXF1ZVtdIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cbn0pO1xuIl19 -enifed('glimmer-runtime/lib/compiled/expressions/value', ['exports', 'glimmer-runtime/lib/compiled/expressions', 'glimmer-reference', 'glimmer-util'], function (exports, _glimmerRuntimeLibCompiledExpressions, _glimmerReference, _glimmerUtil) { - 'use strict'; + // At least one item has been yielded, so we do not wholesale + // clear the last MorphList but instead apply a prune operation. + renderState.morphListToClear = null; + morph.lastYielded = null; - var CompiledValue = (function (_CompiledExpression) { - babelHelpers.inherits(CompiledValue, _CompiledExpression); + var morphList, morphMap; - function CompiledValue(value) { - _CompiledExpression.call(this); - this.type = "value"; - this.reference = new ValueReference(value); - } + if (!morph.morphList) { + morph.morphList = new _morphRangeMorphList.default(); + morph.morphMap = {}; + morph.setMorphList(morph.morphList); + } - CompiledValue.prototype.evaluate = function evaluate(vm) { - return this.reference; - }; + morphList = morph.morphList; + morphMap = morph.morphMap; - CompiledValue.prototype.toJSON = function toJSON() { - return JSON.stringify(this.reference.value()); - }; + // A map of morphs that have been yielded in on this + // rendering pass. Any morphs that do not make it into + // this list will be pruned from the MorphList during the cleanup + // process. + var handledMorphs = renderState.handledMorphs; + var key = undefined; - return CompiledValue; - })(_glimmerRuntimeLibCompiledExpressions.CompiledExpression); - - exports.default = CompiledValue; - - var ValueReference = (function (_ConstReference) { - babelHelpers.inherits(ValueReference, _ConstReference); - - function ValueReference() { - _ConstReference.apply(this, arguments); - this.children = _glimmerUtil.dict(); + if (_key in handledMorphs) { + // In this branch we are dealing with a duplicate key. The strategy + // is to take the original key and append a counter to it that is + // incremented every time the key is reused. In order to greatly + // reduce the chance of colliding with another valid key we also add + // an extra string "--z8mS2hvDW0A--" to the new key. + var collisions = renderState.collisions; + if (collisions === undefined) { + collisions = renderState.collisions = {}; } + var count = collisions[_key] | 0; + collisions[_key] = ++count; - ValueReference.prototype.get = function get(key) { - var children = this.children; + key = _key + '--z8mS2hvDW0A--' + count; + } else { + key = _key; + } - var child = children[key]; - if (!child) { - child = children[key] = new ValueReference(this.inner[key]); - } - return child; - }; + if (currentMorph && currentMorph.key === key) { + yieldTemplate(template, env, parentScope, currentMorph, renderState, visitor)(blockArguments, self); + currentMorph = currentMorph.nextMorph; + handledMorphs[key] = currentMorph; + } else if (morphMap[key] !== undefined) { + var foundMorph = morphMap[key]; - ValueReference.prototype.value = function value() { - return this.inner; - }; - - return ValueReference; - })(_glimmerReference.ConstReference); - - exports.ValueReference = ValueReference; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvZXhwcmVzc2lvbnMvdmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O1FBS0EsYUFBQTs4QkFBQSxhQUFBOztBQUlFLGlCQUpGLGFBQUEsQ0FJYyxLQUFVLEVBQUE7QUFDcEIsMENBQU8sQ0FBQztBQUpILGdCQUFBLENBQUEsSUFBSSxHQUFHLE9BQU8sQ0FBQztBQUtwQixnQkFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1Qzs7QUFQSCxxQkFBQSxXQVNFLFFBQVEsR0FBQSxrQkFBQyxFQUFNLEVBQUE7QUFDYixtQkFBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQ3ZCOztBQVhILHFCQUFBLFdBYUUsTUFBTSxHQUFBLGtCQUFBO0FBQ0osbUJBQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDL0M7O2VBZkgsYUFBQTs2Q0FKUyxrQkFBa0I7O3NCQUkzQixhQUFBOztRQWtCQSxjQUFBOzhCQUFBLGNBQUE7O0FBQUEsaUJBQUEsY0FBQSxHQUFBO0FBQXVDLHdDQUFBLFNBQUEsQ0FBQSxDQUFpQjtBQUU1QyxnQkFBQSxDQUFBLFFBQVEsR0FBOEIsYUF0Qm5DLElBQUksRUFzQjBELENBQUM7U0FjN0U7O0FBaEJELHNCQUFBLFdBSUUsR0FBRyxHQUFBLGFBQUMsR0FBVyxFQUFBO2dCQUNQLFFBQVEsR0FBSyxJQUFJLENBQWpCLFFBQVE7O0FBQ2QsZ0JBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUUxQixnQkFBSSxDQUFDLEtBQUssRUFBRTtBQUNWLHFCQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUM3RDtBQUVELG1CQUFPLEtBQUssQ0FBQztTQUNkOztBQWJILHNCQUFBLFdBZUUsS0FBSyxHQUFBLGlCQUFBO0FBQVUsbUJBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztTQUFFOztlQWZyQyxjQUFBO3lCQXJCUyxjQUFjIiwiZmlsZSI6InZhbHVlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVk0gfSBmcm9tICcuLi8uLi92bSc7XG5pbXBvcnQgeyBDb21waWxlZEV4cHJlc3Npb24gfSBmcm9tICcuLi9leHByZXNzaW9ucyc7XG5pbXBvcnQgeyBDb25zdFJlZmVyZW5jZSwgUGF0aFJlZmVyZW5jZSB9IGZyb20gJ2dsaW1tZXItcmVmZXJlbmNlJztcbmltcG9ydCB7IERpY3QsIGRpY3QgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21waWxlZFZhbHVlPFQ+IGV4dGVuZHMgQ29tcGlsZWRFeHByZXNzaW9uPFQ+IHtcbiAgcHVibGljIHR5cGUgPSBcInZhbHVlXCI7XG4gIHByaXZhdGUgcmVmZXJlbmNlOiBWYWx1ZVJlZmVyZW5jZTxUPjtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogYW55KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnJlZmVyZW5jZSA9IG5ldyBWYWx1ZVJlZmVyZW5jZSh2YWx1ZSk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pOiBQYXRoUmVmZXJlbmNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2U7XG4gIH1cblxuICB0b0pTT04oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5yZWZlcmVuY2UudmFsdWUoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZhbHVlUmVmZXJlbmNlPFQ+IGV4dGVuZHMgQ29uc3RSZWZlcmVuY2U8VD4gaW1wbGVtZW50cyBQYXRoUmVmZXJlbmNlPFQ+IHtcbiAgcHJvdGVjdGVkIGlubmVyOiBUO1xuICBwcm90ZWN0ZWQgY2hpbGRyZW46IERpY3Q8VmFsdWVSZWZlcmVuY2U8YW55Pj4gPSBkaWN0PFZhbHVlUmVmZXJlbmNlPGFueT4+KCk7XG5cbiAgZ2V0KGtleTogc3RyaW5nKSB7XG4gICAgbGV0IHsgY2hpbGRyZW4gfSA9IHRoaXM7XG4gICAgbGV0IGNoaWxkID0gY2hpbGRyZW5ba2V5XTtcblxuICAgIGlmICghY2hpbGQpIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5ba2V5XSA9IG5ldyBWYWx1ZVJlZmVyZW5jZSh0aGlzLmlubmVyW2tleV0pO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHZhbHVlKCk6IGFueSB7IHJldHVybiB0aGlzLmlubmVyOyB9XG59XG4iXX0= -enifed('glimmer-runtime/lib/compiled/opcodes/builder', ['exports', 'glimmer-runtime/lib/compiled/opcodes/component', 'glimmer-runtime/lib/compiled/opcodes/partial', 'glimmer-runtime/lib/compiled/opcodes/content', 'glimmer-runtime/lib/compiled/opcodes/dom', 'glimmer-runtime/lib/compiled/opcodes/lists', 'glimmer-runtime/lib/compiled/opcodes/vm', 'glimmer-util', 'glimmer-runtime/lib/utils'], function (exports, _glimmerRuntimeLibCompiledOpcodesComponent, _glimmerRuntimeLibCompiledOpcodesPartial, _glimmerRuntimeLibCompiledOpcodesContent, _glimmerRuntimeLibCompiledOpcodesDom, _glimmerRuntimeLibCompiledOpcodesLists, _glimmerRuntimeLibCompiledOpcodesVm, _glimmerUtil, _glimmerRuntimeLibUtils) { - 'use strict'; - - var StatementCompilationBufferProxy = (function () { - function StatementCompilationBufferProxy(inner) { - this.inner = inner; + if (key in candidates) { + // If we already saw this morph, move it forward to this position + morphList.insertBeforeMorph(foundMorph, currentMorph); + } else { + // Otherwise, move the pointer forward to the existing morph for this key + advanceToKey(key); } - StatementCompilationBufferProxy.prototype.toOpSeq = function toOpSeq() { - return this.inner.toOpSeq(); - }; + handledMorphs[foundMorph.key] = foundMorph; + yieldTemplate(template, env, parentScope, foundMorph, renderState, visitor)(blockArguments, self); + } else { + var childMorph = _htmlbarsRuntimeRender.createChildMorph(env.dom, morph); + childMorph.key = key; + morphMap[key] = handledMorphs[key] = childMorph; + morphList.insertBeforeMorph(childMorph, currentMorph); + yieldTemplate(template, env, parentScope, childMorph, renderState, visitor)(blockArguments, self); + } - StatementCompilationBufferProxy.prototype.append = function append(opcode) { - this.inner.append(opcode); - }; + renderState.morphListToPrune = morphList; + morph.childNodes = null; + }; + } - StatementCompilationBufferProxy.prototype.getLocalSymbol = function getLocalSymbol(name) { - return this.inner.getLocalSymbol(name); - }; + function isStableTemplate(template, lastYielded) { + return !lastYielded.shadowTemplate && template === lastYielded.template; + } + function optionsFor(template, inverse, env, scope, morph, visitor) { + // If there was a template yielded last time, set morphToClear so it will be cleared + // if no template is yielded on this render. + var morphToClear = morph.lastResult ? morph : null; + var renderState = new _htmlbarsUtilTemplateUtils.RenderState(morphToClear, morph.morphList || null); - StatementCompilationBufferProxy.prototype.hasLocalSymbol = function hasLocalSymbol(name) { - return this.inner.hasLocalSymbol(name); - }; + return { + templates: { + template: wrapForHelper(template, env, scope, morph, renderState, visitor), + inverse: wrapForHelper(inverse, env, scope, morph, renderState, visitor) + }, + renderState: renderState + }; + } - StatementCompilationBufferProxy.prototype.getNamedSymbol = function getNamedSymbol(name) { - return this.inner.getNamedSymbol(name); - }; + function thisFor(options) { + return { + arity: options.template.arity, + 'yield': options.template.yield, // quoted since it's a reserved word, see issue #420 + yieldItem: options.template.yieldItem, + yieldIn: options.template.yieldIn + }; + } - StatementCompilationBufferProxy.prototype.hasNamedSymbol = function hasNamedSymbol(name) { - return this.inner.hasNamedSymbol(name); - }; + /** + Host Hook: createScope + + @param {Scope?} parentScope + @return Scope + + Corresponds to entering a new HTMLBars block. + + This hook is invoked when a block is entered with + a new `self` or additional local variables. + + When invoked for a top-level template, the + `parentScope` is `null`, and this hook should return + a fresh Scope. + + When invoked for a child template, the `parentScope` + is the scope for the parent environment. + + Note that the `Scope` is an opaque value that is + passed to other host hooks. For example, the `get` + hook uses the scope to retrieve a value for a given + scope and variable name. + */ - StatementCompilationBufferProxy.prototype.getBlockSymbol = function getBlockSymbol(name) { - return this.inner.getBlockSymbol(name); - }; + function createScope(env, parentScope) { + if (parentScope) { + return env.hooks.createChildScope(parentScope); + } else { + return env.hooks.createFreshScope(); + } + } - StatementCompilationBufferProxy.prototype.hasBlockSymbol = function hasBlockSymbol(name) { - return this.inner.hasBlockSymbol(name); - }; + function createFreshScope() { + // because `in` checks have unpredictable performance, keep a + // separate dictionary to track whether a local was bound. + // See `bindLocal` for more information. + return { self: null, blocks: {}, locals: {}, localPresent: {} }; + } - StatementCompilationBufferProxy.prototype.getPartialArgsSymbol = function getPartialArgsSymbol() { - return this.inner.getPartialArgsSymbol(); - }; + /** + Host Hook: bindShadowScope + + @param {Scope?} parentScope + @return Scope + + Corresponds to rendering a new template into an existing + render tree, but with a new top-level lexical scope. This + template is called the "shadow root". + + If a shadow template invokes `{{yield}}`, it will render + the block provided to the shadow root in the original + lexical scope. + + ```hbs + {{!-- post template --}} + <p>{{props.title}}</p> + {{yield}} + + {{!-- blog template --}} + {{#post title="Hello world"}} + <p>by {{byline}}</p> + <article>This is my first post</article> + {{/post}} + + {{#post title="Goodbye world"}} + <p>by {{byline}}</p> + <article>This is my last post</article> + {{/post}} + ``` + + ```js + helpers.post = function(params, hash, options) { + options.template.yieldIn(postTemplate, { props: hash }); + }; + + blog.render({ byline: "Yehuda Katz" }); + ``` + + Produces: + + ```html + <p>Hello world</p> + <p>by Yehuda Katz</p> + <article>This is my first post</article> + + <p>Goodbye world</p> + <p>by Yehuda Katz</p> + <article>This is my last post</article> + ``` + + In short, `yieldIn` creates a new top-level scope for the + provided template and renders it, making the original block + available to `{{yield}}` in that template. + */ - StatementCompilationBufferProxy.prototype.hasPartialArgsSymbol = function hasPartialArgsSymbol() { - return this.inner.hasPartialArgsSymbol(); - }; + function bindShadowScope(env /*, parentScope, shadowScope */) { + return env.hooks.createFreshScope(); + } - babelHelpers.createClass(StatementCompilationBufferProxy, [{ - key: 'component', - get: function () { - return this.inner.component; - } - }]); - return StatementCompilationBufferProxy; - })(); + function createChildScope(parent) { + var scope = Object.create(parent); + scope.locals = Object.create(parent.locals); + scope.localPresent = Object.create(parent.localPresent); + scope.blocks = Object.create(parent.blocks); + return scope; + } - exports.StatementCompilationBufferProxy = StatementCompilationBufferProxy; + /** + Host Hook: bindSelf + + @param {Scope} scope + @param {any} self + + Corresponds to entering a template. + + This hook is invoked when the `self` value for a scope is ready to be bound. + + The host must ensure that child scopes reflect the change to the `self` in + future calls to the `get` hook. + */ - var BasicOpcodeBuilder = (function (_StatementCompilationBufferProxy) { - babelHelpers.inherits(BasicOpcodeBuilder, _StatementCompilationBufferProxy); + function bindSelf(env, scope, self) { + scope.self = self; + } - function BasicOpcodeBuilder(inner, symbolTable, env) { - _StatementCompilationBufferProxy.call(this, inner); - this.symbolTable = symbolTable; - this.env = env; - this.labelsStack = new _glimmerUtil.Stack(); - this.templatesStack = new _glimmerUtil.Stack(); - } + function updateSelf(env, scope, self) { + env.hooks.bindSelf(env, scope, self); + } - // helpers + /** + Host Hook: bindLocal + + @param {Environment} env + @param {Scope} scope + @param {String} name + @param {any} value + + Corresponds to entering a template with block arguments. + + This hook is invoked when a local variable for a scope has been provided. + + The host must ensure that child scopes reflect the change in future calls + to the `get` hook. + */ - BasicOpcodeBuilder.prototype.startBlock = function startBlock(templates) { - this.templatesStack.push(templates); - }; + function bindLocal(env, scope, name, value) { + scope.localPresent[name] = true; + scope.locals[name] = value; + } - BasicOpcodeBuilder.prototype.endBlock = function endBlock() { - this.templatesStack.pop(); - }; + function updateLocal(env, scope, name, value) { + env.hooks.bindLocal(env, scope, name, value); + } - BasicOpcodeBuilder.prototype.startLabels = function startLabels() { - this.labelsStack.push(_glimmerUtil.dict()); - }; + /** + Host Hook: bindBlock + + @param {Environment} env + @param {Scope} scope + @param {Function} block + + Corresponds to entering a shadow template that was invoked by a block helper with + `yieldIn`. + + This hook is invoked with an opaque block that will be passed along + to the shadow template, and inserted into the shadow template when + `{{yield}}` is used. Optionally provide a non-default block name + that can be targeted by `{{yield to=blockName}}`. + */ - BasicOpcodeBuilder.prototype.stopLabels = function stopLabels() { - this.labelsStack.pop(); - }; + function bindBlock(env, scope, block) { + var name = arguments.length <= 3 || arguments[3] === undefined ? 'default' : arguments[3]; - BasicOpcodeBuilder.prototype.labelFor = function labelFor(name) { - var labels = this.labels; - var label = labels[name]; - if (!label) { - label = labels[name] = new _glimmerRuntimeLibCompiledOpcodesVm.LabelOpcode(name); - } - return label; - }; + scope.blocks[name] = block; + } - // partials + /** + Host Hook: block + + @param {RenderNode} renderNode + @param {Environment} env + @param {Scope} scope + @param {String} path + @param {Array} params + @param {Object} hash + @param {Block} block + @param {Block} elseBlock + + Corresponds to: + + ```hbs + {{#helper param1 param2 key1=val1 key2=val2}} + {{!-- child template --}} + {{/helper}} + ``` + + This host hook is a workhorse of the system. It is invoked + whenever a block is encountered, and is responsible for + resolving the helper to call, and then invoke it. + + The helper should be invoked with: + + - `{Array} params`: the parameters passed to the helper + in the template. + - `{Object} hash`: an object containing the keys and values passed + in the hash position in the template. + + The values in `params` and `hash` will already be resolved + through a previous call to the `get` host hook. + + The helper should be invoked with a `this` value that is + an object with one field: + + `{Function} yield`: when invoked, this function executes the + block with the current scope. It takes an optional array of + block parameters. If block parameters are supplied, HTMLBars + will invoke the `bindLocal` host hook to bind the supplied + values to the block arguments provided by the template. + + In general, the default implementation of `block` should work + for most host environments. It delegates to other host hooks + where appropriate, and properly invokes the helper with the + appropriate arguments. + */ - BasicOpcodeBuilder.prototype.putPartialDefinition = function putPartialDefinition(definition) { - this.append(new _glimmerRuntimeLibCompiledOpcodesPartial.PutPartialDefinitionOpcode(definition)); - }; - - BasicOpcodeBuilder.prototype.putDynamicPartialDefinition = function putDynamicPartialDefinition() { - this.append(new _glimmerRuntimeLibCompiledOpcodesPartial.PutDynamicPartialDefinitionOpcode(this.symbolTable)); - }; - - BasicOpcodeBuilder.prototype.evaluatePartial = function evaluatePartial() { - this.append(new _glimmerRuntimeLibCompiledOpcodesPartial.EvaluatePartialOpcode(this.symbolTable)); - }; - - // components - - BasicOpcodeBuilder.prototype.putComponentDefinition = function putComponentDefinition(definition) { - this.append(new _glimmerRuntimeLibCompiledOpcodesComponent.PutComponentDefinitionOpcode(definition)); - }; - - BasicOpcodeBuilder.prototype.putDynamicComponentDefinition = function putDynamicComponentDefinition() { - this.append(new _glimmerRuntimeLibCompiledOpcodesComponent.PutDynamicComponentDefinitionOpcode()); - }; - - BasicOpcodeBuilder.prototype.openComponent = function openComponent(args) { - var shadow = arguments.length <= 1 || arguments[1] === undefined ? _glimmerRuntimeLibUtils.EMPTY_ARRAY : arguments[1]; - - this.append(new _glimmerRuntimeLibCompiledOpcodesComponent.OpenComponentOpcode(this.compile(args), shadow, this.templates)); - }; - - BasicOpcodeBuilder.prototype.didCreateElement = function didCreateElement() { - this.append(new _glimmerRuntimeLibCompiledOpcodesComponent.DidCreateElementOpcode()); - }; - - BasicOpcodeBuilder.prototype.shadowAttributes = function shadowAttributes() { - this.append(new _glimmerRuntimeLibCompiledOpcodesComponent.ShadowAttributesOpcode()); - }; - - BasicOpcodeBuilder.prototype.didRenderLayout = function didRenderLayout() { - this.append(new _glimmerRuntimeLibCompiledOpcodesComponent.DidRenderLayoutOpcode()); - }; - - BasicOpcodeBuilder.prototype.closeComponent = function closeComponent() { - this.append(new _glimmerRuntimeLibCompiledOpcodesComponent.CloseComponentOpcode()); - }; - - // content - - BasicOpcodeBuilder.prototype.cautiousAppend = function cautiousAppend() { - this.append(new _glimmerRuntimeLibCompiledOpcodesContent.OptimizedCautiousAppendOpcode()); - }; - - BasicOpcodeBuilder.prototype.trustingAppend = function trustingAppend() { - this.append(new _glimmerRuntimeLibCompiledOpcodesContent.OptimizedTrustingAppendOpcode()); - }; - - // dom - - BasicOpcodeBuilder.prototype.text = function text(_text) { - this.append(new _glimmerRuntimeLibCompiledOpcodesDom.TextOpcode(_text)); - }; - - BasicOpcodeBuilder.prototype.openPrimitiveElement = function openPrimitiveElement(tag) { - this.append(new _glimmerRuntimeLibCompiledOpcodesDom.OpenPrimitiveElementOpcode(tag)); - }; - - BasicOpcodeBuilder.prototype.openComponentElement = function openComponentElement(tag) { - this.append(new _glimmerRuntimeLibCompiledOpcodesDom.OpenComponentElementOpcode(tag)); - }; - - BasicOpcodeBuilder.prototype.openDynamicPrimitiveElement = function openDynamicPrimitiveElement() { - this.append(new _glimmerRuntimeLibCompiledOpcodesDom.OpenDynamicPrimitiveElementOpcode()); - }; - - BasicOpcodeBuilder.prototype.flushElement = function flushElement() { - this.append(new _glimmerRuntimeLibCompiledOpcodesDom.FlushElementOpcode()); - }; - - BasicOpcodeBuilder.prototype.closeElement = function closeElement() { - this.append(new _glimmerRuntimeLibCompiledOpcodesDom.CloseElementOpcode()); - }; - - BasicOpcodeBuilder.prototype.staticAttr = function staticAttr(name, namespace, value) { - this.append(new _glimmerRuntimeLibCompiledOpcodesDom.StaticAttrOpcode(name, namespace, value)); - }; - - BasicOpcodeBuilder.prototype.dynamicAttrNS = function dynamicAttrNS(name, namespace, isTrusting) { - this.append(new _glimmerRuntimeLibCompiledOpcodesDom.DynamicAttrNSOpcode(name, namespace, isTrusting)); - }; - - BasicOpcodeBuilder.prototype.dynamicAttr = function dynamicAttr(name, isTrusting) { - this.append(new _glimmerRuntimeLibCompiledOpcodesDom.DynamicAttrOpcode(name, isTrusting)); - }; - - BasicOpcodeBuilder.prototype.comment = function comment(_comment) { - this.append(new _glimmerRuntimeLibCompiledOpcodesDom.CommentOpcode(_comment)); - }; - - // lists - - BasicOpcodeBuilder.prototype.putIterator = function putIterator() { - this.append(new _glimmerRuntimeLibCompiledOpcodesLists.PutIteratorOpcode()); - }; - - BasicOpcodeBuilder.prototype.enterList = function enterList(start, end) { - this.append(new _glimmerRuntimeLibCompiledOpcodesLists.EnterListOpcode(this.labelFor(start), this.labelFor(end))); - }; - - BasicOpcodeBuilder.prototype.exitList = function exitList() { - this.append(new _glimmerRuntimeLibCompiledOpcodesLists.ExitListOpcode()); - }; - - BasicOpcodeBuilder.prototype.enterWithKey = function enterWithKey(start, end) { - this.append(new _glimmerRuntimeLibCompiledOpcodesLists.EnterWithKeyOpcode(this.labelFor(start), this.labelFor(end))); - }; - - BasicOpcodeBuilder.prototype.nextIter = function nextIter(end) { - this.append(new _glimmerRuntimeLibCompiledOpcodesLists.NextIterOpcode(this.labelFor(end))); - }; - - // vm - - BasicOpcodeBuilder.prototype.pushRemoteElement = function pushRemoteElement() { - this.append(new _glimmerRuntimeLibCompiledOpcodesDom.PushRemoteElementOpcode()); - }; - - BasicOpcodeBuilder.prototype.popRemoteElement = function popRemoteElement() { - this.append(new _glimmerRuntimeLibCompiledOpcodesDom.PopRemoteElementOpcode()); - }; - - BasicOpcodeBuilder.prototype.popElement = function popElement() { - this.append(new _glimmerRuntimeLibCompiledOpcodesDom.PopElementOpcode()); - }; - - BasicOpcodeBuilder.prototype.label = function label(name) { - this.append(this.labelFor(name)); - }; - - BasicOpcodeBuilder.prototype.pushChildScope = function pushChildScope() { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.PushChildScopeOpcode()); - }; - - BasicOpcodeBuilder.prototype.popScope = function popScope() { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.PopScopeOpcode()); - }; - - BasicOpcodeBuilder.prototype.pushDynamicScope = function pushDynamicScope() { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.PushDynamicScopeOpcode()); - }; - - BasicOpcodeBuilder.prototype.popDynamicScope = function popDynamicScope() { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.PopDynamicScopeOpcode()); - }; - - BasicOpcodeBuilder.prototype.putNull = function putNull() { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.PutNullOpcode()); - }; - - BasicOpcodeBuilder.prototype.putValue = function putValue(expression) { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.PutValueOpcode(this.compile(expression))); - }; - - BasicOpcodeBuilder.prototype.putArgs = function putArgs(args) { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.PutArgsOpcode(this.compile(args))); - }; - - BasicOpcodeBuilder.prototype.bindDynamicScope = function bindDynamicScope(names) { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.BindDynamicScopeOpcode(names)); - }; - - BasicOpcodeBuilder.prototype.bindPositionalArgs = function bindPositionalArgs(names, symbols) { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.BindPositionalArgsOpcode(names, symbols)); - }; - - BasicOpcodeBuilder.prototype.bindNamedArgs = function bindNamedArgs(names, symbols) { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.BindNamedArgsOpcode(names, symbols)); - }; - - BasicOpcodeBuilder.prototype.bindBlocks = function bindBlocks(names, symbols) { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.BindBlocksOpcode(names, symbols)); - }; - - BasicOpcodeBuilder.prototype.enter = function enter(_enter, exit) { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.EnterOpcode(this.labelFor(_enter), this.labelFor(exit))); - }; - - BasicOpcodeBuilder.prototype.exit = function exit() { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.ExitOpcode()); - }; - - BasicOpcodeBuilder.prototype.evaluate = function evaluate(name) { - var block = arguments.length <= 1 || arguments[1] === undefined ? this.templates[name] : arguments[1]; - return (function () { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.EvaluateOpcode(name, block)); - }).apply(this, arguments); - }; - - BasicOpcodeBuilder.prototype.test = function test(testFunc) { - if (testFunc === 'const') { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.TestOpcode(_glimmerRuntimeLibCompiledOpcodesVm.ConstTest)); - } else if (testFunc === 'simple') { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.TestOpcode(_glimmerRuntimeLibCompiledOpcodesVm.SimpleTest)); - } else if (testFunc === 'environment') { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.TestOpcode(_glimmerRuntimeLibCompiledOpcodesVm.EnvironmentTest)); - } else if (typeof testFunc === 'function') { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.TestOpcode(testFunc)); - } else { - throw new Error('unreachable'); - } - }; - - BasicOpcodeBuilder.prototype.jump = function jump(target) { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.JumpOpcode(this.labelFor(target))); - }; - - BasicOpcodeBuilder.prototype.jumpIf = function jumpIf(target) { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.JumpIfOpcode(this.labelFor(target))); - }; - - BasicOpcodeBuilder.prototype.jumpUnless = function jumpUnless(target) { - this.append(new _glimmerRuntimeLibCompiledOpcodesVm.JumpUnlessOpcode(this.labelFor(target))); - }; - - babelHelpers.createClass(BasicOpcodeBuilder, [{ - key: 'labels', - get: function () { - return this.labelsStack.current; - } - }, { - key: 'templates', - get: function () { - return this.templatesStack.current; - } - }]); - return BasicOpcodeBuilder; - })(StatementCompilationBufferProxy); - - exports.BasicOpcodeBuilder = BasicOpcodeBuilder; - - function isCompilableExpression(expr) { - return expr && typeof expr['compile'] === 'function'; + function block(morph, env, scope, path, params, hash, template, inverse, visitor) { + if (handleRedirect(morph, env, scope, path, params, hash, template, inverse, visitor)) { + return; } - var SIMPLE_BLOCK = { templates: null }; - var OpcodeBuilder = (function (_BasicOpcodeBuilder) { - babelHelpers.inherits(OpcodeBuilder, _BasicOpcodeBuilder); + continueBlock(morph, env, scope, path, params, hash, template, inverse, visitor); + } - function OpcodeBuilder() { - _BasicOpcodeBuilder.apply(this, arguments); - } + function continueBlock(morph, env, scope, path, params, hash, template, inverse, visitor) { + hostBlock(morph, env, scope, template, inverse, null, visitor, function (options) { + var helper = env.hooks.lookupHelper(env, scope, path); + return env.hooks.invokeHelper(morph, env, scope, visitor, params, hash, helper, options.templates, thisFor(options.templates)); + }); + } - OpcodeBuilder.prototype.compile = function compile(expr) { - if (isCompilableExpression(expr)) { - return expr.compile(this, this.env, this.symbolTable); - } else { - return expr; - } - }; + function hostBlock(morph, env, scope, template, inverse, shadowOptions, visitor, callback) { + var options = optionsFor(template, inverse, env, scope, morph, visitor); + _htmlbarsUtilTemplateUtils.renderAndCleanup(morph, env, options, shadowOptions, callback); + } - OpcodeBuilder.prototype.bindPositionalArgsForBlock = function bindPositionalArgsForBlock(block) { - this.append(_glimmerRuntimeLibCompiledOpcodesVm.BindPositionalArgsOpcode.create(block)); - }; - - OpcodeBuilder.prototype.bindNamedArgsForLayout = function bindNamedArgsForLayout(layout) { - this.append(_glimmerRuntimeLibCompiledOpcodesVm.BindNamedArgsOpcode.create(layout)); - }; - - OpcodeBuilder.prototype.bindBlocksForLayout = function bindBlocksForLayout(layout) { - this.append(_glimmerRuntimeLibCompiledOpcodesVm.BindBlocksOpcode.create(layout)); - }; - - OpcodeBuilder.prototype.bindPartialArgsForLayout = function bindPartialArgsForLayout(layout) { - this.append(_glimmerRuntimeLibCompiledOpcodesVm.BindPartialArgsOpcode.create(layout)); - }; - - OpcodeBuilder.prototype.simpleBlock = function simpleBlock(callback) { - this.block(SIMPLE_BLOCK, callback); - }; - - // TODO - // come back to this - - OpcodeBuilder.prototype.block = function block(_ref, callback) { - var templates = _ref.templates; - var args = _ref.args; - - if (args) this.putArgs(args); - this.startLabels(); - this.startBlock(templates); - this.enter('BEGIN', 'END'); - this.label('BEGIN'); - callback(this, 'BEGIN', 'END'); - this.label('END'); - this.exit(); - this.endBlock(); - this.stopLabels(); - }; - - // TODO - // come back to this - - OpcodeBuilder.prototype.iter = function iter(_ref2, callback) { - var templates = _ref2.templates; - - this.startLabels(); - this.startBlock(templates); - this.enterList('BEGIN', 'END'); - this.label('ITER'); - this.nextIter('BREAK'); - this.enterWithKey('BEGIN', 'END'); - this.label('BEGIN'); - callback(this, 'BEGIN', 'END'); - this.label('END'); - this.exit(); - this.jump('ITER'); - this.label('BREAK'); - this.exitList(); - this.endBlock(); - this.stopLabels(); - }; - - // TODO - // come back to this - - OpcodeBuilder.prototype.unit = function unit(_ref3, callback) { - var templates = _ref3.templates; - - this.startLabels(); - this.startBlock(templates); - callback(this); - this.endBlock(); - this.stopLabels(); - }; - - return OpcodeBuilder; - })(BasicOpcodeBuilder); - - exports.default = OpcodeBuilder; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvb3Bjb2Rlcy9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztRQXlCQSwrQkFBQTtBQUVFLGlCQUZGLCtCQUFBLENBRXdCLEtBQWlDLEVBQUE7QUFBakMsZ0JBQUEsQ0FBQSxLQUFLLEdBQUwsS0FBSyxDQUE0QjtTQUFJOztBQUY3RCx1Q0FBQSxXQVFFLE9BQU8sR0FBQSxtQkFBQTtBQUNMLG1CQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDN0I7O0FBVkgsdUNBQUEsV0FZRSxNQUFNLEdBQUEsZ0JBQW1CLE1BQVMsRUFBQTtBQUNoQyxnQkFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0I7O0FBZEgsdUNBQUEsV0FnQkUsY0FBYyxHQUFBLHdCQUFDLElBQVksRUFBQTtBQUN6QixtQkFBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4Qzs7QUFsQkgsdUNBQUEsV0FvQkUsY0FBYyxHQUFBLHdCQUFDLElBQVksRUFBQTtBQUN6QixtQkFBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4Qzs7QUF0QkgsdUNBQUEsV0F3QkUsY0FBYyxHQUFBLHdCQUFDLElBQVksRUFBQTtBQUN6QixtQkFBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4Qzs7QUExQkgsdUNBQUEsV0E0QkUsY0FBYyxHQUFBLHdCQUFDLElBQVksRUFBQTtBQUN6QixtQkFBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4Qzs7QUE5QkgsdUNBQUEsV0FnQ0UsY0FBYyxHQUFBLHdCQUFDLElBQVksRUFBQTtBQUN6QixtQkFBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJ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QyxDQUFDO0FBQ25CLGdCQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZCLGdCQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsQyxnQkFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVwQixvQkFBUSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFFL0IsZ0JBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEIsZ0JBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNaLGdCQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xCLGdCQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3BCLGdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEIsZ0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQixnQkFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25COzs7OztBQW5FSCxxQkFBQSxXQXVFRSxJQUFJLEdBQUEsY0FBQyxLQUE4QyxFQUFFLFFBQTBDLEVBQUE7Z0JBQXhGLFNBQVMsR0FBWCxLQUE4QyxDQUE1QyxTQUFTOztBQUNkLGdCQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbkIsZ0JBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0Isb0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNmLGdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEIsZ0JBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjs7ZUE3RUgsYUFBQTtPQUEyQyxrQkFBa0I7O3NCQUE3RCxhQUFBIiwiZmlsZSI6ImJ1aWxkZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjb21wb25lbnQgZnJvbSAnLi9jb21wb25lbnQnO1xuaW1wb3J0ICogYXMgcGFydGlhbCBmcm9tICcuLi8uLi9jb21waWxlZC9vcGNvZGVzL3BhcnRpYWwnO1xuaW1wb3J0ICogYXMgY29udGVudCBmcm9tICcuL2NvbnRlbnQnO1xuaW1wb3J0ICogYXMgZG9tIGZyb20gJy4vZG9tJztcbmltcG9ydCAqIGFzIGxpc3RzIGZyb20gJy4vbGlzdHMnO1xuaW1wb3J0ICogYXMgdm0gZnJvbSAnLi92bSc7XG5pbXBvcnQgKiBhcyBTeW50YXggZnJvbSAnLi4vLi4vc3ludGF4L2NvcmUnO1xuXG5pbXBvcnQgeyBTdGFjaywgRGljdCwgT3BhcXVlLCBkaWN0IH0gZnJvbSAnZ2xpbW1lci11dGlsJztcbmltcG9ydCB7IFN0YXRlbWVudENvbXBpbGF0aW9uQnVmZmVyLCBDb21waWxlc0ludG8gfSBmcm9tICcuLi8uLi9zeW50YXgnO1xuaW1wb3J0IHsgT3Bjb2RlLCBPcFNlcSB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgQ29tcGlsZWRBcmdzIH0gZnJvbSAnLi4vZXhwcmVzc2lvbnMvYXJncyc7XG5pbXBvcnQgeyBDb21waWxlZEV4cHJlc3Npb24gfSBmcm9tICcuLi9leHByZXNzaW9ucyc7XG5pbXBvcnQgeyBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUGFydGlhbERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9wYXJ0aWFsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBJbmxpbmVCbG9jaywgTGF5b3V0IH0gZnJvbSAnLi4vYmxvY2tzJztcbmltcG9ydCB7IEVNUFRZX0FSUkFZIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IFN5bWJvbFRhYmxlIGZyb20gJy4uLy4uL3N5bWJvbC10YWJsZSc7XG5pbXBvcnQgeyBDb21wb25lbnRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vb3Bjb2RlLWJ1aWxkZXInO1xuXG5leHBvcnQgdHlwZSBSZXByZXNlbnRzPEU+ID0gQ29tcGlsZXNJbnRvPEU+IHwgRTtcblxuZXhwb3J0IHR5cGUgTGFiZWwgPSBzdHJpbmc7XG5cbmV4cG9ydCBjbGFzcyBTdGF0ZW1lbnRDb21waWxhdGlvbkJ1ZmZlclByb3h5IGltcGxlbWVudHMgU3RhdGVtZW50Q29tcGlsYXRpb25CdWZmZXIge1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbm5lcjogU3RhdGVtZW50Q29tcGlsYXRpb25CdWZmZXIpIHt9XG5cbiAgZ2V0IGNvbXBvbmVudCgpOiBDb21wb25lbnRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lci5jb21wb25lbnQ7XG4gIH1cblxuICB0b09wU2VxKCk6IE9wU2VxIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lci50b09wU2VxKCk7XG4gIH1cblxuICBhcHBlbmQ8VCBleHRlbmRzIE9wY29kZT4ob3Bjb2RlOiBUKSB7XG4gICAgdGhpcy5pbm5lci5hcHBlbmQob3Bjb2RlKTtcbiAgfVxuXG4gIGdldExvY2FsU3ltYm9sKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXIuZ2V0TG9jYWxTeW1ib2wobmFtZSk7XG4gIH1cblxuICBoYXNMb2NhbFN5bWJvbChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lci5oYXNMb2NhbFN5bWJvbChuYW1lKTtcbiAgfVxuXG4gIGdldE5hbWVkU3ltYm9sKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXIuZ2V0TmFtZWRTeW1ib2wobmFtZSk7XG4gIH1cblxuICBoYXNOYW1lZFN5bWJvbChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lci5oYXNOYW1lZFN5bWJvbChuYW1lKTtcbiAgfVxuXG4gIGdldEJsb2NrU3ltYm9sKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXIuZ2V0QmxvY2tTeW1ib2wobmFtZSk7XG4gIH1cblxuICBoYXNCbG9ja1N5bWJvbChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lci5oYXNCbG9ja1N5bWJvbChuYW1lKTtcbiAgfVxuXG4gIGdldFBhcnRpYWxBcmdzU3ltYm9sKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXIuZ2V0UGFydGlhbEFyZ3NTeW1ib2woKTtcbiAgfVxuXG4gIGhhc1BhcnRpYWxBcmdzU3ltYm9sKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlubmVyLmhhc1BhcnRpYWxBcmdzU3ltYm9sKCk7XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2ljT3Bjb2RlQnVpbGRlciBleHRlbmRzIFN0YXRlbWVudENvbXBpbGF0aW9uQnVmZmVyUHJveHkge1xuICBwcml2YXRlIGxhYmVsc1N0YWNrID0gbmV3IFN0YWNrPERpY3Q8dm0uTGFiZWxPcGNvZGU+PigpO1xuICBwcml2YXRlIHRlbXBsYXRlc1N0YWNrID0gbmV3IFN0YWNrPFN5bnRheC5UZW1wbGF0ZXM+KCk7XG5cbiAgY29uc3RydWN0b3IoaW5uZXI6IFN0YXRlbWVudENvbXBpbGF0aW9uQnVmZmVyLCBwcm90ZWN0ZWQgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlLCBwdWJsaWMgZW52OiBFbnZpcm9ubWVudCkge1xuICAgIHN1cGVyKGlubmVyKTtcbiAgfVxuXG4gIGFic3RyYWN0IGNvbXBpbGU8RT4oZXhwcjogUmVwcmVzZW50czxFPik6IEU7XG5cbiAgLy8gaGVscGVyc1xuXG4gIGdldCBsYWJlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxzU3RhY2suY3VycmVudDtcbiAgfVxuXG4gIGdldCB0ZW1wbGF0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzU3RhY2suY3VycmVudDtcbiAgfVxuXG4gIHN0YXJ0QmxvY2sodGVtcGxhdGVzOiBTeW50YXguVGVtcGxhdGVzKSB7XG4gICAgdGhpcy50ZW1wbGF0ZXNTdGFjay5wdXNoKHRlbXBsYXRlcyk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICB0aGlzLnRlbXBsYXRlc1N0YWNrLnBvcCgpO1xuICB9XG5cbiAgc3RhcnRMYWJlbHMoKSB7XG4gICAgdGhpcy5sYWJlbHNTdGFjay5wdXNoKGRpY3Q8dm0uTGFiZWxPcGNvZGU+KCkpO1xuICB9XG5cbiAgc3RvcExhYmVscygpIHtcbiAgICB0aGlzLmxhYmVsc1N0YWNrLnBvcCgpO1xuICB9XG5cbiAgbGFiZWxGb3IobmFtZTogc3RyaW5nKTogdm0uTGFiZWxPcGNvZGUge1xuICAgIGxldCBsYWJlbHMgPSB0aGlzLmxhYmVscztcbiAgICBsZXQgbGFiZWwgPSBsYWJlbHNbbmFtZV07XG5cbiAgICBpZiAoIWxhYmVsKSB7XG4gICAgICBsYWJlbCA9IGxhYmVsc1tuYW1lXSA9IG5ldyB2bS5MYWJlbE9wY29kZShuYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH1cblxuICAvLyBwYXJ0aWFsc1xuXG4gIHB1dFBhcnRpYWxEZWZpbml0aW9uKGRlZmluaXRpb246IFBhcnRpYWxEZWZpbml0aW9uPE9wYXF1ZT4pIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgcGFydGlhbC5QdXRQYXJ0aWFsRGVmaW5pdGlvbk9wY29kZShkZWZpbml0aW9uKSk7XG4gIH1cblxuICBwdXREeW5hbWljUGFydGlhbERlZmluaXRpb24oKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IHBhcnRpYWwuUHV0RHluYW1pY1BhcnRpYWxEZWZpbml0aW9uT3Bjb2RlKHRoaXMuc3ltYm9sVGFibGUpKTtcbiAgfVxuXG4gIGV2YWx1YXRlUGFydGlhbCgpIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgcGFydGlhbC5FdmFsdWF0ZVBhcnRpYWxPcGNvZGUodGhpcy5zeW1ib2xUYWJsZSkpO1xuICB9XG5cbiAgLy8gY29tcG9uZW50c1xuXG4gIHB1dENvbXBvbmVudERlZmluaXRpb24oZGVmaW5pdGlvbjogQ29tcG9uZW50RGVmaW5pdGlvbjxPcGFxdWU+KSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IGNvbXBvbmVudC5QdXRDb21wb25lbnREZWZpbml0aW9uT3Bjb2RlKGRlZmluaXRpb24pKTtcbiAgfVxuXG4gIHB1dER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uKCkge1xuICAgIHRoaXMuYXBwZW5kKG5ldyBjb21wb25lbnQuUHV0RHluYW1pY0NvbXBvbmVudERlZmluaXRpb25PcGNvZGUoKSk7XG4gIH1cblxuICBvcGVuQ29tcG9uZW50KGFyZ3M6IFJlcHJlc2VudHM8Q29tcGlsZWRBcmdzPiwgc2hhZG93OiBzdHJpbmdbXSA9IEVNUFRZX0FSUkFZKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IGNvbXBvbmVudC5PcGVuQ29tcG9uZW50T3Bjb2RlKHRoaXMuY29tcGlsZShhcmdzKSwgc2hhZG93LCB0aGlzLnRlbXBsYXRlcykpO1xuICB9XG5cbiAgZGlkQ3JlYXRlRWxlbWVudCgpIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgY29tcG9uZW50LkRpZENyZWF0ZUVsZW1lbnRPcGNvZGUoKSk7XG4gIH1cblxuICBzaGFkb3dBdHRyaWJ1dGVzKCkge1xuICAgIHRoaXMuYXBwZW5kKG5ldyBjb21wb25lbnQuU2hhZG93QXR0cmlidXRlc09wY29kZSgpKTtcbiAgfVxuXG4gIGRpZFJlbmRlckxheW91dCgpIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgY29tcG9uZW50LkRpZFJlbmRlckxheW91dE9wY29kZSgpKTtcbiAgfVxuXG4gIGNsb3NlQ29tcG9uZW50KCkge1xuICAgIHRoaXMuYXBwZW5kKG5ldyBjb21wb25lbnQuQ2xvc2VDb21wb25lbnRPcGNvZGUoKSk7XG4gIH1cblxuICAvLyBjb250ZW50XG5cbiAgY2F1dGlvdXNBcHBlbmQoKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IGNvbnRlbnQuT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUoKSk7XG4gIH1cblxuICB0cnVzdGluZ0FwcGVuZCgpIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgY29udGVudC5PcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZSgpKTtcbiAgfVxuXG4gIC8vIGRvbVxuXG4gIHRleHQodGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IGRvbS5UZXh0T3Bjb2RlKHRleHQpKTtcbiAgfVxuXG4gIG9wZW5QcmltaXRpdmVFbGVtZW50KHRhZzogc3RyaW5nKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IGRvbS5PcGVuUHJpbWl0aXZlRWxlbWVudE9wY29kZSh0YWcpKTtcbiAgfVxuXG4gIG9wZW5Db21wb25lbnRFbGVtZW50KHRhZzogc3RyaW5nKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IGRvbS5PcGVuQ29tcG9uZW50RWxlbWVudE9wY29kZSh0YWcpKTtcbiAgfVxuXG4gIG9wZW5EeW5hbWljUHJpbWl0aXZlRWxlbWVudCgpIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgZG9tLk9wZW5EeW5hbWljUHJpbWl0aXZlRWxlbWVudE9wY29kZSgpKTtcbiAgfVxuXG4gIGZsdXNoRWxlbWVudCgpIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgZG9tLkZsdXNoRWxlbWVudE9wY29kZSgpKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudCgpIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgZG9tLkNsb3NlRWxlbWVudE9wY29kZSgpKTtcbiAgfVxuXG4gIHN0YXRpY0F0dHIobmFtZTogc3RyaW5nLCBuYW1lc3BhY2U6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuYXBwZW5kKG5ldyBkb20uU3RhdGljQXR0ck9wY29kZShuYW1lLCBuYW1lc3BhY2UsIHZhbHVlKSk7XG4gIH1cblxuICBkeW5hbWljQXR0ck5TKG5hbWU6IHN0cmluZywgbmFtZXNwYWNlOiBzdHJpbmcsIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgZG9tLkR5bmFtaWNBdHRyTlNPcGNvZGUobmFtZSwgbmFtZXNwYWNlLCBpc1RydXN0aW5nKSk7XG4gIH1cblxuICBkeW5hbWljQXR0cihuYW1lOiBzdHJpbmcsIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgZG9tLkR5bmFtaWNBdHRyT3Bjb2RlKG5hbWUsIGlzVHJ1c3RpbmcpKTtcbiAgfVxuXG4gIGNvbW1lbnQoY29tbWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IGRvbS5Db21tZW50T3Bjb2RlKGNvbW1lbnQpKTtcbiAgfVxuXG4gIC8vIGxpc3RzXG5cbiAgcHV0SXRlcmF0b3IoKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IGxpc3RzLlB1dEl0ZXJhdG9yT3Bjb2RlKCkpO1xuICB9XG5cbiAgZW50ZXJMaXN0KHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IGxpc3RzLkVudGVyTGlzdE9wY29kZSh0aGlzLmxhYmVsRm9yKHN0YXJ0KSwgdGhpcy5sYWJlbEZvcihlbmQpKSk7XG4gIH1cblxuICBleGl0TGlzdCgpIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgbGlzdHMuRXhpdExpc3RPcGNvZGUoKSk7XG4gIH1cblxuICBlbnRlcldpdGhLZXkoc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcpIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgbGlzdHMuRW50ZXJXaXRoS2V5T3Bjb2RlKHRoaXMubGFiZWxGb3Ioc3RhcnQpLCB0aGlzLmxhYmVsRm9yKGVuZCkpKTtcbiAgfVxuXG4gIG5leHRJdGVyKGVuZDogc3RyaW5nKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IGxpc3RzLk5leHRJdGVyT3Bjb2RlKHRoaXMubGFiZWxGb3IoZW5kKSkpO1xuICB9XG5cbiAgLy8gdm1cblxuICBwdXNoUmVtb3RlRWxlbWVudCgpIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgZG9tLlB1c2hSZW1vdGVFbGVtZW50T3Bjb2RlKCkpO1xuICB9XG5cbiAgcG9wUmVtb3RlRWxlbWVudCgpIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgZG9tLlBvcFJlbW90ZUVsZW1lbnRPcGNvZGUoKSk7XG4gIH1cblxuICBwb3BFbGVtZW50KCkge1xuICAgIHRoaXMuYXBwZW5kKG5ldyBkb20uUG9wRWxlbWVudE9wY29kZSgpKTtcbiAgfVxuXG4gIGxhYmVsKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuYXBwZW5kKHRoaXMubGFiZWxGb3IobmFtZSkpO1xuICB9XG5cbiAgcHVzaENoaWxkU2NvcGUoKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IHZtLlB1c2hDaGlsZFNjb3BlT3Bjb2RlKCkpO1xuICB9XG5cbiAgcG9wU2NvcGUoKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IHZtLlBvcFNjb3BlT3Bjb2RlKCkpO1xuICB9XG5cbiAgcHVzaER5bmFtaWNTY29wZSgpIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgdm0uUHVzaER5bmFtaWNTY29wZU9wY29kZSgpKTtcbiAgfVxuXG4gIHBvcER5bmFtaWNTY29wZSgpIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgdm0uUG9wRHluYW1pY1Njb3BlT3Bjb2RlKCkpO1xuICB9XG5cbiAgcHV0TnVsbCgpIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgdm0uUHV0TnVsbE9wY29kZSgpKTtcbiAgfVxuXG4gIHB1dFZhbHVlKGV4cHJlc3Npb246IFJlcHJlc2VudHM8Q29tcGlsZWRFeHByZXNzaW9uPE9wYXF1ZT4+KSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IHZtLlB1dFZhbHVlT3Bjb2RlKHRoaXMuY29tcGlsZShleHByZXNzaW9uKSkpO1xuICB9XG5cbiAgcHV0QXJncyhhcmdzOiBSZXByZXNlbnRzPENvbXBpbGVkQXJncz4pIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgdm0uUHV0QXJnc09wY29kZSh0aGlzLmNvbXBpbGUoYXJncykpKTtcbiAgfVxuXG4gIGJpbmREeW5hbWljU2NvcGUobmFtZXM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IHZtLkJpbmREeW5hbWljU2NvcGVPcGNvZGUobmFtZXMpKTtcbiAgfVxuXG4gIGJpbmRQb3NpdGlvbmFsQXJncyhuYW1lczogc3RyaW5nW10sIHN5bWJvbHM6IG51bWJlcltdKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IHZtLkJpbmRQb3NpdGlvbmFsQXJnc09wY29kZShuYW1lcywgc3ltYm9scykpO1xuICB9XG5cbiAgYmluZE5hbWVkQXJncyhuYW1lczogc3RyaW5nW10sIHN5bWJvbHM6IG51bWJlcltdKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IHZtLkJpbmROYW1lZEFyZ3NPcGNvZGUobmFtZXMsIHN5bWJvbHMpKTtcbiAgfVxuXG4gIGJpbmRCbG9ja3MobmFtZXM6IHN0cmluZ1tdLCBzeW1ib2xzOiBudW1iZXJbXSkge1xuICAgIHRoaXMuYXBwZW5kKG5ldyB2bS5CaW5kQmxvY2tzT3Bjb2RlKG5hbWVzLCBzeW1ib2xzKSk7XG4gIH1cblxuICBlbnRlcihlbnRlcjogTGFiZWwsIGV4aXQ6IExhYmVsKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IHZtLkVudGVyT3Bjb2RlKHRoaXMubGFiZWxGb3IoZW50ZXIpLCB0aGlzLmxhYmVsRm9yKGV4aXQpKSk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYXBwZW5kKG5ldyB2bS5FeGl0T3Bjb2RlKCkpO1xuICB9XG5cbiAgZXZhbHVhdGUobmFtZTogc3RyaW5nLCBibG9jayA9IHRoaXMudGVtcGxhdGVzW25hbWVdKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IHZtLkV2YWx1YXRlT3Bjb2RlKG5hbWUsIGJsb2NrKSk7XG4gIH1cblxuICB0ZXN0KHRlc3RGdW5jOiAnY29uc3QnIHwgJ3NpbXBsZScgfCAnZW52aXJvbm1lbnQnIHwgdm0uVGVzdEZ1bmN0aW9uKSB7XG4gICAgaWYgKHRlc3RGdW5jID09PSAnY29uc3QnKSB7XG4gICAgICB0aGlzLmFwcGVuZChuZXcgdm0uVGVzdE9wY29kZSh2bS5Db25zdFRlc3QpKTtcbiAgICB9IGVsc2UgaWYgKHRlc3RGdW5jID09PSAnc2ltcGxlJykge1xuICAgICAgdGhpcy5hcHBlbmQobmV3IHZtLlRlc3RPcGNvZGUodm0uU2ltcGxlVGVzdCkpO1xuICAgIH0gZWxzZSBpZiAodGVzdEZ1bmMgPT09ICdlbnZpcm9ubWVudCcpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5ldyB2bS5UZXN0T3Bjb2RlKHZtLkVudmlyb25tZW50VGVzdCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRlc3RGdW5jID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLmFwcGVuZChuZXcgdm0uVGVzdE9wY29kZSh0ZXN0RnVuYykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VucmVhY2hhYmxlJyk7XG4gICAgfVxuICB9XG5cbiAganVtcCh0YXJnZXQ6IHN0cmluZykge1xuICAgIHRoaXMuYXBwZW5kKG5ldyB2bS5KdW1wT3Bjb2RlKHRoaXMubGFiZWxGb3IodGFyZ2V0KSkpO1xuICB9XG5cbiAganVtcElmKHRhcmdldDogc3RyaW5nKSB7XG4gICAgdGhpcy5hcHBlbmQobmV3IHZtLkp1bXBJZk9wY29kZSh0aGlzLmxhYmVsRm9yKHRhcmdldCkpKTtcbiAgfVxuXG4gIGp1bXBVbmxlc3ModGFyZ2V0OiBzdHJpbmcpIHtcbiAgICB0aGlzLmFwcGVuZChuZXcgdm0uSnVtcFVubGVzc09wY29kZSh0aGlzLmxhYmVsRm9yKHRhcmdldCkpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NvbXBpbGFibGVFeHByZXNzaW9uPEU+KGV4cHI6IFJlcHJlc2VudHM8RT4pOiBleHByIGlzIENvbXBpbGVzSW50bzxFPiB7XG4gIHJldHVybiBleHByICYmIHR5cGVvZiBleHByWydjb21waWxlJ10gPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCB0eXBlIEJsb2NrQXJncyA9IHsgdGVtcGxhdGVzOiBTeW50YXguVGVtcGxhdGVzLCBhcmdzPzogU3ludGF4LkFyZ3MgfTtcblxuY29uc3QgU0lNUExFX0JMT0NLOiBCbG9ja0FyZ3MgPSB7IHRlbXBsYXRlczogbnVsbCB9O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcGNvZGVCdWlsZGVyIGV4dGVuZHMgQmFzaWNPcGNvZGVCdWlsZGVyIHtcbiAgY29tcGlsZTxFPihleHByOiBSZXByZXNlbnRzPEU+KTogRSB7XG4gICAgaWYgKGlzQ29tcGlsYWJsZUV4cHJlc3Npb24oZXhwcikpIHtcbiAgICAgIHJldHVybiBleHByLmNvbXBpbGUodGhpcywgdGhpcy5lbnYsIHRoaXMuc3ltYm9sVGFibGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG4gIH1cblxuICBiaW5kUG9zaXRpb25hbEFyZ3NGb3JCbG9jayhibG9jazogSW5saW5lQmxvY2spIHtcbiAgICB0aGlzLmFwcGVuZCh2bS5CaW5kUG9zaXRpb25hbEFyZ3NPcGNvZGUuY3JlYXRlKGJsb2NrKSk7XG4gIH1cblxuICBiaW5kTmFtZWRBcmdzRm9yTGF5b3V0KGxheW91dDogTGF5b3V0KSB7XG4gICAgdGhpcy5hcHBlbmQodm0uQmluZE5hbWVkQXJnc09wY29kZS5jcmVhdGUobGF5b3V0KSk7XG4gIH1cblxuICBiaW5kQmxvY2tzRm9yTGF5b3V0KGxheW91dDogTGF5b3V0KSB7XG4gICAgdGhpcy5hcHBlbmQodm0uQmluZEJsb2Nrc09wY29kZS5jcmVhdGUobGF5b3V0KSk7XG4gIH1cblxuICBiaW5kUGFydGlhbEFyZ3NGb3JMYXlvdXQobGF5b3V0OiBMYXlvdXQpIHtcbiAgICB0aGlzLmFwcGVuZCh2bS5CaW5kUGFydGlhbEFyZ3NPcGNvZGUuY3JlYXRlKGxheW91dCkpO1xuICB9XG5cbiAgc2ltcGxlQmxvY2soY2FsbGJhY2s6IEJsb2NrQ2FsbGJhY2spIHtcbiAgICB0aGlzLmJsb2NrKFNJTVBMRV9CTE9DSywgY2FsbGJhY2spO1xuICB9XG5cbiAgLy8gVE9ET1xuICAvLyBjb21lIGJhY2sgdG8gdGhpc1xuICBibG9jayh7IHRlbXBsYXRlcywgYXJncyB9OiBCbG9ja0FyZ3MsIGNhbGxiYWNrOiBCbG9ja0NhbGxiYWNrKSB7XG4gICAgaWYgKGFyZ3MpIHRoaXMucHV0QXJncyhhcmdzKTtcblxuICAgIHRoaXMuc3RhcnRMYWJlbHMoKTtcbiAgICB0aGlzLnN0YXJ0QmxvY2sodGVtcGxhdGVzKTtcbiAgICB0aGlzLmVudGVyKCdCRUdJTicsICdFTkQnKTtcbiAgICB0aGlzLmxhYmVsKCdCRUdJTicpO1xuXG4gICAgY2FsbGJhY2sodGhpcywgJ0JFR0lOJywgJ0VORCcpO1xuXG4gICAgdGhpcy5sYWJlbCgnRU5EJyk7XG4gICAgdGhpcy5leGl0KCk7XG4gICAgdGhpcy5lbmRCbG9jaygpO1xuICAgIHRoaXMuc3RvcExhYmVscygpO1xuICB9XG5cbiAgICAvLyBUT0RPXG4gIC8vIGNvbWUgYmFjayB0byB0aGlzXG4gIGl0ZXIoeyB0ZW1wbGF0ZXMgfTogeyB0ZW1wbGF0ZXM6IFN5bnRheC5UZW1wbGF0ZXMgfSwgY2FsbGJhY2s6IEJsb2NrQ2FsbGJhY2spIHtcbiAgICB0aGlzLnN0YXJ0TGFiZWxzKCk7XG4gICAgdGhpcy5zdGFydEJsb2NrKHRlbXBsYXRlcyk7XG4gICAgdGhpcy5lbnRlckxpc3QoJ0JFR0lOJywgJ0VORCcpO1xuICAgIHRoaXMubGFiZWwoJ0lURVInKTtcbiAgICB0aGlzLm5leHRJdGVyKCdCUkVBSycpO1xuICAgIHRoaXMuZW50ZXJXaXRoS2V5KCdCRUdJTicsICdFTkQnKTtcbiAgICB0aGlzLmxhYmVsKCdCRUdJTicpO1xuXG4gICAgY2FsbGJhY2sodGhpcywgJ0JFR0lOJywgJ0VORCcpO1xuXG4gICAgdGhpcy5sYWJlbCgnRU5EJyk7XG4gICAgdGhpcy5leGl0KCk7XG4gICAgdGhpcy5qdW1wKCdJVEVSJyk7XG4gICAgdGhpcy5sYWJlbCgnQlJFQUsnKTtcbiAgICB0aGlzLmV4aXRMaXN0KCk7XG4gICAgdGhpcy5lbmRCbG9jaygpO1xuICAgIHRoaXMuc3RvcExhYmVscygpO1xuICB9XG5cbiAgICAvLyBUT0RPXG4gIC8vIGNvbWUgYmFjayB0byB0aGlzXG4gIHVuaXQoeyB0ZW1wbGF0ZXMgfTogeyB0ZW1wbGF0ZXM6IFN5bnRheC5UZW1wbGF0ZXMgfSwgY2FsbGJhY2s6IChidWlsZGVyOiBPcGNvZGVCdWlsZGVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5zdGFydExhYmVscygpO1xuICAgIHRoaXMuc3RhcnRCbG9jayh0ZW1wbGF0ZXMpO1xuICAgIGNhbGxiYWNrKHRoaXMpO1xuICAgIHRoaXMuZW5kQmxvY2soKTtcbiAgICB0aGlzLnN0b3BMYWJlbHMoKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuaXRPcHRpb25zIHtcbiAgdGVtcGxhdGVzOiBTeW50YXguVGVtcGxhdGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJsb2NrT3B0aW9ucyBleHRlbmRzIFVuaXRPcHRpb25zIHtcbiAgYXJnczogU3ludGF4LkFyZ3M7XG59XG5leHBvcnQgdHlwZSBCbG9ja0NhbGxiYWNrID0gKGRzbDogT3Bjb2RlQnVpbGRlciwgQkVHSU46IExhYmVsLCBFTkQ6IExhYmVsKSA9PiB2b2lkO1xuIl19 -enifed('glimmer-runtime/lib/compiled/opcodes/component', ['exports', 'glimmer-runtime/lib/opcodes', 'glimmer-runtime/lib/compiled/opcodes/vm', 'glimmer-reference'], function (exports, _glimmerRuntimeLibOpcodes, _glimmerRuntimeLibCompiledOpcodesVm, _glimmerReference) { - 'use strict'; - - var PutDynamicComponentDefinitionOpcode = (function (_Opcode) { - babelHelpers.inherits(PutDynamicComponentDefinitionOpcode, _Opcode); - - function PutDynamicComponentDefinitionOpcode() { - _Opcode.apply(this, arguments); - this.type = "put-dynamic-component-definition"; - } - - PutDynamicComponentDefinitionOpcode.prototype.evaluate = function evaluate(vm) { - var reference = vm.frame.getOperand(); - var cache = _glimmerReference.isConst(reference) ? undefined : new _glimmerReference.ReferenceCache(reference); - var definition = cache ? cache.peek() : reference.value(); - vm.frame.setImmediate(definition); - if (cache) { - vm.updateWith(new _glimmerRuntimeLibCompiledOpcodesVm.Assert(cache)); - } - }; - - PutDynamicComponentDefinitionOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: ["$OPERAND"] - }; - }; - - return PutDynamicComponentDefinitionOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.PutDynamicComponentDefinitionOpcode = PutDynamicComponentDefinitionOpcode; - - var PutComponentDefinitionOpcode = (function (_Opcode2) { - babelHelpers.inherits(PutComponentDefinitionOpcode, _Opcode2); - - function PutComponentDefinitionOpcode(definition) { - _Opcode2.call(this); - this.definition = definition; - this.type = "put-component-definition"; - } - - PutComponentDefinitionOpcode.prototype.evaluate = function evaluate(vm) { - vm.frame.setImmediate(this.definition); - }; - - PutComponentDefinitionOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: [JSON.stringify(this.definition.name)] - }; - }; - - return PutComponentDefinitionOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.PutComponentDefinitionOpcode = PutComponentDefinitionOpcode; - - var OpenComponentOpcode = (function (_Opcode3) { - babelHelpers.inherits(OpenComponentOpcode, _Opcode3); - - function OpenComponentOpcode(args, shadow, templates) { - _Opcode3.call(this); - this.args = args; - this.shadow = shadow; - this.templates = templates; - this.type = "open-component"; - } - - OpenComponentOpcode.prototype.evaluate = function evaluate(vm) { - var rawArgs = this.args; - var shadow = this.shadow; - var templates = this.templates; - - var definition = vm.frame.getImmediate(); - var dynamicScope = vm.pushDynamicScope(); - var callerScope = vm.scope(); - var manager = definition.manager; - var hasDefaultBlock = templates && !!templates.default; // TODO Cleanup? - var args = manager.prepareArgs(definition, rawArgs.evaluate(vm), dynamicScope); - var component = manager.create(vm.env, definition, args, dynamicScope, vm.getSelf(), hasDefaultBlock); - var destructor = manager.getDestructor(component); - if (destructor) vm.newDestroyable(destructor); - var layout = manager.layoutFor(definition, component, vm.env); - var selfRef = manager.getSelf(component); - vm.beginCacheGroup(); - vm.stack().pushSimpleBlock(); - vm.pushRootScope(selfRef, layout.symbols); - vm.invokeLayout(args, layout, templates, callerScope, component, manager, shadow); - vm.updateWith(new UpdateComponentOpcode(definition.name, component, manager, args, dynamicScope)); - }; - - OpenComponentOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: ["$OPERAND"] - }; - }; - - return OpenComponentOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.OpenComponentOpcode = OpenComponentOpcode; - - var UpdateComponentOpcode = (function (_UpdatingOpcode) { - babelHelpers.inherits(UpdateComponentOpcode, _UpdatingOpcode); - - function UpdateComponentOpcode(name, component, manager, args, dynamicScope) { - _UpdatingOpcode.call(this); - this.name = name; - this.component = component; - this.manager = manager; - this.args = args; - this.dynamicScope = dynamicScope; - this.type = "update-component"; - var componentTag = manager.getTag(component); - if (componentTag) { - this.tag = _glimmerReference.combine([args.tag, componentTag]); - } else { - this.tag = args.tag; - } - } - - UpdateComponentOpcode.prototype.evaluate = function evaluate(vm) { - var component = this.component; - var manager = this.manager; - var args = this.args; - var dynamicScope = this.dynamicScope; - - manager.update(component, args, dynamicScope); - }; - - UpdateComponentOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: [JSON.stringify(this.name)] - }; - }; - - return UpdateComponentOpcode; - })(_glimmerRuntimeLibOpcodes.UpdatingOpcode); - - exports.UpdateComponentOpcode = UpdateComponentOpcode; - - var DidCreateElementOpcode = (function (_Opcode4) { - babelHelpers.inherits(DidCreateElementOpcode, _Opcode4); - - function DidCreateElementOpcode() { - _Opcode4.apply(this, arguments); - this.type = "did-create-element"; - } - - // Slow path for non-specialized component invocations. Uses an internal - // named lookup on the args. - - DidCreateElementOpcode.prototype.evaluate = function evaluate(vm) { - var manager = vm.frame.getManager(); - var component = vm.frame.getComponent(); - manager.didCreateElement(component, vm.stack().constructing, vm.stack().operations); - }; - - DidCreateElementOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: ["$ARGS"] - }; - }; - - return DidCreateElementOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.DidCreateElementOpcode = DidCreateElementOpcode; - - var ShadowAttributesOpcode = (function (_Opcode5) { - babelHelpers.inherits(ShadowAttributesOpcode, _Opcode5); - - function ShadowAttributesOpcode() { - _Opcode5.apply(this, arguments); - this.type = "shadow-attributes"; - } - - ShadowAttributesOpcode.prototype.evaluate = function evaluate(vm) { - var shadow = vm.frame.getShadow(); - if (!shadow) return; - - var _vm$frame$getArgs = vm.frame.getArgs(); - - var named = _vm$frame$getArgs.named; - - shadow.forEach(function (name) { - vm.stack().setDynamicAttribute(name, named.get(name), false); - }); - }; - - ShadowAttributesOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: ["$ARGS"] - }; - }; - - return ShadowAttributesOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.ShadowAttributesOpcode = ShadowAttributesOpcode; - - var DidRenderLayoutOpcode = (function (_Opcode6) { - babelHelpers.inherits(DidRenderLayoutOpcode, _Opcode6); - - function DidRenderLayoutOpcode() { - _Opcode6.apply(this, arguments); - this.type = "did-render-layout"; - } - - DidRenderLayoutOpcode.prototype.evaluate = function evaluate(vm) { - var manager = vm.frame.getManager(); - var component = vm.frame.getComponent(); - var bounds = vm.stack().popBlock(); - manager.didRenderLayout(component, bounds); - vm.env.didCreate(component, manager); - vm.updateWith(new DidUpdateLayoutOpcode(manager, component, bounds)); - }; - - return DidRenderLayoutOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.DidRenderLayoutOpcode = DidRenderLayoutOpcode; - - var DidUpdateLayoutOpcode = (function (_UpdatingOpcode2) { - babelHelpers.inherits(DidUpdateLayoutOpcode, _UpdatingOpcode2); - - function DidUpdateLayoutOpcode(manager, component, bounds) { - _UpdatingOpcode2.call(this); - this.manager = manager; - this.component = component; - this.bounds = bounds; - this.type = "did-update-layout"; - this.tag = _glimmerReference.CONSTANT_TAG; - } - - DidUpdateLayoutOpcode.prototype.evaluate = function evaluate(vm) { - var manager = this.manager; - var component = this.component; - var bounds = this.bounds; - - manager.didUpdateLayout(component, bounds); - vm.env.didUpdate(component, manager); - }; - - return DidUpdateLayoutOpcode; - })(_glimmerRuntimeLibOpcodes.UpdatingOpcode); - - exports.DidUpdateLayoutOpcode = DidUpdateLayoutOpcode; - - var CloseComponentOpcode = (function (_Opcode7) { - babelHelpers.inherits(CloseComponentOpcode, _Opcode7); - - function CloseComponentOpcode() { - _Opcode7.apply(this, arguments); - this.type = "close-component"; - } - - CloseComponentOpcode.prototype.evaluate = function evaluate(vm) { - vm.popScope(); - vm.popDynamicScope(); - vm.commitCacheGroup(); - }; - - return CloseComponentOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.CloseComponentOpcode = CloseComponentOpcode; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvb3Bjb2Rlcy9jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O1FBV0EsbUNBQUE7OEJBQUEsbUNBQUE7O0FBQUEsaUJBQUEsbUNBQUEsR0FBQTtBQUF5RCxnQ0FBQSxTQUFBLENBQUEsQ0FBTTtBQUN0RCxnQkFBQSxDQUFBLElBQUksR0FBRyxrQ0FBa0MsQ0FBQztTQXFCbEQ7O0FBdEJELDJDQUFBLFdBR0UsUUFBUSxHQUFBLGtCQUFDLEVBQU0sRUFBQTtBQUNiLGdCQUFJLFNBQVMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBa0MsQ0FBQztBQUN0RSxnQkFBSSxLQUFLLEdBQUcsa0JBUitDLE9BQU8sQ0FROUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxHQUFHLHNCQVJYLGNBQWMsQ0FRZ0IsU0FBUyxDQUFDLENBQUM7QUFDM0UsZ0JBQUksVUFBVSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBRTFELGNBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRWxDLGdCQUFJLEtBQUssRUFBRTtBQUNULGtCQUFFLENBQUMsVUFBVSxDQUFDLHdDQXJCWCxNQUFNLENBcUJnQixLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ2xDO1NBQ0Y7O0FBYkgsMkNBQUEsV0FlRSxNQUFNLEdBQUEsa0JBQUE7QUFDSixtQkFBTztBQUNMLG9CQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUs7QUFDaEIsb0JBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtBQUNmLG9CQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUM7YUFDbkIsQ0FBQztTQUNIOztlQXJCSCxtQ0FBQTtpQ0FYUyxNQUFNOzs7O1FBbUNmLDRCQUFBOzhCQUFBLDRCQUFBOztBQUdFLGlCQUhGLDRCQUFBLENBR3NCLFVBQTBDLEVBQUE7QUFDNUQsK0JB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QUksQ0FBZixNQUFNOztBQUVoQyxtQkFBTyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFM0MsY0FBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3RDOztlQWxCSCxxQkFBQTtpQ0FyTTZCLGNBQWM7Ozs7UUEwTjNDLG9CQUFBOzhCQUFBLG9CQUFBOztBQUFBLGlCQUFBLG9CQUFBLEdBQUE7QUFBMEMsaUNBQUEsU0FBQSxDQUFBLENBQU07QUFDdkMsZ0JBQUEsQ0FBQSxJQUFJLEdBQUcsaUJBQWlCLENBQUM7U0FPakM7O0FBUkQsNEJBQUEsV0FHRSxRQUFRLEdBQUEsa0JBQUMsRUFBTSxFQUFBO0FBQ2IsY0FBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2QsY0FBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ3JCLGNBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ3ZCOztlQVBILG9CQUFBO2lDQTFOUyxNQUFNIiwiZmlsZSI6ImNvbXBvbmVudC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wY29kZSwgT3Bjb2RlSlNPTiwgVXBkYXRpbmdPcGNvZGUgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IEFzc2VydCB9IGZyb20gJy4vdm0nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRNYW5hZ2VyLCBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVk0sIFVwZGF0aW5nVk0gfSBmcm9tICcuLi8uLi92bSc7XG5pbXBvcnQgeyBDb21waWxlZEFyZ3MsIEV2YWx1YXRlZEFyZ3MgfSBmcm9tICcuLi8uLi9jb21waWxlZC9leHByZXNzaW9ucy9hcmdzJztcbmltcG9ydCB7IFRlbXBsYXRlcyB9IGZyb20gJy4uLy4uL3N5bnRheC9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNTY29wZSB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcbmltcG9ydCBCb3VuZHMgZnJvbSAnLi4vLi4vYm91bmRzJztcbmltcG9ydCB7IENPTlNUQU5UX1RBRywgUGF0aFJlZmVyZW5jZSwgUmVmZXJlbmNlQ2FjaGUsIGNvbWJpbmUsIGlzQ29uc3QsIFJldmlzaW9uVGFnIH0gZnJvbSAnZ2xpbW1lci1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgRklYTUUgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuXG5leHBvcnQgY2xhc3MgUHV0RHluYW1pY0NvbXBvbmVudERlZmluaXRpb25PcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwicHV0LWR5bmFtaWMtY29tcG9uZW50LWRlZmluaXRpb25cIjtcblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICBsZXQgcmVmZXJlbmNlID0gdm0uZnJhbWUuZ2V0T3BlcmFuZDxDb21wb25lbnREZWZpbml0aW9uPENvbXBvbmVudD4+KCk7XG4gICAgbGV0IGNhY2hlID0gaXNDb25zdChyZWZlcmVuY2UpID8gdW5kZWZpbmVkIDogbmV3IFJlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSk7XG4gICAgbGV0IGRlZmluaXRpb24gPSBjYWNoZSA/IGNhY2hlLnBlZWsoKSA6IHJlZmVyZW5jZS52YWx1ZSgpO1xuXG4gICAgdm0uZnJhbWUuc2V0SW1tZWRpYXRlKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGNhY2hlKSB7XG4gICAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbXCIkT1BFUkFORFwiXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFB1dENvbXBvbmVudERlZmluaXRpb25PcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwicHV0LWNvbXBvbmVudC1kZWZpbml0aW9uXCI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkZWZpbml0aW9uOiBDb21wb25lbnREZWZpbml0aW9uPENvbXBvbmVudD4pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgdm0uZnJhbWUuc2V0SW1tZWRpYXRlKHRoaXMuZGVmaW5pdGlvbik7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbSlNPTi5zdHJpbmdpZnkodGhpcy5kZWZpbml0aW9uLm5hbWUpXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wZW5Db21wb25lbnRPcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwib3Blbi1jb21wb25lbnRcIjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFyZ3M6IENvbXBpbGVkQXJncyxcbiAgICBwcml2YXRlIHNoYWRvdzogc3RyaW5nW10sXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZXM6IFRlbXBsYXRlc1xuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgbGV0IHsgYXJnczogcmF3QXJncywgc2hhZG93LCB0ZW1wbGF0ZXMgfSA9IHRoaXM7XG5cbiAgICBsZXQgZGVmaW5pdGlvbiA9IHZtLmZyYW1lLmdldEltbWVkaWF0ZTxDb21wb25lbnREZWZpbml0aW9uPENvbXBvbmVudD4+KCk7XG4gICAgbGV0IGR5bmFtaWNTY29wZSA9IHZtLnB1c2hEeW5hbWljU2NvcGUoKTtcbiAgICBsZXQgY2FsbGVyU2NvcGUgPSB2bS5zY29wZSgpO1xuXG4gICAgbGV0IG1hbmFnZXIgPSBkZWZpbml0aW9uLm1hbmFnZXI7XG4gICAgbGV0IGhhc0RlZmF1bHRCbG9jayA9IHRlbXBsYXRlcyAmJiAhIXRlbXBsYXRlcy5kZWZhdWx0OyAvLyBUT0RPIENsZWFudXA/XG4gICAgbGV0IGFyZ3MgPSBtYW5hZ2VyLnByZXBhcmVBcmdzKGRlZmluaXRpb24sIHJhd0FyZ3MuZXZhbHVhdGUodm0pLCBkeW5hbWljU2NvcGUpO1xuICAgIGxldCBjb21wb25lbnQgPSBtYW5hZ2VyLmNyZWF0ZSh2bS5lbnYsIGRlZmluaXRpb24sIGFyZ3MsIGR5bmFtaWNTY29wZSwgdm0uZ2V0U2VsZigpLCBoYXNEZWZhdWx0QmxvY2spO1xuICAgIGxldCBkZXN0cnVjdG9yID0gbWFuYWdlci5nZXREZXN0cnVjdG9yKGNvbXBvbmVudCk7XG4gICAgaWYgKGRlc3RydWN0b3IpIHZtLm5ld0Rlc3Ryb3lhYmxlKGRlc3RydWN0b3IpO1xuXG4gICAgbGV0IGxheW91dCA9IG1hbmFnZXIubGF5b3V0Rm9yKGRlZmluaXRpb24sIGNvbXBvbmVudCwgdm0uZW52KTtcbiAgICBsZXQgc2VsZlJlZiA9IG1hbmFnZXIuZ2V0U2VsZihjb21wb25lbnQpO1xuXG4gICAgdm0uYmVnaW5DYWNoZUdyb3VwKCk7XG4gICAgdm0uc3RhY2soKS5wdXNoU2ltcGxlQmxvY2soKTtcbiAgICB2bS5wdXNoUm9vdFNjb3BlKHNlbGZSZWYsIGxheW91dC5zeW1ib2xzKTtcbiAgICB2bS5pbnZva2VMYXlvdXQoYXJncywgbGF5b3V0LCB0ZW1wbGF0ZXMsIGNhbGxlclNjb3BlLCBjb21wb25lbnQsIG1hbmFnZXIsIHNoYWRvdyk7XG5cbiAgICB2bS51cGRhdGVXaXRoKG5ldyBVcGRhdGVDb21wb25lbnRPcGNvZGUoZGVmaW5pdGlvbi5uYW1lLCBjb21wb25lbnQsIG1hbmFnZXIsIGFyZ3MsIGR5bmFtaWNTY29wZSkpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW1wiJE9QRVJBTkRcIl1cbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVDb21wb25lbnRPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJ1cGRhdGUtY29tcG9uZW50XCI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBjb21wb25lbnQ6IENvbXBvbmVudCxcbiAgICBwcml2YXRlIG1hbmFnZXI6IENvbXBvbmVudE1hbmFnZXI8Q29tcG9uZW50PixcbiAgICBwcml2YXRlIGFyZ3M6IEV2YWx1YXRlZEFyZ3MsXG4gICAgcHJpdmF0ZSBkeW5hbWljU2NvcGU6IER5bmFtaWNTY29wZSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGxldCBjb21wb25lbnRUYWcgPSBtYW5hZ2VyLmdldFRhZyhjb21wb25lbnQpO1xuXG4gICAgaWYgKGNvbXBvbmVudFRhZykge1xuICAgICAgdGhpcy50YWcgPSBjb21iaW5lKFthcmdzLnRhZywgY29tcG9uZW50VGFnXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFnID0gYXJncy50YWc7XG4gICAgfVxuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyBjb21wb25lbnQsIG1hbmFnZXIsIGFyZ3MsIGR5bmFtaWNTY29wZSB9ID0gdGhpcztcblxuICAgIG1hbmFnZXIudXBkYXRlKGNvbXBvbmVudCwgYXJncywgZHluYW1pY1Njb3BlKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGFyZ3M6IFtKU09OLnN0cmluZ2lmeSh0aGlzLm5hbWUpXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERpZENyZWF0ZUVsZW1lbnRPcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwiZGlkLWNyZWF0ZS1lbGVtZW50XCI7XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgbGV0IG1hbmFnZXIgPSB2bS5mcmFtZS5nZXRNYW5hZ2VyKCk7XG4gICAgbGV0IGNvbXBvbmVudCA9IHZtLmZyYW1lLmdldENvbXBvbmVudCgpO1xuXG4gICAgbWFuYWdlci5kaWRDcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgdm0uc3RhY2soKS5jb25zdHJ1Y3RpbmcsIHZtLnN0YWNrKCkub3BlcmF0aW9ucyk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbXCIkQVJHU1wiXVxuICAgIH07XG4gIH1cbn1cblxuLy8gU2xvdyBwYXRoIGZvciBub24tc3BlY2lhbGl6ZWQgY29tcG9uZW50IGludm9jYXRpb25zLiBVc2VzIGFuIGludGVybmFsXG4vLyBuYW1lZCBsb29rdXAgb24gdGhlIGFyZ3MuXG5leHBvcnQgY2xhc3MgU2hhZG93QXR0cmlidXRlc09wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJzaGFkb3ctYXR0cmlidXRlc1wiO1xuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIGxldCBzaGFkb3cgPSB2bS5mcmFtZS5nZXRTaGFkb3coKTtcblxuICAgIGlmICghc2hhZG93KSByZXR1cm47XG5cbiAgICBsZXQgeyBuYW1lZCB9ID0gdm0uZnJhbWUuZ2V0QXJncygpO1xuXG4gICAgc2hhZG93LmZvckVhY2gobmFtZSA9PiB7XG4gICAgICB2bS5zdGFjaygpLnNldER5bmFtaWNBdHRyaWJ1dGUobmFtZSwgbmFtZWQuZ2V0KG5hbWUpIGFzIEZJWE1FPFBhdGhSZWZlcmVuY2U8c3RyaW5nPiwgJ3NldER5bmFtaWNBdHRyaWJ1dGUgc2hvdWxkIHRha2UgYW4gUmVmPE9wYXF1ZT4gaW5zdGVhZCc+LCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbXCIkQVJHU1wiXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERpZFJlbmRlckxheW91dE9wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJkaWQtcmVuZGVyLWxheW91dFwiO1xuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIGxldCBtYW5hZ2VyID0gdm0uZnJhbWUuZ2V0TWFuYWdlcigpO1xuICAgIGxldCBjb21wb25lbnQgPSB2bS5mcmFtZS5nZXRDb21wb25lbnQoKTtcbiAgICBsZXQgYm91bmRzID0gdm0uc3RhY2soKS5wb3BCbG9jaygpO1xuXG4gICAgbWFuYWdlci5kaWRSZW5kZXJMYXlvdXQoY29tcG9uZW50LCBib3VuZHMpO1xuXG4gICAgdm0uZW52LmRpZENyZWF0ZShjb21wb25lbnQsIG1hbmFnZXIpO1xuXG4gICAgdm0udXBkYXRlV2l0aChuZXcgRGlkVXBkYXRlTGF5b3V0T3Bjb2RlKG1hbmFnZXIsIGNvbXBvbmVudCwgYm91bmRzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERpZFVwZGF0ZUxheW91dE9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImRpZC11cGRhdGUtbGF5b3V0XCI7XG4gIHB1YmxpYyB0YWc6IFJldmlzaW9uVGFnID0gQ09OU1RBTlRfVEFHO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxDb21wb25lbnQ+LFxuICAgIHByaXZhdGUgY29tcG9uZW50OiBDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBib3VuZHM6IEJvdW5kc1xuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyBtYW5hZ2VyLCBjb21wb25lbnQsIGJvdW5kcyB9ID0gdGhpcztcblxuICAgIG1hbmFnZXIuZGlkVXBkYXRlTGF5b3V0KGNvbXBvbmVudCwgYm91bmRzKTtcblxuICAgIHZtLmVudi5kaWRVcGRhdGUoY29tcG9uZW50LCBtYW5hZ2VyKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xvc2VDb21wb25lbnRPcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwiY2xvc2UtY29tcG9uZW50XCI7XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgdm0ucG9wU2NvcGUoKTtcbiAgICB2bS5wb3BEeW5hbWljU2NvcGUoKTtcbiAgICB2bS5jb21taXRDYWNoZUdyb3VwKCk7XG4gIH1cbn1cbiJdfQ== -enifed('glimmer-runtime/lib/compiled/opcodes/content', ['exports', 'glimmer-runtime/lib/upsert', 'glimmer-runtime/lib/component/interfaces', 'glimmer-runtime/lib/opcodes', 'glimmer-runtime/lib/vm/update', 'glimmer-reference', 'glimmer-util', 'glimmer-runtime/lib/bounds', 'glimmer-runtime/lib/builder', 'glimmer-runtime/lib/compiler', 'glimmer-runtime/lib/compiled/opcodes/builder', 'glimmer-runtime/lib/references', 'glimmer-runtime/lib/syntax/core'], function (exports, _glimmerRuntimeLibUpsert, _glimmerRuntimeLibComponentInterfaces, _glimmerRuntimeLibOpcodes, _glimmerRuntimeLibVmUpdate, _glimmerReference, _glimmerUtil, _glimmerRuntimeLibBounds, _glimmerRuntimeLibBuilder, _glimmerRuntimeLibCompiler, _glimmerRuntimeLibCompiledOpcodesBuilder, _glimmerRuntimeLibReferences, _glimmerRuntimeLibSyntaxCore) { - 'use strict'; - - exports.normalizeTextValue = normalizeTextValue; - - function isEmpty(value) { - return value === null || value === undefined || typeof value['toString'] !== 'function'; + function handleRedirect(morph, env, scope, path, params, hash, template, inverse, visitor) { + if (!path) { + return false; } - function normalizeTextValue(value) { - if (isEmpty(value)) { - return ''; - } - return String(value); + var redirect = env.hooks.classify(env, scope, path); + if (redirect) { + switch (redirect) { + case 'component': + env.hooks.component(morph, env, scope, path, params, hash, { default: template, inverse: inverse }, visitor);break; + case 'inline': + env.hooks.inline(morph, env, scope, path, params, hash, visitor);break; + case 'block': + env.hooks.block(morph, env, scope, path, params, hash, template, inverse, visitor);break; + default: + throw new Error("Internal HTMLBars redirection to " + redirect + " not supported"); + } + return true; } - function normalizeTrustedValue(value) { - if (isEmpty(value)) { - return ''; - } - if (_glimmerRuntimeLibUpsert.isString(value)) { - return value; - } - if (_glimmerRuntimeLibUpsert.isSafeString(value)) { - return value.toHTML(); - } - if (_glimmerRuntimeLibUpsert.isNode(value)) { - return value; - } - return String(value); + if (handleKeyword(path, morph, env, scope, params, hash, template, inverse, visitor)) { + return true; } - function normalizeValue(value) { - if (isEmpty(value)) { - return ''; - } - if (_glimmerRuntimeLibUpsert.isString(value)) { - return value; - } - if (_glimmerRuntimeLibUpsert.isSafeString(value) || _glimmerRuntimeLibUpsert.isNode(value)) { - return value; - } - return String(value); - } - var AppendOpcode = (function (_Opcode) { - babelHelpers.inherits(AppendOpcode, _Opcode); + return false; + } - function AppendOpcode() { - _Opcode.apply(this, arguments); - } - - AppendOpcode.prototype.evaluate = function evaluate(vm) { - var reference = vm.frame.getOperand(); - var normalized = this.normalize(reference); - var value = undefined, - cache = undefined; - if (_glimmerReference.isConst(reference)) { - value = normalized.value(); - } else { - cache = new _glimmerReference.ReferenceCache(normalized); - value = cache.peek(); - } - var stack = vm.stack(); - var upsert = this.insert(vm.env.getAppendOperations(), stack, value); - var bounds = new _glimmerRuntimeLibBuilder.Fragment(upsert.bounds); - stack.newBounds(bounds); - if (cache /* i.e. !isConst(reference) */) { - vm.updateWith(this.updateWith(vm, reference, cache, bounds, upsert)); - } - }; - - AppendOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: ["$OPERAND"] - }; - }; - - return AppendOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.AppendOpcode = AppendOpcode; - - var GuardedAppendOpcode = (function (_AppendOpcode) { - babelHelpers.inherits(GuardedAppendOpcode, _AppendOpcode); - - function GuardedAppendOpcode(expression, symbolTable) { - _AppendOpcode.call(this); - this.expression = expression; - this.symbolTable = symbolTable; - this.deopted = null; - } - - GuardedAppendOpcode.prototype.evaluate = function evaluate(vm) { - if (this.deopted) { - vm.pushEvalFrame(this.deopted); - } else { - vm.evaluateOperand(this.expression); - var value = vm.frame.getOperand().value(); - if (_glimmerRuntimeLibComponentInterfaces.isComponentDefinition(value)) { - vm.pushEvalFrame(this.deopt(vm.env)); - } else { - _AppendOpcode.prototype.evaluate.call(this, vm); - } - } - }; - - GuardedAppendOpcode.prototype.deopt = function deopt(env) { - var _this = this; - - // At compile time, we determined that this append callsite might refer - // to a local variable/property lookup that resolves to a component - // definition at runtime. - // - // We could have eagerly compiled this callsite into something like this: - // - // {{#if (is-component-definition foo)}} - // {{component foo}} - // {{else}} - // {{foo}} - // {{/if}} - // - // However, in practice, there might be a large amout of these callsites - // and most of them would resolve to a simple value lookup. Therefore, we - // tried to be optimistic and assumed that the callsite will resolve to - // appending a simple value. - // - // However, we have reached here because at runtime, the guard conditional - // have detected that this callsite is indeed referring to a component - // definition object. Since this is likely going to be true for other - // instances of the same callsite, it is now appropiate to deopt into the - // expanded version that handles both cases. The compilation would look - // like this: - // - // PutValue(expression) - // Test(is-component-definition) - // Enter(BEGIN, END) - // BEGIN: Noop - // JumpUnless(VALUE) - // PutDynamicComponentDefinitionOpcode - // OpenComponent - // CloseComponent - // Jump(END) - // VALUE: Noop - // OptimizedAppend - // END: Noop - // Exit - // - // Keep in mind that even if we *don't* reach here at initial render time, - // it is still possible (although quite rare) that the simple value we - // encounter during initial render could later change into a component - // definition object at update time. That is handled by the "lazy deopt" - // code on the update side (scroll down for the next big block of comment). - var buffer = new _glimmerRuntimeLibCompiler.CompileIntoList(env, null); - var dsl = new _glimmerRuntimeLibCompiledOpcodesBuilder.default(buffer, this.symbolTable, env); - dsl.putValue(this.expression); - dsl.test(IsComponentDefinitionReference.create); - dsl.simpleBlock(function (dsl, BEGIN, END) { - dsl.jumpUnless('VALUE'); - dsl.putDynamicComponentDefinition(); - dsl.openComponent(_glimmerRuntimeLibSyntaxCore.Args.empty()); - dsl.closeComponent(); - dsl.jump(END); - dsl.label('VALUE'); - dsl.append(new _this.AppendOpcode()); - }); - var deopted = this.deopted = dsl.toOpSeq(); - // From this point on, we have essentially replaced ourselve with a new set - // of opcodes. Since we will always be executing the new/deopted code, it's - // a good idea (as a pattern) to null out any unneeded fields here to avoid - // holding on to unneeded/stale objects: - this.expression = null; - return deopted; - }; - - GuardedAppendOpcode.prototype.toJSON = function toJSON() { - var guid = this._guid; - var type = this.type; - var deopted = this.deopted; - - if (deopted) { - return { - guid: guid, - type: type, - deopted: true, - children: deopted.toArray().map(function (op) { - return op.toJSON(); - }) - }; - } else { - return { - guid: guid, - type: type, - args: [this.expression.toJSON()] - }; - } - }; - - return GuardedAppendOpcode; - })(AppendOpcode); - - exports.GuardedAppendOpcode = GuardedAppendOpcode; - - var IsComponentDefinitionReference = (function (_ConditionalReference) { - babelHelpers.inherits(IsComponentDefinitionReference, _ConditionalReference); - - function IsComponentDefinitionReference() { - _ConditionalReference.apply(this, arguments); - } - - IsComponentDefinitionReference.create = function create(inner) { - return new IsComponentDefinitionReference(inner); - }; - - IsComponentDefinitionReference.prototype.toBool = function toBool(value) { - return _glimmerRuntimeLibComponentInterfaces.isComponentDefinition(value); - }; - - return IsComponentDefinitionReference; - })(_glimmerRuntimeLibReferences.ConditionalReference); - - var UpdateOpcode = (function (_UpdatingOpcode) { - babelHelpers.inherits(UpdateOpcode, _UpdatingOpcode); - - function UpdateOpcode(cache, bounds, upsert) { - _UpdatingOpcode.call(this); - this.cache = cache; - this.bounds = bounds; - this.upsert = upsert; - this.tag = cache.tag; - } - - UpdateOpcode.prototype.evaluate = function evaluate(vm) { - var value = this.cache.revalidate(); - if (_glimmerReference.isModified(value)) { - var bounds = this.bounds; - var upsert = this.upsert; - var dom = vm.dom; - - if (!this.upsert.update(dom, value)) { - var cursor = new _glimmerRuntimeLibBounds.Cursor(bounds.parentElement(), _glimmerRuntimeLibBounds.clear(bounds)); - upsert = this.upsert = this.insert(vm.env.getAppendOperations(), cursor, value); - } - bounds.update(upsert.bounds); - } - }; - - UpdateOpcode.prototype.toJSON = function toJSON() { - var guid = this._guid; - var type = this.type; - var cache = this.cache; - - return { - guid: guid, - type: type, - details: { lastValue: JSON.stringify(cache.peek()) } - }; - }; - - return UpdateOpcode; - })(_glimmerRuntimeLibOpcodes.UpdatingOpcode); - - var GuardedUpdateOpcode = (function (_UpdateOpcode) { - babelHelpers.inherits(GuardedUpdateOpcode, _UpdateOpcode); - - function GuardedUpdateOpcode(reference, cache, bounds, upsert, appendOpcode, state) { - _UpdateOpcode.call(this, cache, bounds, upsert); - this.reference = reference; - this.appendOpcode = appendOpcode; - this.state = state; - this.deopted = null; - this.tag = this._tag = new _glimmerReference.UpdatableTag(this.tag); - } - - GuardedUpdateOpcode.prototype.evaluate = function evaluate(vm) { - if (this.deopted) { - vm.evaluateOpcode(this.deopted); - } else { - if (_glimmerRuntimeLibComponentInterfaces.isComponentDefinition(this.reference.value())) { - this.lazyDeopt(vm); - } else { - _UpdateOpcode.prototype.evaluate.call(this, vm); - } - } - }; - - GuardedUpdateOpcode.prototype.lazyDeopt = function lazyDeopt(vm) { - // Durign initial render, we know that the reference does not contain a - // component definition, so we optimistically assumed that this append - // is just a normal append. However, at update time, we discovered that - // the reference has switched into containing a component definition, so - // we need to do a "lazy deopt", simulating what would have happened if - // we had decided to perform the deopt in the first place during initial - // render. - // - // More concretely, we would have expanded the curly into a if/else, and - // based on whether the value is a component definition or not, we would - // have entered either the dynamic component branch or the simple value - // branch. - // - // Since we rendered a simple value during initial render (and all the - // updates up until this point), we need to pretend that the result is - // produced by the "VALUE" branch of the deopted append opcode: - // - // Try(BEGIN, END) - // Assert(IsComponentDefinition, expected=false) - // OptimizedUpdate - // - // In this case, because the reference has switched from being a simple - // value into a component definition, what would have happened is that - // the assert would throw, causing the Try opcode to teardown the bounds - // and rerun the original append opcode. - // - // Since the Try opcode would have nuked the updating opcodes anyway, we - // wouldn't have to worry about simulating those. All we have to do is to - // execute the Try opcode and immediately throw. - var bounds = this.bounds; - var appendOpcode = this.appendOpcode; - var state = this.state; - - var appendOps = appendOpcode.deopt(vm.env); - var enter = appendOps.head().next.next; - var ops = enter.slice; - var tracker = new _glimmerRuntimeLibBuilder.UpdatableBlockTracker(bounds.parentElement()); - tracker.newBounds(this.bounds); - var children = new _glimmerUtil.LinkedList(); - state.frame['condition'] = IsComponentDefinitionReference.create(state.frame['operand']); - var deopted = this.deopted = new _glimmerRuntimeLibVmUpdate.TryOpcode(ops, state, tracker, children); - this._tag.update(deopted.tag); - vm.evaluateOpcode(deopted); - vm.throw(); - // From this point on, we have essentially replaced ourselve with a new - // opcode. Since we will always be executing the new/deopted code, it's a - // good idea (as a pattern) to null out any unneeded fields here to avoid - // holding on to unneeded/stale objects: - this._tag = null; - this.reference = null; - this.cache = null; - this.bounds = null; - this.upsert = null; - this.appendOpcode = null; - this.state = null; - }; - - GuardedUpdateOpcode.prototype.toJSON = function toJSON() { - var guid = this._guid; - var type = this.type; - var deopted = this.deopted; - - if (deopted) { - return { - guid: guid, - type: type, - deopted: true, - children: [deopted.toJSON()] - }; - } else { - return _UpdateOpcode.prototype.toJSON.call(this); - } - }; - - return GuardedUpdateOpcode; - })(UpdateOpcode); - - var OptimizedCautiousAppendOpcode = (function (_AppendOpcode2) { - babelHelpers.inherits(OptimizedCautiousAppendOpcode, _AppendOpcode2); - - function OptimizedCautiousAppendOpcode() { - _AppendOpcode2.apply(this, arguments); - this.type = 'optimized-cautious-append'; - } - - OptimizedCautiousAppendOpcode.prototype.normalize = function normalize(reference) { - return _glimmerReference.map(reference, normalizeValue); - }; - - OptimizedCautiousAppendOpcode.prototype.insert = function insert(dom, cursor, value) { - return _glimmerRuntimeLibUpsert.cautiousInsert(dom, cursor, value); - }; - - OptimizedCautiousAppendOpcode.prototype.updateWith = function updateWith(vm, reference, cache, bounds, upsert) { - return new OptimizedCautiousUpdateOpcode(cache, bounds, upsert); - }; - - return OptimizedCautiousAppendOpcode; - })(AppendOpcode); - - exports.OptimizedCautiousAppendOpcode = OptimizedCautiousAppendOpcode; - - var OptimizedCautiousUpdateOpcode = (function (_UpdateOpcode2) { - babelHelpers.inherits(OptimizedCautiousUpdateOpcode, _UpdateOpcode2); - - function OptimizedCautiousUpdateOpcode() { - _UpdateOpcode2.apply(this, arguments); - this.type = 'optimized-cautious-update'; - } - - OptimizedCautiousUpdateOpcode.prototype.insert = function insert(dom, cursor, value) { - return _glimmerRuntimeLibUpsert.cautiousInsert(dom, cursor, value); - }; - - return OptimizedCautiousUpdateOpcode; - })(UpdateOpcode); - - var GuardedCautiousAppendOpcode = (function (_GuardedAppendOpcode) { - babelHelpers.inherits(GuardedCautiousAppendOpcode, _GuardedAppendOpcode); - - function GuardedCautiousAppendOpcode() { - _GuardedAppendOpcode.apply(this, arguments); - this.type = 'guarded-cautious-append'; - this.AppendOpcode = OptimizedCautiousAppendOpcode; - } - - GuardedCautiousAppendOpcode.prototype.normalize = function normalize(reference) { - return _glimmerReference.map(reference, normalizeValue); - }; - - GuardedCautiousAppendOpcode.prototype.insert = function insert(dom, cursor, value) { - return _glimmerRuntimeLibUpsert.cautiousInsert(dom, cursor, value); - }; - - GuardedCautiousAppendOpcode.prototype.updateWith = function updateWith(vm, reference, cache, bounds, upsert) { - return new GuardedCautiousUpdateOpcode(reference, cache, bounds, upsert, this, vm.capture()); - }; - - return GuardedCautiousAppendOpcode; - })(GuardedAppendOpcode); - - exports.GuardedCautiousAppendOpcode = GuardedCautiousAppendOpcode; - - var GuardedCautiousUpdateOpcode = (function (_GuardedUpdateOpcode) { - babelHelpers.inherits(GuardedCautiousUpdateOpcode, _GuardedUpdateOpcode); - - function GuardedCautiousUpdateOpcode() { - _GuardedUpdateOpcode.apply(this, arguments); - this.type = 'guarded-cautious-update'; - } - - GuardedCautiousUpdateOpcode.prototype.insert = function insert(dom, cursor, value) { - return _glimmerRuntimeLibUpsert.cautiousInsert(dom, cursor, value); - }; - - return GuardedCautiousUpdateOpcode; - })(GuardedUpdateOpcode); - - var OptimizedTrustingAppendOpcode = (function (_AppendOpcode3) { - babelHelpers.inherits(OptimizedTrustingAppendOpcode, _AppendOpcode3); - - function OptimizedTrustingAppendOpcode() { - _AppendOpcode3.apply(this, arguments); - this.type = 'optimized-trusting-append'; - } - - OptimizedTrustingAppendOpcode.prototype.normalize = function normalize(reference) { - return _glimmerReference.map(reference, normalizeTrustedValue); - }; - - OptimizedTrustingAppendOpcode.prototype.insert = function insert(dom, cursor, value) { - return _glimmerRuntimeLibUpsert.trustingInsert(dom, cursor, value); - }; - - OptimizedTrustingAppendOpcode.prototype.updateWith = function updateWith(vm, reference, cache, bounds, upsert) { - return new OptimizedTrustingUpdateOpcode(cache, bounds, upsert); - }; - - return OptimizedTrustingAppendOpcode; - })(AppendOpcode); - - exports.OptimizedTrustingAppendOpcode = OptimizedTrustingAppendOpcode; - - var OptimizedTrustingUpdateOpcode = (function (_UpdateOpcode3) { - babelHelpers.inherits(OptimizedTrustingUpdateOpcode, _UpdateOpcode3); - - function OptimizedTrustingUpdateOpcode() { - _UpdateOpcode3.apply(this, arguments); - this.type = 'optimized-trusting-update'; - } - - OptimizedTrustingUpdateOpcode.prototype.insert = function insert(dom, cursor, value) { - return _glimmerRuntimeLibUpsert.trustingInsert(dom, cursor, value); - }; - - return OptimizedTrustingUpdateOpcode; - })(UpdateOpcode); - - var GuardedTrustingAppendOpcode = (function (_GuardedAppendOpcode2) { - babelHelpers.inherits(GuardedTrustingAppendOpcode, _GuardedAppendOpcode2); - - function GuardedTrustingAppendOpcode() { - _GuardedAppendOpcode2.apply(this, arguments); - this.type = 'guarded-trusting-append'; - this.AppendOpcode = OptimizedTrustingAppendOpcode; - } - - GuardedTrustingAppendOpcode.prototype.normalize = function normalize(reference) { - return _glimmerReference.map(reference, normalizeTrustedValue); - }; - - GuardedTrustingAppendOpcode.prototype.insert = function insert(dom, cursor, value) { - return _glimmerRuntimeLibUpsert.trustingInsert(dom, cursor, value); - }; - - GuardedTrustingAppendOpcode.prototype.updateWith = function updateWith(vm, reference, cache, bounds, upsert) { - return new GuardedTrustingUpdateOpcode(reference, cache, bounds, upsert, this, vm.capture()); - }; - - return GuardedTrustingAppendOpcode; - })(GuardedAppendOpcode); - - exports.GuardedTrustingAppendOpcode = GuardedTrustingAppendOpcode; - - var GuardedTrustingUpdateOpcode = (function (_GuardedUpdateOpcode2) { - babelHelpers.inherits(GuardedTrustingUpdateOpcode, _GuardedUpdateOpcode2); - - function GuardedTrustingUpdateOpcode() { - _GuardedUpdateOpcode2.apply(this, arguments); - this.type = 'trusting-update'; - } - - GuardedTrustingUpdateOpcode.prototype.insert = function insert(dom, cursor, value) { - return _glimmerRuntimeLibUpsert.trustingInsert(dom, cursor, value); - }; - - return GuardedTrustingUpdateOpcode; - })(GuardedUpdateOpcode); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvb3Bjb2Rlcy9jb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBK0JBLGFBQUEsT0FBQSxDQUFpQixLQUFhLEVBQUE7QUFDNUIsZUFBTyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssVUFBVSxDQUFDO0tBQ3pGOztBQUVELGFBQUEsa0JBQUEsQ0FBbUMsS0FBYSxFQUFBO0FBQzlDLFlBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2xCLG1CQUFPLEVBQUUsQ0FBQztTQUNYO0FBQ0QsZUFBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDdEI7O0FBRUQsYUFBQSxxQkFBQSxDQUErQixLQUFhLEVBQUE7QUFDMUMsWUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDbEIsbUJBQU8sRUFBRSxDQUFDO1NBQ1g7QUFDRCxZQUFJLHlCQXZDSixRQUFRLENBdUNLLEtBQUssQ0FBQyxFQUFFO0FBQ25CLG1CQUFPLEtBQUssQ0FBQztTQUNkO0FBQ0QsWUFBSSx5QkE1Q0osWUFBWSxDQTRDSyxLQUFLLENBQUMsRUFBRTtBQUN2QixtQkFBTyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDdkI7QUFDRCxZQUFJLHlCQTlDSixNQUFNLENBOENLLEtBQUssQ0FBQyxFQUFFO0FBQ2pCLG1CQUFPLEtBQUssQ0FBQztTQUNkO0FBQ0QsZUFBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDdEI7QUFFRCxhQUFBLGNBQUEsQ0FBd0IsS0FBYSxFQUFBO0FBQ25DLFlBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2xCLG1CQUFPLEVBQUUsQ0FBQztTQUNYO0FBQ0QsWUFBSSx5QkF2REosUUFBUSxDQXVESyxLQUFLLENBQUMsRUFBRTtBQUNuQixtQkFBTyxLQUFLLENBQUM7U0FDZDtBQUNE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LE1BQWMsRUFBQTtBQUNuSSxtQkFBTyxJQUFJLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDOUY7O2VBZkgsMkJBQUE7T0FBaUQsbUJBQW1COzs7O1FBa0JwRSwyQkFBQTs4QkFBQSwyQkFBQTs7QUFBQSxpQkFBQSwyQkFBQSxHQUFBO0FBQTBDLDhDQUFBLFNBQUEsQ0FBQSxDQUFzQztBQUM5RSxnQkFBQSxDQUFBLElBQUksR0FBRyxpQkFBaUIsQ0FBQztTQUsxQjs7QUFORCxtQ0FBQSxXQUdZLE1BQU0sR0FBQSxnQkFBQyxHQUF3QixFQUFFLE1BQWMsRUFBRSxLQUF3QixFQUFBO0FBQ2pGLG1CQUFPLHlCQXRkVCxjQUFjLENBc2RVLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0M7O2VBTEgsMkJBQUE7T0FBMEMsbUJBQW1CIiwiZmlsZSI6ImNvbnRlbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVXBzZXJ0LCB7XG4gIEluc2VydGlvbixcbiAgQ2F1dGlvdXNJbnNlcnRpb24sXG4gIFRydXN0aW5nSW5zZXJ0aW9uLFxuXG4gIGlzU2FmZVN0cmluZyxcbiAgaXNOb2RlLFxuICBpc1N0cmluZyxcblxuICBjYXV0aW91c0luc2VydCxcbiAgdHJ1c3RpbmdJbnNlcnRcbn0gZnJvbSAnLi4vLi4vdXBzZXJ0JztcbmltcG9ydCB7IGlzQ29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERPTVRyZWVDb25zdHJ1Y3Rpb24gfSBmcm9tICcuLi8uLi9kb20vaGVscGVyJztcbmltcG9ydCB7IE9wU2VxLCBPcGNvZGUsIE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDb21waWxlZEV4cHJlc3Npb24gfSBmcm9tICcuLi9leHByZXNzaW9ucyc7XG5pbXBvcnQgeyBWTSwgVXBkYXRpbmdWTSB9IGZyb20gJy4uLy4uL3ZtJztcbmltcG9ydCB7IFRyeU9wY29kZSwgVk1TdGF0ZSB9IGZyb20gJy4uLy4uL3ZtL3VwZGF0ZSc7XG5pbXBvcnQgeyBFbnRlck9wY29kZSB9IGZyb20gJy4vdm0nO1xuaW1wb3J0IHsgUmVmZXJlbmNlLCBSZWZlcmVuY2VDYWNoZSwgVXBkYXRhYmxlVGFnLCBpc01vZGlmaWVkLCBpc0NvbnN0LCBtYXAgfSBmcm9tICdnbGltbWVyLXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBPcGFxdWUsIExpbmtlZExpc3QgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuaW1wb3J0IHsgQ3Vyc29yLCBjbGVhciB9IGZyb20gJy4uLy4uL2JvdW5kcyc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJy4uLy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgQ29tcGlsZUludG9MaXN0IH0gZnJvbSAnLi4vLi4vY29tcGlsZXInO1xuaW1wb3J0IE9wY29kZUJ1aWxkZXJEU0wgZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7IENvbmRpdGlvbmFsUmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcyc7XG5pbXBvcnQgeyBBcmdzIH0gZnJvbSAnLi4vLi4vc3ludGF4L2NvcmUnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBVcGRhdGFibGVCbG9ja1RyYWNrZXIgfSBmcm9tICcuLi8uLi9idWlsZGVyJztcbmltcG9ydCBTeW1ib2xUYWJsZSBmcm9tICcuLi8uLi9zeW1ib2wtdGFibGUnO1xuXG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlOiBPcGFxdWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlWyd0b1N0cmluZyddICE9PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVGV4dFZhbHVlKHZhbHVlOiBPcGFxdWUpOiBzdHJpbmcge1xuICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRydXN0ZWRWYWx1ZSh2YWx1ZTogT3BhcXVlKTogVHJ1c3RpbmdJbnNlcnRpb24ge1xuICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTYWZlU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS50b0hUTUwoKTtcbiAgfVxuICBpZiAoaXNOb2RlKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWU6IE9wYXF1ZSk6IENhdXRpb3VzSW5zZXJ0aW9uIHtcbiAgaWYgKGlzRW1wdHkodmFsdWUpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU2FmZVN0cmluZyh2YWx1ZSkgfHwgaXNOb2RlKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFwcGVuZE9wY29kZTxUIGV4dGVuZHMgSW5zZXJ0aW9uPiBleHRlbmRzIE9wY29kZSB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxUPjtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVCk6IFVwc2VydDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHVwZGF0ZVdpdGgodm06IFZNLCByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VD4sIGJvdW5kczogRnJhZ21lbnQsIHVwc2VydDogVXBzZXJ0KTogVXBkYXRpbmdPcGNvZGU7XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgbGV0IHJlZmVyZW5jZSA9IHZtLmZyYW1lLmdldE9wZXJhbmQoKTtcbiAgICBsZXQgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplKHJlZmVyZW5jZSk7XG5cbiAgICBsZXQgdmFsdWUsIGNhY2hlO1xuXG4gICAgaWYgKGlzQ29uc3QocmVmZXJlbmNlKSkge1xuICAgICAgdmFsdWUgPSBub3JtYWxpemVkLnZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKG5vcm1hbGl6ZWQpO1xuICAgICAgdmFsdWUgPSBjYWNoZS5wZWVrKCk7XG4gICAgfVxuXG4gICAgbGV0IHN0YWNrID0gdm0uc3RhY2soKTtcbiAgICBsZXQgdXBzZXJ0ID0gdGhpcy5pbnNlcnQodm0uZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKSwgc3RhY2ssIHZhbHVlKTtcbiAgICBsZXQgYm91bmRzID0gbmV3IEZyYWdtZW50KHVwc2VydC5ib3VuZHMpO1xuXG4gICAgc3RhY2submV3Qm91bmRzKGJvdW5kcyk7XG5cbiAgICBpZiAoY2FjaGUgLyogaS5lLiAhaXNDb25zdChyZWZlcmVuY2UpICovKSB7XG4gICAgICB2bS51cGRhdGVXaXRoKHRoaXMudXBkYXRlV2l0aCh2bSwgcmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbXCIkT1BFUkFORFwiXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEd1YXJkZWRBcHBlbmRPcGNvZGU8VCBleHRlbmRzIEluc2VydGlvbj4gZXh0ZW5kcyBBcHBlbmRPcGNvZGU8VD4ge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgQXBwZW5kT3Bjb2RlOiB0eXBlb2YgT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUgfCB0eXBlb2YgT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGU7XG4gIHByaXZhdGUgZGVvcHRlZDogT3BTZXEgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXhwcmVzc2lvbjogQ29tcGlsZWRFeHByZXNzaW9uPGFueT4sIHByaXZhdGUgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIGlmICh0aGlzLmRlb3B0ZWQpIHtcbiAgICAgIHZtLnB1c2hFdmFsRnJhbWUodGhpcy5kZW9wdGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uZXZhbHVhdGVPcGVyYW5kKHRoaXMuZXhwcmVzc2lvbik7XG5cbiAgICAgIGxldCB2YWx1ZSA9IHZtLmZyYW1lLmdldE9wZXJhbmQoKS52YWx1ZSgpO1xuXG4gICAgICBpZihpc0NvbXBvbmVudERlZmluaXRpb24odmFsdWUpKSB7XG4gICAgICAgIHZtLnB1c2hFdmFsRnJhbWUodGhpcy5kZW9wdCh2bS5lbnYpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1cGVyLmV2YWx1YXRlKHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVvcHQoZW52OiBFbnZpcm9ubWVudCk6IE9wU2VxIHsgLy8gUHVibGljIGJlY2F1c2UgaXQncyB1c2VkIGluIHRoZSBsYXp5IGRlb3B0XG4gICAgLy8gQXQgY29tcGlsZSB0aW1lLCB3ZSBkZXRlcm1pbmVkIHRoYXQgdGhpcyBhcHBlbmQgY2FsbHNpdGUgbWlnaHQgcmVmZXJcbiAgICAvLyB0byBhIGxvY2FsIHZhcmlhYmxlL3Byb3BlcnR5IGxvb2t1cCB0aGF0IHJlc29sdmVzIHRvIGEgY29tcG9uZW50XG4gICAgLy8gZGVmaW5pdGlvbiBhdCBydW50aW1lLlxuICAgIC8vXG4gICAgLy8gV2UgY291bGQgaGF2ZSBlYWdlcmx5IGNvbXBpbGVkIHRoaXMgY2FsbHNpdGUgaW50byBzb21ldGhpbmcgbGlrZSB0aGlzOlxuICAgIC8vXG4gICAgLy8gICB7eyNpZiAoaXMtY29tcG9uZW50LWRlZmluaXRpb24gZm9vKX19XG4gICAgLy8gICAgIHt7Y29tcG9uZW50IGZvb319XG4gICAgLy8gICB7e2Vsc2V9fVxuICAgIC8vICAgICB7e2Zvb319XG4gICAgLy8gICB7ey9pZn19XG4gICAgLy9cbiAgICAvLyBIb3dldmVyLCBpbiBwcmFjdGljZSwgdGhlcmUgbWlnaHQgYmUgYSBsYXJnZSBhbW91dCBvZiB0aGVzZSBjYWxsc2l0ZXNcbiAgICAvLyBhbmQgbW9zdCBvZiB0aGVtIHdvdWxkIHJlc29sdmUgdG8gYSBzaW1wbGUgdmFsdWUgbG9va3VwLiBUaGVyZWZvcmUsIHdlXG4gICAgLy8gdHJpZWQgdG8gYmUgb3B0aW1pc3RpYyBhbmQgYXNzdW1lZCB0aGF0IHRoZSBjYWxsc2l0ZSB3aWxsIHJlc29sdmUgdG9cbiAgICAvLyBhcHBlbmRpbmcgYSBzaW1wbGUgdmFsdWUuXG4gICAgLy9cbiAgICAvLyBIb3dldmVyLCB3ZSBoYXZlIHJlYWNoZWQgaGVyZSBiZWNhdXNlIGF0IHJ1bnRpbWUsIHRoZSBndWFyZCBjb25kaXRpb25hbFxuICAgIC8vIGhhdmUgZGV0ZWN0ZWQgdGhhdCB0aGlzIGNhbGxzaXRlIGlzIGluZGVlZCByZWZlcnJpbmcgdG8gYSBjb21wb25lbnRcbiAgICAvLyBkZWZpbml0aW9uIG9iamVjdC4gU2luY2UgdGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgdHJ1ZSBmb3Igb3RoZXJcbiAgICAvLyBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2FsbHNpdGUsIGl0IGlzIG5vdyBhcHByb3BpYXRlIHRvIGRlb3B0IGludG8gdGhlXG4gICAgLy8gZXhwYW5kZWQgdmVyc2lvbiB0aGF0IGhhbmRsZXMgYm90aCBjYXNlcy4gVGhlIGNvbXBpbGF0aW9uIHdvdWxkIGxvb2tcbiAgICAvLyBsaWtlIHRoaXM6XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAgIFB1dFZhbHVlKGV4cHJlc3Npb24pXG4gICAgLy8gICAgICAgICAgICAgICBUZXN0KGlzLWNvbXBvbmVudC1kZWZpbml0aW9uKVxuICAgIC8vICAgICAgICAgICAgICAgRW50ZXIoQkVHSU4sIEVORClcbiAgICAvLyAgIEJFR0lOOiAgICAgIE5vb3BcbiAgICAvLyAgICAgICAgICAgICAgIEp1bXBVbmxlc3MoVkFMVUUpXG4gICAgLy8gICAgICAgICAgICAgICBQdXREeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbk9wY29kZVxuICAgIC8vICAgICAgICAgICAgICAgT3BlbkNvbXBvbmVudFxuICAgIC8vICAgICAgICAgICAgICAgQ2xvc2VDb21wb25lbnRcbiAgICAvLyAgICAgICAgICAgICAgIEp1bXAoRU5EKVxuICAgIC8vICAgVkFMVUU6ICAgICAgTm9vcFxuICAgIC8vICAgICAgICAgICAgICAgT3B0aW1pemVkQXBwZW5kXG4gICAgLy8gICBFTkQ6ICAgICAgICBOb29wXG4gICAgLy8gICAgICAgICAgICAgICBFeGl0XG4gICAgLy9cbiAgICAvLyBLZWVwIGluIG1pbmQgdGhhdCBldmVuIGlmIHdlICpkb24ndCogcmVhY2ggaGVyZSBhdCBpbml0aWFsIHJlbmRlciB0aW1lLFxuICAgIC8vIGl0IGlzIHN0aWxsIHBvc3NpYmxlIChhbHRob3VnaCBxdWl0ZSByYXJlKSB0aGF0IHRoZSBzaW1wbGUgdmFsdWUgd2VcbiAgICAvLyBlbmNvdW50ZXIgZHVyaW5nIGluaXRpYWwgcmVuZGVyIGNvdWxkIGxhdGVyIGNoYW5nZSBpbnRvIGEgY29tcG9uZW50XG4gICAgLy8gZGVmaW5pdGlvbiBvYmplY3QgYXQgdXBkYXRlIHRpbWUuIFRoYXQgaXMgaGFuZGxlZCBieSB0aGUgXCJsYXp5IGRlb3B0XCJcbiAgICAvLyBjb2RlIG9uIHRoZSB1cGRhdGUgc2lkZSAoc2Nyb2xsIGRvd24gZm9yIHRoZSBuZXh0IGJpZyBibG9jayBvZiBjb21tZW50KS5cblxuICAgIGxldCBidWZmZXIgPSBuZXcgQ29tcGlsZUludG9MaXN0KGVudiwgbnVsbCk7XG4gICAgbGV0IGRzbCA9IG5ldyBPcGNvZGVCdWlsZGVyRFNMKGJ1ZmZlciwgdGhpcy5zeW1ib2xUYWJsZSwgZW52KTtcblxuICAgIGRzbC5wdXRWYWx1ZSh0aGlzLmV4cHJlc3Npb24pO1xuICAgIGRzbC50ZXN0KElzQ29tcG9uZW50RGVmaW5pdGlvblJlZmVyZW5jZS5jcmVhdGUpO1xuXG4gICAgZHNsLnNpbXBsZUJsb2NrKChkc2wsIEJFR0lOLCBFTkQpID0+IHtcbiAgICAgIGRzbC5qdW1wVW5sZXNzKCdWQUxVRScpO1xuICAgICAgZHNsLnB1dER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uKCk7XG4gICAgICBkc2wub3BlbkNvbXBvbmVudChBcmdzLmVtcHR5KCkpO1xuICAgICAgZHNsLmNsb3NlQ29tcG9uZW50KCk7XG4gICAgICBkc2wuanVtcChFTkQpO1xuICAgICAgZHNsLmxhYmVsKCdWQUxVRScpO1xuICAgICAgZHNsLmFwcGVuZChuZXcgdGhpcy5BcHBlbmRPcGNvZGUoKSk7XG4gICAgfSk7XG5cbiAgICBsZXQgZGVvcHRlZCA9IHRoaXMuZGVvcHRlZCA9IGRzbC50b09wU2VxKCk7XG5cbiAgICAvLyBGcm9tIHRoaXMgcG9pbnQgb24sIHdlIGhhdmUgZXNzZW50aWFsbHkgcmVwbGFjZWQgb3Vyc2VsdmUgd2l0aCBhIG5ldyBzZXRcbiAgICAvLyBvZiBvcGNvZGVzLiBTaW5jZSB3ZSB3aWxsIGFsd2F5cyBiZSBleGVjdXRpbmcgdGhlIG5ldy9kZW9wdGVkIGNvZGUsIGl0J3NcbiAgICAvLyBhIGdvb2QgaWRlYSAoYXMgYSBwYXR0ZXJuKSB0byBudWxsIG91dCBhbnkgdW5uZWVkZWQgZmllbGRzIGhlcmUgdG8gYXZvaWRcbiAgICAvLyBob2xkaW5nIG9uIHRvIHVubmVlZGVkL3N0YWxlIG9iamVjdHM6XG5cbiAgICB0aGlzLmV4cHJlc3Npb24gPSBudWxsO1xuXG4gICAgcmV0dXJuIGRlb3B0ZWQ7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgX2d1aWQ6IGd1aWQsIHR5cGUsIGRlb3B0ZWQgfSA9IHRoaXM7XG5cbiAgICBpZiAoZGVvcHRlZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ3VpZCxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgZGVvcHRlZDogdHJ1ZSxcbiAgICAgICAgY2hpbGRyZW46IGRlb3B0ZWQudG9BcnJheSgpLm1hcChvcCA9PiBvcC50b0pTT04oKSlcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGd1aWQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGFyZ3M6IFt0aGlzLmV4cHJlc3Npb24udG9KU09OKCldXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBJc0NvbXBvbmVudERlZmluaXRpb25SZWZlcmVuY2UgZXh0ZW5kcyBDb25kaXRpb25hbFJlZmVyZW5jZSB7XG4gIHN0YXRpYyBjcmVhdGUoaW5uZXI6IFJlZmVyZW5jZTxPcGFxdWU+KTogSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlIHtcbiAgICByZXR1cm4gbmV3IElzQ29tcG9uZW50RGVmaW5pdGlvblJlZmVyZW5jZShpbm5lcik7XG4gIH1cblxuICB0b0Jvb2wodmFsdWU6IE9wYXF1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0NvbXBvbmVudERlZmluaXRpb24odmFsdWUpO1xuICB9XG59XG5cbmFic3RyYWN0IGNsYXNzIFVwZGF0ZU9wY29kZTxUIGV4dGVuZHMgSW5zZXJ0aW9uPiBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxUPixcbiAgICBwcm90ZWN0ZWQgYm91bmRzOiBGcmFnbWVudCxcbiAgICBwcm90ZWN0ZWQgdXBzZXJ0OiBVcHNlcnRcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IGNhY2hlLnRhZztcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFQpOiBVcHNlcnQ7XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmNhY2hlLnJldmFsaWRhdGUoKTtcblxuICAgIGlmIChpc01vZGlmaWVkKHZhbHVlKSkge1xuICAgICAgbGV0IHsgYm91bmRzLCB1cHNlcnQgfSA9IHRoaXM7XG4gICAgICBsZXQgeyBkb20gfSA9IHZtO1xuXG4gICAgICBpZighdGhpcy51cHNlcnQudXBkYXRlKGRvbSwgdmFsdWUpKSB7XG4gICAgICAgIGxldCBjdXJzb3IgPSBuZXcgQ3Vyc29yKGJvdW5kcy5wYXJlbnRFbGVtZW50KCksIGNsZWFyKGJvdW5kcykpO1xuICAgICAgICB1cHNlcnQgPSB0aGlzLnVwc2VydCA9IHRoaXMuaW5zZXJ0KHZtLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCksIGN1cnNvciwgdmFsdWUgYXMgVCk7XG4gICAgICB9XG5cbiAgICAgIGJvdW5kcy51cGRhdGUodXBzZXJ0LmJvdW5kcyk7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIGxldCB7IF9ndWlkOiBndWlkLCB0eXBlLCBjYWNoZSB9ID0gdGhpcztcblxuICAgIHJldHVybiB7XG4gICAgICBndWlkLFxuICAgICAgdHlwZSxcbiAgICAgIGRldGFpbHM6IHsgbGFzdFZhbHVlOiBKU09OLnN0cmluZ2lmeShjYWNoZS5wZWVrKCkpIH1cbiAgICB9O1xuICB9XG59XG5cbmFic3RyYWN0IGNsYXNzIEd1YXJkZWRVcGRhdGVPcGNvZGU8VCBleHRlbmRzIEluc2VydGlvbj4gZXh0ZW5kcyBVcGRhdGVPcGNvZGU8VD4ge1xuICBwcml2YXRlIF90YWc6IFVwZGF0YWJsZVRhZztcbiAgcHJpdmF0ZSBkZW9wdGVkOiBUcnlPcGNvZGUgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPixcbiAgICBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VD4sXG4gICAgYm91bmRzOiBGcmFnbWVudCxcbiAgICB1cHNlcnQ6IFVwc2VydCxcbiAgICBwcml2YXRlIGFwcGVuZE9wY29kZTogR3VhcmRlZEFwcGVuZE9wY29kZTxUPixcbiAgICBwcml2YXRlIHN0YXRlOiBWTVN0YXRlXG4gICkge1xuICAgIHN1cGVyKGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gICAgdGhpcy50YWcgPSB0aGlzLl90YWcgPSBuZXcgVXBkYXRhYmxlVGFnKHRoaXMudGFnKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgaWYgKHRoaXMuZGVvcHRlZCkge1xuICAgICAgdm0uZXZhbHVhdGVPcGNvZGUodGhpcy5kZW9wdGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzQ29tcG9uZW50RGVmaW5pdGlvbih0aGlzLnJlZmVyZW5jZS52YWx1ZSgpKSkge1xuICAgICAgICB0aGlzLmxhenlEZW9wdCh2bSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdXBlci5ldmFsdWF0ZSh2bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsYXp5RGVvcHQodm06IFVwZGF0aW5nVk0pIHtcbiAgICAvLyBEdXJpZ24gaW5pdGlhbCByZW5kZXIsIHdlIGtub3cgdGhhdCB0aGUgcmVmZXJlbmNlIGRvZXMgbm90IGNvbnRhaW4gYVxuICAgIC8vIGNvbXBvbmVudCBkZWZpbml0aW9uLCBzbyB3ZSBvcHRpbWlzdGljYWxseSBhc3N1bWVkIHRoYXQgdGhpcyBhcHBlbmRcbiAgICAvLyBpcyBqdXN0IGEgbm9ybWFsIGFwcGVuZC4gSG93ZXZlciwgYXQgdXBkYXRlIHRpbWUsIHdlIGRpc2NvdmVyZWQgdGhhdFxuICAgIC8vIHRoZSByZWZlcmVuY2UgaGFzIHN3aXRjaGVkIGludG8gY29udGFpbmluZyBhIGNvbXBvbmVudCBkZWZpbml0aW9uLCBzb1xuICAgIC8vIHdlIG5lZWQgdG8gZG8gYSBcImxhenkgZGVvcHRcIiwgc2ltdWxhdGluZyB3aGF0IHdvdWxkIGhhdmUgaGFwcGVuZWQgaWZcbiAgICAvLyB3ZSBoYWQgZGVjaWRlZCB0byBwZXJmb3JtIHRoZSBkZW9wdCBpbiB0aGUgZmlyc3QgcGxhY2UgZHVyaW5nIGluaXRpYWxcbiAgICAvLyByZW5kZXIuXG4gICAgLy9cbiAgICAvLyBNb3JlIGNvbmNyZXRlbHksIHdlIHdvdWxkIGhhdmUgZXhwYW5kZWQgdGhlIGN1cmx5IGludG8gYSBpZi9lbHNlLCBhbmRcbiAgICAvLyBiYXNlZCBvbiB3aGV0aGVyIHRoZSB2YWx1ZSBpcyBhIGNvbXBvbmVudCBkZWZpbml0aW9uIG9yIG5vdCwgd2Ugd291bGRcbiAgICAvLyBoYXZlIGVudGVyZWQgZWl0aGVyIHRoZSBkeW5hbWljIGNvbXBvbmVudCBicmFuY2ggb3IgdGhlIHNpbXBsZSB2YWx1ZVxuICAgIC8vIGJyYW5jaC5cbiAgICAvL1xuICAgIC8vIFNpbmNlIHdlIHJlbmRlcmVkIGEgc2ltcGxlIHZhbHVlIGR1cmluZyBpbml0aWFsIHJlbmRlciAoYW5kIGFsbCB0aGVcbiAgICAvLyB1cGRhdGVzIHVwIHVudGlsIHRoaXMgcG9pbnQpLCB3ZSBuZWVkIHRvIHByZXRlbmQgdGhhdCB0aGUgcmVzdWx0IGlzXG4gICAgLy8gcHJvZHVjZWQgYnkgdGhlIFwiVkFMVUVcIiBicmFuY2ggb2YgdGhlIGRlb3B0ZWQgYXBwZW5kIG9wY29kZTpcbiAgICAvL1xuICAgIC8vICAgVHJ5KEJFR0lOLCBFTkQpXG4gICAgLy8gICAgIEFzc2VydChJc0NvbXBvbmVudERlZmluaXRpb24sIGV4cGVjdGVkPWZhbHNlKVxuICAgIC8vICAgICBPcHRpbWl6ZWRVcGRhdGVcbiAgICAvL1xuICAgIC8vIEluIHRoaXMgY2FzZSwgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIGhhcyBzd2l0Y2hlZCBmcm9tIGJlaW5nIGEgc2ltcGxlXG4gICAgLy8gdmFsdWUgaW50byBhIGNvbXBvbmVudCBkZWZpbml0aW9uLCB3aGF0IHdvdWxkIGhhdmUgaGFwcGVuZWQgaXMgdGhhdFxuICAgIC8vIHRoZSBhc3NlcnQgd291bGQgdGhyb3csIGNhdXNpbmcgdGhlIFRyeSBvcGNvZGUgdG8gdGVhcmRvd24gdGhlIGJvdW5kc1xuICAgIC8vIGFuZCByZXJ1biB0aGUgb3JpZ2luYWwgYXBwZW5kIG9wY29kZS5cbiAgICAvL1xuICAgIC8vIFNpbmNlIHRoZSBUcnkgb3Bjb2RlIHdvdWxkIGhhdmUgbnVrZWQgdGhlIHVwZGF0aW5nIG9wY29kZXMgYW55d2F5LCB3ZVxuICAgIC8vIHdvdWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgc2ltdWxhdGluZyB0aG9zZS4gQWxsIHdlIGhhdmUgdG8gZG8gaXMgdG9cbiAgICAvLyBleGVjdXRlIHRoZSBUcnkgb3Bjb2RlIGFuZCBpbW1lZGlhdGVseSB0aHJvdy5cblxuICAgIGxldCB7IGJvdW5kcywgYXBwZW5kT3Bjb2RlLCBzdGF0ZSB9ID0gdGhpcztcblxuICAgIGxldCBhcHBlbmRPcHMgPSBhcHBlbmRPcGNvZGUuZGVvcHQodm0uZW52KTtcbiAgICBsZXQgZW50ZXIgICAgID0gYXBwZW5kT3BzLmhlYWQoKS5uZXh0Lm5leHQgYXMgRW50ZXJPcGNvZGU7XG4gICAgbGV0IG9wcyAgICAgICA9IGVudGVyLnNsaWNlO1xuXG4gICAgbGV0IHRyYWNrZXIgPSBuZXcgVXBkYXRhYmxlQmxvY2tUcmFja2VyKGJvdW5kcy5wYXJlbnRFbGVtZW50KCkpO1xuICAgIHRyYWNrZXIubmV3Qm91bmRzKHRoaXMuYm91bmRzKTtcblxuICAgIGxldCBjaGlsZHJlbiA9IG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpO1xuXG4gICAgc3RhdGUuZnJhbWVbJ2NvbmRpdGlvbiddID0gSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlLmNyZWF0ZShzdGF0ZS5mcmFtZVsnb3BlcmFuZCddKTtcblxuICAgIGxldCBkZW9wdGVkID0gdGhpcy5kZW9wdGVkID0gbmV3IFRyeU9wY29kZShvcHMsIHN0YXRlLCB0cmFja2VyLCBjaGlsZHJlbik7XG5cbiAgICB0aGlzLl90YWcudXBkYXRlKGRlb3B0ZWQudGFnKTtcblxuICAgIHZtLmV2YWx1YXRlT3Bjb2RlKGRlb3B0ZWQpO1xuICAgIHZtLnRocm93KCk7XG5cbiAgICAvLyBGcm9tIHRoaXMgcG9pbnQgb24sIHdlIGhhdmUgZXNzZW50aWFsbHkgcmVwbGFjZWQgb3Vyc2VsdmUgd2l0aCBhIG5ld1xuICAgIC8vIG9wY29kZS4gU2luY2Ugd2Ugd2lsbCBhbHdheXMgYmUgZXhlY3V0aW5nIHRoZSBuZXcvZGVvcHRlZCBjb2RlLCBpdCdzIGFcbiAgICAvLyBnb29kIGlkZWEgKGFzIGEgcGF0dGVybikgdG8gbnVsbCBvdXQgYW55IHVubmVlZGVkIGZpZWxkcyBoZXJlIHRvIGF2b2lkXG4gICAgLy8gaG9sZGluZyBvbiB0byB1bm5lZWRlZC9zdGFsZSBvYmplY3RzOlxuXG4gICAgdGhpcy5fdGFnICAgICAgICAgPSBudWxsO1xuICAgIHRoaXMucmVmZXJlbmNlICAgID0gbnVsbDtcbiAgICB0aGlzLmNhY2hlICAgICAgICA9IG51bGw7XG4gICAgdGhpcy5ib3VuZHMgICAgICAgPSBudWxsO1xuICAgIHRoaXMudXBzZXJ0ICAgICAgID0gbnVsbDtcbiAgICB0aGlzLmFwcGVuZE9wY29kZSA9IG51bGw7XG4gICAgdGhpcy5zdGF0ZSAgICAgICAgPSBudWxsO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIGxldCB7IF9ndWlkOiBndWlkLCB0eXBlLCBkZW9wdGVkIH0gPSB0aGlzO1xuXG4gICAgaWYgKGRlb3B0ZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGd1aWQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGRlb3B0ZWQ6IHRydWUsXG4gICAgICAgIGNoaWxkcmVuOiBbZGVvcHRlZC50b0pTT04oKV1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdXBlci50b0pTT04oKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlIGV4dGVuZHMgQXBwZW5kT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnb3B0aW1pemVkLWNhdXRpb3VzLWFwcGVuZCc7XG5cbiAgcHJvdGVjdGVkIG5vcm1hbGl6ZShyZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+KTogUmVmZXJlbmNlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gICAgcmV0dXJuIG1hcChyZWZlcmVuY2UsIG5vcm1hbGl6ZVZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IENhdXRpb3VzSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gY2F1dGlvdXNJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoKHZtOiBWTSwgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPENhdXRpb3VzSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBPcHRpbWl6ZWRDYXV0aW91c1VwZGF0ZU9wY29kZShjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIE9wdGltaXplZENhdXRpb3VzVXBkYXRlT3Bjb2RlIGV4dGVuZHMgVXBkYXRlT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnb3B0aW1pemVkLWNhdXRpb3VzLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHdWFyZGVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkQXBwZW5kT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnZ3VhcmRlZC1jYXV0aW91cy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBBcHBlbmRPcGNvZGUgPSBPcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZTtcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGgodm06IFZNLCByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8Q2F1dGlvdXNJbnNlcnRpb24+LCBib3VuZHM6IEZyYWdtZW50LCB1cHNlcnQ6IFVwc2VydCk6IFVwZGF0aW5nT3Bjb2RlIHtcbiAgICByZXR1cm4gbmV3IEd1YXJkZWRDYXV0aW91c1VwZGF0ZU9wY29kZShyZWZlcmVuY2UsIGNhY2hlLCBib3VuZHMsIHVwc2VydCwgdGhpcywgdm0uY2FwdHVyZSgpKTtcbiAgfVxufVxuXG5jbGFzcyBHdWFyZGVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkVXBkYXRlT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnZ3VhcmRlZC1jYXV0aW91cy11cGRhdGUnO1xuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IENhdXRpb3VzSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gY2F1dGlvdXNJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGUgZXh0ZW5kcyBBcHBlbmRPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtdHJ1c3RpbmctYXBwZW5kJztcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVHJ1c3RlZFZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoKHZtOiBWTSwgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFRydXN0aW5nSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBPcHRpbWl6ZWRUcnVzdGluZ1VwZGF0ZU9wY29kZShjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIE9wdGltaXplZFRydXN0aW5nVXBkYXRlT3Bjb2RlIGV4dGVuZHMgVXBkYXRlT3Bjb2RlPFRydXN0aW5nSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnb3B0aW1pemVkLXRydXN0aW5nLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVHJ1c3RpbmdJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHdWFyZGVkVHJ1c3RpbmdBcHBlbmRPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkQXBwZW5kT3Bjb2RlPFRydXN0aW5nSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnZ3VhcmRlZC10cnVzdGluZy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBBcHBlbmRPcGNvZGUgPSBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZTtcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVHJ1c3RlZFZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoKHZtOiBWTSwgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFRydXN0aW5nSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBHdWFyZGVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUocmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQsIHRoaXMsIHZtLmNhcHR1cmUoKSk7XG4gIH1cbn1cblxuY2xhc3MgR3VhcmRlZFRydXN0aW5nVXBkYXRlT3Bjb2RlIGV4dGVuZHMgR3VhcmRlZFVwZGF0ZU9wY29kZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICB0eXBlID0gJ3RydXN0aW5nLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVHJ1c3RpbmdJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG4iXX0= -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', 'glimmer-runtime/lib/compiled/opcodes/vm'], function (exports, _glimmerRuntimeLibOpcodes, _glimmerUtil, _glimmerReference, _glimmerRuntimeLibReferences, _glimmerRuntimeLibCompiledExpressionsValue, _glimmerRuntimeLibCompiledOpcodesVm) { - 'use strict'; - - var TextOpcode = (function (_Opcode) { - babelHelpers.inherits(TextOpcode, _Opcode); - - function TextOpcode(text) { - _Opcode.call(this); - this.text = text; - this.type = "text"; - } - - TextOpcode.prototype.evaluate = function evaluate(vm) { - vm.stack().appendText(this.text); - }; - - TextOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: [JSON.stringify(this.text)] - }; - }; - - return TextOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.TextOpcode = TextOpcode; - - var OpenPrimitiveElementOpcode = (function (_Opcode2) { - babelHelpers.inherits(OpenPrimitiveElementOpcode, _Opcode2); - - function OpenPrimitiveElementOpcode(tag) { - _Opcode2.call(this); - this.tag = tag; - this.type = "open-primitive-element"; - } - - OpenPrimitiveElementOpcode.prototype.evaluate = function evaluate(vm) { - vm.stack().openElement(this.tag); - }; - - OpenPrimitiveElementOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: [JSON.stringify(this.tag)] - }; - }; - - return OpenPrimitiveElementOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.OpenPrimitiveElementOpcode = OpenPrimitiveElementOpcode; - - var PushRemoteElementOpcode = (function (_Opcode3) { - babelHelpers.inherits(PushRemoteElementOpcode, _Opcode3); - - function PushRemoteElementOpcode() { - _Opcode3.apply(this, arguments); - this.type = "push-remote-element"; - } - - PushRemoteElementOpcode.prototype.evaluate = function evaluate(vm) { - var reference = vm.frame.getOperand(); - var cache = _glimmerReference.isConst(reference) ? undefined : new _glimmerReference.ReferenceCache(reference); - var element = cache ? cache.peek() : reference.value(); - vm.stack().pushRemoteElement(element); - if (cache) { - vm.updateWith(new _glimmerRuntimeLibCompiledOpcodesVm.Assert(cache)); - } - }; - - PushRemoteElementOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: ['$OPERAND'] - }; - }; - - return PushRemoteElementOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.PushRemoteElementOpcode = PushRemoteElementOpcode; - - var PopRemoteElementOpcode = (function (_Opcode4) { - babelHelpers.inherits(PopRemoteElementOpcode, _Opcode4); - - function PopRemoteElementOpcode() { - _Opcode4.apply(this, arguments); - this.type = "pop-remote-element"; - } - - PopRemoteElementOpcode.prototype.evaluate = function evaluate(vm) { - vm.stack().popRemoteElement(); - }; - - return PopRemoteElementOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.PopRemoteElementOpcode = PopRemoteElementOpcode; - - var OpenComponentElementOpcode = (function (_Opcode5) { - babelHelpers.inherits(OpenComponentElementOpcode, _Opcode5); - - function OpenComponentElementOpcode(tag) { - _Opcode5.call(this); - this.tag = tag; - this.type = "open-component-element"; - } - - OpenComponentElementOpcode.prototype.evaluate = function evaluate(vm) { - vm.stack().openElement(this.tag, new ComponentElementOperations(vm.env)); - }; - - OpenComponentElementOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: [JSON.stringify(this.tag)] - }; - }; - - return OpenComponentElementOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.OpenComponentElementOpcode = OpenComponentElementOpcode; - - var OpenDynamicPrimitiveElementOpcode = (function (_Opcode6) { - babelHelpers.inherits(OpenDynamicPrimitiveElementOpcode, _Opcode6); - - function OpenDynamicPrimitiveElementOpcode() { - _Opcode6.apply(this, arguments); - this.type = "open-dynamic-primitive-element"; - } - - OpenDynamicPrimitiveElementOpcode.prototype.evaluate = function evaluate(vm) { - var tagName = vm.frame.getOperand().value(); - vm.stack().openElement(tagName); - }; - - OpenDynamicPrimitiveElementOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: ["$OPERAND"] - }; - }; - - return OpenDynamicPrimitiveElementOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.OpenDynamicPrimitiveElementOpcode = OpenDynamicPrimitiveElementOpcode; - - var ClassList = (function () { - function ClassList() { - this.list = null; - this.isConst = true; - } - - ClassList.prototype.append = function append(reference) { - var list = this.list; - var isConst = this.isConst; - - if (list === null) list = this.list = []; - list.push(reference); - this.isConst = isConst && _glimmerReference.isConst(reference); - }; - - ClassList.prototype.toReference = function toReference() { - var list = this.list; - var isConst = this.isConst; - - if (!list) return _glimmerRuntimeLibReferences.NULL_REFERENCE; - if (isConst) return new _glimmerRuntimeLibCompiledExpressionsValue.ValueReference(toClassName(list)); - return new ClassListReference(list); - }; - - return ClassList; - })(); - - var ClassListReference = (function (_CachedReference) { - babelHelpers.inherits(ClassListReference, _CachedReference); - - function ClassListReference(list) { - _CachedReference.call(this); - this.list = []; - this.tag = _glimmerReference.combineTagged(list); - this.list = list; - } - - ClassListReference.prototype.compute = function compute() { - return toClassName(this.list); - }; - - return ClassListReference; - })(_glimmerReference.CachedReference); - - function toClassName(list) { - var ret = []; - for (var i = 0; i < list.length; i++) { - var value = list[i].value(); - if (value !== false && value !== null && value !== undefined) ret.push(value); - } - return ret.length === 0 ? null : ret.join(' '); + function handleKeyword(path, morph, env, scope, params, hash, template, inverse, visitor) { + var keyword = env.hooks.keywords[path]; + if (!keyword) { + return false; } - var SimpleElementOperations = (function () { - function SimpleElementOperations(env) { - this.env = env; - this.opcodes = null; - this.classList = null; - } - - SimpleElementOperations.prototype.addStaticAttribute = function addStaticAttribute(element, name, value) { - if (name === 'class') { - this.addClass(new _glimmerRuntimeLibCompiledExpressionsValue.ValueReference(value)); - } else { - this.env.getAppendOperations().setAttribute(element, name, value); - } - }; - - SimpleElementOperations.prototype.addStaticAttributeNS = function addStaticAttributeNS(element, namespace, name, value) { - this.env.getAppendOperations().setAttribute(element, name, value, namespace); - }; - - SimpleElementOperations.prototype.addDynamicAttribute = function addDynamicAttribute(element, name, reference, isTrusting) { - if (name === 'class') { - this.addClass(reference); - } else { - var attributeManager = this.env.attributeFor(element, name, isTrusting); - var attribute = new DynamicAttribute(element, attributeManager, name, reference); - this.addAttribute(attribute); - } - }; - - SimpleElementOperations.prototype.addDynamicAttributeNS = function addDynamicAttributeNS(element, namespace, name, reference, isTrusting) { - var attributeManager = this.env.attributeFor(element, name, isTrusting, namespace); - var nsAttribute = new DynamicAttribute(element, attributeManager, name, reference, namespace); - this.addAttribute(nsAttribute); - }; - - SimpleElementOperations.prototype.flush = function flush(element, vm) { - var env = vm.env; - var opcodes = this.opcodes; - var classList = this.classList; - - for (var i = 0; opcodes && i < opcodes.length; i++) { - vm.updateWith(opcodes[i]); - } - if (classList) { - var attributeManager = env.attributeFor(element, 'class', false); - var attribute = new DynamicAttribute(element, attributeManager, 'class', classList.toReference()); - var opcode = attribute.flush(env); - if (opcode) { - vm.updateWith(opcode); - } - } - this.opcodes = null; - this.classList = null; - }; - - SimpleElementOperations.prototype.addClass = function addClass(reference) { - var classList = this.classList; - - if (!classList) { - classList = this.classList = new ClassList(); - } - classList.append(reference); - }; - - SimpleElementOperations.prototype.addAttribute = function addAttribute(attribute) { - var opcode = attribute.flush(this.env); - if (opcode) { - var opcodes = this.opcodes; - - if (!opcodes) { - opcodes = this.opcodes = []; - } - opcodes.push(opcode); - } - }; - - return SimpleElementOperations; - })(); - - exports.SimpleElementOperations = SimpleElementOperations; - - var ComponentElementOperations = (function () { - function ComponentElementOperations(env) { - this.env = env; - this.attributeNames = null; - this.attributes = null; - this.classList = null; - } - - ComponentElementOperations.prototype.addStaticAttribute = function addStaticAttribute(element, name, value) { - if (name === 'class') { - this.addClass(new _glimmerRuntimeLibCompiledExpressionsValue.ValueReference(value)); - } else if (this.shouldAddAttribute(name)) { - this.addAttribute(name, new StaticAttribute(element, name, value)); - } - }; - - ComponentElementOperations.prototype.addStaticAttributeNS = function addStaticAttributeNS(element, namespace, name, value) { - if (this.shouldAddAttribute(name)) { - this.addAttribute(name, new StaticAttribute(element, name, value, namespace)); - } - }; - - ComponentElementOperations.prototype.addDynamicAttribute = function addDynamicAttribute(element, name, reference, isTrusting) { - if (name === 'class') { - this.addClass(reference); - } else if (this.shouldAddAttribute(name)) { - var attributeManager = this.env.attributeFor(element, name, isTrusting); - var attribute = new DynamicAttribute(element, attributeManager, name, reference); - this.addAttribute(name, attribute); - } - }; - - ComponentElementOperations.prototype.addDynamicAttributeNS = function addDynamicAttributeNS(element, namespace, name, reference, isTrusting) { - if (this.shouldAddAttribute(name)) { - var attributeManager = this.env.attributeFor(element, name, isTrusting, namespace); - var nsAttribute = new DynamicAttribute(element, attributeManager, name, reference, namespace); - this.addAttribute(name, nsAttribute); - } - }; - - ComponentElementOperations.prototype.flush = function flush(element, vm) { - var env = this.env; - var attributes = this.attributes; - var classList = this.classList; - - for (var i = 0; attributes && i < attributes.length; i++) { - var opcode = attributes[i].flush(env); - if (opcode) { - vm.updateWith(opcode); - } - } - if (classList) { - var attributeManager = env.attributeFor(element, 'class', false); - var attribute = new DynamicAttribute(element, attributeManager, 'class', classList.toReference()); - var opcode = attribute.flush(env); - if (opcode) { - vm.updateWith(opcode); - } - } - }; - - ComponentElementOperations.prototype.shouldAddAttribute = function shouldAddAttribute(name) { - return !this.attributeNames || this.attributeNames.indexOf(name) === -1; - }; - - ComponentElementOperations.prototype.addClass = function addClass(reference) { - var classList = this.classList; - - if (!classList) { - classList = this.classList = new ClassList(); - } - classList.append(reference); - }; - - ComponentElementOperations.prototype.addAttribute = function addAttribute(name, attribute) { - var attributeNames = this.attributeNames; - var attributes = this.attributes; - - if (!attributeNames) { - attributeNames = this.attributeNames = []; - attributes = this.attributes = []; - } - attributeNames.push(name); - attributes.push(attribute); - }; - - return ComponentElementOperations; - })(); - - exports.ComponentElementOperations = ComponentElementOperations; - - var FlushElementOpcode = (function (_Opcode7) { - babelHelpers.inherits(FlushElementOpcode, _Opcode7); - - function FlushElementOpcode() { - _Opcode7.apply(this, arguments); - this.type = "flush-element"; - } - - FlushElementOpcode.prototype.evaluate = function evaluate(vm) { - var stack = vm.stack(); - stack.operations.flush(stack.constructing, vm); - stack.flushElement(); - }; - - return FlushElementOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.FlushElementOpcode = FlushElementOpcode; - - var CloseElementOpcode = (function (_Opcode8) { - babelHelpers.inherits(CloseElementOpcode, _Opcode8); - - function CloseElementOpcode() { - _Opcode8.apply(this, arguments); - this.type = "close-element"; - } - - CloseElementOpcode.prototype.evaluate = function evaluate(vm) { - vm.stack().closeElement(); - }; - - return CloseElementOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.CloseElementOpcode = CloseElementOpcode; - - var PopElementOpcode = (function (_Opcode9) { - babelHelpers.inherits(PopElementOpcode, _Opcode9); - - function PopElementOpcode() { - _Opcode9.apply(this, arguments); - this.type = "pop-element"; - } - - PopElementOpcode.prototype.evaluate = function evaluate(vm) { - vm.stack().popElement(); - }; - - return PopElementOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.PopElementOpcode = PopElementOpcode; - - var StaticAttrOpcode = (function (_Opcode10) { - babelHelpers.inherits(StaticAttrOpcode, _Opcode10); - - function StaticAttrOpcode(namespace, name, value) { - _Opcode10.call(this); - this.namespace = namespace; - this.name = name; - this.value = value; - this.type = "static-attr"; - } - - StaticAttrOpcode.prototype.evaluate = function evaluate(vm) { - var name = this.name; - var value = this.value; - var namespace = this.namespace; - - if (namespace) { - vm.stack().setStaticAttributeNS(namespace, name, value); - } else { - vm.stack().setStaticAttribute(name, value); - } - }; - - StaticAttrOpcode.prototype.toJSON = function toJSON() { - var guid = this._guid; - var type = this.type; - var namespace = this.namespace; - var name = this.name; - var value = this.value; - - var details = _glimmerUtil.dict(); - if (namespace) { - details["namespace"] = JSON.stringify(namespace); - } - details["name"] = JSON.stringify(name); - details["value"] = JSON.stringify(value); - return { guid: guid, type: type, details: details }; - }; - - return StaticAttrOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.StaticAttrOpcode = StaticAttrOpcode; - - var ModifierOpcode = (function (_Opcode11) { - babelHelpers.inherits(ModifierOpcode, _Opcode11); - - function ModifierOpcode(name, manager, args) { - _Opcode11.call(this); - this.name = name; - this.manager = manager; - this.args = args; - this.type = "modifier"; - } - - ModifierOpcode.prototype.evaluate = function evaluate(vm) { - var manager = this.manager; - - var stack = vm.stack(); - var element = stack.constructing; - var updateOperations = stack.updateOperations; - - var args = this.args.evaluate(vm); - var dynamicScope = vm.dynamicScope(); - var modifier = manager.create(element, args, dynamicScope, updateOperations); - vm.env.scheduleInstallModifier(modifier, manager); - var destructor = manager.getDestructor(modifier); - if (destructor) { - vm.newDestroyable(destructor); - } - vm.updateWith(new UpdateModifierOpcode(manager, modifier, args)); - }; - - ModifierOpcode.prototype.toJSON = function toJSON() { - var guid = this._guid; - var type = this.type; - var name = this.name; - var args = this.args; - - var details = _glimmerUtil.dict(); - details["type"] = JSON.stringify(type); - details["name"] = JSON.stringify(name); - details["args"] = JSON.stringify(args); - return { guid: guid, type: type, details: details }; - }; - - return ModifierOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.ModifierOpcode = ModifierOpcode; - - var UpdateModifierOpcode = (function (_UpdatingOpcode) { - babelHelpers.inherits(UpdateModifierOpcode, _UpdatingOpcode); - - function UpdateModifierOpcode(manager, modifier, args) { - _UpdatingOpcode.call(this); - this.manager = manager; - this.modifier = modifier; - this.args = args; - this.type = "update-modifier"; - this.tag = args.tag; - this.lastUpdated = args.tag.value(); - } - - UpdateModifierOpcode.prototype.evaluate = function evaluate(vm) { - var manager = this.manager; - var modifier = this.modifier; - var tag = this.tag; - var lastUpdated = this.lastUpdated; - - if (!tag.validate(lastUpdated)) { - vm.env.scheduleUpdateModifier(modifier, manager); - this.lastUpdated = tag.value(); - } - }; - - UpdateModifierOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: [JSON.stringify(this.args)] - }; - }; - - return UpdateModifierOpcode; - })(_glimmerRuntimeLibOpcodes.UpdatingOpcode); - - exports.UpdateModifierOpcode = UpdateModifierOpcode; - - var StaticAttribute = (function () { - function StaticAttribute(element, name, value, namespace) { - this.element = element; - this.name = name; - this.value = value; - this.namespace = namespace; - } - - StaticAttribute.prototype.flush = function flush(env) { - env.getAppendOperations().setAttribute(this.element, this.name, this.value, this.namespace); - return null; - }; - - return StaticAttribute; - })(); - - exports.StaticAttribute = StaticAttribute; - - var DynamicAttribute = (function () { - function DynamicAttribute(element, attributeManager, name, reference, namespace) { - this.element = element; - this.attributeManager = attributeManager; - this.name = name; - this.reference = reference; - this.namespace = namespace; - this.tag = reference.tag; - this.cache = null; - } - - DynamicAttribute.prototype.patch = function patch(env) { - var element = this.element; - var cache = this.cache; - - var value = cache.revalidate(); - if (_glimmerReference.isModified(value)) { - this.attributeManager.updateAttribute(env, element, value, this.namespace); - } - }; - - DynamicAttribute.prototype.flush = function flush(env) { - var reference = this.reference; - var element = this.element; - - if (_glimmerReference.isConst(reference)) { - var value = reference.value(); - this.attributeManager.setAttribute(env, element, value, this.namespace); - return null; - } else { - var cache = this.cache = new _glimmerReference.ReferenceCache(reference); - var value = cache.peek(); - this.attributeManager.setAttribute(env, element, value, this.namespace); - return new PatchElementOpcode(this); - } - }; - - DynamicAttribute.prototype.toJSON = function toJSON() { - var element = this.element; - var namespace = this.namespace; - var name = this.name; - var cache = this.cache; - - var formattedElement = formatElement(element); - var lastValue = cache.peek(); - if (namespace) { - return { - element: formattedElement, - type: 'attribute', - namespace: namespace, - name: name, - lastValue: lastValue - }; - } - return { - element: formattedElement, - type: 'attribute', - namespace: namespace, - name: name, - lastValue: lastValue - }; - }; - - return DynamicAttribute; - })(); - - exports.DynamicAttribute = DynamicAttribute; - - function formatElement(element) { - return JSON.stringify('<' + element.tagName.toLowerCase() + ' />'); + if (typeof keyword === 'function') { + return keyword(morph, env, scope, params, hash, template, inverse, visitor); } - var DynamicAttrNSOpcode = (function (_Opcode12) { - babelHelpers.inherits(DynamicAttrNSOpcode, _Opcode12); - - function DynamicAttrNSOpcode(name, namespace, isTrusting) { - _Opcode12.call(this); - this.name = name; - this.namespace = namespace; - this.isTrusting = isTrusting; - this.type = "dynamic-attr"; - } - - DynamicAttrNSOpcode.prototype.evaluate = function evaluate(vm) { - var name = this.name; - var namespace = this.namespace; - var isTrusting = this.isTrusting; - - var reference = vm.frame.getOperand(); - vm.stack().setDynamicAttributeNS(namespace, name, reference, isTrusting); - }; - - DynamicAttrNSOpcode.prototype.toJSON = function toJSON() { - var guid = this._guid; - var type = this.type; - var name = this.name; - var namespace = this.namespace; - - var details = _glimmerUtil.dict(); - details["name"] = JSON.stringify(name); - details["value"] = "$OPERAND"; - if (namespace) { - details["namespace"] = JSON.stringify(namespace); - } - return { guid: guid, type: type, details: details }; - }; - - return DynamicAttrNSOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.DynamicAttrNSOpcode = DynamicAttrNSOpcode; - - var DynamicAttrOpcode = (function (_Opcode13) { - babelHelpers.inherits(DynamicAttrOpcode, _Opcode13); - - function DynamicAttrOpcode(name, isTrusting) { - _Opcode13.call(this); - this.name = name; - this.isTrusting = isTrusting; - this.type = "dynamic-attr"; - } - - DynamicAttrOpcode.prototype.evaluate = function evaluate(vm) { - var name = this.name; - var isTrusting = this.isTrusting; - - var reference = vm.frame.getOperand(); - vm.stack().setDynamicAttribute(name, reference, isTrusting); - }; - - DynamicAttrOpcode.prototype.toJSON = function toJSON() { - var guid = this._guid; - var type = this.type; - var name = this.name; - - var details = _glimmerUtil.dict(); - details["name"] = JSON.stringify(name); - details["value"] = "$OPERAND"; - return { guid: guid, type: type, details: details }; - }; - - return DynamicAttrOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.DynamicAttrOpcode = DynamicAttrOpcode; - - var PatchElementOpcode = (function (_UpdatingOpcode2) { - babelHelpers.inherits(PatchElementOpcode, _UpdatingOpcode2); - - function PatchElementOpcode(operation) { - _UpdatingOpcode2.call(this); - this.type = "patch-element"; - this.tag = operation.tag; - this.operation = operation; - } - - PatchElementOpcode.prototype.evaluate = function evaluate(vm) { - this.operation.patch(vm.env); - }; - - PatchElementOpcode.prototype.toJSON = function toJSON() { - var _guid = this._guid; - var type = this.type; - var operation = this.operation; - - return { - guid: _guid, - type: type, - details: operation.toJSON() - }; - }; - - return PatchElementOpcode; - })(_glimmerRuntimeLibOpcodes.UpdatingOpcode); - - exports.PatchElementOpcode = PatchElementOpcode; - - var CommentOpcode = (function (_Opcode14) { - babelHelpers.inherits(CommentOpcode, _Opcode14); - - function CommentOpcode(comment) { - _Opcode14.call(this); - this.comment = comment; - this.type = "comment"; - } - - CommentOpcode.prototype.evaluate = function evaluate(vm) { - vm.stack().appendComment(this.comment); - }; - - CommentOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: [JSON.stringify(this.comment)] - }; - }; - - return CommentOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.CommentOpcode = CommentOpcode; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvb3Bjb2Rlcy9kb20udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O1FBeUJBLFVBQUE7OEJBQUEsVUFBQTs7QUFHRSxpQkFIRixVQUFBLENBR3NCLElBQVksRUFBQTtBQUM5Qiw4QkFBTyxDQUFDO0FBRFUsZ0JBQUEsQ0FBQSxJQUFJLEdBQUosSUFBSSxDQUFRO0FBRnpCLGdCQUFBLENBQUEsSUFBSSxHQUFHLE1BQU0sQ0FBQztTQUlwQjs7QUFMSCxrQkFBQSxXQU9FLFFBQVEsR0FBQSxrQkFBQyxFQUFNLEVBQUE7QUFDYixjQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQzs7QUFUSCxrQkFBQSxXQVdFLE1BQU0sR0FBQSxrQkFBQTtBQUNKLG1CQUFPO0FBQ0wsb0JBQUksRUFBRSxJQUFJLENBQUMsS0FBSztBQUNoQixvQkFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ2Ysb0JBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2xDLENBQUM7U0FDSDs7ZUFqQkgsVUFBQTtpQ0F6QlMsTUFBTTs7OztRQTZDZiwwQkFBQTs4QkFBQSwwQkFBQTs7QUFHRSxpQkFIRiwwQkFBQSxDQUdzQixHQUFXLEVBQUE7QUFDN0IsK0JBQU8sQ0FBQztBQURVLGdCQUFBLENBQUEsR0FBRyxHQUFILEdBQUcsQ0FBUTtBQUZ4QixnQkFBQSxDQUFBLElBQUksR0FBRyx3QkFBd0IsQ0FBQztTQUl0Qzs7QUFMSCxrQ0FBQSxXQU9FLFFBQVEsR0FBQSxrQkFBQyxFQUFNLEVBQUE7QUFDYixjQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNsQzs7QUFUSCxrQ0FBQSxXQVdFLE1BQU0sR0FBQSxrQkFBQTtBQUNKLG1CQUFPO0FBQ0wsb0JB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QUMsSUFBSTtBQUNmLG9CQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNyQyxDQUFDO1NBQ0g7O2VBakJILGFBQUE7aUNBN3FCUyxNQUFNIiwiZmlsZSI6ImRvbS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wY29kZSwgT3Bjb2RlSlNPTiwgVXBkYXRpbmdPcGNvZGUgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IFZNLCBVcGRhdGluZ1ZNIH0gZnJvbSAnLi4vLi4vdm0nO1xuaW1wb3J0ICogYXMgU2ltcGxlIGZyb20gJy4uLy4uL2RvbS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZJWF9SRUlGSUNBVElPTiB9IGZyb20gJy4uLy4uL2RvbS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRklYTUUsIE9wdGlvbiwgT3BhcXVlLCBEaWN0LCBkaWN0IH0gZnJvbSAnZ2xpbW1lci11dGlsJztcbmltcG9ydCB7XG4gIENhY2hlZFJlZmVyZW5jZSxcbiAgUmVmZXJlbmNlLFxuICBSZWZlcmVuY2VDYWNoZSxcbiAgUmV2aXNpb25UYWcsXG4gIFJldmlzaW9uLFxuICBQYXRoUmVmZXJlbmNlLFxuICBjb21iaW5lVGFnZ2VkLFxuICBpc0NvbnN0IGFzIGlzQ29uc3RSZWZlcmVuY2UsXG4gIGlzTW9kaWZpZWRcbn0gZnJvbSAnZ2xpbW1lci1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgTW9kaWZpZXJNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vbW9kaWZpZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBOVUxMX1JFRkVSRU5DRSB9IGZyb20gJy4uLy4uL3JlZmVyZW5jZXMnO1xuaW1wb3J0IHsgVmFsdWVSZWZlcmVuY2UgfSBmcm9tICcuLi8uLi9jb21waWxlZC9leHByZXNzaW9ucy92YWx1ZSc7XG5pbXBvcnQgeyBDb21waWxlZEFyZ3MsIEV2YWx1YXRlZEFyZ3MgfSBmcm9tICcuLi8uLi9jb21waWxlZC9leHByZXNzaW9ucy9hcmdzJztcbmltcG9ydCB7IEF0dHJpYnV0ZU1hbmFnZXIgfSBmcm9tICcuLi8uLi9kb20vYXR0cmlidXRlLW1hbmFnZXJzJztcbmltcG9ydCB7IEVsZW1lbnRPcGVyYXRpb25zIH0gZnJvbSAnLi4vLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBBc3NlcnQgfSBmcm9tICcuL3ZtJztcblxuZXhwb3J0IGNsYXNzIFRleHRPcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwidGV4dFwiO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGV4dDogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIHZtLnN0YWNrKCkuYXBwZW5kVGV4dCh0aGlzLnRleHQpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW0pTT04uc3RyaW5naWZ5KHRoaXMudGV4dCldXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3BlblByaW1pdGl2ZUVsZW1lbnRPcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwib3Blbi1wcmltaXRpdmUtZWxlbWVudFwiO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFnOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgdm0uc3RhY2soKS5vcGVuRWxlbWVudCh0aGlzLnRhZyk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbSlNPTi5zdHJpbmdpZnkodGhpcy50YWcpXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFB1c2hSZW1vdGVFbGVtZW50T3Bjb2RlIGV4dGVuZHMgT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcInB1c2gtcmVtb3RlLWVsZW1lbnRcIjtcblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICBsZXQgcmVmZXJlbmNlID0gdm0uZnJhbWUuZ2V0T3BlcmFuZDxTaW1wbGUuRWxlbWVudD4oKTtcbiAgICBsZXQgY2FjaGUgPSBpc0NvbnN0UmVmZXJlbmNlKHJlZmVyZW5jZSkgPyB1bmRlZmluZWQgOiBuZXcgUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKTtcbiAgICBsZXQgZWxlbWVudCA9IGNhY2hlID8gY2FjaGUucGVlaygpIDogcmVmZXJlbmNlLnZhbHVlKCk7XG5cbiAgICB2bS5zdGFjaygpLnB1c2hSZW1vdGVFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgaWYgKGNhY2hlKSB7XG4gICAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbJyRPUEVSQU5EJ11cbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQb3BSZW1vdGVFbGVtZW50T3Bjb2RlIGV4dGVuZHMgT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcInBvcC1yZW1vdGUtZWxlbWVudFwiO1xuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIHZtLnN0YWNrKCkucG9wUmVtb3RlRWxlbWVudCgpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcGVuQ29tcG9uZW50RWxlbWVudE9wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJvcGVuLWNvbXBvbmVudC1lbGVtZW50XCI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0YWc6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICB2bS5zdGFjaygpLm9wZW5FbGVtZW50KHRoaXMudGFnLCBuZXcgQ29tcG9uZW50RWxlbWVudE9wZXJhdGlvbnModm0uZW52KSk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbSlNPTi5zdHJpbmdpZnkodGhpcy50YWcpXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wZW5EeW5hbWljUHJpbWl0aXZlRWxlbWVudE9wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJvcGVuLWR5bmFtaWMtcHJpbWl0aXZlLWVsZW1lbnRcIjtcblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICBsZXQgdGFnTmFtZSA9IHZtLmZyYW1lLmdldE9wZXJhbmQ8c3RyaW5nPigpLnZhbHVlKCk7XG4gICAgdm0uc3RhY2soKS5vcGVuRWxlbWVudCh0YWdOYW1lKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGFyZ3M6IFtcIiRPUEVSQU5EXCJdXG4gICAgfTtcbiAgfVxufVxuXG5jbGFzcyBDbGFzc0xpc3Qge1xuICBwcml2YXRlIGxpc3Q6IFJlZmVyZW5jZTxzdHJpbmc+W10gPSBudWxsO1xuICBwcml2YXRlIGlzQ29uc3QgPSB0cnVlO1xuXG4gIGFwcGVuZChyZWZlcmVuY2U6IFJlZmVyZW5jZTxzdHJpbmc+KSB7XG4gICAgbGV0IHsgbGlzdCwgaXNDb25zdCB9ID0gdGhpcztcblxuICAgIGlmIChsaXN0ID09PSBudWxsKSBsaXN0ID0gdGhpcy5saXN0ID0gW107XG5cbiAgICBsaXN0LnB1c2gocmVmZXJlbmNlKTtcbiAgICB0aGlzLmlzQ29uc3QgPSBpc0NvbnN0ICYmIGlzQ29uc3RSZWZlcmVuY2UocmVmZXJlbmNlKTtcbiAgfVxuXG4gIHRvUmVmZXJlbmNlKCk6IFJlZmVyZW5jZTxzdHJpbmc+IHtcbiAgICBsZXQgeyBsaXN0LCBpc0NvbnN0IH0gPSB0aGlzO1xuXG4gICAgaWYgKCFsaXN0KSByZXR1cm4gTlVMTF9SRUZFUkVOQ0U7XG5cbiAgICBpZiAoaXNDb25zdCkgcmV0dXJuIG5ldyBWYWx1ZVJlZmVyZW5jZSh0b0NsYXNzTmFtZShsaXN0KSk7XG5cbiAgICByZXR1cm4gbmV3IENsYXNzTGlzdFJlZmVyZW5jZShsaXN0KTtcbiAgfVxuXG59XG5cbmNsYXNzIENsYXNzTGlzdFJlZmVyZW5jZSBleHRlbmRzIENhY2hlZFJlZmVyZW5jZTxzdHJpbmc+IHtcbiAgcHVibGljIHRhZzogUmV2aXNpb25UYWc7XG4gIHByaXZhdGUgbGlzdDogUmVmZXJlbmNlPHN0cmluZz5bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGxpc3Q6IFJlZmVyZW5jZTxzdHJpbmc+W10pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gY29tYmluZVRhZ2dlZChsaXN0KTtcbiAgICB0aGlzLmxpc3QgPSBsaXN0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbXB1dGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdG9DbGFzc05hbWUodGhpcy5saXN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b0NsYXNzTmFtZShsaXN0OiBSZWZlcmVuY2U8c3RyaW5nPltdKSB7XG4gIGxldCByZXQgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgdmFsdWU6IEZJWE1FPE9wYXF1ZSwgJ3VzZSBPcGFxdWUgYW5kIG5vcm1hbGl6ZSc+ID0gbGlzdFtpXS52YWx1ZSgpO1xuICAgIGlmICh2YWx1ZSAhPT0gZmFsc2UgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgcmV0LnB1c2godmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIChyZXQubGVuZ3RoID09PSAwKSA/IG51bGwgOiByZXQuam9pbignICcpO1xufVxuXG5leHBvcnQgY2xhc3MgU2ltcGxlRWxlbWVudE9wZXJhdGlvbnMgaW1wbGVtZW50cyBFbGVtZW50T3BlcmF0aW9ucyB7XG4gIHByaXZhdGUgb3Bjb2RlczogVXBkYXRpbmdPcGNvZGVbXSA9IG51bGw7XG4gIHByaXZhdGUgY2xhc3NMaXN0OiBDbGFzc0xpc3QgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZW52OiBFbnZpcm9ubWVudCkge1xuICB9XG5cbiAgYWRkU3RhdGljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAobmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgdGhpcy5hZGRDbGFzcyhuZXcgVmFsdWVSZWZlcmVuY2UodmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLnNldEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgYWRkU3RhdGljQXR0cmlidXRlTlMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCkuc2V0QXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgYWRkRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCByZWZlcmVuY2U6IFBhdGhSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIGlmIChuYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKHJlZmVyZW5jZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gdGhpcy5lbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsIG5hbWUsIGlzVHJ1c3RpbmcpO1xuICAgICAgbGV0IGF0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsIG5hbWUsIHJlZmVyZW5jZSk7XG5cbiAgICAgIHRoaXMuYWRkQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgfVxuICB9XG5cbiAgYWRkRHluYW1pY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IFNpbXBsZS5OYW1lc3BhY2UsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBQYXRoUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IHRoaXMuZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCBuYW1lLCBpc1RydXN0aW5nLCBuYW1lc3BhY2UpO1xuICAgIGxldCBuc0F0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsIG5hbWUsIHJlZmVyZW5jZSwgbmFtZXNwYWNlKTtcblxuICAgIHRoaXMuYWRkQXR0cmlidXRlKG5zQXR0cmlidXRlKTtcbiAgfVxuXG4gIGZsdXNoKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCB2bTogVk0pIHtcbiAgICBsZXQgeyBlbnYgfSA9IHZtO1xuICAgIGxldCB7IG9wY29kZXMsIGNsYXNzTGlzdCB9ID0gdGhpcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBvcGNvZGVzICYmIGkgPCBvcGNvZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2bS51cGRhdGVXaXRoKG9wY29kZXNbaV0pO1xuICAgIH1cblxuICAgIGlmIChjbGFzc0xpc3QpIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCAnY2xhc3MnLCBmYWxzZSk7XG4gICAgICBsZXQgYXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgJ2NsYXNzJywgY2xhc3NMaXN0LnRvUmVmZXJlbmNlKCkpO1xuICAgICAgbGV0IG9wY29kZSA9IGF0dHJpYnV0ZS5mbHVzaChlbnYpO1xuXG4gICAgICBpZiAob3Bjb2RlKSB7XG4gICAgICAgIHZtLnVwZGF0ZVdpdGgob3Bjb2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZXMgPSBudWxsO1xuICAgIHRoaXMuY2xhc3NMaXN0ID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ2xhc3MocmVmZXJlbmNlOiBQYXRoUmVmZXJlbmNlPHN0cmluZz4pIHtcbiAgICBsZXQgeyBjbGFzc0xpc3QgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWNsYXNzTGlzdCkge1xuICAgICAgY2xhc3NMaXN0ID0gdGhpcy5jbGFzc0xpc3QgPSBuZXcgQ2xhc3NMaXN0KCk7XG4gICAgfVxuXG4gICAgY2xhc3NMaXN0LmFwcGVuZChyZWZlcmVuY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBdHRyaWJ1dGUoYXR0cmlidXRlOiBBdHRyaWJ1dGUpIHtcbiAgICBsZXQgb3Bjb2RlID0gYXR0cmlidXRlLmZsdXNoKHRoaXMuZW52KTtcblxuICAgIGlmIChvcGNvZGUpIHtcbiAgICAgIGxldCB7IG9wY29kZXMgfSA9IHRoaXM7XG5cbiAgICAgIGlmICghb3Bjb2Rlcykge1xuICAgICAgICBvcGNvZGVzID0gdGhpcy5vcGNvZGVzID0gW107XG4gICAgICB9XG5cbiAgICAgIG9wY29kZXMucHVzaChvcGNvZGUpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50RWxlbWVudE9wZXJhdGlvbnMgaW1wbGVtZW50cyBFbGVtZW50T3BlcmF0aW9ucyB7XG4gIHByaXZhdGUgYXR0cmlidXRlTmFtZXMgPSBudWxsO1xuICBwcml2YXRlIGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdID0gbnVsbDtcbiAgcHJpdmF0ZSBjbGFzc0xpc3Q6IENsYXNzTGlzdCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbnY6IEVudmlyb25tZW50KSB7XG4gIH1cblxuICBhZGRTdGF0aWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmIChuYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKG5ldyBWYWx1ZVJlZmVyZW5jZSh2YWx1ZSkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zaG91bGRBZGRBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIHRoaXMuYWRkQXR0cmlidXRlKG5hbWUsIG5ldyBTdGF0aWNBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBhZGRTdGF0aWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnNob3VsZEFkZEF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUobmFtZSwgbmV3IFN0YXRpY0F0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlKSk7XG4gICAgfVxuICB9XG5cbiAgYWRkRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCByZWZlcmVuY2U6IFBhdGhSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIGlmIChuYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKHJlZmVyZW5jZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNob3VsZEFkZEF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgbGV0IGF0dHJpYnV0ZU1hbmFnZXIgPSB0aGlzLmVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgbmFtZSwgaXNUcnVzdGluZyk7XG4gICAgICBsZXQgYXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgbmFtZSwgcmVmZXJlbmNlKTtcblxuICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUobmFtZSwgYXR0cmlidXRlKTtcbiAgICB9XG4gIH1cblxuICBhZGREeW5hbWljQXR0cmlidXRlTlMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWVzcGFjZTogU2ltcGxlLk5hbWVzcGFjZSwgbmFtZTogc3RyaW5nLCByZWZlcmVuY2U6IFBhdGhSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnNob3VsZEFkZEF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgbGV0IGF0dHJpYnV0ZU1hbmFnZXIgPSB0aGlzLmVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgbmFtZSwgaXNUcnVzdGluZywgbmFtZXNwYWNlKTtcbiAgICAgIGxldCBuc0F0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsIG5hbWUsIHJlZmVyZW5jZSwgbmFtZXNwYWNlKTtcblxuICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUobmFtZSwgbnNBdHRyaWJ1dGUpO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCB2bTogVk0pIHtcbiAgICBsZXQgeyBlbnYgfSA9IHRoaXM7XG4gICAgbGV0IHsgYXR0cmlidXRlcywgY2xhc3NMaXN0IH0gPSB0aGlzO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGF0dHJpYnV0ZXMgJiYgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBvcGNvZGUgPSBhdHRyaWJ1dGVzW2ldLmZsdXNoKGVudik7XG5cbiAgICAgIGlmIChvcGNvZGUpIHtcbiAgICAgICAgdm0udXBkYXRlV2l0aChvcGNvZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjbGFzc0xpc3QpIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCAnY2xhc3MnLCBmYWxzZSk7XG4gICAgICBsZXQgYXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgJ2NsYXNzJywgY2xhc3NMaXN0LnRvUmVmZXJlbmNlKCkpO1xuICAgICAgbGV0IG9wY29kZSA9IGF0dHJpYnV0ZS5mbHVzaChlbnYpO1xuXG4gICAgICBpZiAob3Bjb2RlKSB7XG4gICAgICAgIHZtLnVwZGF0ZVdpdGgob3Bjb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3VsZEFkZEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gIXRoaXMuYXR0cmlidXRlTmFtZXMgfHwgdGhpcy5hdHRyaWJ1dGVOYW1lcy5pbmRleE9mKG5hbWUpID09PSAtMTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ2xhc3MocmVmZXJlbmNlOiBQYXRoUmVmZXJlbmNlPHN0cmluZz4pIHtcbiAgICBsZXQgeyBjbGFzc0xpc3QgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWNsYXNzTGlzdCkge1xuICAgICAgY2xhc3NMaXN0ID0gdGhpcy5jbGFzc0xpc3QgPSBuZXcgQ2xhc3NMaXN0KCk7XG4gICAgfVxuXG4gICAgY2xhc3NMaXN0LmFwcGVuZChyZWZlcmVuY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCBhdHRyaWJ1dGU6IEF0dHJpYnV0ZSkge1xuICAgIGxldCB7IGF0dHJpYnV0ZU5hbWVzLCBhdHRyaWJ1dGVzIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFhdHRyaWJ1dGVOYW1lcykge1xuICAgICAgYXR0cmlidXRlTmFtZXMgPSB0aGlzLmF0dHJpYnV0ZU5hbWVzID0gW107XG4gICAgICBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzID0gW107XG4gICAgfVxuXG4gICAgYXR0cmlidXRlTmFtZXMucHVzaChuYW1lKTtcbiAgICBhdHRyaWJ1dGVzLnB1c2goYXR0cmlidXRlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmx1c2hFbGVtZW50T3Bjb2RlIGV4dGVuZHMgT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImZsdXNoLWVsZW1lbnRcIjtcblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICBsZXQgc3RhY2sgPSB2bS5zdGFjaygpO1xuXG4gICAgc3RhY2sub3BlcmF0aW9ucy5mbHVzaChzdGFjay5jb25zdHJ1Y3RpbmcsIHZtKTtcbiAgICBzdGFjay5mbHVzaEVsZW1lbnQoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xvc2VFbGVtZW50T3Bjb2RlIGV4dGVuZHMgT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImNsb3NlLWVsZW1lbnRcIjtcblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICB2bS5zdGFjaygpLmNsb3NlRWxlbWVudCgpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQb3BFbGVtZW50T3Bjb2RlIGV4dGVuZHMgT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcInBvcC1lbGVtZW50XCI7XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgdm0uc3RhY2soKS5wb3BFbGVtZW50KCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNBdHRyT3B0aW9ucyB7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTdGF0aWNBdHRyT3Bjb2RlIGV4dGVuZHMgT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcInN0YXRpYy1hdHRyXCI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWVzcGFjZTogc3RyaW5nLFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIHZhbHVlOiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIGxldCB7IG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UgfSA9IHRoaXM7XG4gICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgdm0uc3RhY2soKS5zZXRTdGF0aWNBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIG5hbWUsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uc3RhY2soKS5zZXRTdGF0aWNBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgeyBfZ3VpZDogZ3VpZCwgdHlwZSwgbmFtZXNwYWNlLCBuYW1lLCB2YWx1ZSB9ID0gdGhpcztcblxuICAgIGxldCBkZXRhaWxzID0gZGljdDxzdHJpbmc+KCk7XG5cbiAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICBkZXRhaWxzW1wibmFtZXNwYWNlXCJdID0gSlNPTi5zdHJpbmdpZnkobmFtZXNwYWNlKTtcbiAgICB9XG5cbiAgICBkZXRhaWxzW1wibmFtZVwiXSA9IEpTT04uc3RyaW5naWZ5KG5hbWUpO1xuICAgIGRldGFpbHNbXCJ2YWx1ZVwiXSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcblxuICAgIHJldHVybiB7IGd1aWQsIHR5cGUsIGRldGFpbHMgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW9kaWZpZXJPcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwibW9kaWZpZXJcIjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIG1hbmFnZXI6IE1vZGlmaWVyTWFuYWdlcjxPcGFxdWU+LFxuICAgIHByaXZhdGUgYXJnczogQ29tcGlsZWRBcmdzXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICBsZXQgeyBtYW5hZ2VyIH0gPSB0aGlzO1xuICAgIGxldCBzdGFjayA9IHZtLnN0YWNrKCk7XG4gICAgbGV0IHsgY29uc3RydWN0aW5nOiBlbGVtZW50LCB1cGRhdGVPcGVyYXRpb25zIH0gPSBzdGFjaztcbiAgICBsZXQgYXJncyA9IHRoaXMuYXJncy5ldmFsdWF0ZSh2bSk7XG4gICAgbGV0IGR5bmFtaWNTY29wZSA9IHZtLmR5bmFtaWNTY29wZSgpO1xuICAgIGxldCBtb2RpZmllciA9IG1hbmFnZXIuY3JlYXRlKGVsZW1lbnQgYXMgRklYX1JFSUZJQ0FUSU9OPEVsZW1lbnQ+LCBhcmdzLCBkeW5hbWljU2NvcGUsIHVwZGF0ZU9wZXJhdGlvbnMpO1xuXG4gICAgdm0uZW52LnNjaGVkdWxlSW5zdGFsbE1vZGlmaWVyKG1vZGlmaWVyLCBtYW5hZ2VyKTtcbiAgICBsZXQgZGVzdHJ1Y3RvciA9IG1hbmFnZXIuZ2V0RGVzdHJ1Y3Rvcihtb2RpZmllcik7XG5cbiAgICBpZiAoZGVzdHJ1Y3Rvcikge1xuICAgICAgdm0ubmV3RGVzdHJveWFibGUoZGVzdHJ1Y3Rvcik7XG4gICAgfVxuXG4gICAgdm0udXBkYXRlV2l0aChuZXcgVXBkYXRlTW9kaWZpZXJPcGNvZGUoXG4gICAgICBtYW5hZ2VyLFxuICAgICAgbW9kaWZpZXIsXG4gICAgICBhcmdzXG4gICAgKSk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgX2d1aWQ6IGd1aWQsIHR5cGUsIG5hbWUsIGFyZ3MgfSA9IHRoaXM7XG5cbiAgICBsZXQgZGV0YWlscyA9IGRpY3Q8c3RyaW5nPigpO1xuXG4gICAgZGV0YWlsc1tcInR5cGVcIl0gPSBKU09OLnN0cmluZ2lmeSh0eXBlKTtcbiAgICBkZXRhaWxzW1wibmFtZVwiXSA9IEpTT04uc3RyaW5naWZ5KG5hbWUpO1xuICAgIGRldGFpbHNbXCJhcmdzXCJdID0gSlNPTi5zdHJpbmdpZnkoYXJncyk7XG5cbiAgICByZXR1cm4geyBndWlkLCB0eXBlLCBkZXRhaWxzIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZU1vZGlmaWVyT3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwidXBkYXRlLW1vZGlmaWVyXCI7XG4gIHByaXZhdGUgbGFzdFVwZGF0ZWQ6IFJldmlzaW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWFuYWdlcjogTW9kaWZpZXJNYW5hZ2VyPE9wYXF1ZT4sXG4gICAgcHJpdmF0ZSBtb2RpZmllcjogT3BhcXVlLFxuICAgIHByaXZhdGUgYXJnczogRXZhbHVhdGVkQXJnc1xuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gYXJncy50YWc7XG4gICAgdGhpcy5sYXN0VXBkYXRlZCA9IGFyZ3MudGFnLnZhbHVlKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IG1hbmFnZXIsIG1vZGlmaWVyLCB0YWcsIGxhc3RVcGRhdGVkIH0gPSB0aGlzO1xuXG4gICAgaWYgKCF0YWcudmFsaWRhdGUobGFzdFVwZGF0ZWQpKSB7XG4gICAgICB2bS5lbnYuc2NoZWR1bGVVcGRhdGVNb2RpZmllcihtb2RpZmllciwgbWFuYWdlcik7XG4gICAgICB0aGlzLmxhc3RVcGRhdGVkID0gdGFnLnZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW0pTT04uc3RyaW5naWZ5KHRoaXMuYXJncyldXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZmx1c2goZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxVcGRhdGluZ09wY29kZT47XG59XG5cbmV4cG9ydCBjbGFzcyBTdGF0aWNBdHRyaWJ1dGUgaW1wbGVtZW50cyBBdHRyaWJ1dGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSB2YWx1ZTogc3RyaW5nLFxuICAgIHByaXZhdGUgbmFtZXNwYWNlPzogc3RyaW5nXG4gICkge31cblxuICBmbHVzaChlbnY6IEVudmlyb25tZW50KTogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlPiB7XG4gICAgZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKS5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50LCB0aGlzLm5hbWUsIHRoaXMudmFsdWUsIHRoaXMubmFtZXNwYWNlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRHluYW1pY0F0dHJpYnV0ZSBpbXBsZW1lbnRzIEF0dHJpYnV0ZSAge1xuICBwcml2YXRlIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxPcGFxdWU+O1xuXG4gIHB1YmxpYyB0YWc6IFJldmlzaW9uVGFnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsXG4gICAgcHJpdmF0ZSBhdHRyaWJ1dGVNYW5hZ2VyOiBBdHRyaWJ1dGVNYW5hZ2VyLFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LFxuICAgIHByaXZhdGUgbmFtZXNwYWNlPzogU2ltcGxlLk5hbWVzcGFjZVxuICApIHtcbiAgICB0aGlzLnRhZyA9IHJlZmVyZW5jZS50YWc7XG4gICAgdGhpcy5jYWNoZSA9IG51bGw7XG4gIH1cblxuICBwYXRjaChlbnY6IEVudmlyb25tZW50KSB7XG4gICAgbGV0IHsgZWxlbWVudCwgY2FjaGUgfSA9IHRoaXM7XG5cbiAgICBsZXQgdmFsdWUgPSBjYWNoZS5yZXZhbGlkYXRlKCk7XG5cbiAgICBpZiAoaXNNb2RpZmllZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlTWFuYWdlci51cGRhdGVBdHRyaWJ1dGUoZW52LCBlbGVtZW50IGFzIEZJWE1FPEVsZW1lbnQsICduZWVkcyB0byBiZSByZWlmaWVkIHByb3Blcmx5Jz4sIHZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgfVxuICB9XG5cbiAgZmx1c2goZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxVcGRhdGluZ09wY29kZT4ge1xuICAgIGxldCB7IHJlZmVyZW5jZSwgZWxlbWVudCB9ID0gdGhpcztcblxuICAgIGlmIChpc0NvbnN0UmVmZXJlbmNlKHJlZmVyZW5jZSkpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHJlZmVyZW5jZS52YWx1ZSgpO1xuICAgICAgdGhpcy5hdHRyaWJ1dGVNYW5hZ2VyLnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNhY2hlID0gdGhpcy5jYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpO1xuICAgICAgbGV0IHZhbHVlID0gY2FjaGUucGVlaygpO1xuICAgICAgdGhpcy5hdHRyaWJ1dGVNYW5hZ2VyLnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgICByZXR1cm4gbmV3IFBhdGNoRWxlbWVudE9wY29kZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogRGljdDxzdHJpbmc+IHtcbiAgICBsZXQgeyBlbGVtZW50LCBuYW1lc3BhY2UsIG5hbWUsIGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgbGV0IGZvcm1hdHRlZEVsZW1lbnQgPSBmb3JtYXRFbGVtZW50KGVsZW1lbnQpO1xuICAgIGxldCBsYXN0VmFsdWUgPSBjYWNoZS5wZWVrKCkgYXMgc3RyaW5nO1xuXG4gICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudDogZm9ybWF0dGVkRWxlbWVudCxcbiAgICAgICAgdHlwZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbGFzdFZhbHVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlbGVtZW50OiBmb3JtYXR0ZWRFbGVtZW50LFxuICAgICAgdHlwZTogJ2F0dHJpYnV0ZScsXG4gICAgICBuYW1lc3BhY2UsXG4gICAgICBuYW1lLFxuICAgICAgbGFzdFZhbHVlXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRFbGVtZW50KGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGA8JHtlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKX0gLz5gKTtcbn1cblxuZXhwb3J0IGNsYXNzIER5bmFtaWNBdHRyTlNPcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwiZHluYW1pYy1hdHRyXCI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgbmFtZXNwYWNlOiBzdHJpbmcsXG4gICAgcHVibGljIGlzVHJ1c3Rpbmc6IGJvb2xlYW5cbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIGxldCB7IG5hbWUsIG5hbWVzcGFjZSwgaXNUcnVzdGluZyB9ID0gdGhpcztcbiAgICBsZXQgcmVmZXJlbmNlID0gdm0uZnJhbWUuZ2V0T3BlcmFuZDxzdHJpbmc+KCk7XG4gICAgdm0uc3RhY2soKS5zZXREeW5hbWljQXR0cmlidXRlTlMobmFtZXNwYWNlLCBuYW1lLCByZWZlcmVuY2UsIGlzVHJ1c3RpbmcpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIGxldCB7IF9ndWlkOiBndWlkLCB0eXBlLCBuYW1lLCBuYW1lc3BhY2UgfSA9IHRoaXM7XG5cbiAgICBsZXQgZGV0YWlscyA9IGRpY3Q8c3RyaW5nPigpO1xuXG4gICAgZGV0YWlsc1tcIm5hbWVcIl0gPSBKU09OLnN0cmluZ2lmeShuYW1lKTtcbiAgICBkZXRhaWxzW1widmFsdWVcIl0gPSBcIiRPUEVSQU5EXCI7XG5cbiAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICBkZXRhaWxzW1wibmFtZXNwYWNlXCJdID0gSlNPTi5zdHJpbmdpZnkobmFtZXNwYWNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBndWlkLCB0eXBlLCBkZXRhaWxzIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIER5bmFtaWNBdHRyT3Bjb2RlIGV4dGVuZHMgT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImR5bmFtaWMtYXR0clwiO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIGlzVHJ1c3Rpbmc6IGJvb2xlYW5cbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIGxldCB7IG5hbWUsIGlzVHJ1c3RpbmcgfSA9IHRoaXM7XG4gICAgbGV0IHJlZmVyZW5jZSA9IHZtLmZyYW1lLmdldE9wZXJhbmQ8c3RyaW5nPigpO1xuICAgIHZtLnN0YWNrKCkuc2V0RHluYW1pY0F0dHJpYnV0ZShuYW1lLCByZWZlcmVuY2UsIGlzVHJ1c3RpbmcpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIGxldCB7IF9ndWlkOiBndWlkLCB0eXBlLCBuYW1lIH0gPSB0aGlzO1xuXG4gICAgbGV0IGRldGFpbHMgPSBkaWN0PHN0cmluZz4oKTtcblxuICAgIGRldGFpbHNbXCJuYW1lXCJdID0gSlNPTi5zdHJpbmdpZnkobmFtZSk7XG4gICAgZGV0YWlsc1tcInZhbHVlXCJdID0gXCIkT1BFUkFORFwiO1xuXG4gICAgcmV0dXJuIHsgZ3VpZCwgdHlwZSwgZGV0YWlscyB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXRjaEVsZW1lbnRPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJwYXRjaC1lbGVtZW50XCI7XG5cbiAgcHJpdmF0ZSBvcGVyYXRpb246IER5bmFtaWNBdHRyaWJ1dGU7XG5cbiAgY29uc3RydWN0b3Iob3BlcmF0aW9uOiBEeW5hbWljQXR0cmlidXRlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IG9wZXJhdGlvbi50YWc7XG4gICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIHRoaXMub3BlcmF0aW9uLnBhdGNoKHZtLmVudik7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgX2d1aWQsIHR5cGUsIG9wZXJhdGlvbiB9ID0gdGhpcztcblxuICAgIHJldHVybiB7XG4gICAgICBndWlkOiBfZ3VpZCxcbiAgICAgIHR5cGUsXG4gICAgICBkZXRhaWxzOiBvcGVyYXRpb24udG9KU09OKClcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tZW50T3Bjb2RlIGV4dGVuZHMgT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImNvbW1lbnRcIjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29tbWVudDogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIHZtLnN0YWNrKCkuYXBwZW5kQ29tbWVudCh0aGlzLmNvbW1lbnQpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW0pTT04uc3RyaW5naWZ5KHRoaXMuY29tbWVudCldXG4gICAgfTtcbiAgfVxufVxuIl19 -enifed('glimmer-runtime/lib/compiled/opcodes/lists', ['exports', 'glimmer-runtime/lib/opcodes', 'glimmer-runtime/lib/compiled/expressions/args', 'glimmer-util', 'glimmer-reference'], function (exports, _glimmerRuntimeLibOpcodes, _glimmerRuntimeLibCompiledExpressionsArgs, _glimmerUtil, _glimmerReference) { - 'use strict'; - - var IterablePresenceReference = (function () { - function IterablePresenceReference(artifacts) { - this.tag = artifacts.tag; - this.artifacts = artifacts; - } - - IterablePresenceReference.prototype.value = function value() { - return !this.artifacts.isEmpty(); - }; - - return IterablePresenceReference; - })(); - - var PutIteratorOpcode = (function (_Opcode) { - babelHelpers.inherits(PutIteratorOpcode, _Opcode); - - function PutIteratorOpcode() { - _Opcode.apply(this, arguments); - this.type = "put-iterator"; - } - - PutIteratorOpcode.prototype.evaluate = function evaluate(vm) { - var listRef = vm.frame.getOperand(); - var args = vm.frame.getArgs(); - var iterable = vm.env.iterableFor(listRef, args); - var iterator = new _glimmerReference.ReferenceIterator(iterable); - vm.frame.setIterator(iterator); - vm.frame.setCondition(new IterablePresenceReference(iterator.artifacts)); - }; - - return PutIteratorOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.PutIteratorOpcode = PutIteratorOpcode; - - var EnterListOpcode = (function (_Opcode2) { - babelHelpers.inherits(EnterListOpcode, _Opcode2); - - function EnterListOpcode(start, end) { - _Opcode2.call(this); - this.type = "enter-list"; - this.slice = new _glimmerUtil.ListSlice(start, end); - } - - EnterListOpcode.prototype.evaluate = function evaluate(vm) { - vm.enterList(this.slice); - }; - - EnterListOpcode.prototype.toJSON = function toJSON() { - var slice = this.slice; - var type = this.type; - var _guid = this._guid; - - var begin = slice.head(); - var end = slice.tail(); - return { - guid: _guid, - type: type, - args: [JSON.stringify(begin.inspect()), JSON.stringify(end.inspect())] - }; - }; - - return EnterListOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.EnterListOpcode = EnterListOpcode; - - var ExitListOpcode = (function (_Opcode3) { - babelHelpers.inherits(ExitListOpcode, _Opcode3); - - function ExitListOpcode() { - _Opcode3.apply(this, arguments); - this.type = "exit-list"; - } - - ExitListOpcode.prototype.evaluate = function evaluate(vm) { - vm.exitList(); - }; - - return ExitListOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.ExitListOpcode = ExitListOpcode; - - var EnterWithKeyOpcode = (function (_Opcode4) { - babelHelpers.inherits(EnterWithKeyOpcode, _Opcode4); - - function EnterWithKeyOpcode(start, end) { - _Opcode4.call(this); - this.type = "enter-with-key"; - this.slice = new _glimmerUtil.ListSlice(start, end); - } - - EnterWithKeyOpcode.prototype.evaluate = function evaluate(vm) { - vm.enterWithKey(vm.frame.getKey(), this.slice); - }; - - EnterWithKeyOpcode.prototype.toJSON = function toJSON() { - var slice = this.slice; - var _guid = this._guid; - var type = this.type; - - var begin = slice.head(); - var end = slice.tail(); - return { - guid: _guid, - type: type, - args: [JSON.stringify(begin.inspect()), JSON.stringify(end.inspect())] - }; - }; - - return EnterWithKeyOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.EnterWithKeyOpcode = EnterWithKeyOpcode; - - var TRUE_REF = new _glimmerReference.ConstReference(true); - var FALSE_REF = new _glimmerReference.ConstReference(false); - - var NextIterOpcode = (function (_Opcode5) { - babelHelpers.inherits(NextIterOpcode, _Opcode5); - - function NextIterOpcode(end) { - _Opcode5.call(this); - this.type = "next-iter"; - this.end = end; - } - - NextIterOpcode.prototype.evaluate = function evaluate(vm) { - var item = vm.frame.getIterator().next(); - if (item) { - vm.frame.setCondition(TRUE_REF); - vm.frame.setKey(item.key); - vm.frame.setOperand(item.value); - vm.frame.setArgs(_glimmerRuntimeLibCompiledExpressionsArgs.EvaluatedArgs.positional([item.value, item.memo])); - } else { - vm.frame.setCondition(FALSE_REF); - vm.goto(this.end); - } - }; - - return NextIterOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.NextIterOpcode = NextIterOpcode; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvb3Bjb2Rlcy9saXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7UUFPQSx5QkFBQTtBQUlFLGlCQUpGLHlCQUFBLENBSWMsU0FBNkIsRUFBQTtBQUN2QyxnQkFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDO0FBQ3pCLGdCQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztTQUM1Qjs7QUFQSCxpQ0FBQSxXQVNFLEtBQUssR0FBQSxpQkFBQTtBQUNILG1CQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQzs7ZUFYSCx5QkFBQTs7O1FBY0EsaUJBQUE7OEJBQUEsaUJBQUE7O0FBQUEsaUJBQUEsaUJBQUEsR0FBQTtBQUF1QyxnQ0FBQSxTQUFBLENBQUEsQ0FBTTtBQUNwQyxnQkFBQSxDQUFBLElBQUksR0FBRyxjQUFjLENBQUM7U0FXOUI7O0FBWkQseUJBQUEsV0FHRSxRQUFRLEdBQUEsa0JBQUMsRUFBTSxFQUFBO0FBQ2IsZ0JBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDcEMsZ0JBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUIsZ0JBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqRCxnQkFBSSxRQUFRLEdBQUcsc0JBdkI4QixpQkFBaUIsQ0F1QnpCLFFBQVEsQ0FBQyxDQUFDO0FBRS9DLGNBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9CLGNBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUkseUJBQXlCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDMUU7O2VBWEgsaUJBQUE7aUNB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QUFDO0FBQzFDLFFBQU0sU0FBUyxHQUFHLHNCQXJHZSxjQUFjLENBcUdWLEtBQUssQ0FBQyxDQUFDOztRQUU1QyxjQUFBOzhCQUFBLGNBQUE7O0FBS0UsaUJBTEYsY0FBQSxDQUtjLEdBQWdCLEVBQUE7QUFDMUIsK0JBQU8sQ0FBQztBQUxILGdCQUFBLENBQUEsSUFBSSxHQUFHLFdBQVcsQ0FBQztBQU14QixnQkFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7U0FDaEI7O0FBUkgsc0JBQUEsV0FVRSxRQUFRLEdBQUEsa0JBQUMsRUFBTSxFQUFBO0FBQ2IsZ0JBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFFekMsZ0JBQUksSUFBSSxFQUFFO0FBQ1Isa0JBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLGtCQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsa0JBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxrQkFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsMENBMUhkLGFBQWEsQ0EwSGUsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JFLE1BQU07QUFDTCxrQkFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDakMsa0JBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ25CO1NBQ0Y7O2VBdEJILGNBQUE7aUNBNUdTLE1BQU0iLCJmaWxlIjoibGlzdHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGNvZGUsIE9wY29kZUpTT04gfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IFZNIH0gZnJvbSAnLi4vLi4vdm0nO1xuaW1wb3J0IHsgTGFiZWxPcGNvZGUgfSBmcm9tICcuLi8uLi9jb21waWxlZC9vcGNvZGVzL3ZtJztcbmltcG9ydCB7IEV2YWx1YXRlZEFyZ3MgfSBmcm9tICcuLi9leHByZXNzaW9ucy9hcmdzJztcbmltcG9ydCB7IExpc3RTbGljZSwgU2xpY2UgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuaW1wb3J0IHsgUmV2aXNpb25UYWcsIFJlZmVyZW5jZSwgQ29uc3RSZWZlcmVuY2UsIFJlZmVyZW5jZUl0ZXJhdG9yLCBJdGVyYXRpb25BcnRpZmFjdHMgfSBmcm9tICdnbGltbWVyLXJlZmVyZW5jZSc7XG5cbmNsYXNzIEl0ZXJhYmxlUHJlc2VuY2VSZWZlcmVuY2UgaW1wbGVtZW50cyBSZWZlcmVuY2U8Ym9vbGVhbj4ge1xuICBwdWJsaWMgdGFnOiBSZXZpc2lvblRhZztcbiAgcHJpdmF0ZSBhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cztcblxuICBjb25zdHJ1Y3RvcihhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cykge1xuICAgIHRoaXMudGFnID0gYXJ0aWZhY3RzLnRhZztcbiAgICB0aGlzLmFydGlmYWN0cyA9IGFydGlmYWN0cztcbiAgfVxuXG4gIHZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5hcnRpZmFjdHMuaXNFbXB0eSgpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQdXRJdGVyYXRvck9wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJwdXQtaXRlcmF0b3JcIjtcblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICBsZXQgbGlzdFJlZiA9IHZtLmZyYW1lLmdldE9wZXJhbmQoKTtcbiAgICBsZXQgYXJncyA9IHZtLmZyYW1lLmdldEFyZ3MoKTtcbiAgICBsZXQgaXRlcmFibGUgPSB2bS5lbnYuaXRlcmFibGVGb3IobGlzdFJlZiwgYXJncyk7XG4gICAgbGV0IGl0ZXJhdG9yID0gbmV3IFJlZmVyZW5jZUl0ZXJhdG9yKGl0ZXJhYmxlKTtcblxuICAgIHZtLmZyYW1lLnNldEl0ZXJhdG9yKGl0ZXJhdG9yKTtcbiAgICB2bS5mcmFtZS5zZXRDb25kaXRpb24obmV3IEl0ZXJhYmxlUHJlc2VuY2VSZWZlcmVuY2UoaXRlcmF0b3IuYXJ0aWZhY3RzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVudGVyTGlzdE9wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJlbnRlci1saXN0XCI7XG5cbiAgcHVibGljIHNsaWNlOiBTbGljZTxPcGNvZGU+O1xuXG4gIGNvbnN0cnVjdG9yKHN0YXJ0OiBMYWJlbE9wY29kZSwgZW5kOiBMYWJlbE9wY29kZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zbGljZSA9IG5ldyBMaXN0U2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICB2bS5lbnRlckxpc3QodGhpcy5zbGljZSk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgc2xpY2UsIHR5cGUsIF9ndWlkIH0gPSB0aGlzO1xuXG4gICAgbGV0IGJlZ2luID0gc2xpY2UuaGVhZCgpIGFzIExhYmVsT3Bjb2RlO1xuICAgIGxldCBlbmQgPSBzbGljZS50YWlsKCkgYXMgTGFiZWxPcGNvZGU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogX2d1aWQsXG4gICAgICB0eXBlLFxuICAgICAgYXJnczogW1xuICAgICAgICBKU09OLnN0cmluZ2lmeShiZWdpbi5pbnNwZWN0KCkpLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShlbmQuaW5zcGVjdCgpKVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV4aXRMaXN0T3Bjb2RlIGV4dGVuZHMgT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImV4aXQtbGlzdFwiO1xuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIHZtLmV4aXRMaXN0KCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVudGVyV2l0aEtleU9wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJlbnRlci13aXRoLWtleVwiO1xuXG4gIHByaXZhdGUgc2xpY2U6IFNsaWNlPE9wY29kZT47XG5cbiAgY29uc3RydWN0b3Ioc3RhcnQ6IExhYmVsT3Bjb2RlLCBlbmQ6IExhYmVsT3Bjb2RlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnNsaWNlID0gbmV3IExpc3RTbGljZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIHZtLmVudGVyV2l0aEtleSh2bS5mcmFtZS5nZXRLZXkoKSwgdGhpcy5zbGljZSk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgc2xpY2UsIF9ndWlkLCB0eXBlIH0gPSB0aGlzO1xuXG4gICAgbGV0IGJlZ2luID0gc2xpY2UuaGVhZCgpIGFzIExhYmVsT3Bjb2RlO1xuICAgIGxldCBlbmQgPSBzbGljZS50YWlsKCkgYXMgTGFiZWxPcGNvZGU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogX2d1aWQsXG4gICAgICB0eXBlLFxuICAgICAgYXJnczogW1xuICAgICAgICBKU09OLnN0cmluZ2lmeShiZWdpbi5pbnNwZWN0KCkpLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShlbmQuaW5zcGVjdCgpKVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cblxuY29uc3QgVFJVRV9SRUYgPSBuZXcgQ29uc3RSZWZlcmVuY2UodHJ1ZSk7XG5jb25zdCBGQUxTRV9SRUYgPSBuZXcgQ29uc3RSZWZlcmVuY2UoZmFsc2UpO1xuXG5leHBvcnQgY2xhc3MgTmV4dEl0ZXJPcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwibmV4dC1pdGVyXCI7XG5cbiAgcHJpdmF0ZSBlbmQ6IExhYmVsT3Bjb2RlO1xuXG4gIGNvbnN0cnVjdG9yKGVuZDogTGFiZWxPcGNvZGUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgbGV0IGl0ZW0gPSB2bS5mcmFtZS5nZXRJdGVyYXRvcigpLm5leHQoKTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICB2bS5mcmFtZS5zZXRDb25kaXRpb24oVFJVRV9SRUYpO1xuICAgICAgdm0uZnJhbWUuc2V0S2V5KGl0ZW0ua2V5KTtcbiAgICAgIHZtLmZyYW1lLnNldE9wZXJhbmQoaXRlbS52YWx1ZSk7XG4gICAgICB2bS5mcmFtZS5zZXRBcmdzKEV2YWx1YXRlZEFyZ3MucG9zaXRpb25hbChbaXRlbS52YWx1ZSwgaXRlbS5tZW1vXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bS5mcmFtZS5zZXRDb25kaXRpb24oRkFMU0VfUkVGKTtcbiAgICAgIHZtLmdvdG8odGhpcy5lbmQpO1xuICAgIH1cbiAgfVxufVxuIl19 -enifed('glimmer-runtime/lib/compiled/opcodes/partial', ['exports', 'glimmer-util', 'glimmer-reference', 'glimmer-runtime/lib/opcodes', 'glimmer-runtime/lib/compiled/opcodes/vm'], function (exports, _glimmerUtil, _glimmerReference, _glimmerRuntimeLibOpcodes, _glimmerRuntimeLibCompiledOpcodesVm) { - 'use strict'; - - var PutDynamicPartialDefinitionOpcode = (function (_Opcode) { - babelHelpers.inherits(PutDynamicPartialDefinitionOpcode, _Opcode); - - function PutDynamicPartialDefinitionOpcode(symbolTable) { - _Opcode.call(this); - this.symbolTable = symbolTable; - this.type = "put-dynamic-partial-definition"; - } - - PutDynamicPartialDefinitionOpcode.prototype.evaluate = function evaluate(vm) { - var env = vm.env; - var symbolTable = this.symbolTable; - - function lookupPartial(name) { - var normalized = String(name); - if (!env.hasPartial(normalized, symbolTable)) { - throw new Error('Could not find a partial named "' + normalized + '"'); - } - return env.lookupPartial(normalized, symbolTable); - } - var reference = _glimmerReference.map(vm.frame.getOperand(), lookupPartial); - var cache = _glimmerReference.isConst(reference) ? undefined : new _glimmerReference.ReferenceCache(reference); - var definition = cache ? cache.peek() : reference.value(); - vm.frame.setImmediate(definition); - if (cache) { - vm.updateWith(new _glimmerRuntimeLibCompiledOpcodesVm.Assert(cache)); - } - }; - - PutDynamicPartialDefinitionOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: ["$OPERAND"] - }; - }; - - return PutDynamicPartialDefinitionOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.PutDynamicPartialDefinitionOpcode = PutDynamicPartialDefinitionOpcode; - - var PutPartialDefinitionOpcode = (function (_Opcode2) { - babelHelpers.inherits(PutPartialDefinitionOpcode, _Opcode2); - - function PutPartialDefinitionOpcode(definition) { - _Opcode2.call(this); - this.definition = definition; - this.type = "put-partial-definition"; - } - - PutPartialDefinitionOpcode.prototype.evaluate = function evaluate(vm) { - vm.frame.setImmediate(this.definition); - }; - - PutPartialDefinitionOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: [JSON.stringify(this.definition.name)] - }; - }; - - return PutPartialDefinitionOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.PutPartialDefinitionOpcode = PutPartialDefinitionOpcode; - - var EvaluatePartialOpcode = (function (_Opcode3) { - babelHelpers.inherits(EvaluatePartialOpcode, _Opcode3); - - function EvaluatePartialOpcode(symbolTable) { - _Opcode3.call(this); - this.symbolTable = symbolTable; - this.type = "evaluate-partial"; - this.cache = _glimmerUtil.dict(); - } - - EvaluatePartialOpcode.prototype.evaluate = function evaluate(vm) { - var _vm$frame$getImmediate = vm.frame.getImmediate(); - - var template = _vm$frame$getImmediate.template; - - var block = this.cache[template.id]; - if (!block) { - block = template.asPartial(this.symbolTable); - } - vm.invokePartial(block); - }; - - EvaluatePartialOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: ["$OPERAND"] - }; - }; - - return EvaluatePartialOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.EvaluatePartialOpcode = EvaluatePartialOpcode; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvb3Bjb2Rlcy9wYXJ0aWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztRQVNBLGlDQUFBOzhCQUFBLGlDQUFBOztBQUdFLGlCQUhGLGlDQUFBLENBR3NCLFdBQXdCLEVBQUE7QUFDMUMsOEJBQU8sQ0FBQztBQURVLGdCQUFBLENBQUEsV0FBVyxHQUFYLFdBQVcsQ0FBYTtBQUZyQyxnQkFBQSxDQUFBLElBQUksR0FBRyxnQ0FBZ0MsQ0FBQztTQUk5Qzs7QUFMSCx5Q0FBQSxXQU9FLFFBQVEsR0FBQSxrQkFBQyxFQUFNLEVBQUE7QUFDYixnQkFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztnQkFDWCxXQUFXLEdBQUssSUFBSSxDQUFwQixXQUFXOztBQUVqQixxQkFBQSxhQUFBLENBQXVCLElBQVksRUFBQTtBQUNqQyxvQkFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRTlCLG9CQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQUU7QUFDNUMsMEJBQU0sSUFBSSxLQUFLLHNDQUFvQyxVQUFVLE9BQUksQ0FBQztpQkFDbkU7QUFFRCx1QkFBTyxHQUFHLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQzthQUNuRDtBQUVELGdCQUFJLFNBQVMsR0FBRyxrQkE3QmMsR0FBRyxDQTZCYixFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ2xFLGdCQUFJLEtBQUssR0FBRyxrQkE5QlMsT0FBTyxDQThCUixTQUFTLENBQUMsR0FBRyxTQUFTLEdBQUcsc0JBOUJ4QyxjQUFjLENBOEI2QyxTQUFTLENBQUMsQ0FBQztBQUMzRSxnQkFBSSxVQUFVLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7QUFFMUQsY0FBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFbEMsZ0JBQUksS0FBSyxFQUFFO0FBQ1Qsa0JBQUUsQ0FBQyxVQUFVLENBQUMsd0NBbENYLE1BQU0sQ0FrQ2dCLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDbEM7U0FDRjs7QUE5QkgseUNBQUEsV0FnQ0UsTUFBTSxHQUFBLGtCQUFBO0FBQ0osbUJBQU87QUFDTCxvQkFBSSxFQUFFLElBQUksQ0FBQyxLQUFLO0FBQ2hCLG9CQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDZixvQkFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO2FBQ25CLENBQUM7U0FDSDs7ZUF0Q0gsaUNBQUE7aUNBUFMsTUFBTTs7OztRQWdEZiwwQkFBQTs4QkFBQSwwQkFBQTs7QUFHRSxpQkFIRiwwQkFBQSxDQUdzQixVQUFxQyxFQUFBO0FBQ3ZELCtCQUFPLENBQUM7QUFEVSxnQkFBQSxDQUFBLFVBQVUsR0FBVixVQUFVLENBQTJCO0FBRmxELGdCQUFBLENBQUEsSUFBSSxHQUFHLHdCQUF3QixDQUFDO1NBSXRDOztBQUxILGtDQUFBLFdBT0UsUUFBUSxHQUFBLGtCQUFDLEVBQU0sRUFBQTtBQUNiLGNBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN4Qzs7QUFUSCxrQ0FBQSxXQVdFLE1BQU0sR0FBQSxrQkFBQTtBQUNKLG1CQUFPO0FBQ0wsb0JBQUksRUFBRSxJQUFJLENBQUMsS0FBSztBQUNoQixvQkFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ2Ysb0JBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM3QyxDQUFDO1NBQ0g7O2VBakJILDBCQUFBO2lDQWhEUyxNQUFNOzs7O1FBb0VmLHFCQUFBOzhCQUFBLHFCQUFBOztBQUlFLGlCQUpGLHFCQUFBLENBSXNCLFdBQXdCLEVBQUE7QUFDMUMsK0JBQU8sQ0FBQztBQURVLGdCQUFBLENBQUEsV0FBVyxHQUFYLFdBQVcsQ0FBYTtBQUhyQyxnQkFBQSxDQUFBLElBQUksR0FBRyxrQkFBa0IsQ0FBQztBQUN6QixnQkFBQSxDQUFBLEtBQUssR0FBRyxhQXhFRCxJQUFJLEVBd0VpQixDQUFDO1NBSXBDOztBQU5ILDZCQUFBLFdBUUUsUUFBUSxHQUFBLGtCQUFDLEVBQU0sRUFBQTt5Q0FDTSxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBNkI7O2dCQUEvRCxRQUFRLDBCQUFSLFFBQVE7O0FBRWQsZ0JBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXBDLGdCQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1YscUJBQUssR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUM5QztBQUVELGNBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekI7O0FBbEJILDZCQUFBLFdBb0JFLE1BQU0sR0FBQSxrQkFBQTtBQUNKLG1CQUFPO0FBQ0wsb0JBQUksRUFBRSxJQUFJLENBQUMsS0FBSztBQUNoQixvQkFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ2Ysb0JBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQzthQUNuQixDQUFDO1NBQ0g7O2VBMUJILHFCQUFBO2lDQXBFUyxNQUFNIiwiZmlsZSI6InBhcnRpYWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGFxdWUsIGRpY3QgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuaW1wb3J0IHsgUmVmZXJlbmNlQ2FjaGUsIGlzQ29uc3QsIG1hcCB9IGZyb20gJ2dsaW1tZXItcmVmZXJlbmNlJztcbmltcG9ydCB7IE9wY29kZSwgT3Bjb2RlSlNPTiB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgQXNzZXJ0IH0gZnJvbSAnLi92bSc7XG5pbXBvcnQgeyBWTSB9IGZyb20gJy4uLy4uL3ZtJztcbmltcG9ydCB7IFBhcnRpYWxEZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vcGFydGlhbCc7XG5pbXBvcnQgU3ltYm9sVGFibGUgZnJvbSAnLi4vLi4vc3ltYm9sLXRhYmxlJztcbmltcG9ydCB7IFBhcnRpYWxCbG9jayB9IGZyb20gJy4uL2Jsb2Nrcyc7XG5cbmV4cG9ydCBjbGFzcyBQdXREeW5hbWljUGFydGlhbERlZmluaXRpb25PcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwicHV0LWR5bmFtaWMtcGFydGlhbC1kZWZpbml0aW9uXCI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgbGV0IGVudiA9IHZtLmVudjtcbiAgICBsZXQgeyBzeW1ib2xUYWJsZSB9ID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIGxvb2t1cFBhcnRpYWwobmFtZTogT3BhcXVlKSB7XG4gICAgICBsZXQgbm9ybWFsaXplZCA9IFN0cmluZyhuYW1lKTtcblxuICAgICAgaWYgKCFlbnYuaGFzUGFydGlhbChub3JtYWxpemVkLCBzeW1ib2xUYWJsZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBhIHBhcnRpYWwgbmFtZWQgXCIke25vcm1hbGl6ZWR9XCJgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVudi5sb29rdXBQYXJ0aWFsKG5vcm1hbGl6ZWQsIHN5bWJvbFRhYmxlKTtcbiAgICB9XG5cbiAgICBsZXQgcmVmZXJlbmNlID0gbWFwKHZtLmZyYW1lLmdldE9wZXJhbmQ8T3BhcXVlPigpLCBsb29rdXBQYXJ0aWFsKTtcbiAgICBsZXQgY2FjaGUgPSBpc0NvbnN0KHJlZmVyZW5jZSkgPyB1bmRlZmluZWQgOiBuZXcgUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKTtcbiAgICBsZXQgZGVmaW5pdGlvbiA9IGNhY2hlID8gY2FjaGUucGVlaygpIDogcmVmZXJlbmNlLnZhbHVlKCk7XG5cbiAgICB2bS5mcmFtZS5zZXRJbW1lZGlhdGUoZGVmaW5pdGlvbik7XG5cbiAgICBpZiAoY2FjaGUpIHtcbiAgICAgIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydChjYWNoZSkpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGFyZ3M6IFtcIiRPUEVSQU5EXCJdXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHV0UGFydGlhbERlZmluaXRpb25PcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwicHV0LXBhcnRpYWwtZGVmaW5pdGlvblwiO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGVmaW5pdGlvbjogUGFydGlhbERlZmluaXRpb248T3BhcXVlPikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICB2bS5mcmFtZS5zZXRJbW1lZGlhdGUodGhpcy5kZWZpbml0aW9uKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGFyZ3M6IFtKU09OLnN0cmluZ2lmeSh0aGlzLmRlZmluaXRpb24ubmFtZSldXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXZhbHVhdGVQYXJ0aWFsT3Bjb2RlIGV4dGVuZHMgT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImV2YWx1YXRlLXBhcnRpYWxcIjtcbiAgcHJpdmF0ZSBjYWNoZSA9IGRpY3Q8UGFydGlhbEJsb2NrPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIGxldCB7IHRlbXBsYXRlIH0gPSB2bS5mcmFtZS5nZXRJbW1lZGlhdGU8UGFydGlhbERlZmluaXRpb248T3BhcXVlPj4oKTtcblxuICAgIGxldCBibG9jayA9IHRoaXMuY2FjaGVbdGVtcGxhdGUuaWRdO1xuXG4gICAgaWYgKCFibG9jaykge1xuICAgICAgYmxvY2sgPSB0ZW1wbGF0ZS5hc1BhcnRpYWwodGhpcy5zeW1ib2xUYWJsZSk7XG4gICAgfVxuXG4gICAgdm0uaW52b2tlUGFydGlhbChibG9jayk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbXCIkT1BFUkFORFwiXVxuICAgIH07XG4gIH1cbn1cbiJdfQ== -enifed('glimmer-runtime/lib/compiled/opcodes/vm', ['exports', 'glimmer-runtime/lib/opcodes', 'glimmer-runtime/lib/references', 'glimmer-reference', 'glimmer-util'], function (exports, _glimmerRuntimeLibOpcodes, _glimmerRuntimeLibReferences, _glimmerReference, _glimmerUtil) { - 'use strict'; - - var PushChildScopeOpcode = (function (_Opcode) { - babelHelpers.inherits(PushChildScopeOpcode, _Opcode); - - function PushChildScopeOpcode() { - _Opcode.apply(this, arguments); - this.type = "push-child-scope"; - } - - PushChildScopeOpcode.prototype.evaluate = function evaluate(vm) { - vm.pushChildScope(); - }; - - return PushChildScopeOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.PushChildScopeOpcode = PushChildScopeOpcode; - - var PopScopeOpcode = (function (_Opcode2) { - babelHelpers.inherits(PopScopeOpcode, _Opcode2); - - function PopScopeOpcode() { - _Opcode2.apply(this, arguments); - this.type = "pop-scope"; - } - - PopScopeOpcode.prototype.evaluate = function evaluate(vm) { - vm.popScope(); - }; - - return PopScopeOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.PopScopeOpcode = PopScopeOpcode; - - var PushDynamicScopeOpcode = (function (_Opcode3) { - babelHelpers.inherits(PushDynamicScopeOpcode, _Opcode3); - - function PushDynamicScopeOpcode() { - _Opcode3.apply(this, arguments); - this.type = "push-dynamic-scope"; - } - - PushDynamicScopeOpcode.prototype.evaluate = function evaluate(vm) { - vm.pushDynamicScope(); - }; - - return PushDynamicScopeOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.PushDynamicScopeOpcode = PushDynamicScopeOpcode; - - var PopDynamicScopeOpcode = (function (_Opcode4) { - babelHelpers.inherits(PopDynamicScopeOpcode, _Opcode4); - - function PopDynamicScopeOpcode() { - _Opcode4.apply(this, arguments); - this.type = "pop-dynamic-scope"; - } - - PopDynamicScopeOpcode.prototype.evaluate = function evaluate(vm) { - vm.popDynamicScope(); - }; - - return PopDynamicScopeOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.PopDynamicScopeOpcode = PopDynamicScopeOpcode; - - var PutNullOpcode = (function (_Opcode5) { - babelHelpers.inherits(PutNullOpcode, _Opcode5); - - function PutNullOpcode() { - _Opcode5.apply(this, arguments); - this.type = "put-null"; - } - - PutNullOpcode.prototype.evaluate = function evaluate(vm) { - vm.frame.setOperand(_glimmerRuntimeLibReferences.NULL_REFERENCE); - }; - - return PutNullOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.PutNullOpcode = PutNullOpcode; - - var PutValueOpcode = (function (_Opcode6) { - babelHelpers.inherits(PutValueOpcode, _Opcode6); - - function PutValueOpcode(expression) { - _Opcode6.call(this); - this.expression = expression; - this.type = "put-value"; - } - - PutValueOpcode.prototype.evaluate = function evaluate(vm) { - vm.evaluateOperand(this.expression); - }; - - PutValueOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: [this.expression.toJSON()] - }; - }; - - return PutValueOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.PutValueOpcode = PutValueOpcode; - - var PutArgsOpcode = (function (_Opcode7) { - babelHelpers.inherits(PutArgsOpcode, _Opcode7); - - function PutArgsOpcode(args) { - _Opcode7.call(this); - this.args = args; - this.type = "put-args"; - } - - PutArgsOpcode.prototype.evaluate = function evaluate(vm) { - vm.evaluateArgs(this.args); - }; - - PutArgsOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - details: { - "positional": this.args.positional.toJSON(), - "named": this.args.named.toJSON() - } - }; - }; - - return PutArgsOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.PutArgsOpcode = PutArgsOpcode; - - var BindPositionalArgsOpcode = (function (_Opcode8) { - babelHelpers.inherits(BindPositionalArgsOpcode, _Opcode8); - - function BindPositionalArgsOpcode(names, symbols) { - _Opcode8.call(this); - this.names = names; - this.symbols = symbols; - this.type = "bind-positional-args"; - } - - BindPositionalArgsOpcode.create = function create(block) { - var names = block.locals; - var symbols = names.map(function (name) { - return block.symbolTable.getLocal(name); - }); - return new this(names, symbols); - }; - - BindPositionalArgsOpcode.prototype.evaluate = function evaluate(vm) { - vm.bindPositionalArgs(this.symbols); - }; - - BindPositionalArgsOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: ['[' + this.names.map(function (name) { - return JSON.stringify(name); - }).join(", ") + ']'] - }; - }; - - return BindPositionalArgsOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.BindPositionalArgsOpcode = BindPositionalArgsOpcode; - - var BindNamedArgsOpcode = (function (_Opcode9) { - babelHelpers.inherits(BindNamedArgsOpcode, _Opcode9); - - function BindNamedArgsOpcode(names, symbols) { - _Opcode9.call(this); - this.names = names; - this.symbols = symbols; - this.type = "bind-named-args"; - } - - BindNamedArgsOpcode.create = function create(layout) { - var names = layout.named; - var symbols = names.map(function (name) { - return layout.symbolTable.getNamed(name); - }); - return new this(names, symbols); - }; - - BindNamedArgsOpcode.prototype.evaluate = function evaluate(vm) { - vm.bindNamedArgs(this.names, this.symbols); - }; - - BindNamedArgsOpcode.prototype.toJSON = function toJSON() { - var names = this.names; - var symbols = this.symbols; - - var args = names.map(function (name, i) { - return '$' + symbols[i] + ': $ARGS[' + name + ']'; - }); - return { - guid: this._guid, - type: this.type, - args: args - }; - }; - - return BindNamedArgsOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.BindNamedArgsOpcode = BindNamedArgsOpcode; - - var BindBlocksOpcode = (function (_Opcode10) { - babelHelpers.inherits(BindBlocksOpcode, _Opcode10); - - function BindBlocksOpcode(names, symbols) { - _Opcode10.call(this); - this.names = names; - this.symbols = symbols; - this.type = "bind-blocks"; - } - - BindBlocksOpcode.create = function create(layout) { - var names = layout.yields; - var symbols = names.map(function (name) { - return layout.symbolTable.getYield(name); - }); - return new this(names, symbols); - }; - - BindBlocksOpcode.prototype.evaluate = function evaluate(vm) { - vm.bindBlocks(this.names, this.symbols); - }; - - BindBlocksOpcode.prototype.toJSON = function toJSON() { - var names = this.names; - var symbols = this.symbols; - - var args = names.map(function (name, i) { - return '$' + symbols[i] + ': $BLOCKS[' + name + ']'; - }); - return { - guid: this._guid, - type: this.type, - args: args - }; - }; - - return BindBlocksOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.BindBlocksOpcode = BindBlocksOpcode; - - var BindPartialArgsOpcode = (function (_Opcode11) { - babelHelpers.inherits(BindPartialArgsOpcode, _Opcode11); - - function BindPartialArgsOpcode(symbol) { - _Opcode11.call(this); - this.symbol = symbol; - this.type = "bind-partial-args"; - } - - BindPartialArgsOpcode.create = function create(layout) { - return new this(layout.symbolTable.getPartialArgs()); - }; - - BindPartialArgsOpcode.prototype.evaluate = function evaluate(vm) { - vm.bindPartialArgs(this.symbol); - }; - - return BindPartialArgsOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.BindPartialArgsOpcode = BindPartialArgsOpcode; - - var BindDynamicScopeOpcode = (function (_Opcode12) { - babelHelpers.inherits(BindDynamicScopeOpcode, _Opcode12); - - function BindDynamicScopeOpcode(names) { - _Opcode12.call(this); - this.names = names; - this.type = "bind-dynamic-scope"; - } - - BindDynamicScopeOpcode.prototype.evaluate = function evaluate(vm) { - vm.bindDynamicScope(this.names); - }; - - return BindDynamicScopeOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.BindDynamicScopeOpcode = BindDynamicScopeOpcode; - - var EnterOpcode = (function (_Opcode13) { - babelHelpers.inherits(EnterOpcode, _Opcode13); - - function EnterOpcode(begin, end) { - _Opcode13.call(this); - this.type = "enter"; - this.slice = new _glimmerUtil.ListSlice(begin, end); - } - - EnterOpcode.prototype.evaluate = function evaluate(vm) { - vm.enter(this.slice); - }; - - EnterOpcode.prototype.toJSON = function toJSON() { - var slice = this.slice; - var type = this.type; - var _guid = this._guid; - - var begin = slice.head(); - var end = slice.tail(); - return { - guid: _guid, - type: type, - args: [JSON.stringify(begin.inspect()), JSON.stringify(end.inspect())] - }; - }; - - return EnterOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.EnterOpcode = EnterOpcode; - - var ExitOpcode = (function (_Opcode14) { - babelHelpers.inherits(ExitOpcode, _Opcode14); - - function ExitOpcode() { - _Opcode14.apply(this, arguments); - this.type = "exit"; - } - - ExitOpcode.prototype.evaluate = function evaluate(vm) { - vm.exit(); - }; - - return ExitOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.ExitOpcode = ExitOpcode; - - var LabelOpcode = (function (_Opcode15) { - babelHelpers.inherits(LabelOpcode, _Opcode15); - - function LabelOpcode(label) { - _Opcode15.call(this); - this.tag = _glimmerReference.CONSTANT_TAG; - this.type = "label"; - this.label = null; - this.prev = null; - this.next = null; - if (label) this.label = label; - } - - LabelOpcode.prototype.evaluate = function evaluate() {}; - - LabelOpcode.prototype.inspect = function inspect() { - return this.label + ' [' + this._guid + ']'; - }; - - LabelOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: [JSON.stringify(this.inspect())] - }; - }; - - return LabelOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.LabelOpcode = LabelOpcode; - - var EvaluateOpcode = (function (_Opcode16) { - babelHelpers.inherits(EvaluateOpcode, _Opcode16); - - function EvaluateOpcode(debug, block) { - _Opcode16.call(this); - this.debug = debug; - this.block = block; - this.type = "evaluate"; - } - - EvaluateOpcode.prototype.evaluate = function evaluate(vm) { - vm.invokeBlock(this.block, vm.frame.getArgs()); - }; - - EvaluateOpcode.prototype.toJSON = function toJSON() { - var guid = this._guid; - var type = this.type; - var debug = this.debug; - var block = this.block; - - var compiled = block['compiled']; - var children = undefined; - if (compiled) { - children = compiled.ops.toArray().map(function (op) { - return op.toJSON(); - }); - } else { - children = [{ guid: null, type: '[ UNCOMPILED BLOCK ]' }]; - } - return { - guid: guid, - type: type, - args: [debug], - children: children - }; - }; - - return EvaluateOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.EvaluateOpcode = EvaluateOpcode; - var ConstTest = function (ref, env) { - return new _glimmerReference.ConstReference(!!ref.value()); - }; - exports.ConstTest = ConstTest; - var SimpleTest = function (ref, env) { - return ref; - }; - exports.SimpleTest = SimpleTest; - var EnvironmentTest = function (ref, env) { - return env.toConditionalReference(ref); - }; - exports.EnvironmentTest = EnvironmentTest; - - var TestOpcode = (function (_Opcode17) { - babelHelpers.inherits(TestOpcode, _Opcode17); - - function TestOpcode(testFunc) { - _Opcode17.call(this); - this.testFunc = testFunc; - this.type = "test"; - } - - TestOpcode.prototype.evaluate = function evaluate(vm) { - vm.frame.setCondition(this.testFunc(vm.frame.getOperand(), vm.env)); - }; - - TestOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: ["$OPERAND", this.testFunc.name] - }; - }; - - return TestOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.TestOpcode = TestOpcode; - - var JumpOpcode = (function (_Opcode18) { - babelHelpers.inherits(JumpOpcode, _Opcode18); - - function JumpOpcode(target) { - _Opcode18.call(this); - this.target = target; - this.type = "jump"; - } - - JumpOpcode.prototype.evaluate = function evaluate(vm) { - vm.goto(this.target); - }; - - JumpOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: [JSON.stringify(this.target.inspect())] - }; - }; - - return JumpOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.JumpOpcode = JumpOpcode; - - var JumpIfOpcode = (function (_JumpOpcode) { - babelHelpers.inherits(JumpIfOpcode, _JumpOpcode); - - function JumpIfOpcode() { - _JumpOpcode.apply(this, arguments); - this.type = "jump-if"; - } - - JumpIfOpcode.prototype.evaluate = function evaluate(vm) { - var reference = vm.frame.getCondition(); - if (_glimmerReference.isConst(reference)) { - if (reference.value()) { - _JumpOpcode.prototype.evaluate.call(this, vm); - } - } else { - var cache = new _glimmerReference.ReferenceCache(reference); - if (cache.peek()) { - _JumpOpcode.prototype.evaluate.call(this, vm); - } - vm.updateWith(new Assert(cache)); - } - }; - - return JumpIfOpcode; - })(JumpOpcode); - - exports.JumpIfOpcode = JumpIfOpcode; - - var JumpUnlessOpcode = (function (_JumpOpcode2) { - babelHelpers.inherits(JumpUnlessOpcode, _JumpOpcode2); - - function JumpUnlessOpcode() { - _JumpOpcode2.apply(this, arguments); - this.type = "jump-unless"; - } - - JumpUnlessOpcode.prototype.evaluate = function evaluate(vm) { - var reference = vm.frame.getCondition(); - if (_glimmerReference.isConst(reference)) { - if (!reference.value()) { - _JumpOpcode2.prototype.evaluate.call(this, vm); - } - } else { - var cache = new _glimmerReference.ReferenceCache(reference); - if (!cache.peek()) { - _JumpOpcode2.prototype.evaluate.call(this, vm); - } - vm.updateWith(new Assert(cache)); - } - }; - - return JumpUnlessOpcode; - })(JumpOpcode); - - exports.JumpUnlessOpcode = JumpUnlessOpcode; - - var Assert = (function (_UpdatingOpcode) { - babelHelpers.inherits(Assert, _UpdatingOpcode); - - function Assert(cache) { - _UpdatingOpcode.call(this); - this.type = "assert"; - this.tag = cache.tag; - this.cache = cache; - } - - Assert.prototype.evaluate = function evaluate(vm) { - var cache = this.cache; - - if (_glimmerReference.isModified(cache.revalidate())) { - vm.throw(); - } - }; - - Assert.prototype.toJSON = function toJSON() { - var type = this.type; - var _guid = this._guid; - var cache = this.cache; - - var expected = undefined; - try { - expected = JSON.stringify(cache.peek()); - } catch (e) { - expected = String(cache.peek()); - } - return { - guid: _guid, - type: type, - args: [], - details: { expected: expected } - }; - }; - - return Assert; - })(_glimmerRuntimeLibOpcodes.UpdatingOpcode); - - exports.Assert = Assert; - - var JumpIfNotModifiedOpcode = (function (_UpdatingOpcode2) { - babelHelpers.inherits(JumpIfNotModifiedOpcode, _UpdatingOpcode2); - - function JumpIfNotModifiedOpcode(tag, target) { - _UpdatingOpcode2.call(this); - this.target = target; - this.type = "jump-if-not-modified"; - this.tag = tag; - this.lastRevision = tag.value(); - } - - JumpIfNotModifiedOpcode.prototype.evaluate = function evaluate(vm) { - var tag = this.tag; - var target = this.target; - var lastRevision = this.lastRevision; - - if (!vm.alwaysRevalidate && tag.validate(lastRevision)) { - vm.goto(target); - } - }; - - JumpIfNotModifiedOpcode.prototype.didModify = function didModify() { - this.lastRevision = this.tag.value(); - }; - - JumpIfNotModifiedOpcode.prototype.toJSON = function toJSON() { - return { - guid: this._guid, - type: this.type, - args: [JSON.stringify(this.target.inspect())] - }; - }; - - return JumpIfNotModifiedOpcode; - })(_glimmerRuntimeLibOpcodes.UpdatingOpcode); - - exports.JumpIfNotModifiedOpcode = JumpIfNotModifiedOpcode; - - var DidModifyOpcode = (function (_UpdatingOpcode3) { - babelHelpers.inherits(DidModifyOpcode, _UpdatingOpcode3); - - function DidModifyOpcode(target) { - _UpdatingOpcode3.call(this); - this.target = target; - this.type = "did-modify"; - this.tag = _glimmerReference.CONSTANT_TAG; - } - - DidModifyOpcode.prototype.evaluate = function evaluate() { - this.target.didModify(); - }; - - return DidModifyOpcode; - })(_glimmerRuntimeLibOpcodes.UpdatingOpcode); - - exports.DidModifyOpcode = DidModifyOpcode; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZWQvb3Bjb2Rlcy92bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7UUFXQSxvQkFBQTs4QkFBQSxvQkFBQTs7QUFBQSxpQkFBQSxvQkFBQSxHQUFBO0FBQTBDLGdDQUFBLFNBQUEsQ0FBQSxDQUFNO0FBQ3ZDLGdCQUFBLENBQUEsSUFBSSxHQUFHLGtCQUFrQixDQUFDO1NBS2xDOztBQU5ELDRCQUFBLFdBR0UsUUFBUSxHQUFBLGtCQUFDLEVBQU0sRUFBQTtBQUNiLGNBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUNyQjs7ZUFMSCxvQkFBQTtpQ0FYUyxNQUFNOzs7O1FBbUJmLGNBQUE7OEJBQUEsY0FBQTs7QUFBQSxpQkFBQSxjQUFBLEdBQUE7QUFBb0MsaUNBQUEsU0FBQSxDQUFBLENBQU07QUFDakMsZ0JBQUEsQ0FBQSxJQUFJLEdBQUcsV0FBVyxDQUFDO1NBSzNCOztBQU5ELHNCQUFBLFdBR0UsUUFBUSxHQUFBLGtCQUFDLEVBQU0sRUFBQTtBQUNiLGNBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNmOztlQUxILGNBQUE7aUNBbkJTLE1BQU07Ozs7UUEyQmYsc0JBQUE7OEJBQUEsc0JBQUE7O0FBQUEsaUJBQUEsc0JBQUEsR0FBQTtBQUE0QyxpQ0FBQSxTQUFBLENBQUEsQ0FBTTtBQUN6QyxnQkFBQSxDQUFBLElBQUksR0FBRyxvQkFBb0IsQ0FBQztTQUtwQzs7QUFORCw4QkFBQSxXQUdFLFFBQVEsR0FBQSxrQkFBQyxFQUFNLEVBQUE7QUFDYixjQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN2Qjs7ZUFMSCxzQkFBQTtpQ0EzQlMsTUFBTTs7OztRQW1DZixxQkFBQTs4QkFBQSxxQkFBQTs7QUFBQSxpQkFBQSxxQkFBQSxHQUFBO0FBQTJDLGlDQUFBLFNBQUEsQ0FBQSxDQUFNO0FBQ3hDLGdCQUFBLENBQUEsSUFBSSxHQUFHLG1CQUFtQixDQUFDO1NBS25DOztBQU5ELDZCQUFBLFdBR0Us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QUM7QUFJekIsZ0JBQUksQ0FBQyxHQUFHLHFCQW5mSCxZQUFZLEFBbWZNLENBQUM7U0FDekI7O0FBTkgsdUJBQUEsV0FRRSxRQUFRLEdBQUEsb0JBQUE7QUFDTixnQkFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUN6Qjs7ZUFWSCxlQUFBO2lDQXRmNkIsY0FBYyIsImZpbGUiOiJ2bS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wY29kZSwgT3Bjb2RlSlNPTiwgVXBkYXRpbmdPcGNvZGUgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IENvbXBpbGVkRXhwcmVzc2lvbiB9IGZyb20gJy4uL2V4cHJlc3Npb25zJztcbmltcG9ydCB7IENvbXBpbGVkQXJncyB9IGZyb20gJy4uL2V4cHJlc3Npb25zL2FyZ3MnO1xuaW1wb3J0IHsgVk0sIFVwZGF0aW5nVk0gfSBmcm9tICcuLi8uLi92bSc7XG5pbXBvcnQgeyBDb21waWxlZEJsb2NrLCBMYXlvdXQsIElubGluZUJsb2NrIH0gZnJvbSAnLi4vYmxvY2tzJztcbmltcG9ydCB7IE5VTExfUkVGRVJFTkNFIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcyc7XG5pbXBvcnQgeyBSZWZlcmVuY2UsIENvbnN0UmVmZXJlbmNlIH0gZnJvbSAnZ2xpbW1lci1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgTGlzdFNsaWNlLCBPcGFxdWUsIFNsaWNlIH0gZnJvbSAnZ2xpbW1lci11dGlsJztcbmltcG9ydCB7IENPTlNUQU5UX1RBRywgUmVmZXJlbmNlQ2FjaGUsIFJldmlzaW9uLCBSZXZpc2lvblRhZywgaXNDb25zdCwgaXNNb2RpZmllZCB9IGZyb20gJ2dsaW1tZXItcmVmZXJlbmNlJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5cbmV4cG9ydCBjbGFzcyBQdXNoQ2hpbGRTY29wZU9wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJwdXNoLWNoaWxkLXNjb3BlXCI7XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgdm0ucHVzaENoaWxkU2NvcGUoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUG9wU2NvcGVPcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwicG9wLXNjb3BlXCI7XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgdm0ucG9wU2NvcGUoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHVzaER5bmFtaWNTY29wZU9wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJwdXNoLWR5bmFtaWMtc2NvcGVcIjtcblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICB2bS5wdXNoRHluYW1pY1Njb3BlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBvcER5bmFtaWNTY29wZU9wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJwb3AtZHluYW1pYy1zY29wZVwiO1xuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIHZtLnBvcER5bmFtaWNTY29wZSgpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQdXROdWxsT3Bjb2RlIGV4dGVuZHMgT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcInB1dC1udWxsXCI7XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgdm0uZnJhbWUuc2V0T3BlcmFuZChOVUxMX1JFRkVSRU5DRSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFB1dFZhbHVlT3Bjb2RlIGV4dGVuZHMgT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcInB1dC12YWx1ZVwiO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXhwcmVzc2lvbjogQ29tcGlsZWRFeHByZXNzaW9uPGFueT4pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgdm0uZXZhbHVhdGVPcGVyYW5kKHRoaXMuZXhwcmVzc2lvbik7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbdGhpcy5leHByZXNzaW9uLnRvSlNPTigpXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFB1dEFyZ3NPcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwicHV0LWFyZ3NcIjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFyZ3M6IENvbXBpbGVkQXJncykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICB2bS5ldmFsdWF0ZUFyZ3ModGhpcy5hcmdzKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGRldGFpbHM6IHtcbiAgICAgICAgXCJwb3NpdGlvbmFsXCI6IHRoaXMuYXJncy5wb3NpdGlvbmFsLnRvSlNPTigpLFxuICAgICAgICBcIm5hbWVkXCI6IHRoaXMuYXJncy5uYW1lZC50b0pTT04oKVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmRQb3NpdGlvbmFsQXJnc09wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJiaW5kLXBvc2l0aW9uYWwtYXJnc1wiO1xuXG4gIHN0YXRpYyBjcmVhdGUoYmxvY2s6IElubGluZUJsb2NrKTogQmluZFBvc2l0aW9uYWxBcmdzT3Bjb2RlIHtcbiAgICBsZXQgbmFtZXMgPSBibG9jay5sb2NhbHM7XG4gICAgbGV0IHN5bWJvbHMgPSBuYW1lcy5tYXAobmFtZSA9PiBibG9jay5zeW1ib2xUYWJsZS5nZXRMb2NhbChuYW1lKSk7XG4gICAgcmV0dXJuIG5ldyB0aGlzKG5hbWVzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmFtZXM6IHN0cmluZ1tdLFxuICAgIHByaXZhdGUgc3ltYm9sczogbnVtYmVyW11cbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIHZtLmJpbmRQb3NpdGlvbmFsQXJncyh0aGlzLnN5bWJvbHMpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW2BbJHt0aGlzLm5hbWVzLm1hcChuYW1lID0+IEpTT04uc3RyaW5naWZ5KG5hbWUpKS5qb2luKFwiLCBcIil9XWBdXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmluZE5hbWVkQXJnc09wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJiaW5kLW5hbWVkLWFyZ3NcIjtcblxuICBzdGF0aWMgY3JlYXRlKGxheW91dDogTGF5b3V0KSB7XG4gICAgbGV0IG5hbWVzID0gbGF5b3V0Lm5hbWVkO1xuICAgIGxldCBzeW1ib2xzID0gbmFtZXMubWFwKG5hbWUgPT4gbGF5b3V0LnN5bWJvbFRhYmxlLmdldE5hbWVkKG5hbWUpKTtcblxuICAgIHJldHVybiBuZXcgdGhpcyhuYW1lcywgc3ltYm9scyk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5hbWVzOiBzdHJpbmdbXSxcbiAgICBwcml2YXRlIHN5bWJvbHM6IG51bWJlcltdXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICB2bS5iaW5kTmFtZWRBcmdzKHRoaXMubmFtZXMsIHRoaXMuc3ltYm9scyk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgbmFtZXMsIHN5bWJvbHMgfSA9IHRoaXM7XG5cbiAgICBsZXQgYXJncyA9IG5hbWVzLm1hcCgobmFtZSwgaSkgPT4gYCQke3N5bWJvbHNbaV19OiAkQVJHU1ske25hbWV9XWApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmluZEJsb2Nrc09wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJiaW5kLWJsb2Nrc1wiO1xuXG4gIHN0YXRpYyBjcmVhdGUobGF5b3V0OiBMYXlvdXQpIHtcbiAgICBsZXQgbmFtZXMgPSBsYXlvdXQueWllbGRzO1xuICAgIGxldCBzeW1ib2xzID0gbmFtZXMubWFwKG5hbWUgPT4gbGF5b3V0LnN5bWJvbFRhYmxlLmdldFlpZWxkKG5hbWUpKTtcblxuICAgIHJldHVybiBuZXcgdGhpcyhuYW1lcywgc3ltYm9scyk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5hbWVzOiBzdHJpbmdbXSxcbiAgICBwcml2YXRlIHN5bWJvbHM6IG51bWJlcltdXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICB2bS5iaW5kQmxvY2tzKHRoaXMubmFtZXMsIHRoaXMuc3ltYm9scyk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgbmFtZXMsIHN5bWJvbHMgfSA9IHRoaXM7XG5cbiAgICBsZXQgYXJncyA9IG5hbWVzLm1hcCgobmFtZSwgaSkgPT4gYCQke3N5bWJvbHNbaV19OiAkQkxPQ0tTWyR7bmFtZX1dYCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGFyZ3NcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5kUGFydGlhbEFyZ3NPcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwiYmluZC1wYXJ0aWFsLWFyZ3NcIjtcblxuICBzdGF0aWMgY3JlYXRlKGxheW91dDogTGF5b3V0KSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKGxheW91dC5zeW1ib2xUYWJsZS5nZXRQYXJ0aWFsQXJncygpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3ltYm9sOiBudW1iZXIpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgdm0uYmluZFBhcnRpYWxBcmdzKHRoaXMuc3ltYm9sKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmluZER5bmFtaWNTY29wZU9wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJiaW5kLWR5bmFtaWMtc2NvcGVcIjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5hbWVzOiBzdHJpbmdbXSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICB2bS5iaW5kRHluYW1pY1Njb3BlKHRoaXMubmFtZXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbnRlck9wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJlbnRlclwiO1xuICBwdWJsaWMgc2xpY2U6IFNsaWNlPE9wY29kZT47IC8vIFB1YmxpYyBiZWNhdXNlIGl0J3MgdXNlZCBieSBsYXp5IGNvbnRlbnQgZGVvcHRcblxuICBjb25zdHJ1Y3RvcihiZWdpbjogTGFiZWxPcGNvZGUsIGVuZDogTGFiZWxPcGNvZGUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2xpY2UgPSBuZXcgTGlzdFNsaWNlKGJlZ2luLCBlbmQpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgdm0uZW50ZXIodGhpcy5zbGljZSk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgc2xpY2UsIHR5cGUsIF9ndWlkIH0gPSB0aGlzO1xuXG4gICAgbGV0IGJlZ2luID0gc2xpY2UuaGVhZCgpIGFzIExhYmVsT3Bjb2RlO1xuICAgIGxldCBlbmQgPSBzbGljZS50YWlsKCkgYXMgTGFiZWxPcGNvZGU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogX2d1aWQsXG4gICAgICB0eXBlLFxuICAgICAgYXJnczogW1xuICAgICAgICBKU09OLnN0cmluZ2lmeShiZWdpbi5pbnNwZWN0KCkpLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShlbmQuaW5zcGVjdCgpKVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV4aXRPcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwiZXhpdFwiO1xuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIHZtLmV4aXQoKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsT3B0aW9ucyB7XG4gIGxhYmVsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgTGFiZWxPcGNvZGUgZXh0ZW5kcyBPcGNvZGUgaW1wbGVtZW50cyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0YWcgPSBDT05TVEFOVF9UQUc7XG4gIHB1YmxpYyB0eXBlID0gXCJsYWJlbFwiO1xuICBwdWJsaWMgbGFiZWw6IHN0cmluZyA9IG51bGw7XG5cbiAgcHJldjogYW55ID0gbnVsbDtcbiAgbmV4dDogYW55ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihsYWJlbDogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAobGFiZWwpIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgfVxuXG4gIGV2YWx1YXRlKCkge31cblxuICBpbnNwZWN0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubGFiZWx9IFske3RoaXMuX2d1aWR9XWA7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbSlNPTi5zdHJpbmdpZnkodGhpcy5pbnNwZWN0KCkpXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0ZU9wdGlvbnMge1xuICBkZWJ1Zzogc3RyaW5nO1xuICBibG9jazogSW5saW5lQmxvY2s7XG59XG5cbmV4cG9ydCBjbGFzcyBFdmFsdWF0ZU9wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJldmFsdWF0ZVwiO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkZWJ1Zzogc3RyaW5nLFxuICAgIHB1YmxpYyBibG9jazogSW5saW5lQmxvY2tcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIHZtLmludm9rZUJsb2NrKHRoaXMuYmxvY2ssIHZtLmZyYW1lLmdldEFyZ3MoKSk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgX2d1aWQ6IGd1aWQsIHR5cGUsIGRlYnVnLCBibG9jayB9ID0gdGhpcztcblxuICAgIGxldCBjb21waWxlZDogQ29tcGlsZWRCbG9jayA9IGJsb2NrWydjb21waWxlZCddO1xuICAgIGxldCBjaGlsZHJlbjogT3Bjb2RlSlNPTltdO1xuXG4gICAgaWYgKGNvbXBpbGVkKSB7XG4gICAgICBjaGlsZHJlbiA9IGNvbXBpbGVkLm9wcy50b0FycmF5KCkubWFwKG9wID0+IG9wLnRvSlNPTigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW4gPSBbeyBndWlkOiBudWxsLCB0eXBlOiAnWyBVTkNPTVBJTEVEIEJMT0NLIF0nIH1dO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBndWlkLFxuICAgICAgdHlwZSxcbiAgICAgIGFyZ3M6IFtkZWJ1Z10sXG4gICAgICBjaGlsZHJlblxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgVGVzdEZ1bmN0aW9uID0gKHJlZjogUmVmZXJlbmNlPE9wYXF1ZT4sIGVudjogRW52aXJvbm1lbnQpID0+IFJlZmVyZW5jZTxib29sZWFuPjtcblxuZXhwb3J0IGNvbnN0IENvbnN0VGVzdDogVGVzdEZ1bmN0aW9uID0gZnVuY3Rpb24ocmVmOiBSZWZlcmVuY2U8T3BhcXVlPiwgZW52OiBFbnZpcm9ubWVudCk6IFJlZmVyZW5jZTxib29sZWFuPiB7XG4gIHJldHVybiBuZXcgQ29uc3RSZWZlcmVuY2UoISFyZWYudmFsdWUoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgU2ltcGxlVGVzdDogVGVzdEZ1bmN0aW9uID0gZnVuY3Rpb24ocmVmOiBSZWZlcmVuY2U8T3BhcXVlPiwgZW52OiBFbnZpcm9ubWVudCk6IFJlZmVyZW5jZTxib29sZWFuPiB7XG4gIHJldHVybiByZWYgYXMgUmVmZXJlbmNlPGJvb2xlYW4+O1xufTtcblxuZXhwb3J0IGNvbnN0IEVudmlyb25tZW50VGVzdDogVGVzdEZ1bmN0aW9uID0gZnVuY3Rpb24ocmVmOiBSZWZlcmVuY2U8T3BhcXVlPiwgZW52OiBFbnZpcm9ubWVudCk6IFJlZmVyZW5jZTxib29sZWFuPiB7XG4gIHJldHVybiBlbnYudG9Db25kaXRpb25hbFJlZmVyZW5jZShyZWYpO1xufTtcblxuZXhwb3J0IGNsYXNzIFRlc3RPcGNvZGUgZXh0ZW5kcyBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwidGVzdFwiO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGVzdEZ1bmM6IFRlc3RGdW5jdGlvbikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICB2bS5mcmFtZS5zZXRDb25kaXRpb24odGhpcy50ZXN0RnVuYyh2bS5mcmFtZS5nZXRPcGVyYW5kKCksIHZtLmVudikpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW1wiJE9QRVJBTkRcIiwgdGhpcy50ZXN0RnVuYy5uYW1lXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBKdW1wT3B0aW9ucyB7XG4gIHRhcmdldDogTGFiZWxPcGNvZGU7XG59XG5cbmV4cG9ydCBjbGFzcyBKdW1wT3Bjb2RlIGV4dGVuZHMgT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImp1bXBcIjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhcmdldDogTGFiZWxPcGNvZGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgdm0uZ290byh0aGlzLnRhcmdldCk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbSlNPTi5zdHJpbmdpZnkodGhpcy50YXJnZXQuaW5zcGVjdCgpKV1cbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBKdW1wSWZPcGNvZGUgZXh0ZW5kcyBKdW1wT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImp1bXAtaWZcIjtcblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICBsZXQgcmVmZXJlbmNlID0gdm0uZnJhbWUuZ2V0Q29uZGl0aW9uKCk7XG5cbiAgICBpZiAoaXNDb25zdChyZWZlcmVuY2UpKSB7XG4gICAgICBpZiAocmVmZXJlbmNlLnZhbHVlKCkpIHtcbiAgICAgICAgc3VwZXIuZXZhbHVhdGUodm0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgY2FjaGUgPSBuZXcgUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKTtcblxuICAgICAgaWYgKGNhY2hlLnBlZWsoKSkge1xuICAgICAgICBzdXBlci5ldmFsdWF0ZSh2bSk7XG4gICAgICB9XG5cbiAgICAgIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydChjYWNoZSkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSnVtcFVubGVzc09wY29kZSBleHRlbmRzIEp1bXBPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwianVtcC11bmxlc3NcIjtcblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICBsZXQgcmVmZXJlbmNlID0gdm0uZnJhbWUuZ2V0Q29uZGl0aW9uKCk7XG5cbiAgICBpZiAoaXNDb25zdChyZWZlcmVuY2UpKSB7XG4gICAgICBpZiAoIXJlZmVyZW5jZS52YWx1ZSgpKSB7XG4gICAgICAgIHN1cGVyLmV2YWx1YXRlKHZtKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSk7XG5cbiAgICAgIGlmICghY2FjaGUucGVlaygpKSB7XG4gICAgICAgIHN1cGVyLmV2YWx1YXRlKHZtKTtcbiAgICAgIH1cblxuICAgICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0KGNhY2hlKSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBc3NlcnQgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJhc3NlcnRcIjtcblxuICBwcml2YXRlIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxPcGFxdWU+O1xuXG4gIGNvbnN0cnVjdG9yKGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxPcGFxdWU+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IGNhY2hlLnRhZztcbiAgICB0aGlzLmNhY2hlID0gY2FjaGU7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgaWYgKGlzTW9kaWZpZWQoY2FjaGUucmV2YWxpZGF0ZSgpKSkge1xuICAgICAgdm0udGhyb3coKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgdHlwZSwgX2d1aWQsIGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgbGV0IGV4cGVjdGVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGV4cGVjdGVkID0gSlNPTi5zdHJpbmdpZnkoY2FjaGUucGVlaygpKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGV4cGVjdGVkID0gU3RyaW5nKGNhY2hlLnBlZWsoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IF9ndWlkLFxuICAgICAgdHlwZSxcbiAgICAgIGFyZ3M6IFtdLFxuICAgICAgZGV0YWlsczogeyBleHBlY3RlZCB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSnVtcElmTm90TW9kaWZpZWRPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJqdW1wLWlmLW5vdC1tb2RpZmllZFwiO1xuXG4gIHByaXZhdGUgbGFzdFJldmlzaW9uOiBSZXZpc2lvbjtcblxuICBjb25zdHJ1Y3Rvcih0YWc6IFJldmlzaW9uVGFnLCBwcml2YXRlIHRhcmdldDogTGFiZWxPcGNvZGUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gdGFnO1xuICAgIHRoaXMubGFzdFJldmlzaW9uID0gdGFnLnZhbHVlKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IHRhZywgdGFyZ2V0LCBsYXN0UmV2aXNpb24gfSA9IHRoaXM7XG5cbiAgICBpZiAoIXZtLmFsd2F5c1JldmFsaWRhdGUgJiYgdGFnLnZhbGlkYXRlKGxhc3RSZXZpc2lvbikpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG4gIH1cblxuICBkaWRNb2RpZnkoKSB7XG4gICAgdGhpcy5sYXN0UmV2aXNpb24gPSB0aGlzLnRhZy52YWx1ZSgpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW0pTT04uc3RyaW5naWZ5KHRoaXMudGFyZ2V0Lmluc3BlY3QoKSldXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGlkTW9kaWZ5T3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwiZGlkLW1vZGlmeVwiO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFyZ2V0OiBKdW1wSWZOb3RNb2RpZmllZE9wY29kZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSBDT05TVEFOVF9UQUc7XG4gIH1cblxuICBldmFsdWF0ZSgpIHtcbiAgICB0aGlzLnRhcmdldC5kaWRNb2RpZnkoKTtcbiAgfVxufVxuIl19 -enifed('glimmer-runtime/lib/compiler', ['exports', 'glimmer-util', 'glimmer-runtime/lib/utils', 'glimmer-runtime/lib/syntax/core', 'glimmer-runtime/lib/compiled/blocks', 'glimmer-runtime/lib/compiled/expressions/function', 'glimmer-runtime/lib/compiled/opcodes/builder'], function (exports, _glimmerUtil, _glimmerRuntimeLibUtils, _glimmerRuntimeLibSyntaxCore, _glimmerRuntimeLibCompiledBlocks, _glimmerRuntimeLibCompiledExpressionsFunction, _glimmerRuntimeLibCompiledOpcodesBuilder) { - 'use strict'; - - exports.compileLayout = compileLayout; - - var Compiler = (function () { - function Compiler(block, env) { - this.block = block; - this.env = env; - this.current = block.program.head(); - this.symbolTable = block.symbolTable; - } - - Compiler.prototype.compileStatement = function compileStatement(statement, ops) { - this.env.statement(statement, this.symbolTable).compile(ops, this.env, this.symbolTable); - }; - - return Compiler; - })(); - - function compileStatement(env, statement, ops, layout) { - env.statement(statement, layout.symbolTable).compile(ops, env, layout.symbolTable); + if (keyword.willRender) { + keyword.willRender(morph, env); } - exports.default = Compiler; - var EntryPointCompiler = (function (_Compiler) { - babelHelpers.inherits(EntryPointCompiler, _Compiler); - - function EntryPointCompiler(template, env) { - _Compiler.call(this, template, env); - var list = new CompileIntoList(env, template.symbolTable); - this.ops = new _glimmerRuntimeLibCompiledOpcodesBuilder.default(list, template.symbolTable, env); - } - - EntryPointCompiler.prototype.compile = function compile() { - var block = this.block; - var ops = this.ops; - var program = block.program; - - var current = program.head(); - while (current) { - var next = program.nextNode(current); - this.compileStatement(current, ops); - current = next; - } - return ops.toOpSeq(); - }; - - EntryPointCompiler.prototype.append = function append(op) { - this.ops.append(op); - }; - - EntryPointCompiler.prototype.getLocalSymbol = function getLocalSymbol(name) { - return this.symbolTable.getLocal(name); - }; - - EntryPointCompiler.prototype.getNamedSymbol = function getNamedSymbol(name) { - return this.symbolTable.getNamed(name); - }; - - EntryPointCompiler.prototype.getYieldSymbol = function getYieldSymbol(name) { - return this.symbolTable.getYield(name); - }; - - return EntryPointCompiler; - })(Compiler); - - exports.EntryPointCompiler = EntryPointCompiler; - - var InlineBlockCompiler = (function (_Compiler2) { - babelHelpers.inherits(InlineBlockCompiler, _Compiler2); - - function InlineBlockCompiler(block, env) { - _Compiler2.call(this, block, env); - this.block = block; - var list = new CompileIntoList(env, block.symbolTable); - this.ops = new _glimmerRuntimeLibCompiledOpcodesBuilder.default(list, block.symbolTable, env); - } - - InlineBlockCompiler.prototype.compile = function compile() { - var block = this.block; - var ops = this.ops; - var program = block.program; - - var hasPositionalParameters = block.hasPositionalParameters(); - if (hasPositionalParameters) { - ops.pushChildScope(); - ops.bindPositionalArgsForBlock(block); - } - var current = program.head(); - while (current) { - var next = program.nextNode(current); - this.compileStatement(current, ops); - current = next; - } - if (hasPositionalParameters) { - ops.popScope(); - } - return ops.toOpSeq(); - }; - - return InlineBlockCompiler; - })(Compiler); - - exports.InlineBlockCompiler = InlineBlockCompiler; - - function compileLayout(compilable, env) { - var builder = new ComponentLayoutBuilder(env); - compilable.compile(builder); - return builder.compile(); + var lastState, newState; + if (keyword.setupState) { + lastState = _htmlbarsUtilObjectUtils.shallowCopy(morph.getState()); + newState = morph.setState(keyword.setupState(lastState, env, scope, params, hash)); } - var ComponentLayoutBuilder = (function () { - function ComponentLayoutBuilder(env) { - this.env = env; - } + if (keyword.childEnv) { + // Build the child environment... + env = keyword.childEnv(morph.getState(), env); - ComponentLayoutBuilder.prototype.empty = function empty() { - this.inner = new EmptyBuilder(this.env); - }; - - ComponentLayoutBuilder.prototype.wrapLayout = function wrapLayout(layout) { - this.inner = new WrappedBuilder(this.env, layout); - }; - - ComponentLayoutBuilder.prototype.fromLayout = function fromLayout(layout) { - this.inner = new UnwrappedBuilder(this.env, layout); - }; - - ComponentLayoutBuilder.prototype.compile = function compile() { - return this.inner.compile(); - }; - - babelHelpers.createClass(ComponentLayoutBuilder, [{ - key: 'tag', - get: function () { - return this.inner.tag; - } - }, { - key: 'attrs', - get: function () { - return this.inner.attrs; - } - }]); - return ComponentLayoutBuilder; - })(); - - var EmptyBuilder = (function () { - function EmptyBuilder(env) { - this.env = env; - } - - EmptyBuilder.prototype.compile = function compile() { - var env = this.env; - - var list = new CompileIntoList(env, null); - return new _glimmerRuntimeLibCompiledBlocks.CompiledBlock(list, 0); - }; - - babelHelpers.createClass(EmptyBuilder, [{ - key: 'tag', - get: function () { - throw new Error('Nope'); - } - }, { - key: 'attrs', - get: function () { - throw new Error('Nope'); - } - }]); - return EmptyBuilder; - })(); - - var WrappedBuilder = (function () { - function WrappedBuilder(env, layout) { - this.env = env; - this.layout = layout; - this.tag = new ComponentTagBuilder(); - this.attrs = new ComponentAttrsBuilder(); - } - - WrappedBuilder.prototype.compile = function compile() { - //========DYNAMIC - // PutValue(TagExpr) - // Test - // JumpUnless(BODY) - // OpenDynamicPrimitiveElement - // DidCreateElement - // ...attr statements... - // FlushElement - // BODY: Noop - // ...body statements... - // PutValue(TagExpr) - // Test - // JumpUnless(END) - // CloseElement - // END: Noop - // DidRenderLayout - // Exit - // - //========STATIC - // OpenPrimitiveElementOpcode - // DidCreateElement - // ...attr statements... - // FlushElement - // ...body statements... - // CloseElement - // DidRenderLayout - // Exit - var env = this.env; - var layout = this.layout; - - var symbolTable = layout.symbolTable; - var buffer = new CompileIntoList(env, layout.symbolTable); - var dsl = new _glimmerRuntimeLibCompiledOpcodesBuilder.default(buffer, layout.symbolTable, env); - dsl.startLabels(); - if (this.tag.isDynamic) { - dsl.putValue(this.tag.dynamicTagName); - dsl.test('simple'); - dsl.jumpUnless('BODY'); - dsl.openDynamicPrimitiveElement(); - dsl.didCreateElement(); - this.attrs['buffer'].forEach(function (statement) { - return compileStatement(env, statement, dsl, layout); - }); - dsl.flushElement(); - dsl.label('BODY'); - } else if (this.tag.isStatic) { - var tag = this.tag.staticTagName; - dsl.openPrimitiveElement(tag); - dsl.didCreateElement(); - this.attrs['buffer'].forEach(function (statement) { - return compileStatement(env, statement, dsl, layout); - }); - dsl.flushElement(); - } - if (layout.hasNamedParameters) { - dsl.bindNamedArgsForLayout(layout); - } - if (layout.hasYields) { - dsl.bindBlocksForLayout(layout); - } - if (layout.hasPartials) { - dsl.bindPartialArgsForLayout(layout); - } - layout.program.forEachNode(function (statement) { - return compileStatement(env, statement, dsl, layout); - }); - if (this.tag.isDynamic) { - dsl.putValue(this.tag.dynamicTagName); - dsl.test('simple'); - dsl.jumpUnless('END'); - dsl.closeElement(); - dsl.label('END'); - } else if (this.tag.isStatic) { - dsl.closeElement(); - } - dsl.didRenderLayout(); - dsl.stopLabels(); - return new _glimmerRuntimeLibCompiledBlocks.CompiledBlock(dsl.toOpSeq(), symbolTable.size); - }; - - return WrappedBuilder; - })(); - - var UnwrappedBuilder = (function () { - function UnwrappedBuilder(env, layout) { - this.env = env; - this.layout = layout; - this.attrs = new ComponentAttrsBuilder(); - } - - UnwrappedBuilder.prototype.compile = function compile() { - var env = this.env; - var layout = this.layout; - - var buffer = new CompileIntoList(env, layout.symbolTable); - var dsl = new _glimmerRuntimeLibCompiledOpcodesBuilder.default(buffer, layout.symbolTable, env); - dsl.startLabels(); - if (layout.hasNamedParameters) { - dsl.bindNamedArgsForLayout(layout); - } - if (layout.hasYields) { - dsl.bindBlocksForLayout(layout); - } - if (layout.hasPartials) { - dsl.bindPartialArgsForLayout(layout); - } - var attrs = this.attrs['buffer']; - var attrsInserted = false; - this.layout.program.forEachNode(function (statement) { - if (!attrsInserted && isOpenElement(statement)) { - dsl.openComponentElement(statement.tag); - dsl.didCreateElement(); - dsl.shadowAttributes(); - attrs.forEach(function (statement) { - return compileStatement(env, statement, dsl, layout); - }); - attrsInserted = true; - } else { - compileStatement(env, statement, dsl, layout); - } - }); - dsl.didRenderLayout(); - dsl.stopLabels(); - return new _glimmerRuntimeLibCompiledBlocks.CompiledBlock(dsl.toOpSeq(), layout.symbolTable.size); - }; - - babelHelpers.createClass(UnwrappedBuilder, [{ - key: 'tag', - get: function () { - throw new Error('BUG: Cannot call `tag` on an UnwrappedBuilder'); - } - }]); - return UnwrappedBuilder; - })(); - - function isOpenElement(syntax) { - return syntax instanceof _glimmerRuntimeLibSyntaxCore.OpenElement || syntax instanceof _glimmerRuntimeLibSyntaxCore.OpenPrimitiveElement; + // ..then save off the child env builder on the render node. If the render + // node tree is re-rendered and this node is not dirty, the child env + // builder will still be invoked so that child dirty render nodes still get + // the correct child env. + morph.buildChildEnv = keyword.childEnv; } - var ComponentTagBuilder = (function () { - function ComponentTagBuilder() { - this.isDynamic = null; - this.isStatic = null; - this.staticTagName = null; - this.dynamicTagName = null; - } + var firstTime = !morph.rendered; - ComponentTagBuilder.prototype.static = function _static(tagName) { - this.isStatic = true; - this.staticTagName = tagName; - }; + if (keyword.isEmpty) { + var isEmpty = keyword.isEmpty(morph.getState(), env, scope, params, hash); - ComponentTagBuilder.prototype.dynamic = function dynamic(tagName) { - this.isDynamic = true; - this.dynamicTagName = _glimmerRuntimeLibCompiledExpressionsFunction.default(tagName); - }; - - return ComponentTagBuilder; - })(); - - var ComponentAttrsBuilder = (function () { - function ComponentAttrsBuilder() { - this.buffer = []; + if (isEmpty) { + if (!firstTime) { + _htmlbarsUtilTemplateUtils.clearMorph(morph, env, false); } - - ComponentAttrsBuilder.prototype.static = function _static(name, value) { - this.buffer.push(new _glimmerRuntimeLibSyntaxCore.StaticAttr(name, value, null)); - }; - - ComponentAttrsBuilder.prototype.dynamic = function dynamic(name, value) { - this.buffer.push(new _glimmerRuntimeLibSyntaxCore.DynamicAttr(name, _glimmerRuntimeLibCompiledExpressionsFunction.default(value), null, false)); - }; - - return ComponentAttrsBuilder; - })(); - - var ComponentBuilder = (function () { - function ComponentBuilder(dsl) { - this.dsl = dsl; - this.env = dsl.env; - } - - ComponentBuilder.prototype.static = function _static(definition, args, templates, symbolTable) { - var shadow = arguments.length <= 4 || arguments[4] === undefined ? _glimmerRuntimeLibUtils.EMPTY_ARRAY : arguments[4]; - - this.dsl.unit({ templates: templates }, function (dsl) { - dsl.putComponentDefinition(definition); - dsl.openComponent(args, shadow); - dsl.closeComponent(); - }); - }; - - ComponentBuilder.prototype.dynamic = function dynamic(definitionArgs, definition, args, templates, symbolTable) { - var shadow = arguments.length <= 5 || arguments[5] === undefined ? _glimmerRuntimeLibUtils.EMPTY_ARRAY : arguments[5]; - - this.dsl.unit({ templates: templates }, function (dsl) { - dsl.putArgs(definitionArgs); - dsl.putValue(_glimmerRuntimeLibCompiledExpressionsFunction.default(definition)); - dsl.test('simple'); - dsl.enter('BEGIN', 'END'); - dsl.label('BEGIN'); - dsl.jumpUnless('END'); - dsl.putDynamicComponentDefinition(); - dsl.openComponent(args, shadow); - dsl.closeComponent(); - dsl.label('END'); - dsl.exit(); - }); - }; - - return ComponentBuilder; - })(); - - var CompileIntoList = (function (_LinkedList) { - babelHelpers.inherits(CompileIntoList, _LinkedList); - - function CompileIntoList(env, symbolTable) { - _LinkedList.call(this); - this.env = env; - this.symbolTable = symbolTable; - var dsl = new _glimmerRuntimeLibCompiledOpcodesBuilder.default(this, symbolTable, env); - this.component = new ComponentBuilder(dsl); - } - - CompileIntoList.prototype.getLocalSymbol = function getLocalSymbol(name) { - return this.symbolTable.getLocal(name); - }; - - CompileIntoList.prototype.hasLocalSymbol = function hasLocalSymbol(name) { - return typeof this.symbolTable.getLocal(name) === 'number'; - }; - - CompileIntoList.prototype.getNamedSymbol = function getNamedSymbol(name) { - return this.symbolTable.getNamed(name); - }; - - CompileIntoList.prototype.hasNamedSymbol = function hasNamedSymbol(name) { - return typeof this.symbolTable.getNamed(name) === 'number'; - }; - - CompileIntoList.prototype.getBlockSymbol = function getBlockSymbol(name) { - return this.symbolTable.getYield(name); - }; - - CompileIntoList.prototype.hasBlockSymbol = function hasBlockSymbol(name) { - return typeof this.symbolTable.getYield(name) === 'number'; - }; - - CompileIntoList.prototype.getPartialArgsSymbol = function getPartialArgsSymbol() { - return this.symbolTable.getPartialArgs(); - }; - - CompileIntoList.prototype.hasPartialArgsSymbol = function hasPartialArgsSymbol() { - return typeof this.symbolTable.getPartialArgs() === 'number'; - }; - - CompileIntoList.prototype.toOpSeq = function toOpSeq() { - return this; - }; - - return CompileIntoList; - })(_glimmerUtil.LinkedList); - - exports.CompileIntoList = CompileIntoList; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7UUFrQ0EsUUFBQTtBQUlFLGlCQUpGLFFBQUEsQ0FJd0IsS0FBWSxFQUFTLEdBQWdCLEVBQUE7QUFBckMsZ0JBQUEsQ0FBQSxLQUFLLEdBQUwsS0FBSyxDQUFPO0FBQVMsZ0JBQUEsQ0FBQSxHQUFHLEdBQUgsR0FBRyxDQUFhO0FBQ3pELGdCQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEMsZ0JBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztTQUN0Qzs7QUFQSCxnQkFBQSxXQVNZLGdCQUFnQixHQUFBLDBCQUFDLFNBQTBCLEVBQUUsR0FBcUIsRUFBQTtBQUMxRSxnQkFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzFGOztlQVhILFFBQUE7OztBQWNBLGFBQUEsZ0JBQUEsQ0FBMEIsR0FBZ0IsRUFBRSxTQUEwQixFQUFFLEdBQXFCLEVBQUUsTUFBYyxFQUFBO0FBQzNHLFdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDcEY7c0JBRWMsUUFBUTs7UUFFdkIsa0JBQUE7OEJBQUEsa0JBQUE7O0FBSUUsaUJBSkYsa0JBQUEsQ0FJYyxRQUFvQixFQUFFLEdBQWdCLEVBQUE7QUFDaEQsaUNBQU0sUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLGdCQUFJLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzFELGdCQUFJLENBQUMsR0FBRyxHQUFHLHFEQUFxQixJQUFJLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNsRTs7QUFSSCwwQkFBQSxXQVVFLE9BQU8sR0FBQSxtQkFBQTtnQkFDQyxLQUFLLEdBQVUsSUFBSSxDQUFuQixLQUFLO2dCQUFFLEdBQUcsR0FBSyxJQUFJLENBQVosR0FBRztnQkFDVixPQUFPLEdBQUssS0FBSyxDQUFqQixPQUFPOztBQUViLGdCQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFFN0IsbUJBQU8sT0FBTyxFQUFFO0FBQ2Qsb0JBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckMsb0JBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEMsdUJBQU8sR0FBRyxJQUFJLENBQUM7YUFDaEI7QUFFRCxtQkFBTyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDdEI7O0FBdkJILDBCQUFBLFdBeUJFLE1BQU0sR0FBQSxnQkFBQyxFQUFVLEVBQUE7QUFDZixnQkFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDckI7O0FBM0JILDBCQUFBLFdBNkJFLGNBQWMsR0FBQSx3QkFBQyxJQUFZLEVBQUE7QUFDekIsbUJBQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEM7O0FBL0JILDBCQUFBLFdBaUNFLGNBQWMsR0FBQSx3QkFBQyxJQUFZLEVBQUE7QUFDekIsbUJBQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEM7O0FBbkNILDBCQUFBLFdBcUNFLGNBQWMsR0FBQSx3QkFBQyxJQUFZLEVBQUE7QUFDekIsbUJBQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEM7O2VBdkNILGtCQUFBO09BQXdDLFFBQVE7Ozs7UUEwQ2hELG1CQUFBOzhCQUFBLG1CQUFBOztBQUlFLGlCQUpGLG1CQUFBLENBSXdCLEtBQWtCLEVBQUUsR0FBZ0IsRUFBQTtBQUN4RCxrQ0FBTSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFERSxnQkFBQSxDQUFBLEtBQUssR0FBTCxLQUFLLENBQWE7QUFFdEMsZ0JBQUksSUFBSSxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdkQsZ0JBQUksQ0FBQyxHQUFHLEdBQUcscURBQXFCLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQy9EOztBQVJILDJCQUFBLFdBVUUsT0FBTyxHQUFBLG1CQUFBO2dCQUNDLEtBQUssR0FBVSxJQUFJLENBQW5CLEtBQUs7Z0JBQUUsR0FBRyxHQUFLLElBQUksQ0FBWixHQUFHO2dCQUNWLE9BQU8sR0FBSyxLQUFLLENBQWpCLE9BQU87O0FBRWIsZ0JBQUksdUJBQXVCLEdBQUcsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFFOUQsZ0JBQUksdUJBQXVCLEVBQUU7QUFDM0IsbUJBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQixtQkFBRyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3ZDO0FBRUQsZ0JBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUU3QixtQkFBTyxPQUFPLEVBQUU7QUFDZCxvQkFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQyxvQkFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwQyx1QkFBTyxHQUFHLElBQUksQ0FBQzthQUNoQjtBQUVELGdCQUFJLHVCQUF1QixFQUFFO0FBQzNCLG1CQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDaEI7QUFFRCxtQkFBTyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDdEI7O2VBbENILG1CQUFBO09BQXlDLFFBQVE7Ozs7QUFxRGpELGFBQUEsYUFBQSxDQUE4QixVQUFzQixFQUFFLEdBQWdCLEVBQUE7QUFDcEUsWUFBSSxPQUFPLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUU5QyxrQkFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUU1QixlQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUMxQjs7UUFFRCxzQkFBQTtBQUdFLGlCQUhGLHNCQUFBLENBR3FCLEdBQWdCLEVBQUE7QUFBaEIsZ0JBQUEsQ0FBQSxHQUFHLEdBQUgsR0FBRyxDQUFhO1NBQUk7O0FBSHpDLDhCQUFBLFdBS0UsS0FBSyxHQUFBLGlCQUFBO0FBQ0gsZ0JBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pDOztBQVBILDhCQUFBLFdBU0UsVUFBVSxHQUFBLG9CQUFDLE1BQWMsRUFBQTtBQUN2QixnQkFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ25EOztBQVhILDhCQUFBLFdBYUUsVUFBVSxHQUFBLG9CQUFDLE1BQWMsRUFBQTtBQUN2QixnQkFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDckQ7O0FBZkgsOEJBQUEsV0FpQkUsT0FBTyxHQUFBLG1CQUFBO0FBQ0wsbUJBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM3Qjs7aUNBbkJILHNCQUFBOztpQkFxQlMsWUFBQTtBQUNMLHVCQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ3ZCOzs7aUJBRVEsWUFBQTtBQUNQLHVCQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2FBQ3pCOztlQTNCSCxzQkFBQTs7O1FBOEJBLFlBQUE7QUFFRSxpQkFGRixZQUFBLENBRXFCLEdBQWdCLEVBQUE7QUFBaEIsZ0JBQUEsQ0FBQSxHQUFHLEdBQUgsR0FBRyxDQUFhO1NBQUk7O0FBRnpDLG9CQUFBLFdBWUUsT0FBTyxHQUFBLG1CQUFBO2dCQUNDLEdBQUcsR0FBSyxJQUFJLENBQVosR0FBRzs7QUFFVCxnQkFBSSxJQUFJLEdBQUcsSUFBSSxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFDLG1CQUFPLHFDQXBNSyxhQUFhLENBb01BLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNuQzs7aUNBakJILFlBQUE7O2lCQUlTLFlBQUE7QUFDTCxzQkFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN6Qjs7O2lCQUVRLFlBQUE7QUFDUCxzQkFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN6Qjs7ZUFWSCxZQUFBOzs7UUFvQkEsY0FBQTtBQUlFLGlCQUpGLGNBQUEsQ0FJcUIsR0FBZ0IsRUFBVSxNQUFjLEVBQUE7QUFBeEMsZ0JBQUEsQ0FBQSxHQUFHLEdBQUgsR0FBRyxDQUFhO0FBQVUsZ0JBQUEsQ0FBQSxNQUFNLEdBQU4sTUFBTSxDQUFRO0FBSHBELGdCQUFBLENBQUEsR0FBRyxHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztBQUNoQyxnQkFBQSxDQUFBLEtBQUssR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7U0FFb0I7O0FBSmpFLHNCQUFBLFdBTUUsT0FBTyxHQUFBLG1CQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dCQTZCQyxHQUFHLEdBQWEsSUFBSSxDQUFwQixHQUFHO2dCQUFFLE1BQU0sR0FBSyxJQUFJLENBQWYsTUFBTTs7QUFFakIsZ0JBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7QUFDckMsZ0JBQUksTUFBTSxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDMUQsZ0JBQUksR0FBRyxHQUFHLHFEQUFxQixNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUVoRSxlQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7QUFFbEIsZ0JBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUU7QUFDdEIsbUJBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN0QyxtQkFBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNuQixtQkFBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QixtQkFBRyxDQUFDLDJCQUEyQixFQUFFLENBQUM7QUFDbEMsbUJBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3ZCLG9CQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLFNBQVM7MkJBQUksZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDO2lCQUFBLENBQUMsQ0FBQztBQUN6RixtQkFBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ25CLG1CQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ25CLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRTtBQUM1QixvQkFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7QUFDakMsbUJBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixtQkFBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDdkIsb0JBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsU0FBUzsyQkFBSSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUM7aUJBQUEsQ0FBQyxDQUFDO0FBQ3pGLG1CQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDcEI7QUFFRCxnQkFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUU7QUFDN0IsbUJBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNwQztBQUVELGdCQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7QUFDcEIsbUJBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNqQztBQUVELGdCQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7QUFDdEIsbUJBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN0QztBQUVELGtCQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFBLFNBQVM7dUJBQUksZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDO2FBQUEsQ0FBQyxDQUFDO0FBRXZGLGdCQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFO0FBQ3RCLG1CQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDdEMsbUJBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbkIsbUJBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEIsbUJBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNuQixtQkFBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNsQixNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUU7QUFDNUIsbUJBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUNwQjtBQUVELGVBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUN0QixlQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7QUFFakIsbUJBQU8scUNBL1JLLGFBQWEsQ0ErUkEsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMzRDs7ZUF4RkgsY0FBQTs7O1FBMkZBLGdCQUFBO0FBR0UsaUJBSEYsZ0JBQUEsQ0FHcUIsR0FBZ0IsRUFBVSxNQUFjLEVBQUE7QUFBeEMsZ0JBQUEsQ0FBQSxHQUFHLEdBQUgsR0FBRyxDQUFhO0FBQVUsZ0JBQUEsQ0FBQSxNQUFNLEdBQU4sTUFBTSxDQUFRO0FBRnBELGdCQUFBLENBQUEsS0FBSyxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztTQUVvQjs7QUFIakUsd0JBQUEsV0FTRSxPQUFPLEdBQUEsbUJBQUE7Z0JBQ0MsR0FBRyxHQUFhLElBQUksQ0FBcEIsR0FBRztnQkFBRSxNQUFNLEdBQUssSUFBSSxDQUFmLE1BQU07O0FBRWpCLGdCQUFJLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzFELGdCQUFJLEdBQUcsR0FBRyxxREFBcUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFaEUsZUFBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBRWxCLGdCQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtBQUM3QixtQkFBRyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3BDO0FBRUQsZ0JBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtBQUNwQixtQkFBRyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2pDO0FBRUQsZ0JBQUksTUFBTSxDQUFDLFdBQVcsRUFBRTtBQUN0QixtQkFBRyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3RDO0FBRUQsZ0JBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakMsZ0JBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztBQUUxQixnQkFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQUEsU0FBUyxFQUFBO0FBQ3ZDLG9CQUFJLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUM5Qyx1QkFBRyxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4Qyx1QkFBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDdkIsdUJBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3ZCLHlCQUFLLENBQUMsT0FBTyxDQUFDLFVBQUEsU0FBUzsrQkFBSSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUM7cUJBQUEsQ0FBQyxDQUFDO0FBQzFFLGlDQUFhLEdBQUcsSUFBSSxDQUFDO2lCQUN0QixNQUFNO0FBQ0wsb0NBQWdCLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQy9DO2FBQ0YsQ0FBQyxDQUFDO0FBRUgsZUFBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ3RCLGVBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUVqQixtQkFBTyxxQ0FsVkssYUFBYSxDQWtWQSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsRTs7aUNBaERILGdCQUFBOztpQkFLUyxZQUFBO0FBQ0wsc0JBQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQzthQUNsRTs7ZUFQSCxnQkFBQTs7O0FBcURBLGFBQUEsYUFBQSxDQUF1QixNQUF1QixFQUFBO0FBQzVDLGVBQU8sTUFBTSxZQUFZLDZCQUFPLFdBQVcsSUFBSSxNQUFNLFlBQVksNkJBQU8sb0JBQW9CLENBQUM7S0FDOUY7O1FBRUQsbUJBQUE7QUFBQSxpQkFBQSxtQkFBQSxHQUFBO0FBQ1MsZ0JBQUEsQ0FBQSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLGdCQUFBLENBQUEsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNoQixnQkFBQSxDQUFBLGFBQWEsR0FBVyxJQUFJLENBQUM7QUFDN0IsZ0JBQUEsQ0FBQSxjQUFjLEdBQXVCLElBQUksQ0FBQztTQVdsRDs7QUFmRCwyQkFBQSxXQU1FLE1BQU0sR0FBQSxpQkFBQyxPQUFlLEVBQUE7QUFDcEIsZ0JBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLGdCQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztTQUM5Qjs7QUFUSCwyQkFBQSxXQVdFLE9BQU8sR0FBQSxpQkFBQyxPQUFtQyxFQUFBO0FBQ3pDLGdCQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUN0QixnQkFBSSxDQUFDLGNBQWMsR0FBRyxzREFBdUIsT0FBTyxDQUFDLENBQUM7U0FDdkQ7O2VBZEgsbUJBQUE7OztRQWlCQSxxQkFBQTtBQUFBLGlCQUFBLHFCQUFBLEdBQUE7QUFDVSxnQkFBQSxDQUFBLE1BQU0sR0FBOEIsRUFBRSxDQUFDO1NBU2hEOztBQVZELDZCQUFBLFdBR0UsTUFBTSxHQUFBLGlCQUFDLElBQVksRUFBRSxLQUFhLEVBQUE7QUFDaEMsZ0JBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksNkJBQU8sVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUM1RDs7QUFMSCw2QkFBQSxXQU9FLE9BQU8sR0FBQSxpQkFBQyxJQUFZLEVBQUUsS0FBaUMsRUFBQTtBQUNyRCxnQkFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSw2QkFBTyxXQUFXLENBQUMsSUFBSSxFQUFFLHNEQUF1QixLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUM1Rjs7ZUFUSCxxQkFBQTs7O1FBWUEsZ0JBQUE7QUFHRSxpQkFIRixnQkFBQSxDQUdzQixHQUFxQixFQUFBO0FBQXJCLGdCQUFBLENBQUEsR0FBRyxHQUFILEdBQUcsQ0FBa0I7QUFDdkMsZ0JBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztTQUNwQjs7QUFMSCx3QkFBQSxXQU9FLE1BQU0sR0FBQSxpQkFBQyxVQUE0QixFQUFFLElBQWlCLEVBQUUsU0FBMkIsRUFBRSxXQUF3QixFQUFnQztnQkFBOUIsTUFBTSxpRkFwWTlHLFdBQVc7O0FBcVloQixnQkFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQVQsU0FBUyxFQUFFLEVBQUUsVUFBQSxHQUFHLEVBQUE7QUFDOUIsbUJBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2QyxtQkFBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEMsbUJBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN0QixDQUFDLENBQUM7U0FDSjs7QUFiSCx3QkFBQSxXQWVFLE9BQU8sR0FBQSxpQkFBQyxjQUEyQixFQUFFLFVBQTZCLEVBQUUsSUFBaUIsRUFBRSxTQUEyQixFQUFFLFdBQXdCLEVBQWdDO2dCQUE5QixNQUFNLGlGQTVZN0ksV0FBVzs7QUE2WWhCLGdCQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBVCxTQUFTLEVBQUUsRUFBRSxVQUFBLEdBQUcsRUFBQTtBQUM5QixtQkFBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUM1QixtQkFBRyxDQUFDLFFBQVEsQ0FBQyxzREFBdUIsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUNqRCxtQkFBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNuQixtQkFBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUIsbUJBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkIsbUJBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEIsbUJBQUcsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0FBQ3BDLG1CQUFHLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNoQyxtQkFBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JCLG1CQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pCLG1CQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDWixDQUFDLENBQUM7U0FDSjs7ZUE3QkgsZ0JBQUE7OztRQWdDQSxlQUFBOzhCQUFBLGVBQUE7O0FBR0UsaUJBSEYsZUFBQSxDQUdzQixHQUFnQixFQUFVLFdBQXdCLEVBQUE7QUFDcEUsa0NBQU8sQ0FBQztBQURVLGdCQUFBLENBQUEsR0FBRyxHQUFILEdBQUcsQ0FBYTtBQUFVLGdCQUFBLENBQUEsV0FBVyxHQUFYLFdBQVcsQ0FBYTtBQUdwRSxnQkFBSSxHQUFHLEdBQUcscURBQXFCLElBQUksRUFBRSxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkQsZ0JBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM1Qzs7QUFSSCx1QkFBQSxXQVVFLGNBQWMsR0FBQSx3QkFBQyxJQUFZLEVBQUE7QUFDekIsbUJBQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEM7O0FBWkgsdUJBQUEsV0FjRSxjQUFjLEdBQUEsd0JBQUMsSUFBWSxFQUFBO0FBQ3pCLG1CQUFPLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDO1NBQzVEOztBQWhCSCx1QkFBQSxXQWtCRSxjQUFjLEdBQUEsd0JBQUMsSUFBWSxFQUFBO0FBQ3pCLG1CQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hDOztBQXBCSCx1QkFBQSxXQXNCRSxjQUFjLEdBQUEsd0JBQUMsSUFBWSxFQUFBO0FBQ3pCLG1CQUFPLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDO1NBQzVEOztBQXhCSCx1QkFBQSxXQTBCRSxjQUFjLEdBQUEsd0JBQUMsSUFBWSxFQUFBO0FBQ3pCLG1CQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hDOztBQTVCSCx1QkFBQSxXQThCRSxjQUFjLEdBQUEsd0JBQUMsSUFBWSxFQUFBO0FBQ3pCLG1CQUFPLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDO1NBQzVEOztBQWhDSCx1QkFBQSxXQWtDRSxvQkFBb0IsR0FBQSxnQ0FBQTtBQUNsQixtQkFBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQzFDOztBQXBDSCx1QkFBQSxXQXNDRSxvQkFBb0IsR0FBQSxnQ0FBQTtBQUNsQixtQkFBTyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLEtBQUssUUFBUSxDQUFDO1NBQzlEOztBQXhDSCx1QkFBQSxXQTBDRSxPQUFPLEdBQUEsbUJBQUE7QUFDTCxtQkFBTyxJQUFJLENBQUM7U0FDYjs7ZUE1Q0gsZUFBQTtvQkFoYXdCLFVBQVUiLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGFxdWUsIFNsaWNlLCBMaW5rZWRMaXN0IH0gZnJvbSAnZ2xpbW1lci11dGlsJztcbmltcG9ydCB7IE9wU2VxLCBPcGNvZGUgfSBmcm9tICcuL29wY29kZXMnO1xuXG5pbXBvcnQgeyBFTVBUWV9BUlJBWSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0ICogYXMgU3ludGF4IGZyb20gJy4vc3ludGF4L2NvcmUnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuL2Vudmlyb25tZW50JztcbmltcG9ydCBTeW1ib2xUYWJsZSBmcm9tICcuL3N5bWJvbC10YWJsZSc7XG5pbXBvcnQgeyBCbG9jaywgQ29tcGlsZWRCbG9jaywgRW50cnlQb2ludCwgSW5saW5lQmxvY2ssIExheW91dCB9IGZyb20gJy4vY29tcGlsZWQvYmxvY2tzJztcblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50QnVpbGRlciBhcyBJQ29tcG9uZW50QnVpbGRlcixcbiAgRHluYW1pY0RlZmluaXRpb24sXG4gIFN0YXRpY0RlZmluaXRpb25cbn0gZnJvbSAnLi9vcGNvZGUtYnVpbGRlcic7XG5cbmltcG9ydCB7XG4gIFN0YXRlbWVudCBhcyBTdGF0ZW1lbnRTeW50YXgsXG4gIEF0dHJpYnV0ZSBhcyBBdHRyaWJ1dGVTeW50YXgsXG4gIFN0YXRlbWVudENvbXBpbGF0aW9uQnVmZmVyLFxufSBmcm9tICcuL3N5bnRheCc7XG5cbmltcG9ydCB7XG4gIEV4cHJlc3Npb25cbn0gZnJvbSAnLi9zeW50YXgnO1xuXG5pbXBvcnQge1xuICBGdW5jdGlvbkV4cHJlc3Npb24sXG4gIGRlZmF1bHQgYXMgbWFrZUZ1bmN0aW9uRXhwcmVzc2lvblxufSBmcm9tICcuL2NvbXBpbGVkL2V4cHJlc3Npb25zL2Z1bmN0aW9uJztcblxuaW1wb3J0IE9wY29kZUJ1aWxkZXJEU0wgZnJvbSAnLi9jb21waWxlZC9vcGNvZGVzL2J1aWxkZXInO1xuXG5pbXBvcnQgKiBhcyBDb21wb25lbnQgZnJvbSAnLi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5cbmFic3RyYWN0IGNsYXNzIENvbXBpbGVyIHtcbiAgcHJvdGVjdGVkIHN5bWJvbFRhYmxlOiBTeW1ib2xUYWJsZTtcbiAgcHJvdGVjdGVkIGN1cnJlbnQ6IFN0YXRlbWVudFN5bnRheDtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYmxvY2s6IEJsb2NrLCBwdWJsaWMgZW52OiBFbnZpcm9ubWVudCkge1xuICAgIHRoaXMuY3VycmVudCA9IGJsb2NrLnByb2dyYW0uaGVhZCgpO1xuICAgIHRoaXMuc3ltYm9sVGFibGUgPSBibG9jay5zeW1ib2xUYWJsZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb21waWxlU3RhdGVtZW50KHN0YXRlbWVudDogU3RhdGVtZW50U3ludGF4LCBvcHM6IE9wY29kZUJ1aWxkZXJEU0wpIHtcbiAgICB0aGlzLmVudi5zdGF0ZW1lbnQoc3RhdGVtZW50LCB0aGlzLnN5bWJvbFRhYmxlKS5jb21waWxlKG9wcywgdGhpcy5lbnYsIHRoaXMuc3ltYm9sVGFibGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVTdGF0ZW1lbnQoZW52OiBFbnZpcm9ubWVudCwgc3RhdGVtZW50OiBTdGF0ZW1lbnRTeW50YXgsIG9wczogT3Bjb2RlQnVpbGRlckRTTCwgbGF5b3V0OiBMYXlvdXQpIHtcbiAgZW52LnN0YXRlbWVudChzdGF0ZW1lbnQsIGxheW91dC5zeW1ib2xUYWJsZSkuY29tcGlsZShvcHMsIGVudiwgbGF5b3V0LnN5bWJvbFRhYmxlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcGlsZXI7XG5cbmV4cG9ydCBjbGFzcyBFbnRyeVBvaW50Q29tcGlsZXIgZXh0ZW5kcyBDb21waWxlciB7XG4gIHByaXZhdGUgb3BzOiBPcGNvZGVCdWlsZGVyRFNMO1xuICBwcm90ZWN0ZWQgYmxvY2s6IEVudHJ5UG9pbnQ7XG5cbiAgY29uc3RydWN0b3IodGVtcGxhdGU6IEVudHJ5UG9pbnQsIGVudjogRW52aXJvbm1lbnQpIHtcbiAgICBzdXBlcih0ZW1wbGF0ZSwgZW52KTtcbiAgICBsZXQgbGlzdCA9IG5ldyBDb21waWxlSW50b0xpc3QoZW52LCB0ZW1wbGF0ZS5zeW1ib2xUYWJsZSk7XG4gICAgdGhpcy5vcHMgPSBuZXcgT3Bjb2RlQnVpbGRlckRTTChsaXN0LCB0ZW1wbGF0ZS5zeW1ib2xUYWJsZSwgZW52KTtcbiAgfVxuXG4gIGNvbXBpbGUoKTogT3BTZXEge1xuICAgIGxldCB7IGJsb2NrLCBvcHMgfSA9IHRoaXM7XG4gICAgbGV0IHsgcHJvZ3JhbSB9ID0gYmxvY2s7XG5cbiAgICBsZXQgY3VycmVudCA9IHByb2dyYW0uaGVhZCgpO1xuXG4gICAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICAgIGxldCBuZXh0ID0gcHJvZ3JhbS5uZXh0Tm9kZShjdXJyZW50KTtcbiAgICAgIHRoaXMuY29tcGlsZVN0YXRlbWVudChjdXJyZW50LCBvcHMpO1xuICAgICAgY3VycmVudCA9IG5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wcy50b09wU2VxKCk7XG4gIH1cblxuICBhcHBlbmQob3A6IE9wY29kZSkge1xuICAgIHRoaXMub3BzLmFwcGVuZChvcCk7XG4gIH1cblxuICBnZXRMb2NhbFN5bWJvbChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbFRhYmxlLmdldExvY2FsKG5hbWUpO1xuICB9XG5cbiAgZ2V0TmFtZWRTeW1ib2wobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xUYWJsZS5nZXROYW1lZChuYW1lKTtcbiAgfVxuXG4gIGdldFlpZWxkU3ltYm9sKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3ltYm9sVGFibGUuZ2V0WWllbGQobmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElubGluZUJsb2NrQ29tcGlsZXIgZXh0ZW5kcyBDb21waWxlciB7XG4gIHByaXZhdGUgb3BzOiBPcGNvZGVCdWlsZGVyRFNMO1xuICBwcm90ZWN0ZWQgY3VycmVudDogU3RhdGVtZW50U3ludGF4O1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBibG9jazogSW5saW5lQmxvY2ssIGVudjogRW52aXJvbm1lbnQpIHtcbiAgICBzdXBlcihibG9jaywgZW52KTtcbiAgICBsZXQgbGlzdCA9IG5ldyBDb21waWxlSW50b0xpc3QoZW52LCBibG9jay5zeW1ib2xUYWJsZSk7XG4gICAgdGhpcy5vcHMgPSBuZXcgT3Bjb2RlQnVpbGRlckRTTChsaXN0LCBibG9jay5zeW1ib2xUYWJsZSwgZW52KTtcbiAgfVxuXG4gIGNvbXBpbGUoKTogT3BTZXEge1xuICAgIGxldCB7IGJsb2NrLCBvcHMgfSA9IHRoaXM7XG4gICAgbGV0IHsgcHJvZ3JhbSB9ID0gYmxvY2s7XG5cbiAgICBsZXQgaGFzUG9zaXRpb25hbFBhcmFtZXRlcnMgPSBibG9jay5oYXNQb3NpdGlvbmFsUGFyYW1ldGVycygpO1xuXG4gICAgaWYgKGhhc1Bvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7XG4gICAgICBvcHMucHVzaENoaWxkU2NvcGUoKTtcbiAgICAgIG9wcy5iaW5kUG9zaXRpb25hbEFyZ3NGb3JCbG9jayhibG9jayk7XG4gICAgfVxuXG4gICAgbGV0IGN1cnJlbnQgPSBwcm9ncmFtLmhlYWQoKTtcblxuICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICBsZXQgbmV4dCA9IHByb2dyYW0ubmV4dE5vZGUoY3VycmVudCk7XG4gICAgICB0aGlzLmNvbXBpbGVTdGF0ZW1lbnQoY3VycmVudCwgb3BzKTtcbiAgICAgIGN1cnJlbnQgPSBuZXh0O1xuICAgIH1cblxuICAgIGlmIChoYXNQb3NpdGlvbmFsUGFyYW1ldGVycykge1xuICAgICAgb3BzLnBvcFNjb3BlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wcy50b09wU2VxKCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRQYXJ0cyB7XG4gIHRhZzogc3RyaW5nO1xuICBhdHRyczogU2xpY2U8QXR0cmlidXRlU3ludGF4PE9wYXF1ZT4+O1xuICBib2R5OiBTbGljZTxTdGF0ZW1lbnRTeW50YXg+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVkQ29tcG9uZW50UGFydHMge1xuICB0YWc6IHN0cmluZztcbiAgcHJlYW1ibGU6IENvbXBpbGVJbnRvTGlzdDtcbiAgbWFpbjogQ29tcGlsZUludG9MaXN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGFibGUge1xuICBjb21waWxlKGJ1aWxkZXI6IENvbXBvbmVudC5Db21wb25lbnRMYXlvdXRCdWlsZGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVMYXlvdXQoY29tcGlsYWJsZTogQ29tcGlsYWJsZSwgZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkQmxvY2sge1xuICBsZXQgYnVpbGRlciA9IG5ldyBDb21wb25lbnRMYXlvdXRCdWlsZGVyKGVudik7XG5cbiAgY29tcGlsYWJsZS5jb21waWxlKGJ1aWxkZXIpO1xuXG4gIHJldHVybiBidWlsZGVyLmNvbXBpbGUoKTtcbn1cblxuY2xhc3MgQ29tcG9uZW50TGF5b3V0QnVpbGRlciBpbXBsZW1lbnRzIENvbXBvbmVudC5Db21wb25lbnRMYXlvdXRCdWlsZGVyIHtcbiAgcHJpdmF0ZSBpbm5lcjogRW1wdHlCdWlsZGVyIHwgV3JhcHBlZEJ1aWxkZXIgfCBVbndyYXBwZWRCdWlsZGVyO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbnY6IEVudmlyb25tZW50KSB7fVxuXG4gIGVtcHR5KCkge1xuICAgIHRoaXMuaW5uZXIgPSBuZXcgRW1wdHlCdWlsZGVyKHRoaXMuZW52KTtcbiAgfVxuXG4gIHdyYXBMYXlvdXQobGF5b3V0OiBMYXlvdXQpIHtcbiAgICB0aGlzLmlubmVyID0gbmV3IFdyYXBwZWRCdWlsZGVyKHRoaXMuZW52LCBsYXlvdXQpO1xuICB9XG5cbiAgZnJvbUxheW91dChsYXlvdXQ6IExheW91dCkge1xuICAgIHRoaXMuaW5uZXIgPSBuZXcgVW53cmFwcGVkQnVpbGRlcih0aGlzLmVudiwgbGF5b3V0KTtcbiAgfVxuXG4gIGNvbXBpbGUoKTogQ29tcGlsZWRCbG9jayB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXIuY29tcGlsZSgpO1xuICB9XG5cbiAgZ2V0IHRhZygpOiBDb21wb25lbnQuQ29tcG9uZW50VGFnQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXIudGFnO1xuICB9XG5cbiAgZ2V0IGF0dHJzKCk6IENvbXBvbmVudC5Db21wb25lbnRBdHRyc0J1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmlubmVyLmF0dHJzO1xuICB9XG59XG5cbmNsYXNzIEVtcHR5QnVpbGRlciB7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGVudjogRW52aXJvbm1lbnQpIHt9XG5cbiAgZ2V0IHRhZygpOiBDb21wb25lbnQuQ29tcG9uZW50VGFnQnVpbGRlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3BlJyk7XG4gIH1cblxuICBnZXQgYXR0cnMoKTogQ29tcG9uZW50LkNvbXBvbmVudEF0dHJzQnVpbGRlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3BlJyk7XG4gIH1cblxuICBjb21waWxlKCk6IENvbXBpbGVkQmxvY2sge1xuICAgIGxldCB7IGVudiB9ID0gdGhpcztcblxuICAgIGxldCBsaXN0ID0gbmV3IENvbXBpbGVJbnRvTGlzdChlbnYsIG51bGwpO1xuICAgIHJldHVybiBuZXcgQ29tcGlsZWRCbG9jayhsaXN0LCAwKTtcbiAgfVxufVxuXG5jbGFzcyBXcmFwcGVkQnVpbGRlciB7XG4gIHB1YmxpYyB0YWcgPSBuZXcgQ29tcG9uZW50VGFnQnVpbGRlcigpO1xuICBwdWJsaWMgYXR0cnMgPSBuZXcgQ29tcG9uZW50QXR0cnNCdWlsZGVyKCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGVudjogRW52aXJvbm1lbnQsIHByaXZhdGUgbGF5b3V0OiBMYXlvdXQpIHt9XG5cbiAgY29tcGlsZSgpOiBDb21waWxlZEJsb2NrIHtcbiAgICAvLz09PT09PT09RFlOQU1JQ1xuICAgIC8vICAgICAgICBQdXRWYWx1ZShUYWdFeHByKVxuICAgIC8vICAgICAgICBUZXN0XG4gICAgLy8gICAgICAgIEp1bXBVbmxlc3MoQk9EWSlcbiAgICAvLyAgICAgICAgT3BlbkR5bmFtaWNQcmltaXRpdmVFbGVtZW50XG4gICAgLy8gICAgICAgIERpZENyZWF0ZUVsZW1lbnRcbiAgICAvLyAgICAgICAgLi4uYXR0ciBzdGF0ZW1lbnRzLi4uXG4gICAgLy8gICAgICAgIEZsdXNoRWxlbWVudFxuICAgIC8vIEJPRFk6ICBOb29wXG4gICAgLy8gICAgICAgIC4uLmJvZHkgc3RhdGVtZW50cy4uLlxuICAgIC8vICAgICAgICBQdXRWYWx1ZShUYWdFeHByKVxuICAgIC8vICAgICAgICBUZXN0XG4gICAgLy8gICAgICAgIEp1bXBVbmxlc3MoRU5EKVxuICAgIC8vICAgICAgICBDbG9zZUVsZW1lbnRcbiAgICAvLyBFTkQ6ICAgTm9vcFxuICAgIC8vICAgICAgICBEaWRSZW5kZXJMYXlvdXRcbiAgICAvLyAgICAgICAgRXhpdFxuICAgIC8vXG4gICAgLy89PT09PT09PVNUQVRJQ1xuICAgIC8vICAgICAgICBPcGVuUHJpbWl0aXZlRWxlbWVudE9wY29kZVxuICAgIC8vICAgICAgICBEaWRDcmVhdGVFbGVtZW50XG4gICAgLy8gICAgICAgIC4uLmF0dHIgc3RhdGVtZW50cy4uLlxuICAgIC8vICAgICAgICBGbHVzaEVsZW1lbnRcbiAgICAvLyAgICAgICAgLi4uYm9keSBzdGF0ZW1lbnRzLi4uXG4gICAgLy8gICAgICAgIENsb3NlRWxlbWVudFxuICAgIC8vICAgICAgICBEaWRSZW5kZXJMYXlvdXRcbiAgICAvLyAgICAgICAgRXhpdFxuXG4gICAgbGV0IHsgZW52LCBsYXlvdXQgfSA9IHRoaXM7XG5cbiAgICBsZXQgc3ltYm9sVGFibGUgPSBsYXlvdXQuc3ltYm9sVGFibGU7XG4gICAgbGV0IGJ1ZmZlciA9IG5ldyBDb21waWxlSW50b0xpc3QoZW52LCBsYXlvdXQuc3ltYm9sVGFibGUpO1xuICAgIGxldCBkc2wgPSBuZXcgT3Bjb2RlQnVpbGRlckRTTChidWZmZXIsIGxheW91dC5zeW1ib2xUYWJsZSwgZW52KTtcblxuICAgIGRzbC5zdGFydExhYmVscygpO1xuXG4gICAgaWYgKHRoaXMudGFnLmlzRHluYW1pYykge1xuICAgICAgZHNsLnB1dFZhbHVlKHRoaXMudGFnLmR5bmFtaWNUYWdOYW1lKTtcbiAgICAgIGRzbC50ZXN0KCdzaW1wbGUnKTtcbiAgICAgIGRzbC5qdW1wVW5sZXNzKCdCT0RZJyk7XG4gICAgICBkc2wub3BlbkR5bmFtaWNQcmltaXRpdmVFbGVtZW50KCk7XG4gICAgICBkc2wuZGlkQ3JlYXRlRWxlbWVudCgpO1xuICAgICAgdGhpcy5hdHRyc1snYnVmZmVyJ10uZm9yRWFjaChzdGF0ZW1lbnQgPT4gY29tcGlsZVN0YXRlbWVudChlbnYsIHN0YXRlbWVudCwgZHNsLCBsYXlvdXQpKTtcbiAgICAgIGRzbC5mbHVzaEVsZW1lbnQoKTtcbiAgICAgIGRzbC5sYWJlbCgnQk9EWScpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50YWcuaXNTdGF0aWMpIHtcbiAgICAgIGxldCB0YWcgPSB0aGlzLnRhZy5zdGF0aWNUYWdOYW1lO1xuICAgICAgZHNsLm9wZW5QcmltaXRpdmVFbGVtZW50KHRhZyk7XG4gICAgICBkc2wuZGlkQ3JlYXRlRWxlbWVudCgpO1xuICAgICAgdGhpcy5hdHRyc1snYnVmZmVyJ10uZm9yRWFjaChzdGF0ZW1lbnQgPT4gY29tcGlsZVN0YXRlbWVudChlbnYsIHN0YXRlbWVudCwgZHNsLCBsYXlvdXQpKTtcbiAgICAgIGRzbC5mbHVzaEVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICBpZiAobGF5b3V0Lmhhc05hbWVkUGFyYW1ldGVycykge1xuICAgICAgZHNsLmJpbmROYW1lZEFyZ3NGb3JMYXlvdXQobGF5b3V0KTtcbiAgICB9XG5cbiAgICBpZiAobGF5b3V0Lmhhc1lpZWxkcykge1xuICAgICAgZHNsLmJpbmRCbG9ja3NGb3JMYXlvdXQobGF5b3V0KTtcbiAgICB9XG5cbiAgICBpZiAobGF5b3V0Lmhhc1BhcnRpYWxzKSB7XG4gICAgICBkc2wuYmluZFBhcnRpYWxBcmdzRm9yTGF5b3V0KGxheW91dCk7XG4gICAgfVxuXG4gICAgbGF5b3V0LnByb2dyYW0uZm9yRWFjaE5vZGUoc3RhdGVtZW50ID0+IGNvbXBpbGVTdGF0ZW1lbnQoZW52LCBzdGF0ZW1lbnQsIGRzbCwgbGF5b3V0KSk7XG5cbiAgICBpZiAodGhpcy50YWcuaXNEeW5hbWljKSB7XG4gICAgICBkc2wucHV0VmFsdWUodGhpcy50YWcuZHluYW1pY1RhZ05hbWUpO1xuICAgICAgZHNsLnRlc3QoJ3NpbXBsZScpO1xuICAgICAgZHNsLmp1bXBVbmxlc3MoJ0VORCcpO1xuICAgICAgZHNsLmNsb3NlRWxlbWVudCgpO1xuICAgICAgZHNsLmxhYmVsKCdFTkQnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudGFnLmlzU3RhdGljKSB7XG4gICAgICBkc2wuY2xvc2VFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgZHNsLmRpZFJlbmRlckxheW91dCgpO1xuICAgIGRzbC5zdG9wTGFiZWxzKCk7XG5cbiAgICByZXR1cm4gbmV3IENvbXBpbGVkQmxvY2soZHNsLnRvT3BTZXEoKSwgc3ltYm9sVGFibGUuc2l6ZSk7XG4gIH1cbn1cblxuY2xhc3MgVW53cmFwcGVkQnVpbGRlciB7XG4gIHB1YmxpYyBhdHRycyA9IG5ldyBDb21wb25lbnRBdHRyc0J1aWxkZXIoKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZW52OiBFbnZpcm9ubWVudCwgcHJpdmF0ZSBsYXlvdXQ6IExheW91dCkge31cblxuICBnZXQgdGFnKCk6IENvbXBvbmVudC5Db21wb25lbnRUYWdCdWlsZGVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0JVRzogQ2Fubm90IGNhbGwgYHRhZ2Agb24gYW4gVW53cmFwcGVkQnVpbGRlcicpO1xuICB9XG5cbiAgY29tcGlsZSgpOiBDb21waWxlZEJsb2NrIHtcbiAgICBsZXQgeyBlbnYsIGxheW91dCB9ID0gdGhpcztcblxuICAgIGxldCBidWZmZXIgPSBuZXcgQ29tcGlsZUludG9MaXN0KGVudiwgbGF5b3V0LnN5bWJvbFRhYmxlKTtcbiAgICBsZXQgZHNsID0gbmV3IE9wY29kZUJ1aWxkZXJEU0woYnVmZmVyLCBsYXlvdXQuc3ltYm9sVGFibGUsIGVudik7XG5cbiAgICBkc2wuc3RhcnRMYWJlbHMoKTtcblxuICAgIGlmIChsYXlvdXQuaGFzTmFtZWRQYXJhbWV0ZXJzKSB7XG4gICAgICBkc2wuYmluZE5hbWVkQXJnc0ZvckxheW91dChsYXlvdXQpO1xuICAgIH1cblxuICAgIGlmIChsYXlvdXQuaGFzWWllbGRzKSB7XG4gICAgICBkc2wuYmluZEJsb2Nrc0ZvckxheW91dChsYXlvdXQpO1xuICAgIH1cblxuICAgIGlmIChsYXlvdXQuaGFzUGFydGlhbHMpIHtcbiAgICAgIGRzbC5iaW5kUGFydGlhbEFyZ3NGb3JMYXlvdXQobGF5b3V0KTtcbiAgICB9XG5cbiAgICBsZXQgYXR0cnMgPSB0aGlzLmF0dHJzWydidWZmZXInXTtcbiAgICBsZXQgYXR0cnNJbnNlcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5sYXlvdXQucHJvZ3JhbS5mb3JFYWNoTm9kZShzdGF0ZW1lbnQgPT4ge1xuICAgICAgaWYgKCFhdHRyc0luc2VydGVkICYmIGlzT3BlbkVsZW1lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICBkc2wub3BlbkNvbXBvbmVudEVsZW1lbnQoc3RhdGVtZW50LnRhZyk7XG4gICAgICAgIGRzbC5kaWRDcmVhdGVFbGVtZW50KCk7XG4gICAgICAgIGRzbC5zaGFkb3dBdHRyaWJ1dGVzKCk7XG4gICAgICAgIGF0dHJzLmZvckVhY2goc3RhdGVtZW50ID0+IGNvbXBpbGVTdGF0ZW1lbnQoZW52LCBzdGF0ZW1lbnQsIGRzbCwgbGF5b3V0KSk7XG4gICAgICAgIGF0dHJzSW5zZXJ0ZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcGlsZVN0YXRlbWVudChlbnYsIHN0YXRlbWVudCwgZHNsLCBsYXlvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZHNsLmRpZFJlbmRlckxheW91dCgpO1xuICAgIGRzbC5zdG9wTGFiZWxzKCk7XG5cbiAgICByZXR1cm4gbmV3IENvbXBpbGVkQmxvY2soZHNsLnRvT3BTZXEoKSwgbGF5b3V0LnN5bWJvbFRhYmxlLnNpemUpO1xuICB9XG59XG5cbnR5cGUgT3BlbkVsZW1lbnQgPSBTeW50YXguT3BlbkVsZW1lbnQgfCBTeW50YXguT3BlblByaW1pdGl2ZUVsZW1lbnQ7XG5cbmZ1bmN0aW9uIGlzT3BlbkVsZW1lbnQoc3ludGF4OiBTdGF0ZW1lbnRTeW50YXgpOiBzeW50YXggaXMgT3BlbkVsZW1lbnQge1xuICByZXR1cm4gc3ludGF4IGluc3RhbmNlb2YgU3ludGF4Lk9wZW5FbGVtZW50IHx8IHN5bnRheCBpbnN0YW5jZW9mIFN5bnRheC5PcGVuUHJpbWl0aXZlRWxlbWVudDtcbn1cblxuY2xhc3MgQ29tcG9uZW50VGFnQnVpbGRlciBpbXBsZW1lbnRzIENvbXBvbmVudC5Db21wb25lbnRUYWdCdWlsZGVyIHtcbiAgcHVibGljIGlzRHluYW1pYyA9IG51bGw7XG4gIHB1YmxpYyBpc1N0YXRpYyA9IG51bGw7XG4gIHB1YmxpYyBzdGF0aWNUYWdOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgZHluYW1pY1RhZ05hbWU6IEV4cHJlc3Npb248c3RyaW5nPiA9IG51bGw7XG5cbiAgc3RhdGljKHRhZ05hbWU6IHN0cmluZykge1xuICAgIHRoaXMuaXNTdGF0aWMgPSB0cnVlO1xuICAgIHRoaXMuc3RhdGljVGFnTmFtZSA9IHRhZ05hbWU7XG4gIH1cblxuICBkeW5hbWljKHRhZ05hbWU6IEZ1bmN0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gICAgdGhpcy5pc0R5bmFtaWMgPSB0cnVlO1xuICAgIHRoaXMuZHluYW1pY1RhZ05hbWUgPSBtYWtlRnVuY3Rpb25FeHByZXNzaW9uKHRhZ05hbWUpO1xuICB9XG59XG5cbmNsYXNzIENvbXBvbmVudEF0dHJzQnVpbGRlciBpbXBsZW1lbnRzIENvbXBvbmVudC5Db21wb25lbnRBdHRyc0J1aWxkZXIge1xuICBwcml2YXRlIGJ1ZmZlcjogQXR0cmlidXRlU3ludGF4PHN0cmluZz5bXSA9IFtdO1xuXG4gIHN0YXRpYyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJ1ZmZlci5wdXNoKG5ldyBTeW50YXguU3RhdGljQXR0cihuYW1lLCB2YWx1ZSwgbnVsbCkpO1xuICB9XG5cbiAgZHluYW1pYyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBGdW5jdGlvbkV4cHJlc3Npb248c3RyaW5nPikge1xuICAgIHRoaXMuYnVmZmVyLnB1c2gobmV3IFN5bnRheC5EeW5hbWljQXR0cihuYW1lLCBtYWtlRnVuY3Rpb25FeHByZXNzaW9uKHZhbHVlKSwgbnVsbCwgZmFsc2UpKTtcbiAgfVxufVxuXG5jbGFzcyBDb21wb25lbnRCdWlsZGVyIGltcGxlbWVudHMgSUNvbXBvbmVudEJ1aWxkZXIge1xuICBwcml2YXRlIGVudjogRW52aXJvbm1lbnQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkc2w6IE9wY29kZUJ1aWxkZXJEU0wpIHtcbiAgICB0aGlzLmVudiA9IGRzbC5lbnY7XG4gIH1cblxuICBzdGF0aWMoZGVmaW5pdGlvbjogU3RhdGljRGVmaW5pdGlvbiwgYXJnczogU3ludGF4LkFyZ3MsIHRlbXBsYXRlczogU3ludGF4LlRlbXBsYXRlcywgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlLCBzaGFkb3c6IHN0cmluZ1tdID0gRU1QVFlfQVJSQVkpIHtcbiAgICB0aGlzLmRzbC51bml0KHsgdGVtcGxhdGVzIH0sIGRzbCA9PiB7XG4gICAgICBkc2wucHV0Q29tcG9uZW50RGVmaW5pdGlvbihkZWZpbml0aW9uKTtcbiAgICAgIGRzbC5vcGVuQ29tcG9uZW50KGFyZ3MsIHNoYWRvdyk7XG4gICAgICBkc2wuY2xvc2VDb21wb25lbnQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGR5bmFtaWMoZGVmaW5pdGlvbkFyZ3M6IFN5bnRheC5BcmdzLCBkZWZpbml0aW9uOiBEeW5hbWljRGVmaW5pdGlvbiwgYXJnczogU3ludGF4LkFyZ3MsIHRlbXBsYXRlczogU3ludGF4LlRlbXBsYXRlcywgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlLCBzaGFkb3c6IHN0cmluZ1tdID0gRU1QVFlfQVJSQVkpIHtcbiAgICB0aGlzLmRzbC51bml0KHsgdGVtcGxhdGVzIH0sIGRzbCA9PiB7XG4gICAgICBkc2wucHV0QXJncyhkZWZpbml0aW9uQXJncyk7XG4gICAgICBkc2wucHV0VmFsdWUobWFrZUZ1bmN0aW9uRXhwcmVzc2lvbihkZWZpbml0aW9uKSk7XG4gICAgICBkc2wudGVzdCgnc2ltcGxlJyk7XG4gICAgICBkc2wuZW50ZXIoJ0JFR0lOJywgJ0VORCcpO1xuICAgICAgZHNsLmxhYmVsKCdCRUdJTicpO1xuICAgICAgZHNsLmp1bXBVbmxlc3MoJ0VORCcpO1xuICAgICAgZHNsLnB1dER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uKCk7XG4gICAgICBkc2wub3BlbkNvbXBvbmVudChhcmdzLCBzaGFkb3cpO1xuICAgICAgZHNsLmNsb3NlQ29tcG9uZW50KCk7XG4gICAgICBkc2wubGFiZWwoJ0VORCcpO1xuICAgICAgZHNsLmV4aXQoKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcGlsZUludG9MaXN0IGV4dGVuZHMgTGlua2VkTGlzdDxPcGNvZGU+IGltcGxlbWVudHMgU3RhdGVtZW50Q29tcGlsYXRpb25CdWZmZXIge1xuICBwdWJsaWMgY29tcG9uZW50OiBJQ29tcG9uZW50QnVpbGRlcjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVudjogRW52aXJvbm1lbnQsIHByaXZhdGUgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGxldCBkc2wgPSBuZXcgT3Bjb2RlQnVpbGRlckRTTCh0aGlzLCBzeW1ib2xUYWJsZSwgZW52KTtcbiAgICB0aGlzLmNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRCdWlsZGVyKGRzbCk7XG4gIH1cblxuICBnZXRMb2NhbFN5bWJvbChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbFRhYmxlLmdldExvY2FsKG5hbWUpO1xuICB9XG5cbiAgaGFzTG9jYWxTeW1ib2wobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnN5bWJvbFRhYmxlLmdldExvY2FsKG5hbWUpID09PSAnbnVtYmVyJztcbiAgfVxuXG4gIGdldE5hbWVkU3ltYm9sKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3ltYm9sVGFibGUuZ2V0TmFtZWQobmFtZSk7XG4gIH1cblxuICBoYXNOYW1lZFN5bWJvbChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuc3ltYm9sVGFibGUuZ2V0TmFtZWQobmFtZSkgPT09ICdudW1iZXInO1xuICB9XG5cbiAgZ2V0QmxvY2tTeW1ib2wobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xUYWJsZS5nZXRZaWVsZChuYW1lKTtcbiAgfVxuXG4gIGhhc0Jsb2NrU3ltYm9sKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5zeW1ib2xUYWJsZS5nZXRZaWVsZChuYW1lKSA9PT0gJ251bWJlcic7XG4gIH1cblxuICBnZXRQYXJ0aWFsQXJnc1N5bWJvbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbFRhYmxlLmdldFBhcnRpYWxBcmdzKCk7XG4gIH1cblxuICBoYXNQYXJ0aWFsQXJnc1N5bWJvbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuc3ltYm9sVGFibGUuZ2V0UGFydGlhbEFyZ3MoKSA9PT0gJ251bWJlcic7XG4gIH1cblxuICB0b09wU2VxKCk6IE9wU2VxIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuIl19 -enifed('glimmer-runtime/lib/component/interfaces', ['exports'], function (exports) { - 'use strict'; - - exports.isComponentDefinition = isComponentDefinition; - var COMPONENT_DEFINITION_BRAND = 'COMPONENT DEFINITION [id=e59c754e-61eb-4392-8c4a-2c0ac72bfcd4]'; - - function isComponentDefinition(obj) { - return typeof obj === 'object' && obj && obj[COMPONENT_DEFINITION_BRAND]; + return true; + } } - var ComponentDefinition = function ComponentDefinition(name, manager, ComponentClass) { - this['COMPONENT DEFINITION [id=e59c754e-61eb-4392-8c4a-2c0ac72bfcd4]'] = true; - this.name = name; - this.manager = manager; - this.ComponentClass = ComponentClass; - }; - - exports.ComponentDefinition = ComponentDefinition; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvY29tcG9uZW50L2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQXFHQSxRQUFNLDBCQUEwQixHQUFHLGdFQUFnRSxDQUFDOztBQUVwRyxhQUFBLHFCQUFBLENBQXNDLEdBQVEsRUFBQTtBQUM1QyxlQUFPLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7S0FDMUU7O1FBRUQsbUJBQUEsR0FPRSxTQVBGLG1CQUFBLENBT2MsSUFBWSxFQUFFLE9BQTRCLEVBQUUsY0FBOEIsRUFBQTtBQUY5RSxZQUFBLENBQUMsZ0VBQWdFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFHaEYsWUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakIsWUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDdkIsWUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7S0FDdEMiLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2YWx1YXRlZEFyZ3MgfSBmcm9tICcuLi9jb21waWxlZC9leHByZXNzaW9ucy9hcmdzJztcbmltcG9ydCB7IEZ1bmN0aW9uRXhwcmVzc2lvbiB9IGZyb20gJy4uL2NvbXBpbGVkL2V4cHJlc3Npb25zL2Z1bmN0aW9uJztcbmltcG9ydCB7IExheW91dCwgQ29tcGlsZWRCbG9jayB9IGZyb20gJy4uL2NvbXBpbGVkL2Jsb2Nrcyc7XG5cbmltcG9ydCBFbnZpcm9ubWVudCwgeyBEeW5hbWljU2NvcGUgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBFbGVtZW50T3BlcmF0aW9ucyB9IGZyb20gJy4uL2J1aWxkZXInO1xuaW1wb3J0IEJvdW5kcyBmcm9tICcuLi9ib3VuZHMnO1xuaW1wb3J0ICogYXMgU2ltcGxlIGZyb20gJy4uL2RvbS9pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgRGVzdHJveWFibGUsIE9wYXF1ZSB9IGZyb20gJ2dsaW1tZXItdXRpbCc7XG5pbXBvcnQgeyBQYXRoUmVmZXJlbmNlLCBSZXZpc2lvblRhZyB9IGZyb20gJ2dsaW1tZXItcmVmZXJlbmNlJztcblxuZXhwb3J0IHR5cGUgQ29tcG9uZW50ID0gT3BhcXVlO1xuZXhwb3J0IHR5cGUgQ29tcG9uZW50Q2xhc3MgPSBhbnk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50TWFuYWdlcjxUIGV4dGVuZHMgQ29tcG9uZW50PiB7XG4gIC8vIEZpcnN0LCB0aGUgY29tcG9uZW50IG1hbmFnZXIgaXMgYXNrZWQgdG8gcHJlcGFyZSB0aGUgYXJndW1lbnRzIG5lZWRlZFxuICAvLyBmb3IgYGNyZWF0ZWAuIFRoaXMgYWxsb3dzIGZvciB0aGluZ3MgbGlrZSBjbG9zdXJlIGNvbXBvbmVudHMgd2hlcmUgdGhlXG4gIC8vIGFyZ3MgbmVlZCB0byBiZSBjdXJyaWVkIGJlZm9yZSBjb25zdHJ1Y3RpbmcgdGhlIGluc3RhbmNlIG9mIHRoZSBzdGF0ZVxuICAvLyBidWNrZXQuXG4gIHByZXBhcmVBcmdzKGRlZmluaXRpb246IENvbXBvbmVudERlZmluaXRpb248VD4sIGFyZ3M6IEV2YWx1YXRlZEFyZ3MsIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlKTogRXZhbHVhdGVkQXJncztcblxuICAvLyBUaGVuLCB0aGUgY29tcG9uZW50IG1hbmFnZXIgaXMgYXNrZWQgdG8gY3JlYXRlIGEgYnVja2V0IG9mIHN0YXRlIGZvclxuICAvLyB0aGUgc3VwcGxpZWQgYXJndW1lbnRzLiBGcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBHbGltbWVyLCB0aGlzIGlzXG4gIC8vIGFuIG9wYXF1ZSB0b2tlbiwgYnV0IGluIHByYWN0aWNlIGl0IGlzIHByb2JhYmx5IGEgY29tcG9uZW50IG9iamVjdC5cbiAgY3JlYXRlKGVudjogRW52aXJvbm1lbnQsIGRlZmluaXRpb246IENvbXBvbmVudERlZmluaXRpb248VD4sIGFyZ3M6IEV2YWx1YXRlZEFyZ3MsIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlLCBjYWxsZXI6IFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgaGFzRGVmYXVsdEJsb2NrOiBib29sZWFuKTogVDtcblxuICAvLyBSZXR1cm4gdGhlIGNvbXBpbGVkIGxheW91dCB0byB1c2UgZm9yIHRoaXMgY29tcG9uZW50LiBUaGlzIGlzIGNhbGxlZFxuICAvLyAqYWZ0ZXIqIHRoZSBjb21wb25lbnQgaW5zdGFuY2UgaGFzIGJlZW4gY3JlYXRlZCwgYmVjYXVzZSB5b3UgbWlnaHRcbiAgLy8gd2FudCB0byByZXR1cm4gYSBkaWZmZXJlbnQgbGF5b3V0IHBlci1pbnN0YW5jZSBmb3Igb3B0aW1pemF0aW9uIHJlYXNvbnNcbiAgLy8gb3IgdG8gaW1wbGVtZW50IGZlYXR1cmVzIGxpa2UgRW1iZXIncyBcImxhdGUtYm91bmRcIiBsYXlvdXRzLlxuICBsYXlvdXRGb3IoZGVmaW5pdGlvbjogQ29tcG9uZW50RGVmaW5pdGlvbjxUPiwgY29tcG9uZW50OiBULCBlbnY6IEVudmlyb25tZW50KTogQ29tcGlsZWRCbG9jaztcblxuICAvLyBOZXh0LCBHbGltbWVyIGFza3MgdGhlIG1hbmFnZXIgdG8gY3JlYXRlIGEgcmVmZXJlbmNlIGZvciB0aGUgYHNlbGZgXG4gIC8vIGl0IHNob3VsZCB1c2UgaW4gdGhlIGxheW91dC5cbiAgZ2V0U2VsZihjb21wb25lbnQ6IFQpOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT47XG5cbiAgLy8gVGhlIGBkaWRDcmVhdGVFbGVtZW50YCBob29rIGlzIHJ1biBmb3Igbm9uLXRhZ2xlc3MgY29tcG9uZW50cyBhZnRlciB0aGVcbiAgLy8gZWxlbWVudCBhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBiZWZvcmUgaXQgaGFzIGJlZW4gYXBwZW5kZWQgKFwiZmx1c2hlZFwiKSB0b1xuICAvLyB0aGUgRE9NLiBUaGlzIGhvb2sgYWxsb3dzIHRoZSBtYW5hZ2VyIHRvIHNhdmUgb2ZmIHRoZSBlbGVtZW50LCBhcyB3ZWxsIGFzXG4gIC8vIGluc3RhbGwgb3RoZXIgZHluYW1pYyBhdHRyaWJ1dGVzIHZpYSB0aGUgRWxlbWVudE9wZXJhdGlvbnMgb2JqZWN0LlxuICAvL1xuICAvLyBIb3N0cyBzaG91bGQgdXNlIGBkaWRDcmVhdGVgLCB3aGljaCBydW5zIGFzeW5jaHJvbm91c2x5IGFmdGVyIHRoZSByZW5kZXJpbmdcbiAgLy8gcHJvY2VzcywgdG8gcHJvdmlkZSBob29rcyBmb3IgdXNlciBjb2RlLlxuICBkaWRDcmVhdGVFbGVtZW50KGNvbXBvbmVudDogVCwgZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG9wZXJhdGlvbnM6IEVsZW1lbnRPcGVyYXRpb25zKTtcblxuICAvLyBUaGlzIGhvb2sgaXMgcnVuIGFmdGVyIHRoZSBlbnRpcmUgbGF5b3V0IGhhcyBiZWVuIHJlbmRlcmVkLlxuICAvL1xuICAvLyBIb3N0cyBzaG91bGQgdXNlIGBkaWRDcmVhdGVgLCB3aGljaCBydW5zIGFzeW5jaHJvbm91c2x5IGFmdGVyIHRoZSByZW5kZXJpbmdcbiAgLy8gcHJvY2VzcywgdG8gcHJvdmlkZSBob29rcyBmb3IgdXNlciBjb2RlLlxuICBkaWRSZW5kZXJMYXlvdXQoY29tcG9uZW50OiBULCBib3VuZHM6IEJvdW5kcyk7XG5cbiAgLy8gT25jZSB0aGUgd2hvbGUgdG9wLWRvd24gcmVuZGVyaW5nIHByb2Nlc3MgaXMgY29tcGxldGUsIEdsaW1tZXIgaW52b2tlc1xuICAvLyB0aGUgYGRpZENyZWF0ZWAgY2FsbGJhY2tzLlxuICBkaWRDcmVhdGUoY29tcG9uZW50OiBUKTtcblxuICAvLyBDb252ZXJ0IHRoZSBvcGFxdWUgY29tcG9uZW50IGludG8gYSBgUmV2aXNpb25UYWdgIHRoYXQgZGV0ZXJtaW5zIHdoZW5cbiAgLy8gdGhlIGNvbXBvbmVudCdzIHVwZGF0ZSBob29rcyBuZWVkIHRvIGJlIGNhbGxlZCwgaW4gYWRkaXRpb24gdG8gYW55XG4gIC8vIG91dHNpZGUgY2hhbmdlcyBjYXB0dXJlZCBpbiB0aGUgaW5wdXQgYXJndW1lbnRzLiBJZiBpdCByZXR1cm5zIG51bGwsXG4gIC8vIHRoZSB1cGRhdGUgaG9va3Mgd2lsbCBvbmx5IGJlIGNhbGxlZCB3aGVuIG9uZSBvciBtb3JlIG9mIHRoZSBpbnB1dFxuICAvLyBhcmd1bWVudHMgaGFzIGNoYW5nZWQuXG4gIGdldFRhZyhjb21wb25lbnQ6IFQpOiBSZXZpc2lvblRhZztcblxuICAvLyBXaGVuIHRoZSBpbnB1dCBhcmd1bWVudHMgaGF2ZSBjaGFuZ2VkLCBhbmQgdG9wLWRvd24gcmV2YWxpZGF0aW9uIGhhc1xuICAvLyBiZWd1biwgdGhlIG1hbmFnZXIncyBgdXBkYXRlYCBob29rIGlzIGNhbGxlZC5cbiAgdXBkYXRlKGNvbXBvbmVudDogVCwgYXJnczogRXZhbHVhdGVkQXJncywgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGUpO1xuXG4gIC8vIFRoaXMgaG9vayBpcyBydW4gYWZ0ZXIgdGhlIGVudGlyZSBsYXlvdXQgaGFzIGJlZW4gdXBkYXRlZC5cbiAgLy9cbiAgLy8gSG9zdHMgc2hvdWxkIHVzZSBgZGlkVXBkYXRlYCwgd2hpY2ggcnVucyBhc3luY2hyb25vdXNseSBhZnRlciB0aGUgcmVuZGVyaW5nXG4gIC8vIHByb2Nlc3MsIHRvIHByb3ZpZGUgaG9va3MgZm9yIHVzZXIgY29kZS5cbiAgZGlkVXBkYXRlTGF5b3V0KGNvbXBvbmVudDogVCwgYm91bmRzOiBCb3VuZHMpO1xuXG4gIC8vIEZpbmFsbHksIG9uY2UgdG9wLWRvd24gcmV2YWxpZGF0aW9uIGhhcyBjb21wbGV0ZWQsIEdsaW1tZXIgaW52b2tlc1xuICAvLyB0aGUgYGRpZFVwZGF0ZWAgY2FsbGJhY2tzIG9uIGNvbXBvbmVudHMgdGhhdCBjaGFuZ2VkLlxuICBkaWRVcGRhdGUoY29tcG9uZW50OiBUKTtcblxuICAvLyBDb252ZXJ0IHRoZSBvcGFxdWUgY29tcG9uZW50IGludG8gYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyBEZXN0cm95YWJsZS5cbiAgLy8gSWYgaXQgcmV0dXJucyBudWxsLCB0aGUgY29tcG9uZW50IHdpbGwgbm90IGJlIGRlc3Ryb3llZC5cbiAgZ2V0RGVzdHJ1Y3Rvcihjb21wb25lbnQ6IFQpOiBEZXN0cm95YWJsZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRMYXlvdXRCdWlsZGVyIHtcbiAgZW52OiBFbnZpcm9ubWVudDtcbiAgdGFnOiBDb21wb25lbnRUYWdCdWlsZGVyO1xuICBhdHRyczogQ29tcG9uZW50QXR0cnNCdWlsZGVyO1xuXG4gIHdyYXBMYXlvdXQobGF5b3V0OiBMYXlvdXQpO1xuICBmcm9tTGF5b3V0KGxheW91dDogTGF5b3V0KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRUYWdCdWlsZGVyIHtcbiAgc3RhdGljKHRhZ05hbWU6IHN0cmluZyk7XG4gIGR5bmFtaWModGFnTmFtZTogRnVuY3Rpb25FeHByZXNzaW9uPHN0cmluZz4pO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudEF0dHJzQnVpbGRlciB7XG4gIHN0YXRpYyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpO1xuICBkeW5hbWljKG5hbWU6IHN0cmluZywgdmFsdWU6IEZ1bmN0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KTtcbn1cblxuY29uc3QgQ09NUE9ORU5UX0RFRklOSVRJT05fQlJBTkQgPSAnQ09NUE9ORU5UIERFRklOSVRJT04gW2lkPWU1OWM3NTRlLTYxZWItNDM5Mi04YzRhLTJjMGFjNzJiZmNkNF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wb25lbnREZWZpbml0aW9uKG9iajogYW55KTogb2JqIGlzIENvbXBvbmVudERlZmluaXRpb248T3BhcXVlPiB7XG4gIHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogJiYgb2JqW0NPTVBPTkVOVF9ERUZJTklUSU9OX0JSQU5EXTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBvbmVudERlZmluaXRpb248VD4ge1xuICBwdWJsaWMgbmFtZTogc3RyaW5nOyAvLyBmb3IgZGVidWdnaW5nXG4gIHB1YmxpYyBtYW5hZ2VyOiBDb21wb25lbnRNYW5hZ2VyPFQ+O1xuICBwdWJsaWMgQ29tcG9uZW50Q2xhc3M6IENvbXBvbmVudENsYXNzO1xuXG4gIHByaXZhdGUgWydDT01QT05FTlQgREVGSU5JVElPTiBbaWQ9ZTU5Yzc1NGUtNjFlYi00MzkyLThjNGEtMmMwYWM3MmJmY2Q0XSddID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIG1hbmFnZXI6IENvbXBvbmVudE1hbmFnZXI8VD4sIENvbXBvbmVudENsYXNzOiBDb21wb25lbnRDbGFzcykge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICB0aGlzLkNvbXBvbmVudENsYXNzID0gQ29tcG9uZW50Q2xhc3M7XG4gIH1cbn1cbiJdfQ== -enifed('glimmer-runtime/lib/dom/attribute-managers', ['exports', 'glimmer-runtime/lib/dom/sanitized-values', 'glimmer-runtime/lib/dom/props', 'glimmer-runtime/lib/dom/helper', 'glimmer-runtime/lib/compiled/opcodes/content'], function (exports, _glimmerRuntimeLibDomSanitizedValues, _glimmerRuntimeLibDomProps, _glimmerRuntimeLibDomHelper, _glimmerRuntimeLibCompiledOpcodesContent) { - 'use strict'; - - exports.defaultManagers = defaultManagers; - exports.defaultPropertyManagers = defaultPropertyManagers; - exports.defaultAttributeManagers = defaultAttributeManagers; - exports.readDOMAttr = readDOMAttr; - - function defaultManagers(element, attr, isTrusting, namespace) { - var tagName = element.tagName; - var isSVG = element.namespaceURI === _glimmerRuntimeLibDomHelper.SVG_NAMESPACE; - if (isSVG) { - return defaultAttributeManagers(tagName, attr); - } - - var _normalizeProperty = _glimmerRuntimeLibDomProps.normalizeProperty(element, attr); - - var type = _normalizeProperty.type; - var normalized = _normalizeProperty.normalized; - - if (type === 'attr') { - return defaultAttributeManagers(tagName, normalized); - } else { - return defaultPropertyManagers(tagName, normalized); - } + if (firstTime) { + if (keyword.render) { + keyword.render(morph, env, scope, params, hash, template, inverse, visitor); + } + morph.rendered = true; + return true; } - function defaultPropertyManagers(tagName, attr) { - if (_glimmerRuntimeLibDomSanitizedValues.requiresSanitization(tagName, attr)) { - return new SafePropertyManager(attr); - } - if (isUserInputValue(tagName, attr)) { - return INPUT_VALUE_PROPERTY_MANAGER; - } - if (isOptionSelected(tagName, attr)) { - return OPTION_SELECTED_MANAGER; - } - return new PropertyManager(attr); + var isStable; + if (keyword.isStable) { + isStable = keyword.isStable(lastState, newState); + } else { + isStable = stableState(lastState, newState); } - function defaultAttributeManagers(tagName, attr) { - if (_glimmerRuntimeLibDomSanitizedValues.requiresSanitization(tagName, attr)) { - return new SafeAttributeManager(attr); - } - return new AttributeManager(attr); + if (isStable) { + if (keyword.rerender) { + var newEnv = keyword.rerender(morph, env, scope, params, hash, template, inverse, visitor); + env = newEnv || env; + } + _htmlbarsUtilMorphUtils.validateChildMorphs(env, morph, visitor); + return true; + } else { + _htmlbarsUtilTemplateUtils.clearMorph(morph, env, false); } - function readDOMAttr(element, attr) { - var isSVG = element.namespaceURI === _glimmerRuntimeLibDomHelper.SVG_NAMESPACE; - - var _normalizeProperty2 = _glimmerRuntimeLibDomProps.normalizeProperty(element, attr); - - var type = _normalizeProperty2.type; - var normalized = _normalizeProperty2.normalized; - - if (isSVG) { - return element.getAttribute(normalized); - } - if (type === 'attr') { - return element.getAttribute(normalized); - } - { - return element[normalized]; - } + // If the node is unstable, re-render from scratch + if (keyword.render) { + keyword.render(morph, env, scope, params, hash, template, inverse, visitor); + morph.rendered = true; + return true; } + } - ; - - var AttributeManager = (function () { - function AttributeManager(attr) { - this.attr = attr; - } - - AttributeManager.prototype.setAttribute = function setAttribute(env, element, value, namespace) { - var dom = env.getAppendOperations(); - var normalizedValue = normalizeAttributeValue(value); - if (!isAttrRemovalValue(normalizedValue)) { - dom.setAttribute(element, this.attr, normalizedValue, namespace); - } - }; - - AttributeManager.prototype.updateAttribute = function updateAttribute(env, element, value, namespace) { - if (value === null || value === undefined || value === false) { - if (namespace) { - env.getDOM().removeAttributeNS(element, namespace, this.attr); - } else { - env.getDOM().removeAttribute(element, this.attr); - } - } else { - this.setAttribute(env, element, value); - } - }; - - return AttributeManager; - })(); - - exports.AttributeManager = AttributeManager; - - ; - - var PropertyManager = (function (_AttributeManager) { - babelHelpers.inherits(PropertyManager, _AttributeManager); - - function PropertyManager() { - _AttributeManager.apply(this, arguments); - } - - PropertyManager.prototype.setAttribute = function setAttribute(env, element, value, namespace) { - if (!isAttrRemovalValue(value)) { - element[this.attr] = value; - } - }; - - PropertyManager.prototype.removeAttribute = function removeAttribute(env, element, namespace) { - // TODO this sucks but to preserve properties first and to meet current - // semantics we must do this. - var attr = this.attr; - - if (namespace) { - env.getDOM().removeAttributeNS(element, namespace, attr); - } else { - env.getDOM().removeAttribute(element, attr); - } - }; - - PropertyManager.prototype.updateAttribute = function updateAttribute(env, element, value, namespace) { - if (isAttrRemovalValue(value)) { - this.removeAttribute(env, element, namespace); - } else { - this.setAttribute(env, element, value, namespace); - } - }; - - return PropertyManager; - })(AttributeManager); - - exports.PropertyManager = PropertyManager; - - ; - function normalizeAttributeValue(value) { - if (value === false || value === undefined || value === null) { - return null; - } - if (value === true) { - return ''; - } - // onclick function etc in SSR - if (typeof value === 'function') { - return null; - } - return String(value); + function stableState(oldState, newState) { + if (_htmlbarsUtilObjectUtils.keyLength(oldState) !== _htmlbarsUtilObjectUtils.keyLength(newState)) { + return false; } - function isAttrRemovalValue(value) { - return value === null || value === undefined; - } - var SafePropertyManager = (function (_PropertyManager) { - babelHelpers.inherits(SafePropertyManager, _PropertyManager); - - function SafePropertyManager() { - _PropertyManager.apply(this, arguments); - } - - SafePropertyManager.prototype.setAttribute = function setAttribute(env, element, value) { - _PropertyManager.prototype.setAttribute.call(this, env, element, _glimmerRuntimeLibDomSanitizedValues.sanitizeAttributeValue(env, element, this.attr, value)); - }; - - SafePropertyManager.prototype.updateAttribute = function updateAttribute(env, element, value) { - this.setAttribute(env, element, value); - }; - - return SafePropertyManager; - })(PropertyManager); - - function isUserInputValue(tagName, attribute) { - return (tagName === 'INPUT' || tagName === 'TEXTAREA') && attribute === 'value'; + for (var prop in oldState) { + if (oldState[prop] !== newState[prop]) { + return false; + } } - var InputValuePropertyManager = (function (_AttributeManager2) { - babelHelpers.inherits(InputValuePropertyManager, _AttributeManager2); + return true; + } - function InputValuePropertyManager() { - _AttributeManager2.apply(this, arguments); - } + function linkRenderNode() /* morph, env, scope, params, hash */{ + return; + } - InputValuePropertyManager.prototype.setAttribute = function setAttribute(env, element, value) { - var input = element; - input.value = _glimmerRuntimeLibCompiledOpcodesContent.normalizeTextValue(value); - }; + /** + Host Hook: inline + + @param {RenderNode} renderNode + @param {Environment} env + @param {Scope} scope + @param {String} path + @param {Array} params + @param {Hash} hash + + Corresponds to: + + ```hbs + {{helper param1 param2 key1=val1 key2=val2}} + ``` + + This host hook is similar to the `block` host hook, but it + invokes helpers that do not supply an attached block. + + Like the `block` hook, the helper should be invoked with: + + - `{Array} params`: the parameters passed to the helper + in the template. + - `{Object} hash`: an object containing the keys and values passed + in the hash position in the template. + + The values in `params` and `hash` will already be resolved + through a previous call to the `get` host hook. + + In general, the default implementation of `inline` should work + for most host environments. It delegates to other host hooks + where appropriate, and properly invokes the helper with the + appropriate arguments. + + The default implementation of `inline` also makes `partial` + a keyword. Instead of invoking a helper named `partial`, + it invokes the `partial` host hook. + */ - InputValuePropertyManager.prototype.updateAttribute = function updateAttribute(env, element, value) { - var input = element; - var currentValue = input.value; - var normalizedValue = _glimmerRuntimeLibCompiledOpcodesContent.normalizeTextValue(value); - if (currentValue !== normalizedValue) { - input.value = normalizedValue; - } - }; - - return InputValuePropertyManager; - })(AttributeManager); - - var INPUT_VALUE_PROPERTY_MANAGER = new InputValuePropertyManager('value'); - exports.INPUT_VALUE_PROPERTY_MANAGER = INPUT_VALUE_PROPERTY_MANAGER; - function isOptionSelected(tagName, attribute) { - return tagName === 'OPTION' && attribute === 'selected'; + function inline(morph, env, scope, path, params, hash, visitor) { + if (handleRedirect(morph, env, scope, path, params, hash, null, null, visitor)) { + return; } - var OptionSelectedManager = (function (_PropertyManager2) { - babelHelpers.inherits(OptionSelectedManager, _PropertyManager2); + var value = undefined, + hasValue = undefined; + if (morph.linkedResult) { + value = env.hooks.getValue(morph.linkedResult); + hasValue = true; + } else { + var options = optionsFor(null, null, env, scope, morph); - function OptionSelectedManager() { - _PropertyManager2.apply(this, arguments); - } + var helper = env.hooks.lookupHelper(env, scope, path); + var result = env.hooks.invokeHelper(morph, env, scope, visitor, params, hash, helper, options.templates, thisFor(options.templates)); - OptionSelectedManager.prototype.setAttribute = function setAttribute(env, element, value) { - if (value !== null && value !== undefined && value !== false) { - var option = element; - option.selected = true; - } - }; + if (result && result.link) { + morph.linkedResult = result.value; + _htmlbarsUtilMorphUtils.linkParams(env, scope, morph, '@content-helper', [morph.linkedResult], null); + } - OptionSelectedManager.prototype.updateAttribute = function updateAttribute(env, element, value) { - var option = element; - if (value) { - option.selected = true; - } else { - option.selected = false; - } - }; - - return OptionSelectedManager; - })(PropertyManager); - - var OPTION_SELECTED_MANAGER = new OptionSelectedManager('selected'); - exports.OPTION_SELECTED_MANAGER = OPTION_SELECTED_MANAGER; - - var SafeAttributeManager = (function (_AttributeManager3) { - babelHelpers.inherits(SafeAttributeManager, _AttributeManager3); - - function SafeAttributeManager() { - _AttributeManager3.apply(this, arguments); - } - - SafeAttributeManager.prototype.setAttribute = function setAttribute(env, element, value) { - _AttributeManager3.prototype.setAttribute.call(this, env, element, _glimmerRuntimeLibDomSanitizedValues.sanitizeAttributeValue(env, element, this.attr, value)); - }; - - SafeAttributeManager.prototype.updateAttribute = function updateAttribute(env, element, value, namespace) { - this.setAttribute(env, element, value); - }; - - return SafeAttributeManager; - })(AttributeManager); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvZG9tL2F0dHJpYnV0ZS1tYW5hZ2Vycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVlBLGFBQUEsZUFBQSxDQUFnQyxPQUF1QixFQUFFLElBQVksRUFBRSxVQUFtQixFQUFFLFNBQWlCLEVBQUE7QUFDM0csWUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUM5QixZQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsWUFBWSxpQ0FOekIsYUFBYSxBQU04QixDQUFDO0FBRW5ELFlBQUksS0FBSyxFQUFFO0FBQ1QsbUJBQU8sd0JBQXdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2hEOztpQ0FFMEIsMkJBYnBCLGlCQUFpQixDQWFxQixPQUFPLEVBQUUsSUFBSSxDQUFDOztZQUFyRCxJQUFJLHNCQUFKLElBQUk7WUFBRSxVQUFVLHNCQUFWLFVBQVU7O0FBRXRCLFlBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtBQUNuQixtQkFBTyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDdEQsTUFBTTtBQUNMLG1CQUFPLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztTQUNyRDtLQUNGOztBQUVELGFBQUEsdUJBQUEsQ0FBd0MsT0FBZSxFQUFFLElBQVksRUFBQTtBQUNuRSxZQUFJLHFDQXpCSixvQkFBb0IsQ0F5QkssT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ3ZDLG1CQUFPLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEM7QUFFRCxZQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTtBQUNuQyxtQkFBTyw0QkFBNEIsQ0FBQztTQUNyQztBQUVELFlBQUksZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ25DLG1CQUFPLHVCQUF1QixDQUFDO1NBQ2hDO0FBRUQsZUFBTyxJ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O0FBQUEsNEJBQUEsV0FDRSxZQUFZLEdBQUEsc0JBQUMsR0FBZ0IsRUFBRSxPQUFnQixFQUFFLEtBQWEsRUFBQTtBQUM1RCx5Q0FBTSxZQUFZLEtBQUEsT0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLHFDQWxNbkMsc0JBQXNCLENBa01vQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUMxRjs7QUFISCw0QkFBQSxXQUtFLGVBQWUsR0FBQSx5QkFBQyxHQUFnQixFQUFFLE9BQWdCLEVBQUUsS0FBYSxFQUFFLFNBQXdCLEVBQUE7QUFDekYsZ0JBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN4Qzs7ZUFQSCxvQkFBQTtPQUFtQyxnQkFBZ0IiLCJmaWxlIjoiYXR0cmlidXRlLW1hbmFnZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRklYTUUsIE9wYXF1ZSB9IGZyb20gJ2dsaW1tZXItdXRpbCc7XG5pbXBvcnQgeyBET01OYW1lc3BhY2UgfSBmcm9tICcuL2hlbHBlcic7XG5pbXBvcnQgKiBhcyBTaW1wbGUgZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gIHNhbml0aXplQXR0cmlidXRlVmFsdWUsXG4gIHJlcXVpcmVzU2FuaXRpemF0aW9uXG59IGZyb20gJy4vc2FuaXRpemVkLXZhbHVlcyc7XG5pbXBvcnQgeyBub3JtYWxpemVQcm9wZXJ0eSB9IGZyb20gJy4vcHJvcHMnO1xuaW1wb3J0IHsgU1ZHX05BTUVTUEFDRSB9IGZyb20gJy4vaGVscGVyJztcbmltcG9ydCB7IG5vcm1hbGl6ZVRleHRWYWx1ZSB9IGZyb20gJy4uL2NvbXBpbGVkL29wY29kZXMvY29udGVudCc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRNYW5hZ2VycyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgYXR0cjogc3RyaW5nLCBpc1RydXN0aW5nOiBib29sZWFuLCBuYW1lc3BhY2U6IHN0cmluZyk6IEF0dHJpYnV0ZU1hbmFnZXIge1xuICBsZXQgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZTtcbiAgbGV0IGlzU1ZHID0gZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0U7XG5cbiAgaWYgKGlzU1ZHKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRBdHRyaWJ1dGVNYW5hZ2Vycyh0YWdOYW1lLCBhdHRyKTtcbiAgfVxuXG4gIGxldCB7IHR5cGUsIG5vcm1hbGl6ZWQgfSA9IG5vcm1hbGl6ZVByb3BlcnR5KGVsZW1lbnQsIGF0dHIpO1xuXG4gIGlmICh0eXBlID09PSAnYXR0cicpIHtcbiAgICByZXR1cm4gZGVmYXVsdEF0dHJpYnV0ZU1hbmFnZXJzKHRhZ05hbWUsIG5vcm1hbGl6ZWQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkZWZhdWx0UHJvcGVydHlNYW5hZ2Vycyh0YWdOYW1lLCBub3JtYWxpemVkKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdFByb3BlcnR5TWFuYWdlcnModGFnTmFtZTogc3RyaW5nLCBhdHRyOiBzdHJpbmcpOiBBdHRyaWJ1dGVNYW5hZ2VyIHtcbiAgaWYgKHJlcXVpcmVzU2FuaXRpemF0aW9uKHRhZ05hbWUsIGF0dHIpKSB7XG4gICAgcmV0dXJuIG5ldyBTYWZlUHJvcGVydHlNYW5hZ2VyKGF0dHIpO1xuICB9XG5cbiAgaWYgKGlzVXNlcklucHV0VmFsdWUodGFnTmFtZSwgYXR0cikpIHtcbiAgICByZXR1cm4gSU5QVVRfVkFMVUVfUFJPUEVSVFlfTUFOQUdFUjtcbiAgfVxuXG4gIGlmIChpc09wdGlvblNlbGVjdGVkKHRhZ05hbWUsIGF0dHIpKSB7XG4gICAgcmV0dXJuIE9QVElPTl9TRUxFQ1RFRF9NQU5BR0VSO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9wZXJ0eU1hbmFnZXIoYXR0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0QXR0cmlidXRlTWFuYWdlcnModGFnTmFtZTogc3RyaW5nLCBhdHRyOiBzdHJpbmcpOiBBdHRyaWJ1dGVNYW5hZ2VyIHtcbiAgaWYgKHJlcXVpcmVzU2FuaXRpemF0aW9uKHRhZ05hbWUsIGF0dHIpKSB7XG4gICAgcmV0dXJuIG5ldyBTYWZlQXR0cmlidXRlTWFuYWdlcihhdHRyKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgQXR0cmlidXRlTWFuYWdlcihhdHRyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRET01BdHRyKGVsZW1lbnQ6IEVsZW1lbnQsIGF0dHI6IHN0cmluZykge1xuICBsZXQgaXNTVkcgPSBlbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRTtcbiAgbGV0IHsgdHlwZSwgbm9ybWFsaXplZCB9ID0gbm9ybWFsaXplUHJvcGVydHkoZWxlbWVudCwgYXR0cik7XG5cbiAgaWYgKGlzU1ZHKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5vcm1hbGl6ZWQpO1xuICB9XG5cbiAgaWYgKHR5cGUgPT09ICdhdHRyJykge1xuICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShub3JtYWxpemVkKTtcbiAgfSB7XG4gICAgcmV0dXJuIGVsZW1lbnRbbm9ybWFsaXplZF07XG4gIH1cbn07XG5cbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGVNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IocHVibGljIGF0dHI6IHN0cmluZykge31cblxuICBzZXRBdHRyaWJ1dGUoZW52OiBFbnZpcm9ubWVudCwgZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIHZhbHVlOiBPcGFxdWUsIG5hbWVzcGFjZT86IERPTU5hbWVzcGFjZSkge1xuICAgIGxldCBkb20gPSBlbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpO1xuICAgIGxldCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVBdHRyaWJ1dGVWYWx1ZSh2YWx1ZSk7XG5cbiAgICBpZiAoIWlzQXR0clJlbW92YWxWYWx1ZShub3JtYWxpemVkVmFsdWUpKSB7XG4gICAgICBkb20uc2V0QXR0cmlidXRlKGVsZW1lbnQsIHRoaXMuYXR0ciwgbm9ybWFsaXplZFZhbHVlLCBuYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUF0dHJpYnV0ZShlbnY6IEVudmlyb25tZW50LCBlbGVtZW50OiBFbGVtZW50LCB2YWx1ZTogT3BhcXVlLCBuYW1lc3BhY2U/OiBET01OYW1lc3BhY2UpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgZW52LmdldERPTSgpLnJlbW92ZUF0dHJpYnV0ZU5TKGVsZW1lbnQsIG5hbWVzcGFjZSwgdGhpcy5hdHRyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudi5nZXRET00oKS5yZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgdGhpcy5hdHRyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCB2YWx1ZSk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY2xhc3MgUHJvcGVydHlNYW5hZ2VyIGV4dGVuZHMgQXR0cmlidXRlTWFuYWdlciB7XG4gIHNldEF0dHJpYnV0ZShlbnY6IEVudmlyb25tZW50LCBlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgdmFsdWU6IE9wYXF1ZSwgbmFtZXNwYWNlPzogRE9NTmFtZXNwYWNlKSB7XG4gICAgaWYgKCFpc0F0dHJSZW1vdmFsVmFsdWUodmFsdWUpKSB7XG4gICAgICBlbGVtZW50W3RoaXMuYXR0cl0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVtb3ZlQXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IEVsZW1lbnQsIG5hbWVzcGFjZT86IERPTU5hbWVzcGFjZSkge1xuICAgIC8vIFRPRE8gdGhpcyBzdWNrcyBidXQgdG8gcHJlc2VydmUgcHJvcGVydGllcyBmaXJzdCBhbmQgdG8gbWVldCBjdXJyZW50XG4gICAgLy8gc2VtYW50aWNzIHdlIG11c3QgZG8gdGhpcy5cbiAgICBsZXQgeyBhdHRyIH0gPSB0aGlzO1xuICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgIGVudi5nZXRET00oKS5yZW1vdmVBdHRyaWJ1dGVOUyhlbGVtZW50LCBuYW1lc3BhY2UsIGF0dHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnYuZ2V0RE9NKCkucmVtb3ZlQXR0cmlidXRlKGVsZW1lbnQsIGF0dHIpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUF0dHJpYnV0ZShlbnY6IEVudmlyb25tZW50LCBlbGVtZW50OiBFbGVtZW50LCB2YWx1ZTogT3BhcXVlLCBuYW1lc3BhY2U/OiBET01OYW1lc3BhY2UpIHtcbiAgICBpZiAoaXNBdHRyUmVtb3ZhbFZhbHVlKHZhbHVlKSkge1xuICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCBuYW1lc3BhY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCBuYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplQXR0cmlidXRlVmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIC8vIG9uY2xpY2sgZnVuY3Rpb24gZXRjIGluIFNTUlxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaXNBdHRyUmVtb3ZhbFZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5jbGFzcyBTYWZlUHJvcGVydHlNYW5hZ2VyIGV4dGVuZHMgUHJvcGVydHlNYW5hZ2VyIHtcbiAgc2V0QXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCB2YWx1ZTogT3BhcXVlKSB7XG4gICAgc3VwZXIuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgc2FuaXRpemVBdHRyaWJ1dGVWYWx1ZShlbnYsIGVsZW1lbnQsIHRoaXMuYXR0ciwgdmFsdWUpKTtcbiAgfVxuXG4gIHVwZGF0ZUF0dHJpYnV0ZShlbnY6IEVudmlyb25tZW50LCBlbGVtZW50OiBFbGVtZW50LCB2YWx1ZTogT3BhcXVlKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVc2VySW5wdXRWYWx1ZSh0YWdOYW1lOiBzdHJpbmcsIGF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gIHJldHVybiAodGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YWdOYW1lID09PSAnVEVYVEFSRUEnKSAmJiBhdHRyaWJ1dGUgPT09ICd2YWx1ZSc7XG59XG5cbmNsYXNzIElucHV0VmFsdWVQcm9wZXJ0eU1hbmFnZXIgZXh0ZW5kcyBBdHRyaWJ1dGVNYW5hZ2VyIHtcbiAgc2V0QXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCB2YWx1ZTogT3BhcXVlKSB7XG4gICAgbGV0IGlucHV0ID0gZWxlbWVudCBhcyBGSVhNRTxIVE1MSW5wdXRFbGVtZW50LCBcIlRoaXMgYnJlYWtzIFNTUlwiPjtcbiAgICBpbnB1dC52YWx1ZSA9IG5vcm1hbGl6ZVRleHRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICB1cGRhdGVBdHRyaWJ1dGUoZW52OiBFbnZpcm9ubWVudCwgZWxlbWVudDogRWxlbWVudCwgdmFsdWU6IE9wYXF1ZSkge1xuICAgIGxldCBpbnB1dCA9IDxIVE1MSW5wdXRFbGVtZW50PmVsZW1lbnQ7XG4gICAgbGV0IGN1cnJlbnRWYWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgIGxldCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVUZXh0VmFsdWUodmFsdWUpO1xuICAgIGlmIChjdXJyZW50VmFsdWUgIT09IG5vcm1hbGl6ZWRWYWx1ZSkge1xuICAgICAgaW5wdXQudmFsdWUgPSBub3JtYWxpemVkVmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBJTlBVVF9WQUxVRV9QUk9QRVJUWV9NQU5BR0VSOiBBdHRyaWJ1dGVNYW5hZ2VyID0gbmV3IElucHV0VmFsdWVQcm9wZXJ0eU1hbmFnZXIoJ3ZhbHVlJyk7XG5cbmZ1bmN0aW9uIGlzT3B0aW9uU2VsZWN0ZWQodGFnTmFtZTogc3RyaW5nLCBhdHRyaWJ1dGU6IHN0cmluZykge1xuICByZXR1cm4gdGFnTmFtZSA9PT0gJ09QVElPTicgJiYgYXR0cmlidXRlID09PSAnc2VsZWN0ZWQnO1xufVxuXG5jbGFzcyBPcHRpb25TZWxlY3RlZE1hbmFnZXIgZXh0ZW5kcyBQcm9wZXJ0eU1hbmFnZXIge1xuICBzZXRBdHRyaWJ1dGUoZW52OiBFbnZpcm9ubWVudCwgZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIHZhbHVlOiBPcGFxdWUpIHtcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gZmFsc2UpIHtcbiAgICAgIGxldCBvcHRpb24gPSA8SFRNTE9wdGlvbkVsZW1lbnQ+ZWxlbWVudDtcbiAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQXR0cmlidXRlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IEVsZW1lbnQsIHZhbHVlOiBPcGFxdWUpIHtcbiAgICBsZXQgb3B0aW9uID0gPEhUTUxPcHRpb25FbGVtZW50PmVsZW1lbnQ7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgT1BUSU9OX1NFTEVDVEVEX01BTkFHRVI6IEF0dHJpYnV0ZU1hbmFnZXIgPSBuZXcgT3B0aW9uU2VsZWN0ZWRNYW5hZ2VyKCdzZWxlY3RlZCcpO1xuXG5jbGFzcyBTYWZlQXR0cmlidXRlTWFuYWdlciBleHRlbmRzIEF0dHJpYnV0ZU1hbmFnZXIge1xuICBzZXRBdHRyaWJ1dGUoZW52OiBFbnZpcm9ubWVudCwgZWxlbWVudDogRWxlbWVudCwgdmFsdWU6IE9wYXF1ZSkge1xuICAgIHN1cGVyLnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHNhbml0aXplQXR0cmlidXRlVmFsdWUoZW52LCBlbGVtZW50LCB0aGlzLmF0dHIsIHZhbHVlKSk7XG4gIH1cblxuICB1cGRhdGVBdHRyaWJ1dGUoZW52OiBFbnZpcm9ubWVudCwgZWxlbWVudDogRWxlbWVudCwgdmFsdWU6IE9wYXF1ZSwgbmFtZXNwYWNlPzogRE9NTmFtZXNwYWNlKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCB2YWx1ZSk7XG4gIH1cbn1cbiJdfQ== -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; - exports.insertHTMLBefore = _insertHTMLBefore; - var SVG_NAMESPACE = 'http://www.w3.org/2000/svg'; - exports.SVG_NAMESPACE = SVG_NAMESPACE; - // http://www.w3.org/TR/html/syntax.html#html-integration-point - var SVG_INTEGRATION_POINTS = { foreignObject: 1, desc: 1, title: 1 }; - // http://www.w3.org/TR/html/syntax.html#adjust-svg-attributes - // TODO: Adjust SVG attributes - // http://www.w3.org/TR/html/syntax.html#parsing-main-inforeign - // TODO: Adjust SVG elements - // http://www.w3.org/TR/html/syntax.html#parsing-main-inforeign - var BLACKLIST_TABLE = Object.create(null); - exports.BLACKLIST_TABLE = BLACKLIST_TABLE; - ["b", "big", "blockquote", "body", "br", "center", "code", "dd", "div", "dl", "dt", "em", "embed", "h1", "h2", "h3", "h4", "h5", "h6", "head", "hr", "i", "img", "li", "listing", "main", "meta", "nobr", "ol", "p", "pre", "ruby", "s", "small", "span", "strong", "strike", "sub", "sup", "table", "tt", "u", "ul", "var"].forEach(function (tag) { - return BLACKLIST_TABLE[tag] = 1; - }); - var WHITESPACE = /[\t-\r \xA0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]/; - var doc = typeof document === 'undefined' ? undefined : document; - - function isWhitespace(string) { - return WHITESPACE.test(string); + if (result && 'value' in result) { + value = env.hooks.getValue(result.value); + hasValue = true; + } } - function moveNodesBefore(source, target, nextSibling) { - var first = source.firstChild; - var last = null; - var current = first; - while (current) { - last = current; - current = current.nextSibling; - target.insertBefore(last, nextSibling); - } - return [first, last]; + if (hasValue) { + if (morph.lastValue !== value) { + morph.setContent(value); + } + morph.lastValue = value; } + } - var DOM; - exports.DOM = DOM; - (function (DOM) { - var TreeConstruction = (function () { - function TreeConstruction(document) { - this.document = document; - this.uselessElement = null; - this.setupUselessElement(); - } + function keyword(path, morph, env, scope, params, hash, template, inverse, visitor) { + handleKeyword(path, morph, env, scope, params, hash, template, inverse, visitor); + } - TreeConstruction.prototype.setupUselessElement = function setupUselessElement() { - this.uselessElement = this.document.createElement('div'); - }; + function invokeHelper(morph, env, scope, visitor, _params, _hash, helper, templates, context) { + var params = normalizeArray(env, _params); + var hash = normalizeObject(env, _hash); + return { value: helper.call(context, params, hash, templates) }; + } - TreeConstruction.prototype.createElement = function createElement(tag, context) { - var isElementInSVGNamespace = undefined, - isHTMLIntegrationPoint = undefined; - if (context) { - isElementInSVGNamespace = context.namespaceURI === SVG_NAMESPACE || tag === 'svg'; - isHTMLIntegrationPoint = SVG_INTEGRATION_POINTS[context.tagName]; - } else { - isElementInSVGNamespace = tag === 'svg'; - isHTMLIntegrationPoint = false; - } - if (isElementInSVGNamespace && !isHTMLIntegrationPoint) { - // FIXME: This does not properly handle <font> with color, face, or - // size attributes, which is also disallowed by the spec. We should fix - // this. - if (BLACKLIST_TABLE[tag]) { - throw new Error('Cannot create a ' + tag + ' inside an SVG context'); - } - return this.document.createElementNS(SVG_NAMESPACE, tag); - } else { - return this.document.createElement(tag); - } - }; + function normalizeArray(env, array) { + var out = new Array(array.length); - TreeConstruction.prototype.createElementNS = function createElementNS(namespace, tag) { - return this.document.createElementNS(namespace, tag); - }; + for (var i = 0, l = array.length; i < l; i++) { + out[i] = env.hooks.getCellOrValue(array[i]); + } - TreeConstruction.prototype.setAttribute = function setAttribute(element, name, value, namespace) { - if (namespace) { - element.setAttributeNS(namespace, name, value); - } else { - element.setAttribute(name, value); - } - }; + return out; + } - TreeConstruction.prototype.createTextNode = function createTextNode(text) { - return this.document.createTextNode(text); - }; + function normalizeObject(env, object) { + var out = {}; - TreeConstruction.prototype.createComment = function createComment(data) { - return this.document.createComment(data); - }; + for (var prop in object) { + out[prop] = env.hooks.getCellOrValue(object[prop]); + } - TreeConstruction.prototype.insertBefore = function insertBefore(parent, node, reference) { - parent.insertBefore(node, reference); - }; + return out; + } - TreeConstruction.prototype.insertHTMLBefore = function insertHTMLBefore(parent, html, reference) { - return _insertHTMLBefore(this.uselessElement, parent, reference, html); - }; + function classify() /* env, scope, path */{ + return null; + } - return TreeConstruction; - })(); + var keywords = { + partial: function (morph, env, scope, params) { + var value = env.hooks.partial(morph, env, scope, params[0]); + morph.setContent(value); + return true; + }, - DOM.TreeConstruction = TreeConstruction; - var appliedTreeContruction = TreeConstruction; - appliedTreeContruction = _glimmerRuntimeLibCompatTextNodeMergingFix.treeConstruction(doc, appliedTreeContruction); - appliedTreeContruction = _glimmerRuntimeLibCompatInnerHtmlFix.treeConstruction(doc, appliedTreeContruction); - appliedTreeContruction = _glimmerRuntimeLibCompatSvgInnerHtmlFix.treeConstruction(doc, appliedTreeContruction, SVG_NAMESPACE); - DOM.DOMTreeConstruction = appliedTreeContruction; - })(DOM || (exports.DOM = DOM = {})); + // quoted since it's a reserved word, see issue #420 + 'yield': function (morph, env, scope, params, hash, template, inverse, visitor) { + // the current scope is provided purely for the creation of shadow + // scopes; it should not be provided to user code. - var DOMChanges = (function () { - function DOMChanges(document) { - this.document = document; - this.uselessElement = null; - this.namespace = null; - this.uselessElement = this.document.createElement('div'); - } + var to = env.hooks.getValue(hash.to) || 'default'; + var block = env.hooks.getBlock(scope, to); - DOMChanges.prototype.setAttribute = function setAttribute(element, name, value) { - element.setAttribute(name, value); - }; + if (block) { + block.invoke(env, params, hash.self, morph, scope, visitor); + } + return true; + }, - DOMChanges.prototype.setAttributeNS = function setAttributeNS(element, namespace, name, value) { - element.setAttributeNS(namespace, name, value); - }; + hasBlock: function (morph, env, scope, params) { + var name = env.hooks.getValue(params[0]) || 'default'; + return !!env.hooks.getBlock(scope, name); + }, - DOMChanges.prototype.removeAttribute = function removeAttribute(element, name) { - element.removeAttribute(name); - }; + hasBlockParams: function (morph, env, scope, params) { + var name = env.hooks.getValue(params[0]) || 'default'; + var block = env.hooks.getBlock(scope, name); + return !!(block && block.arity); + } - DOMChanges.prototype.removeAttributeNS = function removeAttributeNS(element, namespace, name) { - element.removeAttributeNS(namespace, name); - }; + }; - DOMChanges.prototype.createTextNode = function createTextNode(text) { - return this.document.createTextNode(text); - }; + exports.keywords = keywords; + /** + Host Hook: partial + + @param {RenderNode} renderNode + @param {Environment} env + @param {Scope} scope + @param {String} path + + Corresponds to: + + ```hbs + {{partial "location"}} + ``` + + This host hook is invoked by the default implementation of + the `inline` hook. This makes `partial` a keyword in an + HTMLBars environment using the default `inline` host hook. + + It is implemented as a host hook so that it can retrieve + the named partial out of the `Environment`. Helpers, in + contrast, only have access to the values passed in to them, + and not to the ambient lexical environment. + + The host hook should invoke the referenced partial with + the ambient `self`. + */ - DOMChanges.prototype.createComment = function createComment(data) { - return this.document.createComment(data); - }; + function partial(renderNode, env, scope, path) { + var template = env.partials[path]; + return template.render(scope.self, env, {}).fragment; + } - DOMChanges.prototype.createElement = function createElement(tag, context) { - var isElementInSVGNamespace = undefined, - isHTMLIntegrationPoint = undefined; - if (context) { - isElementInSVGNamespace = context.namespaceURI === SVG_NAMESPACE || tag === 'svg'; - isHTMLIntegrationPoint = SVG_INTEGRATION_POINTS[context.tagName]; - } else { - isElementInSVGNamespace = tag === 'svg'; - isHTMLIntegrationPoint = false; - } - if (isElementInSVGNamespace && !isHTMLIntegrationPoint) { - // FIXME: This does not properly handle <font> with color, face, or - // size attributes, which is also disallowed by the spec. We should fix - // this. - if (BLACKLIST_TABLE[tag]) { - throw new Error('Cannot create a ' + tag + ' inside an SVG context'); - } - return this.document.createElementNS(SVG_NAMESPACE, tag); - } else { - return this.document.createElement(tag); - } - }; + /** + Host hook: range + + @param {RenderNode} renderNode + @param {Environment} env + @param {Scope} scope + @param {any} value + + Corresponds to: + + ```hbs + {{content}} + {{{unescaped}}} + ``` + + This hook is responsible for updating a render node + that represents a range of content with a value. + */ - DOMChanges.prototype.insertHTMLBefore = function insertHTMLBefore(_parent, nextSibling, html) { - return _insertHTMLBefore(this.uselessElement, _parent, nextSibling, html); - }; + function range(morph, env, scope, path, value, visitor) { + if (handleRedirect(morph, env, scope, path, [], {}, null, null, visitor)) { + return; + } - DOMChanges.prototype.insertNodeBefore = function insertNodeBefore(parent, node, reference) { - if (isDocumentFragment(node)) { - var firstChild = node.firstChild; - var lastChild = node.lastChild; + value = env.hooks.getValue(value); - this.insertBefore(parent, node, reference); - return new _glimmerRuntimeLibBounds.ConcreteBounds(parent, firstChild, lastChild); - } else { - this.insertBefore(parent, node, reference); - return new _glimmerRuntimeLibBounds.SingleNodeBounds(parent, node); - } - }; + if (morph.lastValue !== value) { + morph.setContent(value); + } - DOMChanges.prototype.insertTextBefore = function insertTextBefore(parent, nextSibling, text) { - var textNode = this.createTextNode(text); - this.insertBefore(parent, textNode, nextSibling); - return textNode; - }; + morph.lastValue = value; + } - DOMChanges.prototype.insertBefore = function insertBefore(element, node, reference) { - element.insertBefore(node, reference); - }; + /** + Host hook: element + + @param {RenderNode} renderNode + @param {Environment} env + @param {Scope} scope + @param {String} path + @param {Array} params + @param {Hash} hash + + Corresponds to: + + ```hbs + <div {{bind-attr foo=bar}}></div> + ``` + + This hook is responsible for invoking a helper that + modifies an element. + + Its purpose is largely legacy support for awkward + idioms that became common when using the string-based + Handlebars engine. + + Most of the uses of the `element` hook are expected + to be superseded by component syntax and the + `attribute` hook. + */ - DOMChanges.prototype.insertAfter = function insertAfter(element, node, reference) { - this.insertBefore(element, node, reference.nextSibling); - }; - - return DOMChanges; - })(); - - exports.DOMChanges = DOMChanges; - - function _insertHTMLBefore(_useless, _parent, _nextSibling, html) { - // TypeScript vendored an old version of the DOM spec where `insertAdjacentHTML` - // only exists on `HTMLElement` but not on `Element`. We actually work with the - // newer version of the DOM API here (and monkey-patch this method in `./compat` - // when we detect older browsers). This is a hack to work around this limitation. - var parent = _parent; - var useless = _useless; - var nextSibling = _nextSibling; - var prev = nextSibling ? nextSibling.previousSibling : parent.lastChild; - var last = undefined; - if (html === null || html === '') { - return new _glimmerRuntimeLibBounds.ConcreteBounds(parent, null, null); - } - if (nextSibling === null) { - parent.insertAdjacentHTML('beforeEnd', html); - last = parent.lastChild; - } else if (nextSibling instanceof HTMLElement) { - nextSibling.insertAdjacentHTML('beforeBegin', html); - last = nextSibling.previousSibling; - } else { - // Non-element nodes do not support insertAdjacentHTML, so add an - // element and call it on that element. Then remove the element. - // - // This also protects Edge, IE and Firefox w/o the inspector open - // from merging adjacent text nodes. See ./compat/text-node-merging-fix.ts - parent.insertBefore(useless, nextSibling); - useless.insertAdjacentHTML('beforeBegin', html); - last = useless.previousSibling; - parent.removeChild(useless); - } - var first = prev ? prev.nextSibling : parent.firstChild; - return new _glimmerRuntimeLibBounds.ConcreteBounds(parent, first, last); + function element(morph, env, scope, path, params, hash, visitor) { + if (handleRedirect(morph, env, scope, path, params, hash, null, null, visitor)) { + return; } - function isDocumentFragment(node) { - return node.nodeType === Node.DOCUMENT_FRAGMENT_NODE; + var helper = env.hooks.lookupHelper(env, scope, path); + if (helper) { + env.hooks.invokeHelper(null, env, scope, null, params, hash, helper, { element: morph.element }); } - var helper = DOMChanges; - helper = _glimmerRuntimeLibCompatTextNodeMergingFix.domChanges(doc, helper); - helper = _glimmerRuntimeLibCompatInnerHtmlFix.domChanges(doc, helper); - helper = _glimmerRuntimeLibCompatSvgInnerHtmlFix.domChanges(doc, helper, SVG_NAMESPACE); - exports.default = helper; - var DOMTreeConstruction = DOM.DOMTreeConstruction; - exports.DOMTreeConstruction = DOMTreeConstruction; - exports.DOMNamespace = _glimmerRuntimeLibDomInterfaces.Namespace; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvZG9tL2hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFlTyxRQUFNLGFBQWEsR0FBRyw0QkFBNEIsQ0FBQzs7O0FBRzFELFFBQU0sc0JBQXNCLEdBQUcsRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDOzs7Ozs7QUFTaEUsUUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFbkQsQUFBQyxLQUNDLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFDaEcsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQ3JHLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQ3BHLElBQUksRUFBRSxLQUFLLENBQ1osQ0FBRSxPQUFPLENBQUMsVUFBQSxHQUFHO2VBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7S0FBQSxDQUFDLENBQUM7QUFFNUMsUUFBTSxVQUFVLEdBQUcsMkVBQTJFLENBQUM7QUFFL0YsUUFBSSxHQUFHLEdBQUcsT0FBTyxRQUFRLEtBQUssV0FBVyxHQUFHLFNBQVMsR0FB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QixFQUFBO0FBQzNDLGVBQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsc0JBQXNCLENBQUM7S0FDdEQ7QUFFRCxRQUFJLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFFeEIsVUFBTSxHQUFHLDJDQXBRUCxVQUFVLENBb1FzQixHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0MsVUFBTSxHQUFHLHFDQTdRUCxVQUFVLENBNlF1QixHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEQsVUFBTSxHQUFHLHdDQTFRUCxVQUFVLENBMFFxQixHQUFHLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO3NCQUU5QyxNQUFNO0FBQ2QsUUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUMsbUJBQW1CLENBQUM7O1lBRXJDLFlBQVksbUNBQXpCLFNBQVMiLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uY3JldGVCb3VuZHMsIFNpbmdsZU5vZGVCb3VuZHMsIEJvdW5kcyB9IGZyb20gJy4uL2JvdW5kcyc7XG5pbXBvcnQge1xuICBkb21DaGFuZ2VzIGFzIGRvbUNoYW5nZXNUYWJsZUVsZW1lbnRGaXgsXG4gIHRyZWVDb25zdHJ1Y3Rpb24gYXMgdHJlZUNvbnN0cnVjdGlvblRhYmxlRWxlbWVudEZpeFxufSBmcm9tICcuLi9jb21wYXQvaW5uZXItaHRtbC1maXgnO1xuaW1wb3J0IHtcbiAgZG9tQ2hhbmdlcyBhcyBkb21DaGFuZ2VzU3ZnRWxlbWVudEZpeCxcbiAgdHJlZUNvbnN0cnVjdGlvbiBhcyB0cmVlQ29uc3RydWN0aW9uU3ZnRWxlbWVudEZpeFxufSBmcm9tICcuLi9jb21wYXQvc3ZnLWlubmVyLWh0bWwtZml4JztcbmltcG9ydCB7XG4gIGRvbUNoYW5nZXMgYXMgZG9tQ2hhbmdlc05vZGVNZXJnaW5nRml4LFxuICB0cmVlQ29uc3RydWN0aW9uIGFzIHRyZWVDb25zdHJ1Y3Rpb25Ob2RlTWVyZ2luZ0ZpeFxufSBmcm9tICcuLi9jb21wYXQvdGV4dC1ub2RlLW1lcmdpbmctZml4JztcbmltcG9ydCAqIGFzIFNpbXBsZSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY29uc3QgU1ZHX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG5cbi8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWwvc3ludGF4Lmh0bWwjaHRtbC1pbnRlZ3JhdGlvbi1wb2ludFxuY29uc3QgU1ZHX0lOVEVHUkFUSU9OX1BPSU5UUyA9IHsgZm9yZWlnbk9iamVjdDogMSwgZGVzYzogMSwgdGl0bGU6IDEgfTtcblxuLy8gaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbC9zeW50YXguaHRtbCNhZGp1c3Qtc3ZnLWF0dHJpYnV0ZXNcbi8vIFRPRE86IEFkanVzdCBTVkcgYXR0cmlidXRlc1xuXG4vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmZvcmVpZ25cbi8vIFRPRE86IEFkanVzdCBTVkcgZWxlbWVudHNcblxuLy8gaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbC9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5mb3JlaWduXG5leHBvcnQgY29uc3QgQkxBQ0tMSVNUX1RBQkxFID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuKFtcbiAgXCJiXCIsIFwiYmlnXCIsIFwiYmxvY2txdW90ZVwiLCBcImJvZHlcIiwgXCJiclwiLCBcImNlbnRlclwiLCBcImNvZGVcIiwgXCJkZFwiLCBcImRpdlwiLCBcImRsXCIsIFwiZHRcIiwgXCJlbVwiLCBcImVtYmVkXCIsXG4gIFwiaDFcIiwgXCJoMlwiLCBcImgzXCIsIFwiaDRcIiwgXCJoNVwiLCBcImg2XCIsIFwiaGVhZFwiLCBcImhyXCIsIFwiaVwiLCBcImltZ1wiLCBcImxpXCIsIFwibGlzdGluZ1wiLCBcIm1haW5cIiwgXCJtZXRhXCIsIFwibm9iclwiLFxuICBcIm9sXCIsIFwicFwiLCBcInByZVwiLCBcInJ1YnlcIiwgXCJzXCIsIFwic21hbGxcIiwgXCJzcGFuXCIsIFwic3Ryb25nXCIsIFwic3RyaWtlXCIsIFwic3ViXCIsIFwic3VwXCIsIFwidGFibGVcIiwgXCJ0dFwiLCBcInVcIixcbiAgXCJ1bFwiLCBcInZhclwiXG5dKS5mb3JFYWNoKHRhZyA9PiBCTEFDS0xJU1RfVEFCTEVbdGFnXSA9IDEpO1xuXG5jb25zdCBXSElURVNQQUNFID0gL1tcXHQtXFxyIFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwLVxcdTIwMEFcXHUyMDI4XFx1MjAyOVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdUZFRkZdLztcblxubGV0IGRvYyA9IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBkb2N1bWVudDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2hpdGVzcGFjZShzdHJpbmc6IHN0cmluZykge1xuICByZXR1cm4gV0hJVEVTUEFDRS50ZXN0KHN0cmluZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlTm9kZXNCZWZvcmUoc291cmNlLCB0YXJnZXQsIG5leHRTaWJsaW5nKSB7XG4gIGxldCBmaXJzdCA9IHNvdXJjZS5maXJzdENoaWxkO1xuICBsZXQgbGFzdCA9IG51bGw7XG4gIGxldCBjdXJyZW50ID0gZmlyc3Q7XG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgbGFzdCA9IGN1cnJlbnQ7XG4gICAgY3VycmVudCA9IGN1cnJlbnQubmV4dFNpYmxpbmc7XG4gICAgdGFyZ2V0Lmluc2VydEJlZm9yZShsYXN0LCBuZXh0U2libGluZyk7XG4gIH1cbiAgcmV0dXJuIFtmaXJzdCwgbGFzdF07XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRE9NIHtcbiAgZXhwb3J0IHR5cGUgTm9kZSA9IFNpbXBsZS5Ob2RlO1xuICBleHBvcnQgdHlwZSBFbGVtZW50ID0gU2ltcGxlLkVsZW1lbnQ7XG4gIGV4cG9ydCB0eXBlIERvY3VtZW50ID0gU2ltcGxlLkRvY3VtZW50O1xuICBleHBvcnQgdHlwZSBDb21tZW50ID0gU2ltcGxlLkNvbW1lbnQ7XG4gIGV4cG9ydCB0eXBlIFRleHQgPSBTaW1wbGUuVGV4dDtcbiAgZXhwb3J0IHR5cGUgTmFtZXNwYWNlID0gU2ltcGxlLk5hbWVzcGFjZTtcbiAgZXhwb3J0IHR5cGUgSFRNTEVsZW1lbnQgPSBTaW1wbGUuSFRNTEVsZW1lbnQ7XG5cbiAgZXhwb3J0IGNsYXNzIFRyZWVDb25zdHJ1Y3Rpb24ge1xuICAgIHByb3RlY3RlZCB1c2VsZXNzRWxlbWVudDogSFRNTEVsZW1lbnQgPSBudWxsO1xuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBkb2N1bWVudDogRG9jdW1lbnQpIHtcbiAgICAgIHRoaXMuc2V0dXBVc2VsZXNzRWxlbWVudCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXR1cFVzZWxlc3NFbGVtZW50KCkge1xuICAgICAgdGhpcy51c2VsZXNzRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudCh0YWc6IHN0cmluZywgY29udGV4dD86IEVsZW1lbnQpOiBFbGVtZW50IHtcbiAgICAgIGxldCBpc0VsZW1lbnRJblNWR05hbWVzcGFjZSwgaXNIVE1MSW50ZWdyYXRpb25Qb2ludDtcblxuICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgaXNFbGVtZW50SW5TVkdOYW1lc3BhY2UgPSBjb250ZXh0Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSB8fCB0YWcgPT09ICdzdmcnO1xuICAgICAgICBpc0hUTUxJbnRlZ3JhdGlvblBvaW50ID0gU1ZHX0lOVEVHUkFUSU9OX1BPSU5UU1tjb250ZXh0LnRhZ05hbWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNFbGVtZW50SW5TVkdOYW1lc3BhY2UgPSB0YWcgPT09ICdzdmcnO1xuICAgICAgICBpc0hUTUxJbnRlZ3JhdGlvblBvaW50ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0VsZW1lbnRJblNWR05hbWVzcGFjZSAmJiAhaXNIVE1MSW50ZWdyYXRpb25Qb2ludCkge1xuICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCBwcm9wZXJseSBoYW5kbGUgPGZvbnQ+IHdpdGggY29sb3IsIGZhY2UsIG9yXG4gICAgICAgIC8vIHNpemUgYXR0cmlidXRlcywgd2hpY2ggaXMgYWxzbyBkaXNhbGxvd2VkIGJ5IHRoZSBzcGVjLiBXZSBzaG91bGQgZml4XG4gICAgICAgIC8vIHRoaXMuXG4gICAgICAgIGlmIChCTEFDS0xJU1RfVEFCTEVbdGFnXSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNyZWF0ZSBhICR7dGFnfSBpbnNpZGUgYW4gU1ZHIGNvbnRleHRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTkFNRVNQQUNFIGFzIE5hbWVzcGFjZSwgdGFnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlOiBOYW1lc3BhY2UsIHRhZzogc3RyaW5nKTogRWxlbWVudCB7XG4gICAgICByZXR1cm4gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlLCB0YWcpO1xuICAgIH1cblxuICAgIHNldEF0dHJpYnV0ZShlbGVtZW50OiBFbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZykge1xuICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbmFtZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZVRleHROb2RlKHRleHQ6IHN0cmluZyk6IFRleHQge1xuICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG4gICAgfVxuXG4gICAgY3JlYXRlQ29tbWVudChkYXRhOiBzdHJpbmcpOiBDb21tZW50IHtcbiAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoZGF0YSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0QmVmb3JlKHBhcmVudDogRWxlbWVudCwgbm9kZTogTm9kZSwgcmVmZXJlbmNlOiBOb2RlKSB7XG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIHJlZmVyZW5jZSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0SFRNTEJlZm9yZShwYXJlbnQ6IEVsZW1lbnQsIGh0bWw6IHN0cmluZywgcmVmZXJlbmNlOiBOb2RlKTogQm91bmRzIHtcbiAgICAgIHJldHVybiBpbnNlcnRIVE1MQmVmb3JlKHRoaXMudXNlbGVzc0VsZW1lbnQsIHBhcmVudCwgcmVmZXJlbmNlLCBodG1sKTtcbiAgICB9O1xuICB9XG5cbiAgbGV0IGFwcGxpZWRUcmVlQ29udHJ1Y3Rpb24gPSBUcmVlQ29uc3RydWN0aW9uO1xuICBhcHBsaWVkVHJlZUNvbnRydWN0aW9uID0gdHJlZUNvbnN0cnVjdGlvbk5vZGVNZXJnaW5nRml4KGRvYywgYXBwbGllZFRyZWVDb250cnVjdGlvbik7XG4gIGFwcGxpZWRUcmVlQ29udHJ1Y3Rpb24gPSB0cmVlQ29uc3RydWN0aW9uVGFibGVFbGVtZW50Rml4KGRvYywgYXBwbGllZFRyZWVDb250cnVjdGlvbik7XG4gIGFwcGxpZWRUcmVlQ29udHJ1Y3Rpb24gPSB0cmVlQ29uc3RydWN0aW9uU3ZnRWxlbWVudEZpeChkb2MsIGFwcGxpZWRUcmVlQ29udHJ1Y3Rpb24sIFNWR19OQU1FU1BBQ0UpO1xuXG4gIGV4cG9ydCBjb25zdCBET01UcmVlQ29uc3RydWN0aW9uID0gYXBwbGllZFRyZWVDb250cnVjdGlvbjtcbiAgZXhwb3J0IHR5cGUgRE9NVHJlZUNvbnN0cnVjdGlvbiA9IFRyZWVDb25zdHJ1Y3Rpb247XG59XG5cbmV4cG9ydCBjbGFzcyBET01DaGFuZ2VzIHtcbiAgcHJvdGVjdGVkIG5hbWVzcGFjZTogc3RyaW5nO1xuICBwcml2YXRlIHVzZWxlc3NFbGVtZW50OiBIVE1MRWxlbWVudCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGRvY3VtZW50OiBIVE1MRG9jdW1lbnQpIHtcbiAgICB0aGlzLm5hbWVzcGFjZSA9IG51bGw7XG4gICAgdGhpcy51c2VsZXNzRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIH1cblxuICBzZXRBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIHNldEF0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIHJlbW92ZUF0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nKSB7XG4gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH1cblxuICByZW1vdmVBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlTlMobmFtZXNwYWNlLCBuYW1lKTtcbiAgfVxuXG4gIGNyZWF0ZVRleHROb2RlKHRleHQ6IHN0cmluZyk6IFNpbXBsZS5UZXh0IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbiAgfVxuXG4gIGNyZWF0ZUNvbW1lbnQoZGF0YTogc3RyaW5nKTogU2ltcGxlLkNvbW1lbnQge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoZGF0YSk7XG4gIH1cblxuICBjcmVhdGVFbGVtZW50KHRhZzogc3RyaW5nLCBjb250ZXh0PzogU2ltcGxlLkVsZW1lbnQpOiBTaW1wbGUuRWxlbWVudCB7XG4gICAgbGV0IGlzRWxlbWVudEluU1ZHTmFtZXNwYWNlLCBpc0hUTUxJbnRlZ3JhdGlvblBvaW50O1xuXG4gICAgaWYgKGNvbnRleHQpIHtcbiAgICAgIGlzRWxlbWVudEluU1ZHTmFtZXNwYWNlID0gY29udGV4dC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UgfHwgdGFnID09PSAnc3ZnJztcbiAgICAgIGlzSFRNTEludGVncmF0aW9uUG9pbnQgPSBTVkdfSU5URUdSQVRJT05fUE9JTlRTW2NvbnRleHQudGFnTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzRWxlbWVudEluU1ZHTmFtZXNwYWNlID0gdGFnID09PSAnc3ZnJztcbiAgICAgIGlzSFRNTEludGVncmF0aW9uUG9pbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoaXNFbGVtZW50SW5TVkdOYW1lc3BhY2UgJiYgIWlzSFRNTEludGVncmF0aW9uUG9pbnQpIHtcbiAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IHByb3Blcmx5IGhhbmRsZSA8Zm9udD4gd2l0aCBjb2xvciwgZmFjZSwgb3JcbiAgICAgIC8vIHNpemUgYXR0cmlidXRlcywgd2hpY2ggaXMgYWxzbyBkaXNhbGxvd2VkIGJ5IHRoZSBzcGVjLiBXZSBzaG91bGQgZml4XG4gICAgICAvLyB0aGlzLlxuICAgICAgaWYgKEJMQUNLTElTVF9UQUJMRVt0YWddKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNyZWF0ZSBhICR7dGFnfSBpbnNpZGUgYW4gU1ZHIGNvbnRleHRgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OQU1FU1BBQ0UgYXMgU2ltcGxlLk5hbWVzcGFjZSwgdGFnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICAgIH1cbiAgfVxuXG4gIGluc2VydEhUTUxCZWZvcmUoX3BhcmVudDogRWxlbWVudCwgbmV4dFNpYmxpbmc6IE5vZGUsIGh0bWw6IHN0cmluZyk6IEJvdW5kcyB7XG4gICAgcmV0dXJuIGluc2VydEhUTUxCZWZvcmUodGhpcy51c2VsZXNzRWxlbWVudCwgX3BhcmVudCwgbmV4dFNpYmxpbmcsIGh0bWwpO1xuICB9XG5cbiAgaW5zZXJ0Tm9kZUJlZm9yZShwYXJlbnQ6IFNpbXBsZS5FbGVtZW50LCBub2RlOiBTaW1wbGUuTm9kZSwgcmVmZXJlbmNlOiBTaW1wbGUuTm9kZSk6IEJvdW5kcyB7XG4gICAgaWYgKGlzRG9jdW1lbnRGcmFnbWVudChub2RlKSkge1xuICAgICAgbGV0IHsgZmlyc3RDaGlsZCwgbGFzdENoaWxkIH0gPSBub2RlO1xuICAgICAgdGhpcy5pbnNlcnRCZWZvcmUocGFyZW50LCBub2RlLCByZWZlcmVuY2UpO1xuICAgICAgcmV0dXJuIG5ldyBDb25jcmV0ZUJvdW5kcyhwYXJlbnQsIGZpcnN0Q2hpbGQsIGxhc3RDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKHBhcmVudCwgbm9kZSwgcmVmZXJlbmNlKTtcbiAgICAgIHJldHVybiBuZXcgU2luZ2xlTm9kZUJvdW5kcyhwYXJlbnQsIG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGluc2VydFRleHRCZWZvcmUocGFyZW50OiBTaW1wbGUuRWxlbWVudCwgbmV4dFNpYmxpbmc6IFNpbXBsZS5Ob2RlLCB0ZXh0OiBzdHJpbmcpOiBTaW1wbGUuVGV4dCB7XG4gICAgbGV0IHRleHROb2RlID0gdGhpcy5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbiAgICB0aGlzLmluc2VydEJlZm9yZShwYXJlbnQsIHRleHROb2RlLCBuZXh0U2libGluZyk7XG4gICAgcmV0dXJuIHRleHROb2RlO1xuICB9XG5cbiAgaW5zZXJ0QmVmb3JlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBub2RlOiBTaW1wbGUuTm9kZSwgcmVmZXJlbmNlOiBTaW1wbGUuTm9kZSkge1xuICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIHJlZmVyZW5jZSk7XG4gIH1cblxuICBpbnNlcnRBZnRlcihlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbm9kZTogU2ltcGxlLk5vZGUsIHJlZmVyZW5jZTogU2ltcGxlLk5vZGUpIHtcbiAgICB0aGlzLmluc2VydEJlZm9yZShlbGVtZW50LCBub2RlLCByZWZlcmVuY2UubmV4dFNpYmxpbmcpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRIVE1MQmVmb3JlKHRoaXM6IHZvaWQsIF91c2VsZXNzOiBTaW1wbGUuSFRNTEVsZW1lbnQsIF9wYXJlbnQ6IFNpbXBsZS5FbGVtZW50LCBfbmV4dFNpYmxpbmc6IFNpbXBsZS5Ob2RlLCBodG1sOiBzdHJpbmcpOiBCb3VuZHMgeyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lXG4gIC8vIFR5cGVTY3JpcHQgdmVuZG9yZWQgYW4gb2xkIHZlcnNpb24gb2YgdGhlIERPTSBzcGVjIHdoZXJlIGBpbnNlcnRBZGphY2VudEhUTUxgXG4gIC8vIG9ubHkgZXhpc3RzIG9uIGBIVE1MRWxlbWVudGAgYnV0IG5vdCBvbiBgRWxlbWVudGAuIFdlIGFjdHVhbGx5IHdvcmsgd2l0aCB0aGVcbiAgLy8gbmV3ZXIgdmVyc2lvbiBvZiB0aGUgRE9NIEFQSSBoZXJlIChhbmQgbW9ua2V5LXBhdGNoIHRoaXMgbWV0aG9kIGluIGAuL2NvbXBhdGBcbiAgLy8gd2hlbiB3ZSBkZXRlY3Qgb2xkZXIgYnJvd3NlcnMpLiBUaGlzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCB0aGlzIGxpbWl0YXRpb24uXG4gIGxldCBwYXJlbnQgPSBfcGFyZW50IGFzIEhUTUxFbGVtZW50O1xuICBsZXQgdXNlbGVzcyA9IF91c2VsZXNzIGFzIEhUTUxFbGVtZW50O1xuICBsZXQgbmV4dFNpYmxpbmcgPSBfbmV4dFNpYmxpbmcgYXMgTm9kZTtcblxuICBsZXQgcHJldiA9IG5leHRTaWJsaW5nID8gbmV4dFNpYmxpbmcucHJldmlvdXNTaWJsaW5nIDogcGFyZW50Lmxhc3RDaGlsZDtcbiAgbGV0IGxhc3Q7XG5cbiAgaWYgKGh0bWwgPT09IG51bGwgfHwgaHRtbCA9PT0gJycpIHtcbiAgICByZXR1cm4gbmV3IENvbmNyZXRlQm91bmRzKHBhcmVudCwgbnVsbCwgbnVsbCk7XG4gIH1cblxuICBpZiAobmV4dFNpYmxpbmcgPT09IG51bGwpIHtcbiAgICBwYXJlbnQuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVFbmQnLCBodG1sKTtcbiAgICBsYXN0ID0gcGFyZW50Lmxhc3RDaGlsZDtcbiAgfSBlbHNlIGlmIChuZXh0U2libGluZyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgbmV4dFNpYmxpbmcuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVCZWdpbicsIGh0bWwpO1xuICAgIGxhc3QgPSBuZXh0U2libGluZy5wcmV2aW91c1NpYmxpbmc7XG4gIH0gZWxzZSB7XG4gICAgLy8gTm9uLWVsZW1lbnQgbm9kZXMgZG8gbm90IHN1cHBvcnQgaW5zZXJ0QWRqYWNlbnRIVE1MLCBzbyBhZGQgYW5cbiAgICAvLyBlbGVtZW50IGFuZCBjYWxsIGl0IG9uIHRoYXQgZWxlbWVudC4gVGhlbiByZW1vdmUgdGhlIGVsZW1lbnQuXG4gICAgLy9cbiAgICAvLyBUaGlzIGFsc28gcHJvdGVjdHMgRWRnZSwgSUUgYW5kIEZpcmVmb3ggdy9vIHRoZSBpbnNwZWN0b3Igb3BlblxuICAgIC8vIGZyb20gbWVyZ2luZyBhZGphY2VudCB0ZXh0IG5vZGVzLiBTZWUgLi9jb21wYXQvdGV4dC1ub2RlLW1lcmdpbmctZml4LnRzXG4gICAgcGFyZW50Lmluc2VydEJlZm9yZSh1c2VsZXNzLCBuZXh0U2libGluZyk7XG4gICAgdXNlbGVzcy5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZUJlZ2luJywgaHRtbCk7XG4gICAgbGFzdCA9IHVzZWxlc3MucHJldmlvdXNTaWJsaW5nO1xuICAgIHBhcmVudC5yZW1vdmVDaGlsZCh1c2VsZXNzKTtcbiAgfVxuXG4gIGxldCBmaXJzdCA9IHByZXYgPyBwcmV2Lm5leHRTaWJsaW5nIDogcGFyZW50LmZpcnN0Q2hpbGQ7XG4gIHJldHVybiBuZXcgQ29uY3JldGVCb3VuZHMocGFyZW50LCBmaXJzdCwgbGFzdCk7XG59XG5cbmZ1bmN0aW9uIGlzRG9jdW1lbnRGcmFnbWVudChub2RlOiBTaW1wbGUuTm9kZSk6IG5vZGUgaXMgRG9jdW1lbnRGcmFnbWVudCB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU7XG59XG5cbmxldCBoZWxwZXIgPSBET01DaGFuZ2VzO1xuXG5oZWxwZXIgPSBkb21DaGFuZ2VzTm9kZU1lcmdpbmdGaXgoZG9jLCBoZWxwZXIpO1xuaGVscGVyID0gZG9tQ2hhbmdlc1RhYmxlRWxlbWVudEZpeChkb2MsIGhlbHBlcik7XG5oZWxwZXIgPSBkb21DaGFuZ2VzU3ZnRWxlbWVudEZpeChkb2MsIGhlbHBlciwgU1ZHX05BTUVTUEFDRSk7XG5cbmV4cG9ydCBkZWZhdWx0IGhlbHBlcjtcbmV4cG9ydCBjb25zdCBET01UcmVlQ29uc3RydWN0aW9uID0gRE9NLkRPTVRyZWVDb25zdHJ1Y3Rpb247XG5leHBvcnQgdHlwZSBET01UcmVlQ29uc3RydWN0aW9uID0gRE9NLkRPTVRyZWVDb25zdHJ1Y3Rpb247XG5leHBvcnQgeyBOYW1lc3BhY2UgYXMgRE9NTmFtZXNwYWNlIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbiJdfQ== -enifed("glimmer-runtime/lib/dom/interfaces", ["exports"], function (exports) { - "use strict"; + } - var NodeType; - exports.NodeType = NodeType; - (function (NodeType) { - NodeType[NodeType["Element"] = 0] = "Element"; - NodeType[NodeType["Attribute"] = 1] = "Attribute"; - NodeType[NodeType["Text"] = 2] = "Text"; - NodeType[NodeType["CdataSection"] = 3] = "CdataSection"; - NodeType[NodeType["EntityReference"] = 4] = "EntityReference"; - NodeType[NodeType["Entity"] = 5] = "Entity"; - NodeType[NodeType["ProcessingInstruction"] = 6] = "ProcessingInstruction"; - NodeType[NodeType["Comment"] = 7] = "Comment"; - NodeType[NodeType["Document"] = 8] = "Document"; - NodeType[NodeType["DocumentType"] = 9] = "DocumentType"; - NodeType[NodeType["DocumentFragment"] = 10] = "DocumentFragment"; - NodeType[NodeType["Notation"] = 11] = "Notation"; - })(NodeType || (exports.NodeType = NodeType = {})); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvZG9tL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBV0EsUUFBWSxRQWFYLENBQUE7O0FBYkQsS0FBQSxVQUFZLFFBQVEsRUFBQTtBQUNsQixnQkFBQSxDQUFBLFFBQUEsQ0FBQSxTQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxTQUFPLENBQUE7QUFDUCxnQkFBQSxDQUFBLFFBQUEsQ0FBQSxXQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxXQUFTLENBQUE7QUFDVCxnQkFBQSxDQUFBLFFBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxNQUFJLENBQUE7QUFDSixnQkFBQSxDQUFBLFFBQUEsQ0FBQSxjQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxjQUFZLENBQUE7QUFDWixnQkFBQSxDQUFBLFFBQUEsQ0FBQSxpQkFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsaUJBQWUsQ0FBQTtBQUNmLGdCQUFBLENBQUEsUUFBQSxDQUFBLFFBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLFFBQU0sQ0FBQTtBQUNOLGdCQUFBLENBQUEsUUFBQSxDQUFBLHVCQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSx1QkFBcUIsQ0FBQTtBQUNyQixnQkFBQSxDQUFBLFFBQUEsQ0FBQSxTQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxTQUFPLENBQUE7QUFDUCxnQkFBQSxDQUFBLFFBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxVQUFRLENBQUE7QUFDUixnQkFBQSxDQUFBLFFBQUEsQ0FBQSxjQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxjQUFZLENBQUE7QUFDWixnQkFBQSxDQUFBLFFBQUEsQ0FBQSxrQkFBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLEdBQUEsa0JBQWdCLENBQUE7QUFDaEIsZ0JBQUEsQ0FBQSxRQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLEdBQUEsVUFBUSxDQUFBO0tBQ1QsQ0FBQSxDQWJXLFFBQVEsYUFBUixRQWFYLEdBYlcsUUFBUSxHQUFBLEVBQUEsQ0FBQSxDQUFBLENBYW5CIiwiZmlsZSI6ImludGVyZmFjZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGSVhNRSB9IGZyb20gJ2dsaW1tZXItdXRpbCc7XG5leHBvcnQgdHlwZSBGSVhfUkVJRklDQVRJT048VD4gPSBGSVhNRTxULCAnbmVlZHMgdG8gYmUgcmVpZmllZCBwcm9wZXJseSc+O1xuXG5leHBvcnQgdHlwZSBOYW1lc3BhY2UgPVxuICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiXG4gIHwgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCJcbiAgfCBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgfCBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxuICB8IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCJcbiAgfCBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCI7XG5cbmV4cG9ydCBlbnVtIE5vZGVUeXBlIHtcbiAgRWxlbWVudCxcbiAgQXR0cmlidXRlLFxuICBUZXh0LFxuICBDZGF0YVNlY3Rpb24sXG4gIEVudGl0eVJlZmVyZW5jZSxcbiAgRW50aXR5LFxuICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sXG4gIENvbW1lbnQsXG4gIERvY3VtZW50LFxuICBEb2N1bWVudFR5cGUsXG4gIERvY3VtZW50RnJhZ21lbnQsXG4gIE5vdGF0aW9uXG59XG5cbi8vIFRoaXMgaXMgdGhlIHN1YnNldCBvZiBET00gdXNlZCBieSB0aGUgYXBwZW5kaW5nIFZNLiBJdCBpc1xuLy8gbWVhbnQgdG8gYmUgZWZmaWNpZW50IHRvIHVzZSBvbiB0aGUgc2VydmVyIGFuZCBhbGwgb3BlcmF0aW9uc1xuLy8gbXVzdCBiZSBmdWxseSBzZXJpYWxpemFibGUgdG8gSFRNTCBhcyBhIHRyYW5zcG9ydC5cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZSB7XG4gIG5leHRTaWJsaW5nOiBOb2RlO1xuICBwcmV2aW91c1NpYmxpbmc6IE5vZGU7XG4gIHBhcmVudE5vZGU6IE5vZGU7XG4gIG5vZGVUeXBlOiBOb2RlVHlwZSB8IG51bWJlcjtcbiAgbm9kZVZhbHVlOiBzdHJpbmc7XG4gIGZpcnN0Q2hpbGQ6IE5vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jdW1lbnQgZXh0ZW5kcyBOb2RlIHtcbiAgY3JlYXRlRWxlbWVudCh0YWc6IHN0cmluZyk6IEVsZW1lbnQ7XG4gIGNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2U6IE5hbWVzcGFjZSwgdGFnOiBzdHJpbmcpOiBFbGVtZW50O1xuICBjcmVhdGVUZXh0Tm9kZSh0ZXh0OiBzdHJpbmcpOiBUZXh0O1xuICBjcmVhdGVDb21tZW50KGRhdGE6IHN0cmluZyk6IENvbW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcmFjdGVyRGF0YSBleHRlbmRzIE5vZGUge1xuICBkYXRhOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dCBleHRlbmRzIENoYXJhY3RlckRhdGEge31cblxuZXhwb3J0IGludGVyZmFjZSBDb21tZW50IGV4dGVuZHMgQ2hhcmFjdGVyRGF0YSB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnQgZXh0ZW5kcyBOb2RlIHtcbiAgbmFtZXNwYWNlVVJJOiBzdHJpbmc7XG4gIHRhZ05hbWU6IHN0cmluZztcbiAgZmlyc3RDaGlsZDogTm9kZTtcbiAgbGFzdENoaWxkOiBOb2RlO1xuICByZW1vdmVBdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogdm9pZDtcbiAgcmVtb3ZlQXR0cmlidXRlTlMobmFtZXNwYWNlVVJJOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk7XG4gIHNldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuICBzZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2VVUkk6IHN0cmluZywgcXVhbGlmaWVkTmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcbiAgaW5zZXJ0QmVmb3JlKG5vZGU6IE5vZGUsIHJlZmVyZW5jZTogTm9kZSk6IHZvaWQ7XG4gIHJlbW92ZUNoaWxkKG5vZGU6IE5vZGUpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNWR0VsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgSFRNTEVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHt9XG4iXX0= -enifed('glimmer-runtime/lib/dom/props', ['exports'], function (exports) { - /* - * @method normalizeProperty - * @param element {HTMLElement} - * @param slotName {String} - * @returns {Object} { name, type } - */ - 'use strict'; + /** + Host hook: attribute + + @param {RenderNode} renderNode + @param {Environment} env + @param {String} name + @param {any} value + + Corresponds to: + + ```hbs + <div foo={{bar}}></div> + ``` + + This hook is responsible for updating a render node + that represents an element's attribute with a value. + + It receives the name of the attribute as well as an + already-resolved value, and should update the render + node with the value if appropriate. + */ - exports.normalizeProperty = normalizeProperty; - exports.normalizePropertyValue = normalizePropertyValue; + function attribute(morph, env, scope, name, value) { + value = env.hooks.getValue(value); - function normalizeProperty(element, slotName) { - var type = undefined, - normalized = undefined; - if (slotName in element) { - normalized = slotName; - type = 'prop'; - } else { - var lower = slotName.toLowerCase(); - if (lower in element) { - type = 'prop'; - normalized = lower; - } else { - type = 'attr'; - normalized = slotName; - } - } - if (type === 'prop' && (normalized.toLowerCase() === 'style' || preferAttr(element.tagName, normalized))) { - type = 'attr'; - } - return { normalized: normalized, type: type }; + if (morph.lastValue !== value) { + morph.setContent(value); } - function normalizePropertyValue(value) { - if (value === '') { - return true; - } - return value; - } + morph.lastValue = value; + } - // properties that MUST be set as attributes, due to: - // * browser bug - // * strange spec outlier - var ATTR_OVERRIDES = { - // phantomjs < 2.0 lets you set it as a prop but won't reflect it - // back to the attribute. button.getAttribute('type') === null - BUTTON: { type: true, form: true }, - INPUT: { - // Some version of IE (like IE9) actually throw an exception - // if you set input.type = 'something-unknown' - type: true, - form: true, - // Chrome 46.0.2464.0: 'autocorrect' in document.createElement('input') === false - // Safari 8.0.7: 'autocorrect' in document.createElement('input') === false - // Mobile Safari (iOS 8.4 simulator): 'autocorrect' in document.createElement('input') === true - autocorrect: true - }, - // element.form is actually a legitimate readOnly property, that is to be - // mutated, but must be mutated by setAttribute... - SELECT: { form: true }, - OPTION: { form: true }, - TEXTAREA: { form: true }, - LABEL: { form: true }, - FIELDSET: { form: true }, - LEGEND: { form: true }, - OBJECT: { form: true } - }; - function preferAttr(tagName, propName) { - var tag = ATTR_OVERRIDES[tagName.toUpperCase()]; - return tag && tag[propName.toLowerCase()] || false; + function subexpr(env, scope, helperName, params, hash) { + var helper = env.hooks.lookupHelper(env, scope, helperName); + var result = env.hooks.invokeHelper(null, env, scope, null, params, hash, helper, {}); + if (result && 'value' in result) { + return env.hooks.getValue(result.value); } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvZG9tL3Byb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQU1BLGFBQUEsaUJBQUEsQ0FBa0MsT0FBTyxFQUFFLFFBQVEsRUFBQTtBQUNqRCxZQUFJLElBQUksWUFBQTtZQUFFLFVBQVUsWUFBQSxDQUFDO0FBRXJCLFlBQUksUUFBUSxJQUFJLE9BQU8sRUFBRTtBQUN2QixzQkFBVSxHQUFHLFFBQVEsQ0FBQztBQUN0QixnQkFBSSxHQUFHLE1BQU0sQ0FBQztTQUNmLE1BQU07QUFDTCxnQkFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ25DLGdCQUFJLEtBQUssSUFBSSxPQUFPLEVBQUU7QUFDcEIsb0JBQUksR0FBRyxNQUFNLENBQUM7QUFDZCwwQkFBVSxHQUFHLEtBQUssQ0FBQzthQUNwQixNQUFNO0FBQ0wsb0JBQUksR0FBRyxNQUFNLENBQUM7QUFDZCwwQkFBVSxHQUFHLFFBQVEsQ0FBQzthQUN2QjtTQUNGO0FBRUQsWUFBSSxJQUFJLEtBQUssTUFBTSxLQUNkLFVBQVUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLElBQ3BDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFBLEFBQUMsRUFBRTtBQUM3QyxnQkFBSSxHQUFHLE1BQU0sQ0FBQztTQUNmO0FBRUQsZUFBTyxFQUFFLFVBQVUsRUFBVixVQUFVLEVBQUUsSUFBSSxFQUFKLElBQUksRUFBRSxDQUFDO0tBQzdCOztBQUVELGFBQUEsc0JBQUEsQ0FBdUMsS0FBSyxFQUFBO0FBQzFDLFlBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtBQUNoQixtQkFBTyxJQUFJLENBQUM7U0FDYjtBQUVELGVBQU8sS0FBSyxDQUFDO0tBQ2Q7Ozs7O0FBS0QsUUFBTSxjQUFjLEdBQUc7OztBQUlyQixjQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7QUFFbEMsYUFBSyxFQUFFOzs7QUFHTCxnQkFBSSxFQUFFLElBQUk7QUFDVixnQkFBSSxFQUFFLElBQUk7Ozs7QUFJVix1QkFBVyxFQUFFLElBQUk7U0FDbEI7OztBQUlELGNBQU0sRUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDeEIsY0FBTSxFQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtBQUN4QixnQkFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtBQUN4QixhQUFLLEVBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ3hCLGdCQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ3hCLGNBQU0sRUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDeEIsY0FBTSxFQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtLQUN6QixDQUFDO0FBRUYsYUFBQSxVQUFBLENBQW9CLE9BQU8sRUFBRSxRQUFRLEVBQUE7QUFDbkMsWUFBSSxHQUFHLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELGVBQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUM7S0FDcEQiLCJmaWxlIjoicHJvcHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQG1ldGhvZCBub3JtYWxpemVQcm9wZXJ0eVxuICogQHBhcmFtIGVsZW1lbnQge0hUTUxFbGVtZW50fVxuICogQHBhcmFtIHNsb3ROYW1lIHtTdHJpbmd9XG4gKiBAcmV0dXJucyB7T2JqZWN0fSB7IG5hbWUsIHR5cGUgfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUHJvcGVydHkoZWxlbWVudCwgc2xvdE5hbWUpIHtcbiAgbGV0IHR5cGUsIG5vcm1hbGl6ZWQ7XG5cbiAgaWYgKHNsb3ROYW1lIGluIGVsZW1lbnQpIHtcbiAgICBub3JtYWxpemVkID0gc2xvdE5hbWU7XG4gICAgdHlwZSA9ICdwcm9wJztcbiAgfSBlbHNlIHtcbiAgICBsZXQgbG93ZXIgPSBzbG90TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlciBpbiBlbGVtZW50KSB7XG4gICAgICB0eXBlID0gJ3Byb3AnO1xuICAgICAgbm9ybWFsaXplZCA9IGxvd2VyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eXBlID0gJ2F0dHInO1xuICAgICAgbm9ybWFsaXplZCA9IHNsb3ROYW1lO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlID09PSAncHJvcCcgJiZcbiAgICAgIChub3JtYWxpemVkLnRvTG93ZXJDYXNlKCkgPT09ICdzdHlsZScgfHxcbiAgICAgICBwcmVmZXJBdHRyKGVsZW1lbnQudGFnTmFtZSwgbm9ybWFsaXplZCkpKSB7XG4gICAgdHlwZSA9ICdhdHRyJztcbiAgfVxuXG4gIHJldHVybiB7IG5vcm1hbGl6ZWQsIHR5cGUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BlcnR5VmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSAnJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vLyBwcm9wZXJ0aWVzIHRoYXQgTVVTVCBiZSBzZXQgYXMgYXR0cmlidXRlcywgZHVlIHRvOlxuLy8gKiBicm93c2VyIGJ1Z1xuLy8gKiBzdHJhbmdlIHNwZWMgb3V0bGllclxuY29uc3QgQVRUUl9PVkVSUklERVMgPSB7XG5cbiAgLy8gcGhhbnRvbWpzIDwgMi4wIGxldHMgeW91IHNldCBpdCBhcyBhIHByb3AgYnV0IHdvbid0IHJlZmxlY3QgaXRcbiAgLy8gYmFjayB0byB0aGUgYXR0cmlidXRlLiBidXR0b24uZ2V0QXR0cmlidXRlKCd0eXBlJykgPT09IG51bGxcbiAgQlVUVE9OOiB7IHR5cGU6IHRydWUsIGZvcm06IHRydWUgfSxcblxuICBJTlBVVDoge1xuICAgIC8vIFNvbWUgdmVyc2lvbiBvZiBJRSAobGlrZSBJRTkpIGFjdHVhbGx5IHRocm93IGFuIGV4Y2VwdGlvblxuICAgIC8vIGlmIHlvdSBzZXQgaW5wdXQudHlwZSA9ICdzb21ldGhpbmctdW5rbm93bidcbiAgICB0eXBlOiB0cnVlLFxuICAgIGZvcm06IHRydWUsXG4gICAgLy8gQ2hyb21lIDQ2LjAuMjQ2NC4wOiAnYXV0b2NvcnJlY3QnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykgPT09IGZhbHNlXG4gICAgLy8gU2FmYXJpIDguMC43OiAnYXV0b2NvcnJlY3QnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykgPT09IGZhbHNlXG4gICAgLy8gTW9iaWxlIFNhZmFyaSAoaU9TIDguNCBzaW11bGF0b3IpOiAnYXV0b2NvcnJlY3QnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykgPT09IHRydWVcbiAgICBhdXRvY29ycmVjdDogdHJ1ZVxuICB9LFxuXG4gIC8vIGVsZW1lbnQuZm9ybSBpcyBhY3R1YWxseSBhIGxlZ2l0aW1hdGUgcmVhZE9ubHkgcHJvcGVydHksIHRoYXQgaXMgdG8gYmVcbiAgLy8gbXV0YXRlZCwgYnV0IG11c3QgYmUgbXV0YXRlZCBieSBzZXRBdHRyaWJ1dGUuLi5cbiAgU0VMRUNUOiAgIHsgZm9ybTogdHJ1ZSB9LFxuICBPUFRJT046ICAgeyBmb3JtOiB0cnVlIH0sXG4gIFRFWFRBUkVBOiB7IGZvcm06IHRydWUgfSxcbiAgTEFCRUw6ICAgIHsgZm9ybTogdHJ1ZSB9LFxuICBGSUVMRFNFVDogeyBmb3JtOiB0cnVlIH0sXG4gIExFR0VORDogICB7IGZvcm06IHRydWUgfSxcbiAgT0JKRUNUOiAgIHsgZm9ybTogdHJ1ZSB9XG59O1xuXG5mdW5jdGlvbiBwcmVmZXJBdHRyKHRhZ05hbWUsIHByb3BOYW1lKSB7XG4gIGxldCB0YWcgPSBBVFRSX09WRVJSSURFU1t0YWdOYW1lLnRvVXBwZXJDYXNlKCldO1xuICByZXR1cm4gdGFnICYmIHRhZ1twcm9wTmFtZS50b0xvd2VyQ2FzZSgpXSB8fCBmYWxzZTtcbn1cbiJdfQ== -enifed('glimmer-runtime/lib/dom/sanitized-values', ['exports', 'glimmer-runtime/lib/compiled/opcodes/content', 'glimmer-runtime/lib/upsert'], function (exports, _glimmerRuntimeLibCompiledOpcodesContent, _glimmerRuntimeLibUpsert) { - 'use strict'; + } - exports.requiresSanitization = requiresSanitization; - exports.sanitizeAttributeValue = sanitizeAttributeValue; + /** + Host Hook: get + + @param {Environment} env + @param {Scope} scope + @param {String} path + + Corresponds to: + + ```hbs + {{foo.bar}} + ^ + + {{helper foo.bar key=value}} + ^ ^ + ``` + + This hook is the "leaf" hook of the system. It is used to + resolve a path relative to the current scope. + */ - var badProtocols = ['javascript:', 'vbscript:']; - var badTags = ['A', 'BODY', 'LINK', 'IMG', 'IFRAME', 'BASE', 'FORM']; - var badTagsForDataURI = ['EMBED']; - var badAttributes = ['href', 'src', 'background', 'action']; - var badAttributesForDataURI = ['src']; - function has(array, item) { - return array.indexOf(item) !== -1; + function get(env, scope, path) { + if (path === '') { + return scope.self; } - function checkURI(tagName, attribute) { - return (tagName === null || has(badTags, tagName)) && has(badAttributes, attribute); - } - function checkDataURI(tagName, attribute) { - return has(badTagsForDataURI, tagName) && has(badAttributesForDataURI, attribute); - } - function requiresSanitization(tagName, attribute) { - return checkURI(tagName, attribute) || checkDataURI(tagName, attribute); - } + var keys = path.split('.'); + var value = env.hooks.getRoot(scope, keys[0])[0]; - function sanitizeAttributeValue(env, element, attribute, value) { - var tagName = undefined; - if (value === null || value === undefined) { - return value; - } - if (_glimmerRuntimeLibUpsert.isSafeString(value)) { - return value.toHTML(); - } - if (!element) { - tagName = null; - } else { - tagName = element.tagName.toUpperCase(); - } - var str = _glimmerRuntimeLibCompiledOpcodesContent.normalizeTextValue(value); - if (checkURI(tagName, attribute)) { - var protocol = env.protocolForURL(str); - if (has(badProtocols, protocol)) { - return 'unsafe:' + str; - } - } - if (checkDataURI(tagName, attribute)) { - return 'unsafe:' + str; - } - return str; + for (var i = 1; i < keys.length; i++) { + if (value) { + value = env.hooks.getChild(value, keys[i]); + } else { + break; + } } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvZG9tL3Nhbml0aXplZC12YWx1ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBTUEsUUFBTSxZQUFZLEdBQUcsQ0FDbkIsYUFBYSxFQUNiLFdBQVcsQ0FDWixDQUFDO0FBRUYsUUFBTSxPQUFPLEdBQUcsQ0FDZCxHQUFHLEVBQ0gsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLENBQ1AsQ0FBQztBQUVGLFFBQU0saUJBQWlCLEdBQUcsQ0FDeEIsT0FBTyxDQUNSLENBQUM7QUFFRixRQUFNLGFBQWEsR0FBRyxDQUNwQixNQUFNLEVBQ04sS0FBSyxFQUNMLFlBQVksRUFDWixRQUFRLENBQ1QsQ0FBQztBQUVGLFFBQU0sdUJBQXVCLEdBQUcsQ0FDOUIsS0FBSyxDQUNOLENBQUM7QUFFRixhQUFBLEdBQUEsQ0FBYSxLQUFvQixFQUFFLElBQVksRUFBQTtBQUM3QyxlQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDbkM7QUFFRCxhQUFBLFFBQUEsQ0FBa0IsT0FBZSxFQUFFLFNBQWlCLEVBQUE7QUFDbEQsZUFBTyxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQSxJQUFLLEdBQUcsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDckY7QUFFRCxhQUFBLFlBQUEsQ0FBc0IsT0FBZSxFQUFFLFNBQWlCLEVBQUE7QUFDdEQsZUFBTyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLHVCQUF1QixFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ25GOztBQUVELGFBQUEsb0JBQUEsQ0FBcUMsT0FBZSxFQUFFLFNBQWlCLEVBQUE7QUFDckUsZUFBTyxRQUFRLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDekU7O0FBRUQsYUFBQSxzQkFBQSxDQUF1QyxHQUFnQixFQUFFLE9BQXVCLEVBQUUsU0FBaUIsRUFBRSxLQUFhLEVBQUE7QUFDaEgsWUFBSSxPQUFPLFlBQUEsQ0FBQztBQUVaLFlBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO0FBQ3pDLG1CQUFPLEtBQUssQ0FBQztTQUNkO0FBRUQsWUFBSSx5QkF6REcsWUFBWSxDQXlERixLQUFLLENBQUMsRUFBRTtBQUN2QixtQkFBTyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDdkI7QUFFRCxZQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osbUJBQU8sR0FBRyxJQUFJLENBQUM7U0FDaEIsTUFBTTtBQUNMLG1CQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN6QztBQUVELFlBQUksR0FBRyxHQUFHLHlDQXBFSCxrQkFBa0IsQ0FvRUksS0FBSyxDQUFDLENBQUM7QUFFcEMsWUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFO0FBQ2hDLGdCQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLGdCQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLEVBQUU7QUFDL0IsbUNBQWlCLEdBQUcsQ0FBRzthQUN4QjtTQUNGO0FBRUQsWUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFO0FBQ3BDLCtCQUFpQixHQUFHLENBQUc7U0FDeEI7QUFFRCxlQUFPLEdBQUcsQ0FBQztLQUNaIiwiZmlsZSI6InNhbml0aXplZC12YWx1ZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGFxdWUgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuaW1wb3J0IHsgbm9ybWFsaXplVGV4dFZhbHVlIH0gZnJvbSAnLi4vY29tcGlsZWQvb3Bjb2Rlcy9jb250ZW50JztcbmltcG9ydCB7IGlzU2FmZVN0cmluZyB9IGZyb20gJy4uL3Vwc2VydCc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCAqIGFzIFNpbXBsZSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5jb25zdCBiYWRQcm90b2NvbHMgPSBbXG4gICdqYXZhc2NyaXB0OicsXG4gICd2YnNjcmlwdDonXG5dO1xuXG5jb25zdCBiYWRUYWdzID0gW1xuICAnQScsXG4gICdCT0RZJyxcbiAgJ0xJTksnLFxuICAnSU1HJyxcbiAgJ0lGUkFNRScsXG4gICdCQVNFJyxcbiAgJ0ZPUk0nXG5dO1xuXG5jb25zdCBiYWRUYWdzRm9yRGF0YVVSSSA9IFtcbiAgJ0VNQkVEJ1xuXTtcblxuY29uc3QgYmFkQXR0cmlidXRlcyA9IFtcbiAgJ2hyZWYnLFxuICAnc3JjJyxcbiAgJ2JhY2tncm91bmQnLFxuICAnYWN0aW9uJ1xuXTtcblxuY29uc3QgYmFkQXR0cmlidXRlc0ZvckRhdGFVUkkgPSBbXG4gICdzcmMnXG5dO1xuXG5mdW5jdGlvbiBoYXMoYXJyYXk6IEFycmF5PHN0cmluZz4sIGl0ZW06IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVVJJKHRhZ05hbWU6IHN0cmluZywgYXR0cmlidXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuICh0YWdOYW1lID09PSBudWxsIHx8IGhhcyhiYWRUYWdzLCB0YWdOYW1lKSkgJiYgaGFzKGJhZEF0dHJpYnV0ZXMsIGF0dHJpYnV0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrRGF0YVVSSSh0YWdOYW1lOiBzdHJpbmcsIGF0dHJpYnV0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBoYXMoYmFkVGFnc0ZvckRhdGFVUkksIHRhZ05hbWUpICYmIGhhcyhiYWRBdHRyaWJ1dGVzRm9yRGF0YVVSSSwgYXR0cmlidXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVzU2FuaXRpemF0aW9uKHRhZ05hbWU6IHN0cmluZywgYXR0cmlidXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNoZWNrVVJJKHRhZ05hbWUsIGF0dHJpYnV0ZSkgfHwgY2hlY2tEYXRhVVJJKHRhZ05hbWUsIGF0dHJpYnV0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUF0dHJpYnV0ZVZhbHVlKGVudjogRW52aXJvbm1lbnQsIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBhdHRyaWJ1dGU6IHN0cmluZywgdmFsdWU6IE9wYXF1ZSk6IE9wYXF1ZSB7XG4gIGxldCB0YWdOYW1lO1xuXG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKGlzU2FmZVN0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUudG9IVE1MKCk7XG4gIH1cblxuICBpZiAoIWVsZW1lbnQpIHtcbiAgICB0YWdOYW1lID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBsZXQgc3RyID0gbm9ybWFsaXplVGV4dFZhbHVlKHZhbHVlKTtcblxuICBpZiAoY2hlY2tVUkkodGFnTmFtZSwgYXR0cmlidXRlKSkge1xuICAgIGxldCBwcm90b2NvbCA9IGVudi5wcm90b2NvbEZvclVSTChzdHIpO1xuICAgIGlmIChoYXMoYmFkUHJvdG9jb2xzLCBwcm90b2NvbCkpIHtcbiAgICAgIHJldHVybiBgdW5zYWZlOiR7c3RyfWA7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNoZWNrRGF0YVVSSSh0YWdOYW1lLCBhdHRyaWJ1dGUpKSB7XG4gICAgcmV0dXJuIGB1bnNhZmU6JHtzdHJ9YDtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG4iXX0= -enifed('glimmer-runtime/lib/environment', ['exports', 'glimmer-runtime/lib/references', 'glimmer-runtime/lib/dom/attribute-managers', 'glimmer-util', 'glimmer-runtime/lib/syntax/core', 'glimmer-runtime/lib/syntax/builtins/if', 'glimmer-runtime/lib/syntax/builtins/unless', 'glimmer-runtime/lib/syntax/builtins/with', 'glimmer-runtime/lib/syntax/builtins/each'], function (exports, _glimmerRuntimeLibReferences, _glimmerRuntimeLibDomAttributeManagers, _glimmerUtil, _glimmerRuntimeLibSyntaxCore, _glimmerRuntimeLibSyntaxBuiltinsIf, _glimmerRuntimeLibSyntaxBuiltinsUnless, _glimmerRuntimeLibSyntaxBuiltinsWith, _glimmerRuntimeLibSyntaxBuiltinsEach) { - 'use strict'; - var Scope = (function () { - function Scope(references) { - var callerScope = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; + return value; + } - this.callerScope = null; - this.slots = references; - this.callerScope = callerScope; - } - - Scope.root = function root(self) { - var size = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1]; - - var refs = new Array(size + 1); - for (var i = 0; i <= size; i++) { - refs[i] = _glimmerRuntimeLibReferences.UNDEFINED_REFERENCE; - } - return new Scope(refs).init({ self: self }); - }; - - Scope.prototype.init = function init(_ref) { - var self = _ref.self; - - this.slots[0] = self; - return this; - }; - - Scope.prototype.getSelf = function getSelf() { - return this.slots[0]; - }; - - Scope.prototype.getSymbol = function getSymbol(symbol) { - return this.slots[symbol]; - }; - - Scope.prototype.getBlock = function getBlock(symbol) { - return this.slots[symbol]; - }; - - Scope.prototype.bindSymbol = function bindSymbol(symbol, value) { - this.slots[symbol] = value; - }; - - Scope.prototype.bindBlock = function bindBlock(symbol, value) { - this.slots[symbol] = value; - }; - - Scope.prototype.bindCallerScope = function bindCallerScope(scope) { - this.callerScope = scope; - }; - - Scope.prototype.getCallerScope = function getCallerScope() { - return this.callerScope; - }; - - Scope.prototype.child = function child() { - return new Scope(this.slots.slice(), this.callerScope); - }; - - return Scope; - })(); - - exports.Scope = Scope; - - var Environment = (function () { - function Environment(_ref2) { - var appendOperations = _ref2.appendOperations; - var updateOperations = _ref2.updateOperations; - - this.scheduledInstallManagers = null; - this.scheduledInstallModifiers = null; - this.scheduledUpdateModifierManagers = null; - this.scheduledUpdateModifiers = null; - this.createdComponents = null; - this.createdManagers = null; - this.updatedComponents = null; - this.updatedManagers = null; - this.destructors = null; - this.appendOperations = appendOperations; - this.updateOperations = updateOperations; - } - - Environment.prototype.toConditionalReference = function toConditionalReference(reference) { - return new _glimmerRuntimeLibReferences.ConditionalReference(reference); - }; - - Environment.prototype.getAppendOperations = function getAppendOperations() { - return this.appendOperations; - }; - - Environment.prototype.getDOM = function getDOM() { - return this.updateOperations; - }; - - Environment.prototype.getIdentity = function getIdentity(object) { - return _glimmerUtil.ensureGuid(object) + ''; - }; - - Environment.prototype.statement = function statement(_statement, symbolTable) { - return this.refineStatement(parseStatement(_statement), symbolTable) || _statement; - }; - - Environment.prototype.refineStatement = function refineStatement(statement, symbolTable) { - var isSimple = statement.isSimple; - var isBlock = statement.isBlock; - var key = statement.key; - var args = statement.args; - var templates = statement.templates; - - if (isSimple && isBlock) { - switch (key) { - case 'each': - return new _glimmerRuntimeLibSyntaxBuiltinsEach.default({ args: args, templates: templates }); - case 'if': - return new _glimmerRuntimeLibSyntaxBuiltinsIf.default({ args: args, templates: templates }); - case 'with': - return new _glimmerRuntimeLibSyntaxBuiltinsWith.default({ args: args, templates: templates }); - case 'unless': - return new _glimmerRuntimeLibSyntaxBuiltinsUnless.default({ args: args, templates: templates }); - } - } - }; - - Environment.prototype.begin = function begin() { - this.createdComponents = []; - this.createdManagers = []; - this.updatedComponents = []; - this.updatedManagers = []; - this.destructors = []; - this.scheduledInstallManagers = []; - this.scheduledInstallModifiers = []; - this.scheduledUpdateModifierManagers = []; - this.scheduledUpdateModifiers = []; - }; - - Environment.prototype.didCreate = function didCreate(component, manager) { - this.createdComponents.push(component); - this.createdManagers.push(manager); - }; - - Environment.prototype.didUpdate = function didUpdate(component, manager) { - this.updatedComponents.push(component); - this.updatedManagers.push(manager); - }; - - Environment.prototype.scheduleInstallModifier = function scheduleInstallModifier(modifier, manager) { - this.scheduledInstallManagers.push(manager); - this.scheduledInstallModifiers.push(modifier); - }; - - Environment.prototype.scheduleUpdateModifier = function scheduleUpdateModifier(modifier, manager) { - this.scheduledUpdateModifierManagers.push(manager); - this.scheduledUpdateModifiers.push(modifier); - }; - - Environment.prototype.didDestroy = function didDestroy(d) { - this.destructors.push(d); - }; - - Environment.prototype.commit = function commit() { - for (var i = 0; i < this.createdComponents.length; i++) { - var component = this.createdComponents[i]; - var manager = this.createdManagers[i]; - manager.didCreate(component); - } - for (var i = 0; i < this.updatedComponents.length; i++) { - var component = this.updatedComponents[i]; - var manager = this.updatedManagers[i]; - manager.didUpdate(component); - } - for (var i = 0; i < this.destructors.length; i++) { - this.destructors[i].destroy(); - } - for (var i = 0; i < this.scheduledInstallManagers.length; i++) { - var manager = this.scheduledInstallManagers[i]; - var modifier = this.scheduledInstallModifiers[i]; - manager.install(modifier); - } - for (var i = 0; i < this.scheduledUpdateModifierManagers.length; i++) { - var manager = this.scheduledUpdateModifierManagers[i]; - var modifier = this.scheduledUpdateModifiers[i]; - manager.update(modifier); - } - this.createdComponents = null; - this.createdManagers = null; - this.updatedComponents = null; - this.updatedManagers = null; - this.destructors = null; - this.scheduledInstallManagers = null; - this.scheduledInstallModifiers = null; - this.scheduledUpdateModifierManagers = null; - this.scheduledUpdateModifiers = null; - }; - - Environment.prototype.attributeFor = function attributeFor(element, attr, isTrusting, namespace) { - return _glimmerRuntimeLibDomAttributeManagers.defaultManagers(element, attr, isTrusting, namespace); - }; - - return Environment; - })(); - - exports.Environment = Environment; - exports.default = Environment; - - function parseStatement(statement) { - var type = statement.type; - var block = type === 'block' ? statement : null; - var append = type === 'optimized-append' ? statement : null; - var modifier = type === 'modifier' ? statement : null; - var appendType = append && append.value.type; - var args = undefined; - var path = undefined; - if (block) { - args = block.args; - path = block.path; - } else if (append && (appendType === 'unknown' || appendType === 'get')) { - var appendValue = append.value; - args = _glimmerRuntimeLibSyntaxCore.Args.empty(); - path = appendValue.ref.parts; - } else if (append && append.value.type === 'helper') { - var helper = append.value; - args = helper.args; - path = helper.ref.parts; - } else if (modifier) { - path = modifier.path; - args = modifier.args; - } - var key = undefined, - isSimple = undefined; - if (path) { - isSimple = path.length === 1; - key = path[0]; - } - return { - isSimple: isSimple, - path: path, - key: key, - args: args, - appendType: appendType, - original: statement, - isInline: !!append, - isBlock: !!block, - isModifier: !!modifier, - templates: block && block.templates - }; + function getRoot(scope, key) { + if (scope.localPresent[key]) { + return [scope.locals[key]]; + } else if (scope.self) { + return [scope.self[key]]; + } else { + return [undefined]; } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O1FBMkRBLEtBQUE7QUFlRSxpQkFmRixLQUFBLENBZWMsVUFBdUIsRUFBMkI7Z0JBQXpCLFdBQVcseURBQVUsSUFBSTs7QUFGdEQsZ0JBQUEsQ0FBQSxXQUFXLEdBQVUsSUFBSSxDQUFDO0FBR2hDLGdCQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQztBQUN4QixnQkFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7U0FDaEM7O0FBbEJILGFBQUEsQ0FDUyxJQUFJLEdBQUEsY0FBQyxJQUEyQixFQUFVO2dCQUFSLElBQUkseURBQUcsQ0FBQzs7QUFDL0MsZ0JBQUksSUFBSSxHQUE0QixJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFeEQsaUJBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDOUIsb0JBQUksQ0FBQyxDQUFDLENBQUMsZ0NBekRKLG1CQUFtQixBQXlETyxDQUFDO2FBQy9CO0FBRUQsbUJBQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFKLElBQUksRUFBRSxDQUFDLENBQUM7U0FDdkM7O0FBVEgsYUFBQSxXQW9CRSxJQUFJLEdBQUEsY0FBQyxJQUF5QyxFQUFBO2dCQUF2QyxJQUFJLEdBQU4sSUFBeUMsQ0FBdkMsSUFBSTs7QUFDVCxnQkFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckIsbUJBQU8sSUFBSSxDQUFDO1NBQ2I7O0FBdkJILGFBQUEsV0F5QkUsT0FBTyxHQUFBLG1CQUFBO0FBQ0wsbUJBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQTBCLENBQUM7U0FDL0M7O0FBM0JILGFBQUEsV0E2QkUsU0FBUyxHQUFBLG1CQUFD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Q0FBQyxJQUFJLENBQUM7U0FDdEI7QUFFRCxZQUFJLEdBQVcsWUFBQTtZQUFFLFFBQWlCLFlBQUEsQ0FBQztBQUVuQyxZQUFJLElBQUksRUFBRTtBQUNSLG9CQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDN0IsZUFBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNmO0FBRUQsZUFBTztBQUNMLG9CQUFRLEVBQVIsUUFBUTtBQUNSLGdCQUFJLEVBQUosSUFBSTtBQUNKLGVBQUcsRUFBSCxHQUFHO0FBQ0gsZ0JBQUksRUFBSixJQUFJO0FBQ0osc0JBQVUsRUFBVixVQUFVO0FBQ1Ysb0JBQVEsRUFBRSxTQUFTO0FBQ25CLG9CQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU07QUFDbEIsbUJBQU8sRUFBRSxDQUFDLENBQUMsS0FBSztBQUNoQixzQkFBVSxFQUFFLENBQUMsQ0FBQyxRQUFRO0FBQ3RCLHFCQUFTLEVBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQyxTQUFTO1NBQ3BDLENBQUM7S0FDTCIsImZpbGUiOiJlbnZpcm9ubWVudC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YXRlbWVudCBhcyBTdGF0ZW1lbnRTeW50YXggfSBmcm9tICcuL3N5bnRheCc7XG5cbmltcG9ydCBTeW1ib2xUYWJsZSBmcm9tICcuL3N5bWJvbC10YWJsZSc7XG5cbmltcG9ydCAqIGFzIFNpbXBsZSBmcm9tICcuL2RvbS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERPTUNoYW5nZXMsIERPTVRyZWVDb25zdHJ1Y3Rpb24gfSBmcm9tICcuL2RvbS9oZWxwZXInO1xuaW1wb3J0IHsgUmVmZXJlbmNlLCBQYXRoUmVmZXJlbmNlLCBPcGFxdWVJdGVyYWJsZSB9IGZyb20gJ2dsaW1tZXItcmVmZXJlbmNlJztcbmltcG9ydCB7IFVOREVGSU5FRF9SRUZFUkVOQ0UsIENvbmRpdGlvbmFsUmVmZXJlbmNlIH0gZnJvbSAnLi9yZWZlcmVuY2VzJztcbmltcG9ydCB7XG4gIGRlZmF1bHRNYW5hZ2VycyxcbiAgQXR0cmlidXRlTWFuYWdlclxufSBmcm9tICcuL2RvbS9hdHRyaWJ1dGUtbWFuYWdlcnMnO1xuXG5pbXBvcnQge1xuICBQYXJ0aWFsRGVmaW5pdGlvblxufSBmcm9tICcuL3BhcnRpYWwnO1xuXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbXBvbmVudE1hbmFnZXIsXG4gIENvbXBvbmVudERlZmluaXRpb25cbn0gZnJvbSAnLi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7XG4gIE1vZGlmaWVyTWFuYWdlclxufSBmcm9tICcuL21vZGlmaWVyL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQge1xuICBEZXN0cm95YWJsZSxcbiAgT3BhcXVlLFxuICBIYXNHdWlkLFxuICBlbnN1cmVHdWlkXG59IGZyb20gJ2dsaW1tZXItdXRpbCc7XG5cbmltcG9ydCB7XG4gIFRlbXBsYXRlTWV0YVxufSBmcm9tICdnbGltbWVyLXdpcmUtZm9ybWF0JztcblxuaW1wb3J0IHsgRXZhbHVhdGVkQXJncyB9IGZyb20gJy4vY29tcGlsZWQvZXhwcmVzc2lvbnMvYXJncyc7XG5cbmltcG9ydCB7IElubGluZUJsb2NrIH0gZnJvbSAnLi9jb21waWxlZC9ibG9ja3MnO1xuXG5pbXBvcnQgKiBhcyBTeW50YXggZnJvbSAnLi9zeW50YXgvY29yZSc7XG5cbmltcG9ydCBJZlN5bnRheCBmcm9tICcuL3N5bnRheC9idWlsdGlucy9pZic7XG5pbXBvcnQgVW5sZXNzU3ludGF4IGZyb20gJy4vc3ludGF4L2J1aWx0aW5zL3VubGVzcyc7XG5pbXBvcnQgV2l0aFN5bnRheCBmcm9tICcuL3N5bnRheC9idWlsdGlucy93aXRoJztcbmltcG9ydCBFYWNoU3ludGF4IGZyb20gJy4vc3ludGF4L2J1aWx0aW5zL2VhY2gnO1xuXG5pbXBvcnQgeyBQdWJsaWNWTSB9IGZyb20gJy4vdm0vYXBwZW5kJztcblxuZXhwb3J0IHR5cGUgU2NvcGVTbG90ID0gUGF0aFJlZmVyZW5jZTxPcGFxdWU+IHwgSW5saW5lQmxvY2s7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY1Njb3BlIHtcbiAgZ2V0KGtleTogc3RyaW5nKTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+O1xuICBzZXQoa2V5OiBzdHJpbmcsIHJlZmVyZW5jZTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+KTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+O1xuICBjaGlsZCgpOiBEeW5hbWljU2NvcGU7XG59XG5cbmV4cG9ydCBjbGFzcyBTY29wZSB7XG4gIHN0YXRpYyByb290KHNlbGY6IFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgc2l6ZSA9IDApIHtcbiAgICBsZXQgcmVmczogUGF0aFJlZmVyZW5jZTxPcGFxdWU+W10gPSBuZXcgQXJyYXkoc2l6ZSArIDEpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gc2l6ZTsgaSsrKSB7XG4gICAgICByZWZzW2ldID0gVU5ERUZJTkVEX1JFRkVSRU5DRTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNjb3BlKHJlZnMpLmluaXQoeyBzZWxmIH0pO1xuICB9XG5cbiAgLy8gdGhlIDB0aCBzbG90IGlzIGBzZWxmYFxuICBwcml2YXRlIHNsb3RzOiBTY29wZVNsb3RbXTtcbiAgcHJpdmF0ZSBjYWxsZXJTY29wZTogU2NvcGUgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHJlZmVyZW5jZXM6IFNjb3BlU2xvdFtdLCBjYWxsZXJTY29wZTogU2NvcGUgPSBudWxsKSB7XG4gICAgdGhpcy5zbG90cyA9IHJlZmVyZW5jZXM7XG4gICAgdGhpcy5jYWxsZXJTY29wZSA9IGNhbGxlclNjb3BlO1xuICB9XG5cbiAgaW5pdCh7IHNlbGYgfTogeyBzZWxmOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4gfSk6IHRoaXMge1xuICAgIHRoaXMuc2xvdHNbMF0gPSBzZWxmO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0U2VsZigpOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4ge1xuICAgIHJldHVybiB0aGlzLnNsb3RzWzBdIGFzIFBhdGhSZWZlcmVuY2U8T3BhcXVlPjtcbiAgfVxuXG4gIGdldFN5bWJvbChzeW1ib2w6IG51bWJlcik6IFBhdGhSZWZlcmVuY2U8T3BhcXVlPiB7XG4gICAgcmV0dXJuIHRoaXMuc2xvdHNbc3ltYm9sXSBhcyBQYXRoUmVmZXJlbmNlPE9wYXF1ZT47XG4gIH1cblxuICBnZXRCbG9jayhzeW1ib2w6IG51bWJlcik6IElubGluZUJsb2NrIHtcbiAgICByZXR1cm4gdGhpcy5zbG90c1tzeW1ib2xdIGFzIElubGluZUJsb2NrO1xuICB9XG5cbiAgYmluZFN5bWJvbChzeW1ib2w6IG51bWJlciwgdmFsdWU6IFBhdGhSZWZlcmVuY2U8T3BhcXVlPikge1xuICAgIHRoaXMuc2xvdHNbc3ltYm9sXSA9IHZhbHVlO1xuICB9XG5cbiAgYmluZEJsb2NrKHN5bWJvbDogbnVtYmVyLCB2YWx1ZTogSW5saW5lQmxvY2spIHtcbiAgICB0aGlzLnNsb3RzW3N5bWJvbF0gPSB2YWx1ZTtcbiAgfVxuXG4gIGJpbmRDYWxsZXJTY29wZShzY29wZTogU2NvcGUpIHtcbiAgICB0aGlzLmNhbGxlclNjb3BlID0gc2NvcGU7XG4gIH1cblxuICBnZXRDYWxsZXJTY29wZSgpOiBTY29wZSB7XG4gICAgcmV0dXJuIHRoaXMuY2FsbGVyU2NvcGU7XG4gIH1cblxuICBjaGlsZCgpOiBTY29wZSB7XG4gICAgcmV0dXJuIG5ldyBTY29wZSh0aGlzLnNsb3RzLnNsaWNlKCksIHRoaXMuY2FsbGVyU2NvcGUpO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIHByb3RlY3RlZCB1cGRhdGVPcGVyYXRpb25zOiBET01DaGFuZ2VzO1xuICBwcm90ZWN0ZWQgYXBwZW5kT3BlcmF0aW9uczogRE9NVHJlZUNvbnN0cnVjdGlvbjtcbiAgcHJpdmF0ZSBzY2hlZHVsZWRJbnN0YWxsTWFuYWdlcnM6IE1vZGlmaWVyTWFuYWdlcjxPcGFxdWU+W10gPSBudWxsO1xuICBwcml2YXRlIHNjaGVkdWxlZEluc3RhbGxNb2RpZmllcnM6IE9iamVjdFtdID0gbnVsbDtcbiAgcHJpdmF0ZSBzY2hlZHVsZWRVcGRhdGVNb2RpZmllck1hbmFnZXJzOiBNb2RpZmllck1hbmFnZXI8T3BhcXVlPltdID0gbnVsbDtcbiAgcHJpdmF0ZSBzY2hlZHVsZWRVcGRhdGVNb2RpZmllcnM6IE9iamVjdFtdID0gbnVsbDtcbiAgcHJpdmF0ZSBjcmVhdGVkQ29tcG9uZW50czogQ29tcG9uZW50W10gPSBudWxsO1xuICBwcml2YXRlIGNyZWF0ZWRNYW5hZ2VyczogQ29tcG9uZW50TWFuYWdlcjxDb21wb25lbnQ+W10gPSBudWxsO1xuICBwcml2YXRlIHVwZGF0ZWRDb21wb25lbnRzOiBDb21wb25lbnRbXSA9IG51bGw7XG4gIHByaXZhdGUgdXBkYXRlZE1hbmFnZXJzOiBDb21wb25lbnRNYW5hZ2VyPENvbXBvbmVudD5bXSA9IG51bGw7XG4gIHByaXZhdGUgZGVzdHJ1Y3RvcnM6IERlc3Ryb3lhYmxlW10gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHsgYXBwZW5kT3BlcmF0aW9ucywgdXBkYXRlT3BlcmF0aW9ucyB9OiB7IGFwcGVuZE9wZXJhdGlvbnM6IERPTVRyZWVDb25zdHJ1Y3Rpb24sIHVwZGF0ZU9wZXJhdGlvbnM6IERPTUNoYW5nZXMgfSkge1xuICAgIHRoaXMuYXBwZW5kT3BlcmF0aW9ucyA9IGFwcGVuZE9wZXJhdGlvbnM7XG4gICAgdGhpcy51cGRhdGVPcGVyYXRpb25zID0gdXBkYXRlT3BlcmF0aW9ucztcbiAgfVxuXG4gIHRvQ29uZGl0aW9uYWxSZWZlcmVuY2UocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbFJlZmVyZW5jZShyZWZlcmVuY2UpO1xuICB9XG5cbiAgYWJzdHJhY3QgaXRlcmFibGVGb3IocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgYXJnczogRXZhbHVhdGVkQXJncyk6IE9wYXF1ZUl0ZXJhYmxlO1xuICBhYnN0cmFjdCBwcm90b2NvbEZvclVSTChzOiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgZ2V0QXBwZW5kT3BlcmF0aW9ucygpOiBET01UcmVlQ29uc3RydWN0aW9uIHsgcmV0dXJuIHRoaXMuYXBwZW5kT3BlcmF0aW9uczsgfVxuICBnZXRET00oKTogRE9NQ2hhbmdlcyB7IHJldHVybiB0aGlzLnVwZGF0ZU9wZXJhdGlvbnM7IH1cblxuICBnZXRJZGVudGl0eShvYmplY3Q6IEhhc0d1aWQpOiBzdHJpbmcge1xuICAgIHJldHVybiBlbnN1cmVHdWlkKG9iamVjdCkgKyAnJztcbiAgfVxuXG4gIHN0YXRlbWVudChzdGF0ZW1lbnQ6IFN0YXRlbWVudFN5bnRheCwgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKTogU3RhdGVtZW50U3ludGF4IHtcbiAgICByZXR1cm4gdGhpcy5yZWZpbmVTdGF0ZW1lbnQocGFyc2VTdGF0ZW1lbnQoc3RhdGVtZW50KSwgc3ltYm9sVGFibGUpIHx8IHN0YXRlbWVudDtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWZpbmVTdGF0ZW1lbnQoc3RhdGVtZW50OiBQYXJzZWRTdGF0ZW1lbnQsIHN5bWJvbFRhYmxlOiBTeW1ib2xUYWJsZSk6IFN0YXRlbWVudFN5bnRheCB7XG4gICAgbGV0IHtcbiAgICAgIGlzU2ltcGxlLFxuICAgICAgaXNCbG9jayxcbiAgICAgIGtleSxcbiAgICAgIGFyZ3MsXG4gICAgICB0ZW1wbGF0ZXNcbiAgICB9ID0gc3RhdGVtZW50O1xuXG4gICAgaWYgKGlzU2ltcGxlICYmIGlzQmxvY2spIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgJ2VhY2gnOlxuICAgICAgICAgIHJldHVybiBuZXcgRWFjaFN5bnRheCh7IGFyZ3MsIHRlbXBsYXRlcyB9KTtcbiAgICAgICAgY2FzZSAnaWYnOlxuICAgICAgICAgIHJldHVybiBuZXcgSWZTeW50YXgoeyBhcmdzLCB0ZW1wbGF0ZXMgfSk7XG4gICAgICAgIGNhc2UgJ3dpdGgnOlxuICAgICAgICAgIHJldHVybiBuZXcgV2l0aFN5bnRheCh7IGFyZ3MsIHRlbXBsYXRlcyB9KTtcbiAgICAgICAgY2FzZSAndW5sZXNzJzpcbiAgICAgICAgICByZXR1cm4gbmV3IFVubGVzc1N5bnRheCh7IGFyZ3MsIHRlbXBsYXRlcyB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBiZWdpbigpIHtcbiAgICB0aGlzLmNyZWF0ZWRDb21wb25lbnRzID0gW107XG4gICAgdGhpcy5jcmVhdGVkTWFuYWdlcnMgPSBbXTtcbiAgICB0aGlzLnVwZGF0ZWRDb21wb25lbnRzID0gW107XG4gICAgdGhpcy51cGRhdGVkTWFuYWdlcnMgPSBbXTtcbiAgICB0aGlzLmRlc3RydWN0b3JzID0gW107XG4gICAgdGhpcy5zY2hlZHVsZWRJbnN0YWxsTWFuYWdlcnMgPSBbXTtcbiAgICB0aGlzLnNjaGVkdWxlZEluc3RhbGxNb2RpZmllcnMgPSBbXTtcbiAgICB0aGlzLnNjaGVkdWxlZFVwZGF0ZU1vZGlmaWVyTWFuYWdlcnMgPSBbXTtcbiAgICB0aGlzLnNjaGVkdWxlZFVwZGF0ZU1vZGlmaWVycyA9IFtdO1xuICB9XG5cbiAgZGlkQ3JlYXRlPFQ+KGNvbXBvbmVudDogVCwgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxUPikge1xuICAgIHRoaXMuY3JlYXRlZENvbXBvbmVudHMucHVzaChjb21wb25lbnQgYXMgYW55KTtcbiAgICB0aGlzLmNyZWF0ZWRNYW5hZ2Vycy5wdXNoKG1hbmFnZXIgYXMgYW55KTtcbiAgfVxuXG4gIGRpZFVwZGF0ZTxUPihjb21wb25lbnQ6IFQsIG1hbmFnZXI6IENvbXBvbmVudE1hbmFnZXI8VD4pIHtcbiAgICB0aGlzLnVwZGF0ZWRDb21wb25lbnRzLnB1c2goY29tcG9uZW50IGFzIGFueSk7XG4gICAgdGhpcy51cGRhdGVkTWFuYWdlcnMucHVzaChtYW5hZ2VyIGFzIGFueSk7XG4gIH1cblxuICBzY2hlZHVsZUluc3RhbGxNb2RpZmllcjxUPihtb2RpZmllcjogVCwgbWFuYWdlcjogTW9kaWZpZXJNYW5hZ2VyPFQ+KSB7XG4gICAgdGhpcy5zY2hlZHVsZWRJbnN0YWxsTWFuYWdlcnMucHVzaChtYW5hZ2VyKTtcbiAgICB0aGlzLnNjaGVkdWxlZEluc3RhbGxNb2RpZmllcnMucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBzY2hlZHVsZVVwZGF0ZU1vZGlmaWVyPFQ+KG1vZGlmaWVyOiBULCBtYW5hZ2VyOiBNb2RpZmllck1hbmFnZXI8VD4pIHtcbiAgICB0aGlzLnNjaGVkdWxlZFVwZGF0ZU1vZGlmaWVyTWFuYWdlcnMucHVzaChtYW5hZ2VyKTtcbiAgICB0aGlzLnNjaGVkdWxlZFVwZGF0ZU1vZGlmaWVycy5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIGRpZERlc3Ryb3koZDogRGVzdHJveWFibGUpIHtcbiAgICB0aGlzLmRlc3RydWN0b3JzLnB1c2goZCk7XG4gIH1cblxuICBjb21taXQoKSB7XG4gICAgZm9yIChsZXQgaT0wOyBpPHRoaXMuY3JlYXRlZENvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjb21wb25lbnQgPSB0aGlzLmNyZWF0ZWRDb21wb25lbnRzW2ldO1xuICAgICAgbGV0IG1hbmFnZXIgPSB0aGlzLmNyZWF0ZWRNYW5hZ2Vyc1tpXTtcbiAgICAgIG1hbmFnZXIuZGlkQ3JlYXRlKGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaT0wOyBpPHRoaXMudXBkYXRlZENvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjb21wb25lbnQgPSB0aGlzLnVwZGF0ZWRDb21wb25lbnRzW2ldO1xuICAgICAgbGV0IG1hbmFnZXIgPSB0aGlzLnVwZGF0ZWRNYW5hZ2Vyc1tpXTtcbiAgICAgIG1hbmFnZXIuZGlkVXBkYXRlKGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaT0wOyBpPHRoaXMuZGVzdHJ1Y3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZGVzdHJ1Y3RvcnNbaV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zY2hlZHVsZWRJbnN0YWxsTWFuYWdlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBtYW5hZ2VyID0gdGhpcy5zY2hlZHVsZWRJbnN0YWxsTWFuYWdlcnNbaV07XG4gICAgICBsZXQgbW9kaWZpZXIgPSB0aGlzLnNjaGVkdWxlZEluc3RhbGxNb2RpZmllcnNbaV07XG4gICAgICBtYW5hZ2VyLmluc3RhbGwobW9kaWZpZXIpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zY2hlZHVsZWRVcGRhdGVNb2RpZmllck1hbmFnZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbWFuYWdlciA9IHRoaXMuc2NoZWR1bGVkVXBkYXRlTW9kaWZpZXJNYW5hZ2Vyc1tpXTtcbiAgICAgIGxldCBtb2RpZmllciA9IHRoaXMuc2NoZWR1bGVkVXBkYXRlTW9kaWZpZXJzW2ldO1xuICAgICAgbWFuYWdlci51cGRhdGUobW9kaWZpZXIpO1xuICAgIH1cblxuICAgIHRoaXMuY3JlYXRlZENvbXBvbmVudHMgPSBudWxsO1xuICAgIHRoaXMuY3JlYXRlZE1hbmFnZXJzID0gbnVsbDtcbiAgICB0aGlzLnVwZGF0ZWRDb21wb25lbnRzID0gbnVsbDtcbiAgICB0aGlzLnVwZGF0ZWRNYW5hZ2VycyA9IG51bGw7XG4gICAgdGhpcy5kZXN0cnVjdG9ycyA9IG51bGw7XG4gICAgdGhpcy5zY2hlZHVsZWRJbnN0YWxsTWFuYWdlcnMgPSBudWxsO1xuICAgIHRoaXMuc2NoZWR1bGVkSW5zdGFsbE1vZGlmaWVycyA9IG51bGw7XG4gICAgdGhpcy5zY2hlZHVsZWRVcGRhdGVNb2RpZmllck1hbmFnZXJzID0gbnVsbDtcbiAgICB0aGlzLnNjaGVkdWxlZFVwZGF0ZU1vZGlmaWVycyA9IG51bGw7XG4gIH1cblxuICBhdHRyaWJ1dGVGb3IoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIGF0dHI6IHN0cmluZywgaXNUcnVzdGluZzogYm9vbGVhbiwgbmFtZXNwYWNlPzogc3RyaW5nKTogQXR0cmlidXRlTWFuYWdlciB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYW5hZ2VycyhlbGVtZW50LCBhdHRyLCBpc1RydXN0aW5nLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgYWJzdHJhY3QgaGFzSGVscGVyKGhlbHBlck5hbWU6IHN0cmluZ1tdLCBibG9ja01ldGE6IFRlbXBsYXRlTWV0YSk6IGJvb2xlYW47XG4gIGFic3RyYWN0IGxvb2t1cEhlbHBlcihoZWxwZXJOYW1lOiBzdHJpbmdbXSwgYmxvY2tNZXRhOiBUZW1wbGF0ZU1ldGEpOiBIZWxwZXI7XG5cbiAgYWJzdHJhY3QgaGFzTW9kaWZpZXIobW9kaWZpZXJOYW1lOiBzdHJpbmdbXSwgYmxvY2tNZXRhOiBUZW1wbGF0ZU1ldGEpOiBib29sZWFuO1xuICBhYnN0cmFjdCBsb29rdXBNb2RpZmllcihtb2RpZmllck5hbWU6IHN0cmluZ1tdLCBibG9ja01ldGE6IFRlbXBsYXRlTWV0YSk6IE1vZGlmaWVyTWFuYWdlcjxPcGFxdWU+O1xuXG4gIGFic3RyYWN0IGhhc0NvbXBvbmVudERlZmluaXRpb24odGFnTmFtZTogc3RyaW5nW10sIHN5bWJvbFRhYmxlOiBTeW1ib2xUYWJsZSk6IGJvb2xlYW47XG4gIGFic3RyYWN0IGdldENvbXBvbmVudERlZmluaXRpb24odGFnTmFtZTogc3RyaW5nW10sIHN5bWJvbFRhYmxlOiBTeW1ib2xUYWJsZSk6IENvbXBvbmVudERlZmluaXRpb248T3BhcXVlPjtcblxuICBhYnN0cmFjdCBoYXNQYXJ0aWFsKHBhcnRpYWxOYW1lOiBzdHJpbmcsIHN5bWJvbFRhYmxlOiBTeW1ib2xUYWJsZSk6IGJvb2xlYW47XG4gIGFic3RyYWN0IGxvb2t1cFBhcnRpYWwoUGFydGlhbE5hbWU6IHN0cmluZywgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKTogUGFydGlhbERlZmluaXRpb248VGVtcGxhdGVNZXRhPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRW52aXJvbm1lbnQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGVscGVyIHtcbiAgKHZtOiBQdWJsaWNWTSwgYXJnczogRXZhbHVhdGVkQXJncywgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFN0YXRlbWVudCB7XG4gIGlzU2ltcGxlOiBib29sZWFuO1xuICBwYXRoOiBzdHJpbmdbXTtcbiAga2V5OiBzdHJpbmc7XG4gIGFwcGVuZFR5cGU6IHN0cmluZztcbiAgYXJnczogU3ludGF4LkFyZ3M7XG4gIGlzSW5saW5lOiBib29sZWFuO1xuICBpc0Jsb2NrOiBib29sZWFuO1xuICBpc01vZGlmaWVyOiBib29sZWFuO1xuICB0ZW1wbGF0ZXM6IFN5bnRheC5UZW1wbGF0ZXM7XG4gIG9yaWdpbmFsOiBTdGF0ZW1lbnRTeW50YXg7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50KHN0YXRlbWVudDogU3RhdGVtZW50U3ludGF4KTogUGFyc2VkU3RhdGVtZW50IHtcbiAgICBsZXQgdHlwZSA9IHN0YXRlbWVudC50eXBlO1xuICAgIGxldCBibG9jayA9IHR5cGUgPT09ICdibG9jaycgPyA8U3ludGF4LkJsb2NrPnN0YXRlbWVudCA6IG51bGw7XG4gICAgbGV0IGFwcGVuZCA9IHR5cGUgPT09ICdvcHRpbWl6ZWQtYXBwZW5kJyA/IDxTeW50YXguT3B0aW1pemVkQXBwZW5kPnN0YXRlbWVudCA6IG51bGw7XG4gICAgbGV0IG1vZGlmaWVyID0gdHlwZSA9PT0gJ21vZGlmaWVyJyA/IDxTeW50YXguTW9kaWZpZXI+c3RhdGVtZW50IDogbnVsbDtcbiAgICBsZXQgYXBwZW5kVHlwZSA9IGFwcGVuZCAmJiBhcHBlbmQudmFsdWUudHlwZTtcblxuICAgIHR5cGUgQXBwZW5kVmFsdWUgPSBTeW50YXguVW5rbm93biB8IFN5bnRheC5HZXQ7XG4gICAgbGV0IGFyZ3M6IFN5bnRheC5BcmdzO1xuICAgIGxldCBwYXRoOiBzdHJpbmdbXTtcblxuICAgIGlmIChibG9jaykge1xuICAgICAgYXJncyA9IGJsb2NrLmFyZ3M7XG4gICAgICBwYXRoID0gYmxvY2sucGF0aDtcbiAgICB9IGVsc2UgaWYgKGFwcGVuZCAmJiAoYXBwZW5kVHlwZSA9PT0gJ3Vua25vd24nIHx8IGFwcGVuZFR5cGUgPT09ICdnZXQnKSkge1xuICAgICAgbGV0IGFwcGVuZFZhbHVlID0gPEFwcGVuZFZhbHVlPmFwcGVuZC52YWx1ZTtcbiAgICAgIGFyZ3MgPSBTeW50YXguQXJncy5lbXB0eSgpO1xuICAgICAgcGF0aCA9IGFwcGVuZFZhbHVlLnJlZi5wYXJ0cztcbiAgICB9IGVsc2UgaWYgKGFwcGVuZCAmJiBhcHBlbmQudmFsdWUudHlwZSA9PT0gJ2hlbHBlcicpIHtcbiAgICAgIGxldCBoZWxwZXIgPSA8U3ludGF4LkhlbHBlcj5hcHBlbmQudmFsdWU7XG4gICAgICBhcmdzID0gaGVscGVyLmFyZ3M7XG4gICAgICBwYXRoID0gaGVscGVyLnJlZi5wYXJ0cztcbiAgICB9IGVsc2UgaWYgKG1vZGlmaWVyKSB7XG4gICAgICBwYXRoID0gbW9kaWZpZXIucGF0aDtcbiAgICAgIGFyZ3MgPSBtb2RpZmllci5hcmdzO1xuICAgIH1cblxuICAgIGxldCBrZXk6IHN0cmluZywgaXNTaW1wbGU6IGJvb2xlYW47XG5cbiAgICBpZiAocGF0aCkge1xuICAgICAgaXNTaW1wbGUgPSBwYXRoLmxlbmd0aCA9PT0gMTtcbiAgICAgIGtleSA9IHBhdGhbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzU2ltcGxlLFxuICAgICAgcGF0aCxcbiAgICAgIGtleSxcbiAgICAgIGFyZ3MsXG4gICAgICBhcHBlbmRUeXBlLFxuICAgICAgb3JpZ2luYWw6IHN0YXRlbWVudCxcbiAgICAgIGlzSW5saW5lOiAhIWFwcGVuZCxcbiAgICAgIGlzQmxvY2s6ICEhYmxvY2ssXG4gICAgICBpc01vZGlmaWVyOiAhIW1vZGlmaWVyLFxuICAgICAgdGVtcGxhdGVzOiBibG9jayAmJiBibG9jay50ZW1wbGF0ZXNcbiAgICB9O1xufVxuIl19 -enifed('glimmer-runtime/lib/helpers/get-dynamic-var', ['exports', 'glimmer-reference'], function (exports, _glimmerReference) { - 'use strict'; + } - var DynamicVarReference = (function () { - function DynamicVarReference(scope, nameRef) { - this.scope = scope; - this.nameRef = nameRef; - var varTag = this.varTag = new _glimmerReference.UpdatableTag(_glimmerReference.CONSTANT_TAG); - this.tag = _glimmerReference.combine([nameRef.tag, varTag]); - } + function getBlock(scope, key) { + return scope.blocks[key]; + } - DynamicVarReference.prototype.value = function value() { - return this.getVar().value(); - }; + function getChild(value, key) { + return value[key]; + } - DynamicVarReference.prototype.get = function get(key) { - return this.getVar().get(key); - }; + function getValue(reference) { + return reference; + } - DynamicVarReference.prototype.getVar = function getVar() { - var name = String(this.nameRef.value()); - var ref = this.scope.get(name); - this.varTag.update(ref.tag); - return ref; - }; + function getCellOrValue(reference) { + return reference; + } - return DynamicVarReference; - })(); - - function getDynamicVar(vm, args, symbolTable) { - var scope = vm.dynamicScope(); - var nameRef = args.positional.at(0); - return new DynamicVarReference(scope, nameRef); + function component(morph, env, scope, tagName, params, attrs, templates, visitor) { + if (env.hooks.hasHelper(env, scope, tagName)) { + return env.hooks.block(morph, env, scope, tagName, params, attrs, templates.default, templates.inverse, visitor); } - exports.default = getDynamicVar; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvaGVscGVycy9nZXQtZHluYW1pYy12YXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O1FBT0EsbUJBQUE7QUFJRSxpQkFKRixtQkFBQSxDQUlzQixLQUFtQixFQUFVLE9BQThCLEVBQUE7QUFBM0QsZ0JBQUEsQ0FBQSxLQUFLLEdBQUwsS0FBSyxDQUFjO0FBQVUsZ0JBQUEsQ0FBQSxPQUFPLEdBQVAsT0FBTyxDQUF1QjtBQUM3RSxnQkFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxzQkFSb0IsWUFBWSxtQkFBdEQsWUFBWSxDQVF3QyxDQUFDO0FBQzFELGdCQUFJLENBQUMsR0FBRyxHQUFHLGtCQVRrRCxPQUFPLENBU2pELENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQzNDOztBQVBILDJCQUFBLFdBU0UsS0FBSyxHQUFBLGlCQUFBO0FBQ0gsbUJBQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzlCOztBQVhILDJCQUFBLFdBYUUsR0FBRyxHQUFBLGFBQUMsR0FBVyxFQUFBO0FBQ2IsbUJBQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMvQjs7QUFmSCwyQkFBQSxXQWlCVSxNQUFNLEdBQUEsa0JBQUE7QUFDWixnQkFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUN4QyxnQkFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFL0IsZ0JBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUU1QixtQkFBTyxHQUFHLENBQUM7U0FDWjs7ZUF4QkgsbUJBQUE7OztBQTJCQSxhQUFBLGFBQUEsQ0FBdUIsRUFBWSxFQUFFLElBQW1CLEVBQUUsV0FBd0IsRUFBQTtBQUNoRixZQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDOUIsWUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFcEMsZUFBTyxJQUFJLG1CQUFtQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNoRDtzQkFFZSxhQUF3QiIsImZpbGUiOiJnZXQtZHluYW1pYy12YXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIZWxwZXIsIER5bmFtaWNTY29wZSB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IFB1YmxpY1ZNIH0gZnJvbSAnLi4vdm0vYXBwZW5kJztcbmltcG9ydCBTeW1ib2xUYWJsZSBmcm9tICcuLi9zeW1ib2wtdGFibGUnO1xuaW1wb3J0IHsgRXZhbHVhdGVkQXJncyB9IGZyb20gJy4uL2NvbXBpbGVkL2V4cHJlc3Npb25zL2FyZ3MnO1xuaW1wb3J0IHsgQ09OU1RBTlRfVEFHLCBSZXZpc2lvblRhZywgUGF0aFJlZmVyZW5jZSwgVXBkYXRhYmxlVGFnLCBjb21iaW5lIH0gZnJvbSAnZ2xpbW1lci1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgT3BhcXVlIH0gZnJvbSAnZ2xpbW1lci11dGlsJztcblxuY2xhc3MgRHluYW1pY1ZhclJlZmVyZW5jZSBpbXBsZW1lbnRzIFBhdGhSZWZlcmVuY2U8T3BhcXVlPiB7XG4gIHB1YmxpYyB0YWc6IFJldmlzaW9uVGFnO1xuICBwcml2YXRlIHZhclRhZzogVXBkYXRhYmxlVGFnO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2NvcGU6IER5bmFtaWNTY29wZSwgcHJpdmF0ZSBuYW1lUmVmOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4pIHtcbiAgICBsZXQgdmFyVGFnID0gdGhpcy52YXJUYWcgPSBuZXcgVXBkYXRhYmxlVGFnKENPTlNUQU5UX1RBRyk7XG4gICAgdGhpcy50YWcgPSBjb21iaW5lKFtuYW1lUmVmLnRhZywgdmFyVGFnXSk7XG4gIH1cblxuICB2YWx1ZSgpOiBPcGFxdWUge1xuICAgIHJldHVybiB0aGlzLmdldFZhcigpLnZhbHVlKCk7XG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcpOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4ge1xuICAgIHJldHVybiB0aGlzLmdldFZhcigpLmdldChrZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYXIoKTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+IHtcbiAgICBsZXQgbmFtZSA9IFN0cmluZyh0aGlzLm5hbWVSZWYudmFsdWUoKSk7XG4gICAgbGV0IHJlZiA9IHRoaXMuc2NvcGUuZ2V0KG5hbWUpO1xuXG4gICAgdGhpcy52YXJUYWcudXBkYXRlKHJlZi50YWcpO1xuXG4gICAgcmV0dXJuIHJlZjtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREeW5hbWljVmFyKHZtOiBQdWJsaWNWTSwgYXJnczogRXZhbHVhdGVkQXJncywgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+IHtcbiAgbGV0IHNjb3BlID0gdm0uZHluYW1pY1Njb3BlKCk7XG4gIGxldCBuYW1lUmVmID0gYXJncy5wb3NpdGlvbmFsLmF0KDApO1xuXG4gIHJldHVybiBuZXcgRHluYW1pY1ZhclJlZmVyZW5jZShzY29wZSwgbmFtZVJlZik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChnZXREeW5hbWljVmFyIGFzIEhlbHBlcik7XG4iXX0= -enifed("glimmer-runtime/lib/modifier/interfaces", ["exports"], function (exports) { - "use strict"; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvbW9kaWZpZXIvaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6ImludGVyZmFjZXMuanMiLCJzb3VyY2VzQ29udGVudCI6W119 -enifed("glimmer-runtime/lib/opcode-builder", ["exports"], function (exports) { - "use strict"; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvb3Bjb2RlLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJvcGNvZGUtYnVpbGRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbXX0= -enifed('glimmer-runtime/lib/opcodes', ['exports', 'glimmer-util'], function (exports, _glimmerUtil) { - 'use strict'; - exports.inspect = inspect; + componentFallback(morph, env, scope, tagName, attrs, templates.default); + } - var AbstractOpcode = (function () { - function AbstractOpcode() { - _glimmerUtil.initializeGuid(this); - } - - AbstractOpcode.prototype.toJSON = function toJSON() { - return { guid: this._guid, type: this.type }; - }; - - return AbstractOpcode; - })(); - - exports.AbstractOpcode = AbstractOpcode; - - var Opcode = (function (_AbstractOpcode) { - babelHelpers.inherits(Opcode, _AbstractOpcode); - - function Opcode() { - _AbstractOpcode.apply(this, arguments); - this.next = null; - this.prev = null; - } - - return Opcode; - })(AbstractOpcode); - - exports.Opcode = Opcode; - - var UpdatingOpcode = (function (_AbstractOpcode2) { - babelHelpers.inherits(UpdatingOpcode, _AbstractOpcode2); - - function UpdatingOpcode() { - _AbstractOpcode2.apply(this, arguments); - this.next = null; - this.prev = null; - } - - return UpdatingOpcode; - })(AbstractOpcode); - - exports.UpdatingOpcode = UpdatingOpcode; - - function inspect(opcodes) { - var buffer = []; - opcodes.toArray().forEach(function (opcode, i) { - _inspect(opcode.toJSON(), buffer, 0, i); - }); - return buffer.join(''); + function concat(env, params) { + var value = ""; + for (var i = 0, l = params.length; i < l; i++) { + value += env.hooks.getValue(params[i]); } + return value; + } - function _inspect(opcode, buffer, level, index) { - var indentation = []; - for (var i = 0; i < level; i++) { - indentation.push(' '); - } - buffer.push.apply(buffer, indentation); - buffer.push(index + 1 + '. ' + opcode.type.toUpperCase()); - if (opcode.args || opcode.details) { - buffer.push('('); - if (opcode.args) { - buffer.push(opcode.args.join(', ')); - } - if (opcode.details) { - var keys = Object.keys(opcode.details); - if (keys.length) { - if (opcode.args && opcode.args.length) { - buffer.push(', '); - } - buffer.push(keys.map(function (key) { - return key + '=' + opcode.details[key]; - }).join(', ')); - } - } - buffer.push(')'); - } - buffer.push('\n'); - if (opcode.children && opcode.children.length) { - for (var i = 0; i < opcode.children.length; i++) { - _inspect(opcode.children[i], buffer, level + 1, i); - } - } + function componentFallback(morph, env, scope, tagName, attrs, template) { + var element = env.dom.createElement(tagName); + for (var name in attrs) { + element.setAttribute(name, env.hooks.getValue(attrs[name])); } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvb3Bjb2Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQWFBLGNBQUE7QUFPRSxpQkFQRixjQUFBLEdBT0U7QUFDRSx5QkFyQjhDLGNBQWMsQ0FxQjdDLElBQUksQ0FBQyxDQUFDO1NBQ3RCOztBQVRILHNCQUFBLFdBV0UsTUFBTSxHQUFBLGtCQUFBO0FBQ0osbUJBQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzlDOztlQWJILGNBQUE7Ozs7O1FBZ0JBLE1BQUE7OEJBQUEsTUFBQTs7QUFBQSxpQkFBQSxNQUFBLEdBQUE7QUFBcUMsd0NBQUEsU0FBQSxDQUFBLENBQWM7QUFDakQsZ0JBQUEsQ0FBQSxJQUFJLEdBQVcsSUFBSSxDQUFDO0FBQ3BCLGdCQUFBLENBQUEsSUFBSSxHQUFXLElBQUksQ0FBQztTQUdyQjs7ZUFMRCxNQUFBO09BQXFDLGNBQWM7Ozs7UUFVbkQsY0FBQTs4QkFBQSxjQUFBOztBQUFBLGlCQUFBLGNBQUEsR0FBQTtBQUE2Qyx5Q0FBQSxTQUFBLENBQUEsQ0FBYztBQUd6RCxnQkFBQSxDQUFBLElBQUksR0FBbUIsSUFBSSxDQUFDO0FBQzVCLGdCQUFBLENBQUEsSUFBSSxHQUFtQixJQUFJLENBQUM7U0FHN0I7O2VBUEQsY0FBQTtPQUE2QyxjQUFjOzs7O0FBZTNELGFBQUEsT0FBQSxDQUF3QixPQUFtQyxFQUFBO0FBQ3pELFlBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUVoQixlQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQUMsTUFBTSxFQUFFLENBQUMsRUFBQTtBQUNsQyxvQkFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3pDLENBQUMsQ0FBQztBQUVILGVBQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN4Qjs7QUFFRCxhQUFBLFFBQUEsQ0FBa0IsTUFBa0IsRUFBRSxNQUFnQixFQUFFLEtBQWEsRUFBRSxLQUFhLEVBQUE7QUFDbEYsWUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBRXJCLGFBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUIsdUJBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEI7QUFFRCxjQUFNLENBQUMsSUFBSSxNQUFBLENBQVgsTUFBTSxFQUFTLFdBQVcsQ0FBQyxDQUFDO0FBQzVCLGNBQU0sQ0FBQyxJQUFJLENBQUksS0FBSyxHQUFDLENBQUMsVUFBSyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFHLENBQUM7QUFFeEQsWUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7QUFDakMsa0JBQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFakIsZ0JBQUksTUFBTSxDQUFDLElBQUksRUFBRTtBQUNmLHNCQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDckM7QUFFRCxnQkFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO0FBQ2xCLG9CQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUV2QyxvQkFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2Ysd0JBQUksTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNyQyw4QkFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDbkI7QUFFRCwwQkFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQUEsR0FBRzsrQkFBTyxHQUFHLFNBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7cUJBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUMxRTthQUNGO0FBRUQsa0JBQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEI7QUFFRCxjQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRWxCLFlBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtBQUM3QyxpQkFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDLHdCQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxHQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNsRDtTQUNGO0tBQ0YiLCJmaWxlIjoib3Bjb2Rlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpY3QsIExpbmtlZExpc3QsIExpbmtlZExpc3ROb2RlLCBTbGljZSwgaW5pdGlhbGl6ZUd1aWQgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuaW1wb3J0IHsgUmV2aXNpb25UYWcgfSBmcm9tICdnbGltbWVyLXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBWTSwgVXBkYXRpbmdWTSB9IGZyb20gJy4vdm0nO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wY29kZUpTT04ge1xuICBndWlkOiBudW1iZXI7XG4gIHR5cGU6IHN0cmluZztcbiAgZGVvcHRlZD86IGJvb2xlYW47XG4gIGFyZ3M/OiBzdHJpbmdbXTtcbiAgZGV0YWlscz86IERpY3Q8c3RyaW5nPjtcbiAgY2hpbGRyZW4/OiBPcGNvZGVKU09OW107XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE9wY29kZSBpbXBsZW1lbnRzIExpbmtlZExpc3ROb2RlIHtcbiAgcHVibGljIHR5cGU6IHN0cmluZztcbiAgcHVibGljIF9ndWlkOiBudW1iZXI7XG5cbiAgcHJldjogQWJzdHJhY3RPcGNvZGU7XG4gIG5leHQ6IEFic3RyYWN0T3Bjb2RlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGluaXRpYWxpemVHdWlkKHRoaXMpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7IGd1aWQ6IHRoaXMuX2d1aWQsIHR5cGU6IHRoaXMudHlwZSB9O1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPcGNvZGUgZXh0ZW5kcyBBYnN0cmFjdE9wY29kZSB7XG4gIG5leHQ6IE9wY29kZSA9IG51bGw7XG4gIHByZXY6IE9wY29kZSA9IG51bGw7XG5cbiAgYWJzdHJhY3QgZXZhbHVhdGUodm06IFZNKTtcbn1cblxuZXhwb3J0IHR5cGUgT3BTZXEgPSBTbGljZTxPcGNvZGU+O1xuZXhwb3J0IHR5cGUgT3BTZXFCdWlsZGVyID0gTGlua2VkTGlzdDxPcGNvZGU+O1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVXBkYXRpbmdPcGNvZGUgZXh0ZW5kcyBBYnN0cmFjdE9wY29kZSB7XG4gIHB1YmxpYyB0YWc6IFJldmlzaW9uVGFnO1xuXG4gIG5leHQ6IFVwZGF0aW5nT3Bjb2RlID0gbnVsbDtcbiAgcHJldjogVXBkYXRpbmdPcGNvZGUgPSBudWxsO1xuXG4gIGFic3RyYWN0IGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKTtcbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRpbmdPcFNlcSA9IFNsaWNlPFVwZGF0aW5nT3Bjb2RlPjtcblxuaW50ZXJmYWNlIE9wY29kZUZhY3Rvcnk8VCBleHRlbmRzIE9wY29kZT4ge1xuICBuZXcob3B0aW9uczogVCk6IFQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNwZWN0KG9wY29kZXM6IExpbmtlZExpc3Q8QWJzdHJhY3RPcGNvZGU+KTogc3RyaW5nIHtcbiAgbGV0IGJ1ZmZlciA9IFtdO1xuXG4gIG9wY29kZXMudG9BcnJheSgpLmZvckVhY2goKG9wY29kZSwgaSkgPT4ge1xuICAgIF9pbnNwZWN0KG9wY29kZS50b0pTT04oKSwgYnVmZmVyLCAwLCBpKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGJ1ZmZlci5qb2luKCcnKTtcbn1cblxuZnVuY3Rpb24gX2luc3BlY3Qob3Bjb2RlOiBPcGNvZGVKU09OLCBidWZmZXI6IHN0cmluZ1tdLCBsZXZlbDogbnVtYmVyLCBpbmRleDogbnVtYmVyKSB7XG4gIGxldCBpbmRlbnRhdGlvbiA9IFtdO1xuXG4gIGZvciAobGV0IGk9MDsgaTxsZXZlbDsgaSsrKSB7XG4gICAgaW5kZW50YXRpb24ucHVzaCgnICAnKTtcbiAgfVxuXG4gIGJ1ZmZlci5wdXNoKC4uLmluZGVudGF0aW9uKTtcbiAgYnVmZmVyLnB1c2goYCR7aW5kZXgrMX0uICR7b3Bjb2RlLnR5cGUudG9VcHBlckNhc2UoKX1gKTtcblxuICBpZiAob3Bjb2RlLmFyZ3MgfHwgb3Bjb2RlLmRldGFpbHMpIHtcbiAgICBidWZmZXIucHVzaCgnKCcpO1xuXG4gICAgaWYgKG9wY29kZS5hcmdzKSB7XG4gICAgICBidWZmZXIucHVzaChvcGNvZGUuYXJncy5qb2luKCcsICcpKTtcbiAgICB9XG5cbiAgICBpZiAob3Bjb2RlLmRldGFpbHMpIHtcbiAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMob3Bjb2RlLmRldGFpbHMpO1xuXG4gICAgICBpZiAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG9wY29kZS5hcmdzICYmIG9wY29kZS5hcmdzLmxlbmd0aCkge1xuICAgICAgICAgIGJ1ZmZlci5wdXNoKCcsICcpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmZmVyLnB1c2goa2V5cy5tYXAoa2V5ID0+IGAke2tleX09JHtvcGNvZGUuZGV0YWlsc1trZXldfWApLmpvaW4oJywgJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGJ1ZmZlci5wdXNoKCcpJyk7XG4gIH1cblxuICBidWZmZXIucHVzaCgnXFxuJyk7XG5cbiAgaWYgKG9wY29kZS5jaGlsZHJlbiAmJiBvcGNvZGUuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgZm9yIChsZXQgaT0wOyBpPG9wY29kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgX2luc3BlY3Qob3Bjb2RlLmNoaWxkcmVuW2ldLCBidWZmZXIsIGxldmVsKzEsIGkpO1xuICAgIH1cbiAgfVxufVxuIl19 -enifed("glimmer-runtime/lib/partial", ["exports"], function (exports) { - "use strict"; + var fragment = _htmlbarsRuntimeRender.default(template, env, scope, {}).fragment; + element.appendChild(fragment); + morph.setNode(element); + } - var PartialDefinition = function PartialDefinition(name, template) { - this.name = name; - this.template = template; - }; + function hasHelper(env, scope, helperName) { + return env.helpers[helperName] !== undefined; + } - exports.PartialDefinition = PartialDefinition; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvcGFydGlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7UUFFQSxpQkFBQSxHQUlFLFNBSkYsaUJBQUEsQ0FJYyxJQUFZLEVBQUUsUUFBcUIsRUFBQTtBQUM3QyxZQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixZQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztLQUMxQiIsImZpbGUiOiJwYXJ0aWFsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuL3RlbXBsYXRlJztcblxuZXhwb3J0IGNsYXNzIFBhcnRpYWxEZWZpbml0aW9uPFQ+IHtcbiAgbmFtZTogc3RyaW5nOyAvLyBmb3IgZGVidWdnaW5nXG4gIHRlbXBsYXRlOiBUZW1wbGF0ZTxUPjtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHRlbXBsYXRlOiBUZW1wbGF0ZTxUPikge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICB9XG59XG4iXX0= -enifed('glimmer-runtime/lib/references', ['exports', 'glimmer-reference'], function (exports, _glimmerReference) { - 'use strict'; + function lookupHelper(env, scope, helperName) { + return env.helpers[helperName]; + } - var PrimitiveReference = (function (_ConstReference) { - babelHelpers.inherits(PrimitiveReference, _ConstReference); + function bindScope() /* env, scope */{ + // this function is used to handle host-specified extensions to scope + // other than `self`, `locals` and `block`. + } - function PrimitiveReference() { - _ConstReference.apply(this, arguments); - } + function updateScope(env, scope) { + env.hooks.bindScope(env, scope); + } - PrimitiveReference.prototype.get = function get() { - return UNDEFINED_REFERENCE; - }; + exports.default = { + // fundamental hooks that you will likely want to override + bindLocal: bindLocal, + bindSelf: bindSelf, + bindScope: bindScope, + classify: classify, + component: component, + concat: concat, + createFreshScope: createFreshScope, + getChild: getChild, + getRoot: getRoot, + getBlock: getBlock, + getValue: getValue, + getCellOrValue: getCellOrValue, + keywords: keywords, + linkRenderNode: linkRenderNode, + partial: partial, + subexpr: subexpr, - return PrimitiveReference; - })(_glimmerReference.ConstReference); + // fundamental hooks with good default behavior + bindBlock: bindBlock, + bindShadowScope: bindShadowScope, + updateLocal: updateLocal, + updateSelf: updateSelf, + updateScope: updateScope, + createChildScope: createChildScope, + hasHelper: hasHelper, + lookupHelper: lookupHelper, + invokeHelper: invokeHelper, + cleanupRenderNode: null, + destroyRenderNode: null, + willCleanupTree: null, + didCleanupTree: null, + willRenderNode: null, + didRenderNode: null, - exports.PrimitiveReference = PrimitiveReference; - - var ConditionalReference = (function () { - function ConditionalReference(inner) { - this.inner = inner; - this.tag = inner.tag; - } - - ConditionalReference.prototype.value = function value() { - return this.toBool(this.inner.value()); - }; - - ConditionalReference.prototype.toBool = function toBool(value) { - return !!value; - }; - - return ConditionalReference; - })(); - - exports.ConditionalReference = ConditionalReference; - var NULL_REFERENCE = new PrimitiveReference(null); - exports.NULL_REFERENCE = NULL_REFERENCE; - var UNDEFINED_REFERENCE = new PrimitiveReference(undefined); - exports.UNDEFINED_REFERENCE = UNDEFINED_REFERENCE; + // derived hooks + attribute: attribute, + block: block, + createScope: createScope, + element: element, + get: get, + inline: inline, + range: range, + keyword: keyword + }; }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvcmVmZXJlbmNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7UUFLQSxrQkFBQTs4QkFBQSxrQkFBQTs7aUJBQUEsa0JBQUE7Ozs7QUFBQSwwQkFBQSxXQUNFLEdBQUcsR0FBQSxlQUFBO0FBQ0QsbUJBQU8sbUJBQW1CLENBQUM7U0FDNUI7O2VBSEgsa0JBQUE7eUJBTHNCLGNBQWM7Ozs7UUFXcEMsb0JBQUE7QUFHRSxpQkFIRixvQkFBQSxDQUdzQixLQUF3QixFQUFBO0FBQXhCLGdCQUFBLENBQUEsS0FBSyxHQUFMLEtBQUssQ0FBbUI7QUFDMUMsZ0JBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztTQUN0Qjs7QUFMSCw0QkFBQSxXQU9FLEtBQUssR0FBQSxpQkFBQTtBQUNILG1CQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3hDOztBQVRILDRCQUFBLFdBV1ksTUFBTSxHQUFBLGdCQUFDLEtBQWEsRUFBQTtBQUM1QixtQkFBTyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ2hCOztlQWJILG9CQUFBOzs7O0FBZ0JPLFFBQU0sY0FBYyxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBQ3BELFFBQU0sbUJBQW1CLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyIsImZpbGUiOiJyZWZlcmVuY2VzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmV2aXNpb25UYWcsIENvbnN0UmVmZXJlbmNlLCBQYXRoUmVmZXJlbmNlLCBSZWZlcmVuY2UgfSBmcm9tICdnbGltbWVyLXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBPcGFxdWUgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuXG5leHBvcnQgdHlwZSBQcmltaXRpdmUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuXG5leHBvcnQgY2xhc3MgUHJpbWl0aXZlUmVmZXJlbmNlIGV4dGVuZHMgQ29uc3RSZWZlcmVuY2U8YW55PiBpbXBsZW1lbnRzIFBhdGhSZWZlcmVuY2U8UHJpbWl0aXZlPiB7XG4gIGdldCgpOiBQcmltaXRpdmVSZWZlcmVuY2Uge1xuICAgIHJldHVybiBVTkRFRklORURfUkVGRVJFTkNFO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb25kaXRpb25hbFJlZmVyZW5jZSBpbXBsZW1lbnRzIFJlZmVyZW5jZTxib29sZWFuPiB7XG4gIHB1YmxpYyB0YWc6IFJldmlzaW9uVGFnO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5uZXI6IFJlZmVyZW5jZTxPcGFxdWU+KSB7XG4gICAgdGhpcy50YWcgPSBpbm5lci50YWc7XG4gIH1cblxuICB2YWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b0Jvb2wodGhpcy5pbm5lci52YWx1ZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b0Jvb2wodmFsdWU6IE9wYXF1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBOVUxMX1JFRkVSRU5DRSA9IG5ldyBQcmltaXRpdmVSZWZlcmVuY2UobnVsbCk7XG5leHBvcnQgY29uc3QgVU5ERUZJTkVEX1JFRkVSRU5DRSA9IG5ldyBQcmltaXRpdmVSZWZlcmVuY2UodW5kZWZpbmVkKTtcbiJdfQ== -enifed('glimmer-runtime/lib/scanner', ['exports', 'glimmer-runtime/lib/syntax/statements', 'glimmer-runtime/lib/compiled/blocks', 'glimmer-util', 'glimmer-runtime/lib/symbol-table'], function (exports, _glimmerRuntimeLibSyntaxStatements, _glimmerRuntimeLibCompiledBlocks, _glimmerUtil, _glimmerRuntimeLibSymbolTable) { - 'use strict'; +enifed("htmlbars-runtime/morph", ["exports", "morph-range"], function (exports, _morphRange) { + "use strict"; - var Scanner = (function () { - function Scanner(block, meta, env) { - this.block = block; - this.meta = meta; - this.env = env; - } + var guid = 1; - Scanner.prototype.scanEntryPoint = function scanEntryPoint() { - var block = this.block; - var meta = this.meta; + function HTMLBarsMorph(domHelper, contextualElement) { + this.super$constructor(domHelper, contextualElement); - var symbolTable = _glimmerRuntimeLibSymbolTable.default.forEntryPoint(meta); - var program = buildStatements(block, block.blocks, symbolTable, this.env); - return new _glimmerRuntimeLibCompiledBlocks.EntryPoint(program, symbolTable); - }; + this._state = undefined; + this.ownerNode = null; + this.isDirty = false; + this.isSubtreeDirty = false; + this.lastYielded = null; + this.lastResult = null; + this.lastValue = null; + this.buildChildEnv = null; + this.morphList = null; + this.morphMap = null; + this.key = null; + this.linkedParams = null; + this.linkedResult = null; + this.childNodes = null; + this.rendered = false; + this.guid = "range" + guid++; + this.seen = false; + } - Scanner.prototype.scanLayout = function scanLayout() { - var block = this.block; - var meta = this.meta; - var blocks = block.blocks; - var named = block.named; - var yields = block.yields; - var hasPartials = block.hasPartials; + HTMLBarsMorph.empty = function (domHelper, contextualElement) { + var morph = new HTMLBarsMorph(domHelper, contextualElement); + morph.clear(); + return morph; + }; - var symbolTable = _glimmerRuntimeLibSymbolTable.default.forLayout(named, yields, hasPartials, meta); - var program = buildStatements(block, blocks, symbolTable, this.env); - return new _glimmerRuntimeLibCompiledBlocks.Layout(program, symbolTable, named, yields, hasPartials); - }; + HTMLBarsMorph.create = function (domHelper, contextualElement, node) { + var morph = new HTMLBarsMorph(domHelper, contextualElement); + morph.setNode(node); + return morph; + }; - Scanner.prototype.scanPartial = function scanPartial(symbolTable) { - var block = this.block; - var blocks = block.blocks; - var locals = block.locals; + HTMLBarsMorph.attach = function (domHelper, contextualElement, firstNode, lastNode) { + var morph = new HTMLBarsMorph(domHelper, contextualElement); + morph.setRange(firstNode, lastNode); + return morph; + }; - var program = buildStatements(block, blocks, symbolTable, this.env); - return new _glimmerRuntimeLibCompiledBlocks.PartialBlock(program, symbolTable, locals); - }; + var prototype = HTMLBarsMorph.prototype = Object.create(_morphRange.default.prototype); + prototype.constructor = HTMLBarsMorph; + prototype.super$constructor = _morphRange.default; - return Scanner; - })(); - - exports.default = Scanner; - - function buildStatements(_ref, blocks, symbolTable, env) { - var statements = _ref.statements; - - if (statements.length === 0) return EMPTY_PROGRAM; - return new BlockScanner(statements, blocks, symbolTable, env).scan(); + prototype.getState = function () { + if (!this._state) { + this._state = {}; } - var EMPTY_PROGRAM = _glimmerUtil.EMPTY_SLICE; - var BlockScanner = (function () { - function BlockScanner(statements, blocks, symbolTable, env) { - this.blocks = blocks; - this.symbolTable = symbolTable; - this.stack = new _glimmerUtil.Stack(); - this.stack.push(new ChildBlockScanner(symbolTable)); - this.reader = new SyntaxReader(statements, symbolTable, this); - this.env = env; - } + return this._state; + }; - BlockScanner.prototype.scan = function scan() { - var statement = undefined; - while (statement = this.reader.next()) { - this.addStatement(statement); - } - return this.stack.current.program; - }; + prototype.setState = function (newState) { + /*jshint -W093 */ - BlockScanner.prototype.blockFor = function blockFor(symbolTable, id) { - var block = this.blocks[id]; - var childTable = _glimmerRuntimeLibSymbolTable.default.forBlock(this.symbolTable, block.locals); - var program = buildStatements(block, this.blocks, childTable, this.env); - return new _glimmerRuntimeLibCompiledBlocks.InlineBlock(program, childTable, block.locals); - }; + return this._state = newState; + }; - BlockScanner.prototype.startBlock = function startBlock(locals) { - var childTable = _glimmerRuntimeLibSymbolTable.default.forBlock(this.symbolTable, locals); - this.stack.push(new ChildBlockScanner(childTable)); - }; - - BlockScanner.prototype.endBlock = function endBlock(locals) { - var _stack$pop = this.stack.pop(); - - var program = _stack$pop.program; - var symbolTable = _stack$pop.symbolTable; - - var block = new _glimmerRuntimeLibCompiledBlocks.InlineBlock(program, symbolTable, locals); - this.addChild(block); - return block; - }; - - BlockScanner.prototype.addChild = function addChild(block) { - this.stack.current.addChild(block); - }; - - BlockScanner.prototype.addStatement = function addStatement(statement) { - this.stack.current.addStatement(statement.scan(this)); - }; - - BlockScanner.prototype.next = function next() { - return this.reader.next(); - }; - - return BlockScanner; - })(); - - exports.BlockScanner = BlockScanner; - - var ChildBlockScanner = (function () { - function ChildBlockScanner(symbolTable) { - this.symbolTable = symbolTable; - this.children = []; - this.program = new _glimmerUtil.LinkedList(); - } - - ChildBlockScanner.prototype.addChild = function addChild(block) { - this.children.push(block); - }; - - ChildBlockScanner.prototype.addStatement = function addStatement(statement) { - this.program.append(statement); - }; - - return ChildBlockScanner; - })(); - - var SyntaxReader = (function () { - function SyntaxReader(statements, symbolTable, scanner) { - this.statements = statements; - this.symbolTable = symbolTable; - this.scanner = scanner; - this.current = 0; - this.last = null; - } - - SyntaxReader.prototype.next = function next() { - var last = this.last; - if (last) { - this.last = null; - return last; - } else if (this.current === this.statements.length) { - return null; - } - var sexp = this.statements[this.current++]; - return _glimmerRuntimeLibSyntaxStatements.default(sexp, this.symbolTable, this.scanner); - }; - - return SyntaxReader; - })(); + exports.default = HTMLBarsMorph; }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvc2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7UUFRQSxPQUFBO0FBQ0UsaUJBREYsT0FBQSxDQUNzQixLQUE4QixFQUFVLElBQWtCLEVBQVUsR0FBZ0IsRUFBQTtBQUFwRixnQkFBQSxDQUFBLEtBQUssR0FBTCxLQUFLLENBQXlCO0FBQVUsZ0JBQUEsQ0FBQSxJQUFJLEdBQUosSUFBSSxDQUFjO0FBQVUsZ0JBQUEsQ0FBQSxHQUFHLEdBQUgsR0FBRyxDQUFhO1NBQ3ZHOztBQUZILGVBQUEsV0FJRSxjQUFjLEdBQUEsMEJBQUE7Z0JBQ04sS0FBSyxHQUFXLElBQUksQ0FBcEIsS0FBSztnQkFBRSxJQUFJLEdBQUssSUFBSSxDQUFiLElBQUk7O0FBRWpCLGdCQUFJLFdBQVcsR0FBRyxzQ0FBWSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEQsZ0JBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFFLG1CQUFPLHFDQWZGLFVBQVUsQ0FlTyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDN0M7O0FBVkgsZUFBQSxXQVlFLFVBQVUsR0FBQSxzQkFBQTtnQkFDRixLQUFLLEdBQVcsSUFBSSxDQUFwQixLQUFLO2dCQUFFLElBQUksR0FBSyxJQUFJLENBQWIsSUFBSTtnQkFDWCxNQUFNLEdBQWlDLEtBQUssQ0FBNUMsTUFBTTtnQkFBRSxLQUFLLEdBQTBCLEtBQUssQ0FBcEMsS0FBSztnQkFBRSxNQUFNLEdBQWtCLEtBQUssQ0FBN0IsTUFBTTtnQkFBRSxXQUFXLEdBQUssS0FBSyxDQUFyQixXQUFXOztBQUV4QyxnQkFBSSxXQUFXLEdBQUcsc0NBQVksU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFFLGdCQUFJLE9BQU8sR0FB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V0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM3RDs7ZUFqQkgsWUFBQSIsImZpbGUiOiJzY2FubmVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvZ3JhbSwgU3RhdGVtZW50IGFzIFN0YXRlbWVudFN5bnRheCB9IGZyb20gJy4vc3ludGF4JztcbmltcG9ydCBidWlsZFN0YXRlbWVudCBmcm9tICcuL3N5bnRheC9zdGF0ZW1lbnRzJztcbmltcG9ydCB7IEVudHJ5UG9pbnQsIElubGluZUJsb2NrLCBQYXJ0aWFsQmxvY2ssIExheW91dCB9IGZyb20gJy4vY29tcGlsZWQvYmxvY2tzJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEVNUFRZX1NMSUNFLCBMaW5rZWRMaXN0LCBTdGFjayB9IGZyb20gJ2dsaW1tZXItdXRpbCc7XG5pbXBvcnQgeyBTZXJpYWxpemVkVGVtcGxhdGVCbG9jaywgVGVtcGxhdGVNZXRhLCBTZXJpYWxpemVkQmxvY2ssIFN0YXRlbWVudCBhcyBTZXJpYWxpemVkU3RhdGVtZW50IH0gZnJvbSAnZ2xpbW1lci13aXJlLWZvcm1hdCc7XG5pbXBvcnQgU3ltYm9sVGFibGUgZnJvbSAnLi9zeW1ib2wtdGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTY2FubmVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBibG9jazogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2ssIHByaXZhdGUgbWV0YTogVGVtcGxhdGVNZXRhLCBwcml2YXRlIGVudjogRW52aXJvbm1lbnQpIHtcbiAgfVxuXG4gIHNjYW5FbnRyeVBvaW50KCk6IEVudHJ5UG9pbnQge1xuICAgIGxldCB7IGJsb2NrLCBtZXRhIH0gPSB0aGlzO1xuXG4gICAgbGV0IHN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGUuZm9yRW50cnlQb2ludChtZXRhKTtcbiAgICBsZXQgcHJvZ3JhbSA9IGJ1aWxkU3RhdGVtZW50cyhibG9jaywgYmxvY2suYmxvY2tzLCBzeW1ib2xUYWJsZSwgdGhpcy5lbnYpO1xuICAgIHJldHVybiBuZXcgRW50cnlQb2ludChwcm9ncmFtLCBzeW1ib2xUYWJsZSk7XG4gIH1cblxuICBzY2FuTGF5b3V0KCk6IExheW91dCB7XG4gICAgbGV0IHsgYmxvY2ssIG1ldGEgfSA9IHRoaXM7XG4gICAgbGV0IHsgYmxvY2tzLCBuYW1lZCwgeWllbGRzLCBoYXNQYXJ0aWFscyB9ID0gYmxvY2s7XG5cbiAgICBsZXQgc3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZS5mb3JMYXlvdXQobmFtZWQsIHlpZWxkcywgaGFzUGFydGlhbHMsIG1ldGEpO1xuICAgIGxldCBwcm9ncmFtID0gYnVpbGRTdGF0ZW1lbnRzKGJsb2NrLCBibG9ja3MsIHN5bWJvbFRhYmxlLCB0aGlzLmVudik7XG5cbiAgICByZXR1cm4gbmV3IExheW91dChwcm9ncmFtLCBzeW1ib2xUYWJsZSwgbmFtZWQsIHlpZWxkcywgaGFzUGFydGlhbHMpO1xuICB9XG5cbiAgc2NhblBhcnRpYWwoc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKTogUGFydGlhbEJsb2NrIHtcbiAgICBsZXQgeyBibG9jayB9ID0gdGhpcztcbiAgICBsZXQgeyBibG9ja3MsIGxvY2FscyB9ID0gYmxvY2s7XG5cbiAgICBsZXQgcHJvZ3JhbSA9IGJ1aWxkU3RhdGVtZW50cyhibG9jaywgYmxvY2tzLCBzeW1ib2xUYWJsZSwgdGhpcy5lbnYpO1xuXG4gICAgcmV0dXJuIG5ldyBQYXJ0aWFsQmxvY2socHJvZ3JhbSwgc3ltYm9sVGFibGUsIGxvY2Fscyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRTdGF0ZW1lbnRzKHsgc3RhdGVtZW50cyB9OiBTZXJpYWxpemVkQmxvY2ssIGJsb2NrczogU2VyaWFsaXplZEJsb2NrW10sIHN5bWJvbFRhYmxlOiBTeW1ib2xUYWJsZSwgZW52OiBFbnZpcm9ubWVudCk6IFByb2dyYW0ge1xuICBpZiAoc3RhdGVtZW50cy5sZW5ndGggPT09IDApIHJldHVybiBFTVBUWV9QUk9HUkFNO1xuICByZXR1cm4gbmV3IEJsb2NrU2Nhbm5lcihzdGF0ZW1lbnRzLCBibG9ja3MsIHN5bWJvbFRhYmxlLCBlbnYpLnNjYW4oKTtcbn1cblxuY29uc3QgRU1QVFlfUFJPR1JBTSA9IEVNUFRZX1NMSUNFO1xuXG5leHBvcnQgY2xhc3MgQmxvY2tTY2FubmVyIHtcbiAgcHVibGljIGVudjogRW52aXJvbm1lbnQ7XG5cbiAgcHJpdmF0ZSBzdGFjayA9IG5ldyBTdGFjazxDaGlsZEJsb2NrU2Nhbm5lcj4oKTtcbiAgcHJpdmF0ZSByZWFkZXI6IFN5bnRheFJlYWRlcjtcblxuICBjb25zdHJ1Y3RvcihzdGF0ZW1lbnRzOiBTZXJpYWxpemVkU3RhdGVtZW50W10sIHByaXZhdGUgYmxvY2tzOiBTZXJpYWxpemVkQmxvY2tbXSwgcHJpdmF0ZSBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUsIGVudjogRW52aXJvbm1lbnQpIHtcbiAgICB0aGlzLnN0YWNrLnB1c2gobmV3IENoaWxkQmxvY2tTY2FubmVyKHN5bWJvbFRhYmxlKSk7XG4gICAgdGhpcy5yZWFkZXIgPSBuZXcgU3ludGF4UmVhZGVyKHN0YXRlbWVudHMsIHN5bWJvbFRhYmxlLCB0aGlzKTtcbiAgICB0aGlzLmVudiA9IGVudjtcbiAgfVxuXG4gIHNjYW4oKTogUHJvZ3JhbSB7XG4gICAgbGV0IHN0YXRlbWVudDogU3RhdGVtZW50U3ludGF4O1xuXG4gICAgd2hpbGUgKHN0YXRlbWVudCA9IHRoaXMucmVhZGVyLm5leHQoKSkge1xuICAgICAgdGhpcy5hZGRTdGF0ZW1lbnQoc3RhdGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFjay5jdXJyZW50LnByb2dyYW07XG4gIH1cblxuICBibG9ja0ZvcihzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUsIGlkOiBudW1iZXIpOiBJbmxpbmVCbG9jayB7XG4gICAgbGV0IGJsb2NrID0gdGhpcy5ibG9ja3NbaWRdO1xuICAgIGxldCBjaGlsZFRhYmxlID0gU3ltYm9sVGFibGUuZm9yQmxvY2sodGhpcy5zeW1ib2xUYWJsZSwgYmxvY2subG9jYWxzKTtcbiAgICBsZXQgcHJvZ3JhbSA9IGJ1aWxkU3RhdGVtZW50cyhibG9jaywgdGhpcy5ibG9ja3MsIGNoaWxkVGFibGUsIHRoaXMuZW52KTtcbiAgICByZXR1cm4gbmV3IElubGluZUJsb2NrKHByb2dyYW0sIGNoaWxkVGFibGUsIGJsb2NrLmxvY2Fscyk7XG4gIH1cblxuICBzdGFydEJsb2NrKGxvY2Fsczogc3RyaW5nW10pIHtcbiAgICBsZXQgY2hpbGRUYWJsZSA9IFN5bWJvbFRhYmxlLmZvckJsb2NrKHRoaXMuc3ltYm9sVGFibGUsIGxvY2Fscyk7XG4gICAgdGhpcy5zdGFjay5wdXNoKG5ldyBDaGlsZEJsb2NrU2Nhbm5lcihjaGlsZFRhYmxlKSk7XG4gIH1cblxuICBlbmRCbG9jayhsb2NhbHM6IHN0cmluZ1tdKTogSW5saW5lQmxvY2sge1xuICAgIGxldCB7IHByb2dyYW0sIHN5bWJvbFRhYmxlIH0gPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgIGxldCBibG9jayA9IG5ldyBJbmxpbmVCbG9jayhwcm9ncmFtLCBzeW1ib2xUYWJsZSwgbG9jYWxzKTtcbiAgICB0aGlzLmFkZENoaWxkKGJsb2NrKTtcbiAgICByZXR1cm4gYmxvY2s7XG4gIH1cblxuICBhZGRDaGlsZChibG9jazogSW5saW5lQmxvY2spIHtcbiAgICB0aGlzLnN0YWNrLmN1cnJlbnQuYWRkQ2hpbGQoYmxvY2spO1xuICB9XG5cbiAgYWRkU3RhdGVtZW50KHN0YXRlbWVudDogU3RhdGVtZW50U3ludGF4KSB7XG4gICAgdGhpcy5zdGFjay5jdXJyZW50LmFkZFN0YXRlbWVudChzdGF0ZW1lbnQuc2Nhbih0aGlzKSk7XG4gIH1cblxuICBuZXh0KCk6IFN0YXRlbWVudFN5bnRheCB7XG4gICAgcmV0dXJuIHRoaXMucmVhZGVyLm5leHQoKTtcbiAgfVxufVxuXG5jbGFzcyBDaGlsZEJsb2NrU2Nhbm5lciB7XG4gIHB1YmxpYyBjaGlsZHJlbjogSW5saW5lQmxvY2tbXSA9IFtdO1xuICBwdWJsaWMgcHJvZ3JhbSA9IG5ldyBMaW5rZWRMaXN0PFN0YXRlbWVudFN5bnRheD4oKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKSB7fVxuXG4gIGFkZENoaWxkKGJsb2NrOiBJbmxpbmVCbG9jaykge1xuICAgIHRoaXMuY2hpbGRyZW4ucHVzaChibG9jayk7XG4gIH1cblxuICBhZGRTdGF0ZW1lbnQoc3RhdGVtZW50OiBTdGF0ZW1lbnRTeW50YXgpIHtcbiAgICB0aGlzLnByb2dyYW0uYXBwZW5kKHN0YXRlbWVudCk7XG4gIH1cbn1cblxuY2xhc3MgU3ludGF4UmVhZGVyIHtcbiAgY3VycmVudDogbnVtYmVyID0gMDtcbiAgbGFzdDogU3RhdGVtZW50U3ludGF4ID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0YXRlbWVudHM6IFNlcmlhbGl6ZWRTdGF0ZW1lbnRbXSwgcHJpdmF0ZSBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUsIHByaXZhdGUgc2Nhbm5lcjogQmxvY2tTY2FubmVyKSB7fVxuXG4gIG5leHQoKTogU3RhdGVtZW50U3ludGF4IHtcbiAgICBsZXQgbGFzdCA9IHRoaXMubGFzdDtcbiAgICBpZiAobGFzdCkge1xuICAgICAgdGhpcy5sYXN0ID0gbnVsbDtcbiAgICAgIHJldHVybiBsYXN0O1xuICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50ID09PSB0aGlzLnN0YXRlbWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgc2V4cCA9IHRoaXMuc3RhdGVtZW50c1t0aGlzLmN1cnJlbnQrK107XG4gICAgcmV0dXJuIGJ1aWxkU3RhdGVtZW50KHNleHAsIHRoaXMuc3ltYm9sVGFibGUsIHRoaXMuc2Nhbm5lcik7XG4gIH1cbn1cbiJdfQ== -enifed('glimmer-runtime/lib/symbol-table', ['exports', 'glimmer-util'], function (exports, _glimmerUtil) { - 'use strict'; +enifed("htmlbars-runtime/node-visitor", ["exports", "htmlbars-util/morph-utils", "htmlbars-runtime/expression-visitor"], function (exports, _htmlbarsUtilMorphUtils, _htmlbarsRuntimeExpressionVisitor) { + "use strict"; - var SymbolTable = (function () { - function SymbolTable(parent) { - var meta = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; + /** + Node classification: + + # Primary Statement Nodes: + + These nodes are responsible for a render node that represents a morph-range. + + * block + * inline + * content + * element + * component + + # Leaf Statement Nodes: + + This node is responsible for a render node that represents a morph-attr. + + * attribute + */ - this.parent = parent; - this.meta = meta; - this.locals = _glimmerUtil.dict(); - this.named = _glimmerUtil.dict(); - this.yields = _glimmerUtil.dict(); - this.partialArgs = null; - this.size = 1; - this.top = parent ? parent.top : this; - } + function linkParamsAndHash(env, scope, morph, path, params, hash) { + if (morph.linkedParams) { + params = morph.linkedParams.params; + hash = morph.linkedParams.hash; + } else { + params = params && _htmlbarsRuntimeExpressionVisitor.acceptParams(params, env, scope); + hash = hash && _htmlbarsRuntimeExpressionVisitor.acceptHash(hash, env, scope); + } - SymbolTable.forEntryPoint = function forEntryPoint(meta) { - return new SymbolTable(null, meta).initEntryPoint(); - }; + _htmlbarsUtilMorphUtils.linkParams(env, scope, morph, path, params, hash); + return [params, hash]; + } - SymbolTable.forLayout = function forLayout(named, yields, hasPartials, meta) { - return new SymbolTable(null, meta).initLayout(named, yields, hasPartials); - }; + var AlwaysDirtyVisitor = { - SymbolTable.forBlock = function forBlock(parent, locals) { - return new SymbolTable(parent, null).initBlock(locals); - }; + block: function (node, morph, env, scope, template, visitor) { + var path = node[1]; + var params = node[2]; + var hash = node[3]; + var templateId = node[4]; + var inverseId = node[5]; - SymbolTable.prototype.initEntryPoint = function initEntryPoint() { - return this; - }; + var paramsAndHash = linkParamsAndHash(env, scope, morph, path, params, hash); - SymbolTable.prototype.initBlock = function initBlock(locals) { - this.initPositionals(locals); - return this; - }; + morph.isDirty = morph.isSubtreeDirty = false; + env.hooks.block(morph, env, scope, path, paramsAndHash[0], paramsAndHash[1], templateId === null ? null : template.templates[templateId], inverseId === null ? null : template.templates[inverseId], visitor); + }, - SymbolTable.prototype.initLayout = function initLayout(named, yields, hasPartials) { - this.initNamed(named); - this.initYields(yields); - this.initPartials(hasPartials); - return this; - }; + inline: function (node, morph, env, scope, visitor) { + var path = node[1]; + var params = node[2]; + var hash = node[3]; - SymbolTable.prototype.initPositionals = function initPositionals(positionals) { - var _this = this; + var paramsAndHash = linkParamsAndHash(env, scope, morph, path, params, hash); - if (positionals) positionals.forEach(function (s) { - return _this.locals[s] = _this.top.size++; - }); - return this; - }; + morph.isDirty = morph.isSubtreeDirty = false; + env.hooks.inline(morph, env, scope, path, paramsAndHash[0], paramsAndHash[1], visitor); + }, - SymbolTable.prototype.initNamed = function initNamed(named) { - var _this2 = this; + content: function (node, morph, env, scope, visitor) { + var path = node[1]; - if (named) named.forEach(function (s) { - return _this2.named[s] = _this2.top.size++; - }); - return this; - }; + morph.isDirty = morph.isSubtreeDirty = false; - SymbolTable.prototype.initYields = function initYields(yields) { - var _this3 = this; - - if (yields) yields.forEach(function (b) { - return _this3.yields[b] = _this3.top.size++; - }); - return this; - }; - - SymbolTable.prototype.initPartials = function initPartials(hasPartials) { - if (hasPartials) this.top.partialArgs = this.top.size++; - return this; - }; - - SymbolTable.prototype.getMeta = function getMeta() { - var meta = this.meta; - var parent = this.parent; - - if (!meta && parent) { - meta = parent.getMeta(); - } - return meta; - }; - - SymbolTable.prototype.getYield = function getYield(name) { - var yields = this.yields; - var parent = this.parent; - - var symbol = yields[name]; - if (!symbol && parent) { - symbol = parent.getYield(name); - } - return symbol; - }; - - SymbolTable.prototype.getNamed = function getNamed(name) { - var named = this.named; - var parent = this.parent; - - var symbol = named[name]; - if (!symbol && parent) { - symbol = parent.getNamed(name); - } - return symbol; - }; - - SymbolTable.prototype.getLocal = function getLocal(name) { - var locals = this.locals; - var parent = this.parent; - - var symbol = locals[name]; - if (!symbol && parent) { - symbol = parent.getLocal(name); - } - return symbol; - }; - - SymbolTable.prototype.getPartialArgs = function getPartialArgs() { - return this.top.partialArgs; - }; - - SymbolTable.prototype.isTop = function isTop() { - return this.top === this; - }; - - return SymbolTable; - })(); - - exports.default = SymbolTable; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvc3ltYm9sLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztRQUdBLFdBQUE7QUFvQkUsaUJBcEJGLFdBQUEsQ0FvQnNCLE1BQW1CLEVBQW1DO2dCQUF6QixJQUFJLHlEQUFpQixJQUFJOztBQUF0RCxnQkFBQSxDQUFBLE1BQU0sR0FBTixNQUFNLENBQWE7QUFBVSxnQkFBQSxDQUFBLElBQUksR0FBSixJQUFJLENBQXFCO0FBTmxFLGdCQUFBLENBQUEsTUFBTSxHQUFHLGFBakJWLElBQUksRUFpQm9CLENBQUM7QUFDeEIsZ0JBQUEsQ0FBQSxLQUFLLEdBQUcsYUFsQlQsSUFBSSxFQWtCbUIsQ0FBQztBQUN2QixnQkFBQSxDQUFBLE1BQU0sR0FBRyxhQW5CVixJQUFJLEVBbUJvQixDQUFDO0FBQ3hCLGdCQUFBLENBQUEsV0FBVyxHQUFXLElBQUksQ0FBQztBQUM1QixnQkFBQSxDQUFBLElBQUksR0FBRyxDQUFDLENBQUM7QUFHZCxnQkFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7U0FDdkM7O0FBdEJILG1CQUFBLENBQ1MsYUFBYSxHQUFBLHVCQUFDLElBQWtCLEVBQUE7QUFDckMsbUJBQU8sSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3JEOztBQUhILG1CQUFBLENBS1MsU0FBUyxHQUFBLG1CQUFDLEtBQWUsRUFBRSxNQUFnQixFQUFFLFdBQW9CLEVBQUUsSUFBa0IsRUFBQTtBQUMxRixtQkFBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDM0U7O0FBUEgsbUJBQUEsQ0FTUyxRQUFRLEdBQUEsa0JBQUMsTUFBbUIsRUFBRSxNQUFnQixFQUFBO0FBQ25ELG1CQUFPLElBQUks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QUFNLEdBQUssSUFBSSxDQUFmLE1BQU07O0FBRW5CLGdCQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFekIsZ0JBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxFQUFFO0FBQ3JCLHNCQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNoQztBQUVELG1CQUFPLE1BQU0sQ0FBQztTQUNmOztBQTVGSCxtQkFBQSxXQThGRSxRQUFRLEdBQUEsa0JBQUMsSUFBWSxFQUFBO2dCQUNiLE1BQU0sR0FBYSxJQUFJLENBQXZCLE1BQU07Z0JBQUUsTUFBTSxHQUFLLElBQUksQ0FBZixNQUFNOztBQUVwQixnQkFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRTFCLGdCQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sRUFBRTtBQUNyQixzQkFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEM7QUFFRCxtQkFBTyxNQUFNLENBQUM7U0FDZjs7QUF4R0gsbUJBQUEsV0EwR0UsY0FBYyxHQUFBLDBCQUFBO0FBQ1osbUJBQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7U0FDN0I7O0FBNUdILG1CQUFBLFdBOEdFLEtBQUssR0FBQSxpQkFBQTtBQUNILG1CQUFPLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDO1NBQzFCOztlQWhISCxXQUFBOzs7c0JBQUEsV0FBQSIsImZpbGUiOiJzeW1ib2wtdGFibGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkaWN0IH0gZnJvbSAnZ2xpbW1lci11dGlsJztcbmltcG9ydCB7IFRlbXBsYXRlTWV0YSB9IGZyb20gJ2dsaW1tZXItd2lyZS1mb3JtYXQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTeW1ib2xUYWJsZSB7XG4gIHN0YXRpYyBmb3JFbnRyeVBvaW50KG1ldGE6IFRlbXBsYXRlTWV0YSk6IFN5bWJvbFRhYmxlIHtcbiAgICByZXR1cm4gbmV3IFN5bWJvbFRhYmxlKG51bGwsIG1ldGEpLmluaXRFbnRyeVBvaW50KCk7XG4gIH1cblxuICBzdGF0aWMgZm9yTGF5b3V0KG5hbWVkOiBzdHJpbmdbXSwgeWllbGRzOiBzdHJpbmdbXSwgaGFzUGFydGlhbHM6IGJvb2xlYW4sIG1ldGE6IFRlbXBsYXRlTWV0YSk6IFN5bWJvbFRhYmxlIHtcbiAgICByZXR1cm4gbmV3IFN5bWJvbFRhYmxlKG51bGwsIG1ldGEpLmluaXRMYXlvdXQobmFtZWQsIHlpZWxkcywgaGFzUGFydGlhbHMpO1xuICB9XG5cbiAgc3RhdGljIGZvckJsb2NrKHBhcmVudDogU3ltYm9sVGFibGUsIGxvY2Fsczogc3RyaW5nW10pOiBTeW1ib2xUYWJsZSB7XG4gICAgcmV0dXJuIG5ldyBTeW1ib2xUYWJsZShwYXJlbnQsIG51bGwpLmluaXRCbG9jayhsb2NhbHMpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b3A6IFN5bWJvbFRhYmxlO1xuICBwcml2YXRlIGxvY2FscyA9IGRpY3Q8bnVtYmVyPigpO1xuICBwcml2YXRlIG5hbWVkID0gZGljdDxudW1iZXI+KCk7XG4gIHByaXZhdGUgeWllbGRzID0gZGljdDxudW1iZXI+KCk7XG4gIHByaXZhdGUgcGFydGlhbEFyZ3M6IG51bWJlciA9IG51bGw7XG4gIHB1YmxpYyBzaXplID0gMTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhcmVudDogU3ltYm9sVGFibGUsIHByaXZhdGUgbWV0YTogVGVtcGxhdGVNZXRhID0gbnVsbCkge1xuICAgIHRoaXMudG9wID0gcGFyZW50ID8gcGFyZW50LnRvcCA6IHRoaXM7XG4gIH1cblxuICBpbml0RW50cnlQb2ludCgpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGluaXRCbG9jayhsb2NhbHM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgdGhpcy5pbml0UG9zaXRpb25hbHMobG9jYWxzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGluaXRMYXlvdXQobmFtZWQ6IHN0cmluZ1tdLCB5aWVsZHM6IHN0cmluZ1tdLCBoYXNQYXJ0aWFsczogYm9vbGVhbik6IHRoaXMge1xuICAgIHRoaXMuaW5pdE5hbWVkKG5hbWVkKTtcbiAgICB0aGlzLmluaXRZaWVsZHMoeWllbGRzKTtcbiAgICB0aGlzLmluaXRQYXJ0aWFscyhoYXNQYXJ0aWFscyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpbml0UG9zaXRpb25hbHMocG9zaXRpb25hbHM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgaWYgKHBvc2l0aW9uYWxzKSBwb3NpdGlvbmFscy5mb3JFYWNoKHMgPT4gdGhpcy5sb2NhbHNbc10gPSB0aGlzLnRvcC5zaXplKyspO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaW5pdE5hbWVkKG5hbWVkOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgIGlmIChuYW1lZCkgbmFtZWQuZm9yRWFjaChzID0+IHRoaXMubmFtZWRbc10gPSB0aGlzLnRvcC5zaXplKyspO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaW5pdFlpZWxkcyh5aWVsZHM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgaWYgKHlpZWxkcykgeWllbGRzLmZvckVhY2goYiA9PiB0aGlzLnlpZWxkc1tiXSA9IHRoaXMudG9wLnNpemUrKyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpbml0UGFydGlhbHMoaGFzUGFydGlhbHM6IGJvb2xlYW4pOiB0aGlzIHtcbiAgICBpZiAoaGFzUGFydGlhbHMpIHRoaXMudG9wLnBhcnRpYWxBcmdzID0gdGhpcy50b3Auc2l6ZSsrO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0TWV0YSgpOiBUZW1wbGF0ZU1ldGEge1xuICAgIGxldCB7IG1ldGEsIHBhcmVudCB9ID0gdGhpcztcblxuICAgIGlmICghbWV0YSAmJiBwYXJlbnQpIHtcbiAgICAgIG1ldGEgPSBwYXJlbnQuZ2V0TWV0YSgpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhO1xuICB9XG5cbiAgZ2V0WWllbGQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgeyB5aWVsZHMsIHBhcmVudCB9ID0gdGhpcztcblxuICAgIGxldCBzeW1ib2wgPSB5aWVsZHNbbmFtZV07XG5cbiAgICBpZiAoIXN5bWJvbCAmJiBwYXJlbnQpIHtcbiAgICAgIHN5bWJvbCA9IHBhcmVudC5nZXRZaWVsZChuYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG5cbiAgZ2V0TmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgeyBuYW1lZCwgcGFyZW50IH0gPSB0aGlzO1xuXG4gICAgbGV0IHN5bWJvbCA9IG5hbWVkW25hbWVdO1xuXG4gICAgaWYgKCFzeW1ib2wgJiYgcGFyZW50KSB7XG4gICAgICBzeW1ib2wgPSBwYXJlbnQuZ2V0TmFtZWQobmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfVxuXG4gIGdldExvY2FsKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IHsgbG9jYWxzLCBwYXJlbnQgfSA9IHRoaXM7XG5cbiAgICBsZXQgc3ltYm9sID0gbG9jYWxzW25hbWVdO1xuXG4gICAgaWYgKCFzeW1ib2wgJiYgcGFyZW50KSB7XG4gICAgICBzeW1ib2wgPSBwYXJlbnQuZ2V0TG9jYWwobmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfVxuXG4gIGdldFBhcnRpYWxBcmdzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG9wLnBhcnRpYWxBcmdzO1xuICB9XG5cbiAgaXNUb3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudG9wID09PSB0aGlzO1xuICB9XG59XG4iXX0= -enifed("glimmer-runtime/lib/syntax", ["exports"], function (exports) { - "use strict"; - - exports.isAttribute = isAttribute; - - var Statement = (function () { - function Statement() { - this.next = null; - this.prev = null; + if (isHelper(env, scope, path)) { + env.hooks.inline(morph, env, scope, path, [], {}, visitor); + if (morph.linkedResult) { + _htmlbarsUtilMorphUtils.linkParams(env, scope, morph, '@content-helper', [morph.linkedResult], null); } + return; + } - Statement.fromSpec = function fromSpec(spec, symbolTable, scanner) { - throw new Error("You need to implement fromSpec on " + this); - }; + var params = undefined; + if (morph.linkedParams) { + params = morph.linkedParams.params; + } else { + params = [env.hooks.get(env, scope, path)]; + } - Statement.prototype.clone = function clone() { - // not type safe but the alternative is extreme boilerplate per - // syntax subclass. - return new this.constructor(this); - }; + _htmlbarsUtilMorphUtils.linkParams(env, scope, morph, '@range', params, null); + env.hooks.range(morph, env, scope, path, params[0], visitor); + }, - Statement.prototype.scan = function scan(scanner) { - return this; - }; + element: function (node, morph, env, scope, visitor) { + var path = node[1]; + var params = node[2]; + var hash = node[3]; - return Statement; - })(); + var paramsAndHash = linkParamsAndHash(env, scope, morph, path, params, hash); - exports.Statement = Statement; + morph.isDirty = morph.isSubtreeDirty = false; + env.hooks.element(morph, env, scope, path, paramsAndHash[0], paramsAndHash[1], visitor); + }, - var Expression = (function () { - function Expression() {} + attribute: function (node, morph, env, scope) { + var name = node[1]; + var value = node[2]; - Expression.fromSpec = function fromSpec(spec, blocks) { - throw new Error("You need to implement fromSpec on " + this); - }; + var paramsAndHash = linkParamsAndHash(env, scope, morph, '@attribute', [value], null); - return Expression; - })(); + morph.isDirty = morph.isSubtreeDirty = false; + env.hooks.attribute(morph, env, scope, name, paramsAndHash[0][0]); + }, - exports.Expression = Expression; - var ATTRIBUTE = "e1185d30-7cac-4b12-b26a-35327d905d92"; - exports.ATTRIBUTE = ATTRIBUTE; - var ARGUMENT = "0f3802314-d747-bbc5-0168-97875185c3rt"; - exports.ARGUMENT = ARGUMENT; + component: function (node, morph, env, scope, template, visitor) { + var path = node[1]; + var attrs = node[2]; + var templateId = node[3]; + var inverseId = node[4]; - var Attribute = (function (_Statement) { - babelHelpers.inherits(Attribute, _Statement); + var paramsAndHash = linkParamsAndHash(env, scope, morph, path, [], attrs); + var templates = { + default: template.templates[templateId], + inverse: template.templates[inverseId] + }; - function Attribute() { - _Statement.apply(this, arguments); - this["e1185d30-7cac-4b12-b26a-35327d905d92"] = true; - } + morph.isDirty = morph.isSubtreeDirty = false; + env.hooks.component(morph, env, scope, path, paramsAndHash[0], paramsAndHash[1], templates, visitor); + }, - return Attribute; - })(Statement); + attributes: function (node, morph, env, scope, parentMorph, visitor) { + var template = node[1]; - exports.Attribute = Attribute; - - var Argument = (function (_Statement2) { - babelHelpers.inherits(Argument, _Statement2); - - function Argument() { - _Statement2.apply(this, arguments); - this["0f3802314-d747-bbc5-0168-97875185c3rt"] = true; - } - - return Argument; - })(Statement); - - exports.Argument = Argument; - - function isAttribute(value) { - return value && value[ATTRIBUTE] === true; + env.hooks.attributes(morph, env, scope, template, parentMorph, visitor); } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvc3ludGF4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O1FBbUJBLFNBQUE7QUFBQSxpQkFBQSxTQUFBLEdBQUE7QUFNUyxnQkFBQSxDQUFBLElBQUksR0FBYyxJQUFJLENBQUM7QUFDdkIsZ0JBQUEsQ0FBQSxJQUFJLEdBQWMsSUFBSSxDQUFDO1NBYS9COztBQXBCRCxpQkFBQSxDQUNTLFFBQVEsR0FBQSxrQkFBZ0MsSUFBTyxFQUFFLFdBQXdCLEVBQUUsT0FBc0IsRUFBQTtBQUN0RyxrQkFBTSxJQUFJLEtBQUssd0NBQXNDLElBQUksQ0FBRyxDQUFDO1NBQzlEOztBQUhILGlCQUFBLFdBU0UsS0FBSyxHQUFBLGlCQUFBOzs7QUFHSCxtQkFBTyxJQUF1QixJQUFJLENBQUMsV0FBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZEOztBQWJILGlCQUFBLFdBaUJFLElBQUksR0FBQSxjQUFDLE9BQXFCLEVBQUE7QUFDeEIsbUJBQU8sSUFBSSxDQUFDO1NBQ2I7O2VBbkJILFNBQUE7Ozs7O1FBOEJBLFVBQUE7aUJBQUEsVUFBQTs7QUFBQSxrQkFBQSxDQUNTLFFBQVEsR0FBQSxrQkFBMEQsSUFBTyxFQUFFLE1BQXNCLEVBQUE7QUFDdEcsa0JBQU0sSUFBSSxLQUFLLHdDQUFzQyxJQUFJLENBQUcsQ0FBQztTQUM5RDs7ZUFISCxVQUFBOzs7O0FBZ0NPLFFBQU0sU0FBUyxHQUFHLHNDQUFzQyxDQUFDOztBQUN6RCxRQUFNLFFBQVEsR0FBRyx1Q0FBdUMsQ0FBQzs7O1FBSWhFLFNBQUE7OEJBQUEsU0FBQTs7QUFBQSxpQkFBQSxTQUFBLEdBQUE7QUFBMkMsbUNBQUEsU0FBQSxDQUFBLENBQVM7QUFDbEQsZ0JBQUEsQ0FBQSxzQ0FBQSxDQUFzQyxHQUFHLElBQUksQ0FBQztTQUkvQzs7ZUFMRCxTQUFBO09BQTJDLFNBQVM7Ozs7UUFPcEQsUUFBQTs4QkFBQSxRQUFBOztBQUFBLGlCQUFBLFFBQUEsR0FBQTtBQUEwQyxvQ0FBQSxTQUFBLENBQUEsQ0FBUztBQUNqRCxnQkFBQSxDQUFBLHVDQUFBLENBQXVDLEdBQUcsSUFBSSxDQUFDO1NBSWhEOztlQUxELFFBQUE7T0FBMEMsU0FBUzs7OztBQU9uRCxhQUFBLFdBQUEsQ0FBNEIsS0FBZ0IsRUFBQTtBQUMxQyxlQUFPLEtBQUssSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDO0tBQzNDIiwiZmlsZSI6InN5bnRheC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpbmtlZExpc3ROb2RlLCBTbGljZSB9IGZyb20gJ2dsaW1tZXItdXRpbCc7XG5pbXBvcnQgeyBCbG9ja1NjYW5uZXIgfSBmcm9tICcuL3NjYW5uZXInO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuL2Vudmlyb25tZW50JztcbmltcG9ydCB7IENvbXBpbGVkRXhwcmVzc2lvbiB9IGZyb20gJy4vY29tcGlsZWQvZXhwcmVzc2lvbnMnO1xuaW1wb3J0IHsgT3Bjb2RlLCBPcFNlcSB9IGZyb20gJy4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBJbmxpbmVCbG9jayB9IGZyb20gJy4vY29tcGlsZWQvYmxvY2tzJztcbmltcG9ydCBTeW1ib2xUYWJsZSBmcm9tICcuL3N5bWJvbC10YWJsZSc7XG5cbmltcG9ydCB7IENvbXBvbmVudEJ1aWxkZXIgfSBmcm9tICcuL29wY29kZS1idWlsZGVyJztcblxuaW1wb3J0IHtcbiAgU3RhdGVtZW50IGFzIFNlcmlhbGl6ZWRTdGF0ZW1lbnQsXG4gIEV4cHJlc3Npb24gYXMgU2VyaWFsaXplZEV4cHJlc3Npb25cbn0gZnJvbSAnZ2xpbW1lci13aXJlLWZvcm1hdCc7XG5cbmludGVyZmFjZSBTdGF0ZW1lbnRDbGFzczxUIGV4dGVuZHMgU2VyaWFsaXplZFN0YXRlbWVudCwgVSBleHRlbmRzIFN0YXRlbWVudD4ge1xuICBmcm9tU3BlYyhzcGVjOiBULCBibG9ja3M/OiBJbmxpbmVCbG9ja1tdKTogVTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN0YXRlbWVudCBpbXBsZW1lbnRzIExpbmtlZExpc3ROb2RlIHtcbiAgc3RhdGljIGZyb21TcGVjPFQgZXh0ZW5kcyBTZXJpYWxpemVkU3RhdGVtZW50PihzcGVjOiBULCBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUsIHNjYW5uZXI/OiBCbG9ja1NjYW5uZXIpOiBTdGF0ZW1lbnQge1xuICAgIHRocm93IG5ldyBFcnJvcihgWW91IG5lZWQgdG8gaW1wbGVtZW50IGZyb21TcGVjIG9uICR7dGhpc31gKTtcbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCB0eXBlOiBzdHJpbmc7XG4gIHB1YmxpYyBuZXh0OiBTdGF0ZW1lbnQgPSBudWxsO1xuICBwdWJsaWMgcHJldjogU3RhdGVtZW50ID0gbnVsbDtcblxuICBjbG9uZSgpOiB0aGlzIHtcbiAgICAvLyBub3QgdHlwZSBzYWZlIGJ1dCB0aGUgYWx0ZXJuYXRpdmUgaXMgZXh0cmVtZSBib2lsZXJwbGF0ZSBwZXJcbiAgICAvLyBzeW50YXggc3ViY2xhc3MuXG4gICAgcmV0dXJuIG5ldyAoPG5ldyAoYW55KSA9PiBhbnk+dGhpcy5jb25zdHJ1Y3RvcikodGhpcyk7XG4gIH1cblxuICBhYnN0cmFjdCBjb21waWxlKG9wY29kZXM6IFN0YXRlbWVudENvbXBpbGF0aW9uQnVmZmVyLCBlbnY6IEVudmlyb25tZW50LCBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpO1xuXG4gIHNjYW4oc2Nhbm5lcjogQmxvY2tTY2FubmVyKTogU3RhdGVtZW50IHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5pbnRlcmZhY2UgRXhwcmVzc2lvbkNsYXNzPFQgZXh0ZW5kcyBTZXJpYWxpemVkRXhwcmVzc2lvbiwgVSBleHRlbmRzIEV4cHJlc3Npb248VD4+IHtcbiAgZnJvbVNwZWMoc3BlYzogVCwgYmxvY2tzPzogSW5saW5lQmxvY2tbXSk6IFU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGlsZXNJbnRvPFQ+IHtcbiAgY29tcGlsZShkc2w6IFN5bWJvbExvb2t1cCwgZW52OiBFbnZpcm9ubWVudCwgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKTogVDtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEV4cHJlc3Npb248VD4gaW1wbGVtZW50cyBDb21waWxlc0ludG88Q29tcGlsZWRFeHByZXNzaW9uPFQ+PiB7XG4gIHN0YXRpYyBmcm9tU3BlYzxUIGV4dGVuZHMgU2VyaWFsaXplZEV4cHJlc3Npb24sIFUgZXh0ZW5kcyBFeHByZXNzaW9uPFQ+PihzcGVjOiBULCBibG9ja3M/OiBJbmxpbmVCbG9ja1tdKTogVSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbmVlZCB0byBpbXBsZW1lbnQgZnJvbVNwZWMgb24gJHt0aGlzfWApO1xuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IHR5cGU6IHN0cmluZztcblxuICBhYnN0cmFjdCBjb21waWxlKGRzbDogU3ltYm9sTG9va3VwLCBlbnY6IEVudmlyb25tZW50LCBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpOiBDb21waWxlZEV4cHJlc3Npb248VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ltYm9sTG9va3VwIHtcbiAgZ2V0TG9jYWxTeW1ib2wobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBoYXNMb2NhbFN5bWJvbChuYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuICBnZXROYW1lZFN5bWJvbChuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIGhhc05hbWVkU3ltYm9sKG5hbWU6IHN0cmluZyk6IGJvb2xlYW47XG4gIGdldEJsb2NrU3ltYm9sKG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgaGFzQmxvY2tTeW1ib2wobmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbiAgZ2V0UGFydGlhbEFyZ3NTeW1ib2woKTogbnVtYmVyO1xuICBoYXNQYXJ0aWFsQXJnc1N5bWJvbCgpOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVJbnRvIHtcbiAgYXBwZW5kKG9wOiBPcGNvZGUpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlbWVudENvbXBpbGF0aW9uQnVmZmVyIGV4dGVuZHMgQ29tcGlsZUludG8sIFN5bWJvbExvb2t1cCB7XG4gIGNvbXBvbmVudDogQ29tcG9uZW50QnVpbGRlcjtcbiAgdG9PcFNlcSgpOiBPcFNlcTtcbn1cblxuZXhwb3J0IHR5cGUgUHJvZ3JhbSA9IFNsaWNlPFN0YXRlbWVudD47XG5cbmV4cG9ydCBjb25zdCBBVFRSSUJVVEUgPSBcImUxMTg1ZDMwLTdjYWMtNGIxMi1iMjZhLTM1MzI3ZDkwNWQ5MlwiO1xuZXhwb3J0IGNvbnN0IEFSR1VNRU5UID0gXCIwZjM4MDIzMTQtZDc0Ny1iYmM1LTAxNjgtOTc4NzUxODVjM3J0XCI7XG5cbmV4cG9ydCB0eXBlIFBhcmFtZXRlcjxUPiA9IEF0dHJpYnV0ZTxUPiB8IEFyZ3VtZW50PFQ+O1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXR0cmlidXRlPFQ+IGV4dGVuZHMgU3RhdGVtZW50IHtcbiAgXCJlMTE4NWQzMC03Y2FjLTRiMTItYjI2YS0zNTMyN2Q5MDVkOTJcIiA9IHRydWU7XG4gIG5hbWU6IHN0cmluZztcbiAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gIGFic3RyYWN0IHZhbHVlU3ludGF4KCk6IEV4cHJlc3Npb248VD47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBcmd1bWVudDxUPiBleHRlbmRzIFN0YXRlbWVudCB7XG4gIFwiMGYzODAyMzE0LWQ3NDctYmJjNS0wMTY4LTk3ODc1MTg1YzNydFwiID0gdHJ1ZTtcbiAgbmFtZTogc3RyaW5nO1xuICBuYW1lc3BhY2U6IHN0cmluZztcbiAgYWJzdHJhY3QgdmFsdWVTeW50YXgoKTogRXhwcmVzc2lvbjxUPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXR0cmlidXRlKHZhbHVlOiBTdGF0ZW1lbnQpOiB2YWx1ZSBpcyBBdHRyaWJ1dGU8YW55PiB7XG4gIHJldHVybiB2YWx1ZSAmJiB2YWx1ZVtBVFRSSUJVVEVdID09PSB0cnVlO1xufVxuIl19 -enifed('glimmer-runtime/lib/syntax/builtins/each', ['exports', 'glimmer-runtime/lib/syntax'], function (exports, _glimmerRuntimeLibSyntax) { - 'use strict'; - var EachSyntax = (function (_StatementSyntax) { - babelHelpers.inherits(EachSyntax, _StatementSyntax); + }; - function EachSyntax(_ref) { - var args = _ref.args; - var templates = _ref.templates; + exports.AlwaysDirtyVisitor = AlwaysDirtyVisitor; + exports.default = { + block: function (node, morph, env, scope, template, visitor) { + dirtyCheck(env, morph, visitor, function (visitor) { + AlwaysDirtyVisitor.block(node, morph, env, scope, template, visitor); + }); + }, - _StatementSyntax.call(this); - this.type = "each-statement"; - this.isStatic = false; - this.args = args; - this.templates = templates; - } + inline: function (node, morph, env, scope, visitor) { + dirtyCheck(env, morph, visitor, function (visitor) { + AlwaysDirtyVisitor.inline(node, morph, env, scope, visitor); + }); + }, - EachSyntax.prototype.compile = function compile(dsl, env) { - // Enter(BEGIN, END) - // BEGIN: Noop - // PutArgs - // PutIterable - // JumpUnless(ELSE) - // EnterList(BEGIN2, END2) - // ITER: Noop - // NextIter(BREAK) - // EnterWithKey(BEGIN2, END2) - // BEGIN2: Noop - // PushChildScope - // Evaluate(default) - // PopScope - // END2: Noop - // Exit - // Jump(ITER) - // BREAK: Noop - // ExitList - // Jump(END) - // ELSE: Noop - // Evalulate(inverse) - // END: Noop - // Exit - var args = this.args; - var templates = this.templates; + content: function (node, morph, env, scope, visitor) { + dirtyCheck(env, morph, visitor, function (visitor) { + AlwaysDirtyVisitor.content(node, morph, env, scope, visitor); + }); + }, - dsl.block({ templates: templates, args: args }, function (dsl, BEGIN, END) { - dsl.putIterator(); - if (templates.inverse) { - dsl.jumpUnless('ELSE'); - } else { - dsl.jumpUnless(END); - } - dsl.iter({ templates: templates }, function (dsl, BEGIN, END) { - dsl.evaluate('default'); - }); - if (templates.inverse) { - dsl.jump(END); - dsl.label('ELSE'); - dsl.evaluate('inverse'); - } - }); - }; + element: function (node, morph, env, scope, template, visitor) { + dirtyCheck(env, morph, visitor, function (visitor) { + AlwaysDirtyVisitor.element(node, morph, env, scope, template, visitor); + }); + }, - return EachSyntax; - })(_glimmerRuntimeLibSyntax.Statement); + attribute: function (node, morph, env, scope, template) { + dirtyCheck(env, morph, null, function () { + AlwaysDirtyVisitor.attribute(node, morph, env, scope, template); + }); + }, - exports.default = EachSyntax; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvc3ludGF4L2J1aWx0aW5zL2VhY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O1FBVUEsVUFBQTs4QkFBQSxVQUFBOztBQU9FLGlCQVBGLFVBQUEsQ0FPYyxJQUF1RSxFQUFBO2dCQUFyRSxJQUFJLEdBQU4sSUFBdUUsQ0FBckUsSUFBSTtnQkFBRSxTQUFTLEdBQWpCLElBQXVFLENBQS9ELFNBQVM7O0FBQzNCLHVDQUFPLENBQUM7QUFQVixnQkFBQSxDQUFBLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztBQUlqQixnQkFBQSxDQUFBLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFJdEIsZ0JBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLGdCQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztTQUM1Qjs7QUFYSCxrQkFBQSxXQWFFLE9BQU8sR0FBQSxpQkFBQyxHQUFxQixFQUFFLEdBQWdCLEVBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQkF5QnZDLElBQUksR0FBZ0IsSUFBSSxDQUF4QixJQUFJO2dCQUFFLFNBQVMsR0FBSyxJQUFJLENBQWxCLFNBQVM7O0FBRXJCLGVBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQVQsU0FBUyxFQUFFLElBQUksRUFBSixJQUFJLEVBQUUsRUFBRSxVQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFBO0FBQzdDLG1CQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7QUFFbEIsb0JBQUksU0FBUyxDQUFDLE9BQU8sRUFBRTtBQUNyQix1QkFBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDeEIsTUFBTTtBQUNMLHVCQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNyQjtBQUVELG1CQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFULFNBQVMsRUFBRSxFQUFFLFVBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUE7QUFDdEMsdUJBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3pCLENBQUMsQ0FBQztBQUVILG9CQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUU7QUFDckIsdUJBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCx1QkFBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQix1QkFBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDekI7YUFDRixDQUFDLENBQUM7U0FDSjs7ZUEzREgsVUFBQTtnQ0FURSxTQUFTOztzQkFTWCxVQUFBIiwiZmlsZSI6ImVhY2guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTdGF0ZW1lbnQgYXMgU3RhdGVtZW50U3ludGF4XG59IGZyb20gJy4uLy4uL3N5bnRheCc7XG5cbmltcG9ydCAqIGFzIFN5bnRheCBmcm9tICcuLi9jb3JlJztcblxuaW1wb3J0IE9wY29kZUJ1aWxkZXJEU0wgZnJvbSAnLi4vLi4vY29tcGlsZWQvb3Bjb2Rlcy9idWlsZGVyJztcblxuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWFjaFN5bnRheCBleHRlbmRzIFN0YXRlbWVudFN5bnRheCB7XG4gIHR5cGUgPSBcImVhY2gtc3RhdGVtZW50XCI7XG5cbiAgcHVibGljIGFyZ3M6IFN5bnRheC5BcmdzO1xuICBwdWJsaWMgdGVtcGxhdGVzOiBTeW50YXguVGVtcGxhdGVzO1xuICBwdWJsaWMgaXNTdGF0aWMgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcih7IGFyZ3MsIHRlbXBsYXRlcyB9OiB7IGFyZ3M6IFN5bnRheC5BcmdzLCB0ZW1wbGF0ZXM6IFN5bnRheC5UZW1wbGF0ZXMgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB0aGlzLnRlbXBsYXRlcyA9IHRlbXBsYXRlcztcbiAgfVxuXG4gIGNvbXBpbGUoZHNsOiBPcGNvZGVCdWlsZGVyRFNMLCBlbnY6IEVudmlyb25tZW50KSB7XG4gICAgLy8gICAgICAgICBFbnRlcihCRUdJTiwgRU5EKVxuICAgIC8vIEJFR0lOOiAgTm9vcFxuICAgIC8vICAgICAgICAgUHV0QXJnc1xuICAgIC8vICAgICAgICAgUHV0SXRlcmFibGVcbiAgICAvLyAgICAgICAgIEp1bXBVbmxlc3MoRUxTRSlcbiAgICAvLyAgICAgICAgIEVudGVyTGlzdChCRUdJTjIsIEVORDIpXG4gICAgLy8gSVRFUjogICBOb29wXG4gICAgLy8gICAgICAgICBOZXh0SXRlcihCUkVBSylcbiAgICAvLyAgICAgICAgIEVudGVyV2l0aEtleShCRUdJTjIsIEVORDIpXG4gICAgLy8gQkVHSU4yOiBOb29wXG4gICAgLy8gICAgICAgICBQdXNoQ2hpbGRTY29wZVxuICAgIC8vICAgICAgICAgRXZhbHVhdGUoZGVmYXVsdClcbiAgICAvLyAgICAgICAgIFBvcFNjb3BlXG4gICAgLy8gRU5EMjogICBOb29wXG4gICAgLy8gICAgICAgICBFeGl0XG4gICAgLy8gICAgICAgICBKdW1wKElURVIpXG4gICAgLy8gQlJFQUs6ICBOb29wXG4gICAgLy8gICAgICAgICBFeGl0TGlzdFxuICAgIC8vICAgICAgICAgSnVtcChFTkQpXG4gICAgLy8gRUxTRTogICBOb29wXG4gICAgLy8gICAgICAgICBFdmFsdWxhdGUoaW52ZXJzZSlcbiAgICAvLyBFTkQ6ICAgIE5vb3BcbiAgICAvLyAgICAgICAgIEV4aXRcblxuICAgIGxldCB7IGFyZ3MsIHRlbXBsYXRlcyB9ID0gdGhpcztcblxuICAgIGRzbC5ibG9jayh7IHRlbXBsYXRlcywgYXJncyB9LCAoZHNsLCBCRUdJTiwgRU5EKSA9PiB7XG4gICAgICBkc2wucHV0SXRlcmF0b3IoKTtcblxuICAgICAgaWYgKHRlbXBsYXRlcy5pbnZlcnNlKSB7XG4gICAgICAgIGRzbC5qdW1wVW5sZXNzKCdFTFNFJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkc2wuanVtcFVubGVzcyhFTkQpO1xuICAgICAgfVxuXG4gICAgICBkc2wuaXRlcih7IHRlbXBsYXRlcyB9LCAoZHNsLCBCRUdJTiwgRU5EKSA9PiB7XG4gICAgICAgIGRzbC5ldmFsdWF0ZSgnZGVmYXVsdCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0ZW1wbGF0ZXMuaW52ZXJzZSkge1xuICAgICAgICBkc2wuanVtcChFTkQpO1xuICAgICAgICBkc2wubGFiZWwoJ0VMU0UnKTtcbiAgICAgICAgZHNsLmV2YWx1YXRlKCdpbnZlcnNlJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ== -enifed('glimmer-runtime/lib/syntax/builtins/if', ['exports', 'glimmer-runtime/lib/syntax'], function (exports, _glimmerRuntimeLibSyntax) { - 'use strict'; + component: function (node, morph, env, scope, template, visitor) { + dirtyCheck(env, morph, visitor, function (visitor) { + AlwaysDirtyVisitor.component(node, morph, env, scope, template, visitor); + }); + }, - var IfSyntax = (function (_StatementSyntax) { - babelHelpers.inherits(IfSyntax, _StatementSyntax); + attributes: function (node, morph, env, scope, parentMorph, visitor) { + AlwaysDirtyVisitor.attributes(node, morph, env, scope, parentMorph, visitor); + } + }; - function IfSyntax(_ref) { - var args = _ref.args; - var templates = _ref.templates; + function dirtyCheck(_env, morph, visitor, callback) { + var isDirty = morph.isDirty; + var isSubtreeDirty = morph.isSubtreeDirty; + var env = _env; - _StatementSyntax.call(this); - this.type = "if-statement"; - this.isStatic = false; - this.args = args; - this.templates = templates; - } + if (isSubtreeDirty) { + visitor = AlwaysDirtyVisitor; + } - IfSyntax.prototype.compile = function compile(dsl) { - // PutArgs - // Test(Environment) - // Enter(BEGIN, END) - // BEGIN: Noop - // JumpUnless(ELSE) - // Evaluate(default) - // Jump(END) - // ELSE: Noop - // Evalulate(inverse) - // END: Noop - // Exit - var args = this.args; - var templates = this.templates; + if (isDirty || isSubtreeDirty) { + callback(visitor); + } else { + if (morph.buildChildEnv) { + env = morph.buildChildEnv(morph.getState(), env); + } + _htmlbarsUtilMorphUtils.validateChildMorphs(env, morph, visitor); + } + } - dsl.putArgs(args); - dsl.test('environment'); - dsl.block({ templates: templates }, function (dsl, BEGIN, END) { - if (templates.inverse) { - dsl.jumpUnless('ELSE'); - dsl.evaluate('default'); - dsl.jump(END); - dsl.label('ELSE'); - dsl.evaluate('inverse'); - } else { - dsl.jumpUnless(END); - dsl.evaluate('default'); - } - }); - }; - - return IfSyntax; - })(_glimmerRuntimeLibSyntax.Statement); - - exports.default = IfSyntax; + function isHelper(env, scope, path) { + return env.hooks.keywords[path] !== undefined || env.hooks.hasHelper(env, scope, path); + } }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvc3ludGF4L2J1aWx0aW5zL2lmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztRQVFBLFFBQUE7OEJBQUEsUUFBQTs7QUFPRSxpQkFQRixRQUFBLENBT2MsSUFBdUUsRUFBQTtnQkFBckUsSUFBSSxHQUFOLElBQXVFLENBQXJFLElBQUk7Z0JBQUUsU0FBUyxHQUFqQixJQUF1RSxDQUEvRCxTQUFTOztBQUMzQix1Q0FBTyxDQUFDO0FBUFYsZ0JBQUEsQ0FBQSxJQUFJLEdBQUcsY0FBYyxDQUFDO0FBSWYsZ0JBQUEsQ0FBQSxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBSXRCLGdCQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixnQkFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7U0FDNUI7O0FBWEgsZ0JBQUEsV0FhRSxPQUFPLEdBQUEsaUJBQUMsR0FBcUIsRUFBQTs7Ozs7Ozs7Ozs7O2dCQWFyQixJQUFJLEdBQWdCLElBQUksQ0FBeEIsSUFBSTtnQkFBRSxTQUFTLEdBQUssSUFBSSxDQUFsQixTQUFTOztBQUVyQixlQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xCLGVBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFFeEIsZUFBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBVCxTQUFTLEVBQUUsRUFBRSxVQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFBO0FBQ3ZDLG9CQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUU7QUFDckIsdUJBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkIsdUJBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDeEIsdUJBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCx1QkFBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQix1QkFBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDekIsTUFBTTtBQUNMLHVCQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLHVCQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN6QjthQUNGLENBQUMsQ0FBQztTQUNKOztlQTNDSCxRQUFBO2dDQVBFLFNBQVM7O3NCQU9YLFFBQUEiLCJmaWxlIjoiaWYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTdGF0ZW1lbnQgYXMgU3RhdGVtZW50U3ludGF4XG59IGZyb20gJy4uLy4uL3N5bnRheCc7XG5cbmltcG9ydCAqIGFzIFN5bnRheCBmcm9tICcuLi9jb3JlJztcblxuaW1wb3J0IE9wY29kZUJ1aWxkZXJEU0wgZnJvbSAnLi4vLi4vY29tcGlsZWQvb3Bjb2Rlcy9idWlsZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSWZTeW50YXggZXh0ZW5kcyBTdGF0ZW1lbnRTeW50YXgge1xuICB0eXBlID0gXCJpZi1zdGF0ZW1lbnRcIjtcblxuICBwdWJsaWMgYXJnczogU3ludGF4LkFyZ3M7XG4gIHB1YmxpYyB0ZW1wbGF0ZXM6IFN5bnRheC5UZW1wbGF0ZXM7XG4gIHB1YmxpYyBpc1N0YXRpYyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHsgYXJncywgdGVtcGxhdGVzIH06IHsgYXJnczogU3ludGF4LkFyZ3MsIHRlbXBsYXRlczogU3ludGF4LlRlbXBsYXRlcyB9KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMudGVtcGxhdGVzID0gdGVtcGxhdGVzO1xuICB9XG5cbiAgY29tcGlsZShkc2w6IE9wY29kZUJ1aWxkZXJEU0wpIHtcbiAgICAvLyAgICAgICAgUHV0QXJnc1xuICAgIC8vICAgICAgICBUZXN0KEVudmlyb25tZW50KVxuICAgIC8vICAgICAgICBFbnRlcihCRUdJTiwgRU5EKVxuICAgIC8vIEJFR0lOOiBOb29wXG4gICAgLy8gICAgICAgIEp1bXBVbmxlc3MoRUxTRSlcbiAgICAvLyAgICAgICAgRXZhbHVhdGUoZGVmYXVsdClcbiAgICAvLyAgICAgICAgSnVtcChFTkQpXG4gICAgLy8gRUxTRTogIE5vb3BcbiAgICAvLyAgICAgICAgRXZhbHVsYXRlKGludmVyc2UpXG4gICAgLy8gRU5EOiAgIE5vb3BcbiAgICAvLyAgICAgICAgRXhpdFxuXG4gICAgbGV0IHsgYXJncywgdGVtcGxhdGVzIH0gPSB0aGlzO1xuXG4gICAgZHNsLnB1dEFyZ3MoYXJncyk7XG4gICAgZHNsLnRlc3QoJ2Vudmlyb25tZW50Jyk7XG5cbiAgICBkc2wuYmxvY2soeyB0ZW1wbGF0ZXMgfSwgKGRzbCwgQkVHSU4sIEVORCkgPT4ge1xuICAgICAgaWYgKHRlbXBsYXRlcy5pbnZlcnNlKSB7XG4gICAgICAgIGRzbC5qdW1wVW5sZXNzKCdFTFNFJyk7XG4gICAgICAgIGRzbC5ldmFsdWF0ZSgnZGVmYXVsdCcpO1xuICAgICAgICBkc2wuanVtcChFTkQpO1xuICAgICAgICBkc2wubGFiZWwoJ0VMU0UnKTtcbiAgICAgICAgZHNsLmV2YWx1YXRlKCdpbnZlcnNlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkc2wuanVtcFVubGVzcyhFTkQpO1xuICAgICAgICBkc2wuZXZhbHVhdGUoJ2RlZmF1bHQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19 -enifed('glimmer-runtime/lib/syntax/builtins/in-element', ['exports', 'glimmer-runtime/lib/syntax'], function (exports, _glimmerRuntimeLibSyntax) { - 'use strict'; +enifed("htmlbars-runtime/render", ["exports", "htmlbars-util/morph-utils", "htmlbars-runtime/node-visitor", "htmlbars-runtime/morph", "htmlbars-util/template-utils", "htmlbars-util/void-tag-names"], function (exports, _htmlbarsUtilMorphUtils, _htmlbarsRuntimeNodeVisitor, _htmlbarsRuntimeMorph, _htmlbarsUtilTemplateUtils, _htmlbarsUtilVoidTagNames) { + "use strict"; - var InElementSyntax = (function (_StatementSyntax) { - babelHelpers.inherits(InElementSyntax, _StatementSyntax); + exports.default = render; + exports.RenderOptions = RenderOptions; + exports.manualElement = manualElement; + exports.attachAttributes = attachAttributes; + exports.createChildMorph = createChildMorph; + exports.getCachedFragment = getCachedFragment; - function InElementSyntax(_ref) { - var args = _ref.args; - var templates = _ref.templates; + var svgNamespace = "http://www.w3.org/2000/svg"; - _StatementSyntax.call(this); - this.type = "in-element-statement"; - this.isStatic = false; - this.args = args; - this.templates = templates; - } + function render(template, env, scope, options) { + var dom = env.dom; + var contextualElement; - InElementSyntax.prototype.compile = function compile(dsl, env) { - var args = this.args; - var templates = this.templates; + if (options) { + if (options.renderNode) { + contextualElement = options.renderNode.contextualElement; + } else if (options.contextualElement) { + contextualElement = options.contextualElement; + } + } - dsl.putArgs(args); - dsl.test('simple'); - dsl.block({ templates: templates }, function (dsl, BEGIN, END) { - dsl.jumpUnless(END); - dsl.pushRemoteElement(); - dsl.evaluate('default'); - dsl.popRemoteElement(); - }); - }; + dom.detectNamespace(contextualElement); - return InElementSyntax; - })(_glimmerRuntimeLibSyntax.Statement); + var renderResult = RenderResult.build(env, scope, template, options, contextualElement); + renderResult.render(); - exports.default = InElementSyntax; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvc3ludGF4L2J1aWx0aW5zL2luLWVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O1FBUUEsZUFBQTs4QkFBQSxlQUFBOztBQU9FLGlCQVBGLGVBQUEsQ0FPYyxJQUF1RSxFQUFBO2dCQUFyRSxJQUFJLEdBQU4sSUFBdUUsQ0FBckUsSUFBSTtnQkFBRSxTQUFTLEdBQWpCLElBQXVFLENBQS9ELFNBQVM7O0FBQzNCLHVDQUFPLENBQUM7QUFQVixnQkFBQSxDQUFBLElBQUksR0FBRyxzQkFBc0IsQ0FBQztBQUl2QixnQkFBQSxDQUFBLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFJdEIsZ0JBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLGdCQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztTQUM1Qjs7QUFYSCx1QkFBQSxXQWFFLE9BQU8sR0FBQSxpQkFBQyxHQUFxQixFQUFFLEdBQWdCLEVBQUE7Z0JBQ3ZDLElBQUksR0FBZ0IsSUFBSSxDQUF4QixJQUFJO2dCQUFFLFNBQVMsR0FBSyxJQUFJLENBQWxCLFNBQVM7O0FBRXJCLGVBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEIsZUFBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUVuQixlQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFULFNBQVMsRUFBRSxFQUFFLFVBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUE7QUFDdkMsbUJBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsbUJBQUcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3hCLG1CQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hCLG1CQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzthQUN4QixDQUFDLENBQUM7U0FDSjs7ZUF6QkgsZUFBQTtnQ0FQRSxTQUFTOztzQkFPWCxlQUFBIiwiZmlsZSI6ImluLWVsZW1lbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTdGF0ZW1lbnQgYXMgU3RhdGVtZW50U3ludGF4XG59IGZyb20gJy4uLy4uL3N5bnRheCc7XG5cbmltcG9ydCBPcGNvZGVCdWlsZGVyRFNMIGZyb20gJy4uLy4uL2NvbXBpbGVkL29wY29kZXMvYnVpbGRlcic7XG5pbXBvcnQgKiBhcyBTeW50YXggZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbkVsZW1lbnRTeW50YXggZXh0ZW5kcyBTdGF0ZW1lbnRTeW50YXgge1xuICB0eXBlID0gXCJpbi1lbGVtZW50LXN0YXRlbWVudFwiO1xuXG4gIHB1YmxpYyBhcmdzOiBTeW50YXguQXJncztcbiAgcHVibGljIHRlbXBsYXRlczogU3ludGF4LlRlbXBsYXRlcztcbiAgcHVibGljIGlzU3RhdGljID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoeyBhcmdzLCB0ZW1wbGF0ZXMgfTogeyBhcmdzOiBTeW50YXguQXJncywgdGVtcGxhdGVzOiBTeW50YXguVGVtcGxhdGVzIH0pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgdGhpcy50ZW1wbGF0ZXMgPSB0ZW1wbGF0ZXM7XG4gIH1cblxuICBjb21waWxlKGRzbDogT3Bjb2RlQnVpbGRlckRTTCwgZW52OiBFbnZpcm9ubWVudCkge1xuICAgIGxldCB7IGFyZ3MsIHRlbXBsYXRlcyB9ID0gdGhpcztcblxuICAgIGRzbC5wdXRBcmdzKGFyZ3MpO1xuICAgIGRzbC50ZXN0KCdzaW1wbGUnKTtcblxuICAgIGRzbC5ibG9jayh7IHRlbXBsYXRlcyB9LCAoZHNsLCBCRUdJTiwgRU5EKSA9PiB7XG4gICAgICBkc2wuanVtcFVubGVzcyhFTkQpO1xuICAgICAgZHNsLnB1c2hSZW1vdGVFbGVtZW50KCk7XG4gICAgICBkc2wuZXZhbHVhdGUoJ2RlZmF1bHQnKTtcbiAgICAgIGRzbC5wb3BSZW1vdGVFbGVtZW50KCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ== -enifed("glimmer-runtime/lib/syntax/builtins/partial", ["exports", "glimmer-runtime/lib/syntax"], function (exports, _glimmerRuntimeLibSyntax) { - "use strict"; + return renderResult; + } - var StaticPartialSyntax = (function (_StatementSyntax) { - babelHelpers.inherits(StaticPartialSyntax, _StatementSyntax); + function RenderOptions(renderNode, self, blockArguments, contextualElement) { + this.renderNode = renderNode || null; + this.self = self; + this.blockArguments = blockArguments || null; + this.contextualElement = contextualElement || null; + } - function StaticPartialSyntax(name) { - _StatementSyntax.call(this); - this.name = name; - this.type = "static-partial"; - } + function RenderResult(env, scope, options, rootNode, ownerNode, nodes, fragment, template, shouldSetContent) { + this.root = rootNode; + this.fragment = fragment; - StaticPartialSyntax.prototype.compile = function compile(dsl, env, symbolTable) { - var name = String(this.name.inner()); - if (!env.hasPartial(name, symbolTable)) { - throw new Error("Compile Error: " + name + " is not a partial"); - } - var definition = env.lookupPartial(name, symbolTable); - dsl.putPartialDefinition(definition); - dsl.evaluatePartial(); - }; + this.nodes = nodes; + this.template = template; + this.statements = template.statements.slice(); + this.env = env; + this.scope = scope; + this.shouldSetContent = shouldSetContent; - return StaticPartialSyntax; - })(_glimmerRuntimeLibSyntax.Statement); + if (options.self !== undefined) { + this.bindSelf(options.self); + } + if (options.blockArguments !== undefined) { + this.bindLocals(options.blockArguments); + } - exports.StaticPartialSyntax = StaticPartialSyntax; + this.initializeNodes(ownerNode); + } - var DynamicPartialSyntax = (function (_StatementSyntax2) { - babelHelpers.inherits(DynamicPartialSyntax, _StatementSyntax2); + RenderResult.build = function (env, scope, template, options, contextualElement) { + var dom = env.dom; + var fragment = getCachedFragment(template, env); + var nodes = template.buildRenderNodes(dom, fragment, contextualElement); - function DynamicPartialSyntax(name) { - _StatementSyntax2.call(this); - this.name = name; - this.type = "dynamic-partial"; - } + var rootNode, ownerNode, shouldSetContent; - DynamicPartialSyntax.prototype.compile = function compile(dsl) { - var name = this.name; + if (options && options.renderNode) { + rootNode = options.renderNode; + ownerNode = rootNode.ownerNode; + shouldSetContent = true; + } else { + rootNode = dom.createMorph(null, fragment.firstChild, fragment.lastChild, contextualElement); + ownerNode = rootNode; + rootNode.ownerNode = ownerNode; + shouldSetContent = false; + } - dsl.startLabels(); - dsl.putValue(name); - dsl.test('simple'); - dsl.enter('BEGIN', 'END'); - dsl.label('BEGIN'); - dsl.jumpUnless('END'); - dsl.putDynamicPartialDefinition(); - dsl.evaluatePartial(); - dsl.label('END'); - dsl.exit(); - dsl.stopLabels(); - }; + if (rootNode.childNodes) { + _htmlbarsUtilMorphUtils.visitChildren(rootNode.childNodes, function (node) { + _htmlbarsUtilTemplateUtils.clearMorph(node, env, true); + }); + } - return DynamicPartialSyntax; - })(_glimmerRuntimeLibSyntax.Statement); + rootNode.childNodes = nodes; + return new RenderResult(env, scope, options, rootNode, ownerNode, nodes, fragment, template, shouldSetContent); + }; - exports.DynamicPartialSyntax = DynamicPartialSyntax; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvc3ludGF4L2J1aWx0aW5zL3BhcnRpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O1FBY0EsbUJBQUE7OEJBQUEsbUJBQUE7O0FBR0UsaUJBSEYsbUJBQUEsQ0FHc0IsSUFBdUIsRUFBQTtBQUN6Qyx1Q0FBTyxDQUFDO0FBRFUsZ0JBQUEsQ0FBQSxJQUFJLEdBQUosSUFBSSxDQUFtQjtBQUZwQyxnQkFBQSxDQUFBLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztTQUk5Qjs7QUFMSCwyQkFBQSxXQU9FLE9BQU8sR0FBQSxpQkFBQyxHQUFxQixFQUFFLEdBQWdCLEVBQUUsV0FBd0IsRUFBQTtBQUN2RSxnQkFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUVyQyxnQkFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFO0FBQ3RDLHNCQUFNLElBQUksS0FBSyxxQkFBbUIsSUFBSSx1QkFBb0IsQ0FBQzthQUM1RDtBQUVELGdCQUFJLFVBQVUsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUV0RCxlQUFHLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDckMsZUFBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3ZCOztlQWxCSCxtQkFBQTtnQ0FYRSxTQUFTOzs7O1FBZ0NYLG9CQUFBOzhCQUFBLG9CQUFBOztBQUdFLGlCQUhGLG9CQUFBLENBR3NCLElBQThCLEVBQUE7QUFDaEQsd0NBQU8sQ0FBQztBQURVLGdCQUFBLENBQUEsSUFBSSxHQUFKLElBQUksQ0FBMEI7QUFGM0MsZ0JBQUEsQ0FBQSxJQUFJLEdBQUcsaUJBQWlCLENBQUM7U0FJL0I7O0FBTEgsNEJBQUEsV0FPRSxPQUFPLEdBQUEsaUJBQUMsR0FBcUIsRUFBQTtnQkFDckIsSUFBSSxHQUFLLElBQUksQ0FBYixJQUFJOztBQUVWLGVBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUVsQixlQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLGVBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbkIsZUFBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUIsZUFBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuQixlQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RCLGVBQUcsQ0FBQywyQkFBMkIsRUFBRSxDQUFDO0FBQ2xDLGVBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUN0QixlQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pCLGVBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUVYLGVBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNsQjs7ZUF2Qkgsb0JBQUE7Z0NBaENFLFNBQVMiLCJmaWxlIjoicGFydGlhbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wYXF1ZSB9IGZyb20gXCJnbGltbWVyLXV0aWxcIjtcblxuaW1wb3J0IHtcbiAgU3RhdGVtZW50IGFzIFN0YXRlbWVudFN5bnRheCxcbiAgRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uU3ludGF4XG59IGZyb20gJy4uLy4uL3N5bnRheCc7XG5cbmltcG9ydCBTeW1ib2xUYWJsZSBmcm9tICcuLi8uLi9zeW1ib2wtdGFibGUnO1xuXG5pbXBvcnQgT3Bjb2RlQnVpbGRlckRTTCBmcm9tICcuLi8uLi9jb21waWxlZC9vcGNvZGVzL2J1aWxkZXInO1xuXG5pbXBvcnQgKiBhcyBTeW50YXggZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuXG5leHBvcnQgY2xhc3MgU3RhdGljUGFydGlhbFN5bnRheCBleHRlbmRzIFN0YXRlbWVudFN5bnRheCB7XG4gIHB1YmxpYyB0eXBlID0gXCJzdGF0aWMtcGFydGlhbFwiO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmFtZTogU3ludGF4LlZhbHVlPGFueT4pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgY29tcGlsZShkc2w6IE9wY29kZUJ1aWxkZXJEU0wsIGVudjogRW52aXJvbm1lbnQsIHN5bWJvbFRhYmxlOiBTeW1ib2xUYWJsZSkge1xuICAgIGxldCBuYW1lID0gU3RyaW5nKHRoaXMubmFtZS5pbm5lcigpKTtcblxuICAgIGlmICghZW52Lmhhc1BhcnRpYWwobmFtZSwgc3ltYm9sVGFibGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGUgRXJyb3I6ICR7bmFtZX0gaXMgbm90IGEgcGFydGlhbGApO1xuICAgIH1cblxuICAgIGxldCBkZWZpbml0aW9uID0gZW52Lmxvb2t1cFBhcnRpYWwobmFtZSwgc3ltYm9sVGFibGUpO1xuXG4gICAgZHNsLnB1dFBhcnRpYWxEZWZpbml0aW9uKGRlZmluaXRpb24pO1xuICAgIGRzbC5ldmFsdWF0ZVBhcnRpYWwoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRHluYW1pY1BhcnRpYWxTeW50YXggZXh0ZW5kcyBTdGF0ZW1lbnRTeW50YXgge1xuICBwdWJsaWMgdHlwZSA9IFwiZHluYW1pYy1wYXJ0aWFsXCI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuYW1lOiBFeHByZXNzaW9uU3ludGF4PE9wYXF1ZT4pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgY29tcGlsZShkc2w6IE9wY29kZUJ1aWxkZXJEU0wpIHtcbiAgICBsZXQgeyBuYW1lIH0gPSB0aGlzO1xuXG4gICAgZHNsLnN0YXJ0TGFiZWxzKCk7XG5cbiAgICBkc2wucHV0VmFsdWUobmFtZSk7XG4gICAgZHNsLnRlc3QoJ3NpbXBsZScpO1xuICAgIGRzbC5lbnRlcignQkVHSU4nLCAnRU5EJyk7XG4gICAgZHNsLmxhYmVsKCdCRUdJTicpO1xuICAgIGRzbC5qdW1wVW5sZXNzKCdFTkQnKTtcbiAgICBkc2wucHV0RHluYW1pY1BhcnRpYWxEZWZpbml0aW9uKCk7XG4gICAgZHNsLmV2YWx1YXRlUGFydGlhbCgpO1xuICAgIGRzbC5sYWJlbCgnRU5EJyk7XG4gICAgZHNsLmV4aXQoKTtcblxuICAgIGRzbC5zdG9wTGFiZWxzKCk7XG4gIH1cbn1cbiJdfQ== -enifed('glimmer-runtime/lib/syntax/builtins/unless', ['exports', 'glimmer-runtime/lib/syntax'], function (exports, _glimmerRuntimeLibSyntax) { - 'use strict'; + function manualElement(tagName, attributes, _isEmpty) { + var statements = []; - var UnlessSyntax = (function (_StatementSyntax) { - babelHelpers.inherits(UnlessSyntax, _StatementSyntax); + for (var key in attributes) { + if (typeof attributes[key] === 'string') { + continue; + } - function UnlessSyntax(_ref) { - var args = _ref.args; - var templates = _ref.templates; + statements.push(_htmlbarsUtilTemplateUtils.buildStatement("attribute", key, attributes[key])); + } - _StatementSyntax.call(this); - this.type = "unless-statement"; - this.isStatic = false; - this.args = args; - this.templates = templates; - } + var isEmpty = _isEmpty || _htmlbarsUtilVoidTagNames.default[tagName]; - UnlessSyntax.prototype.compile = function compile(dsl, env) { - // PutArgs - // Enter(BEGIN, END) - // BEGIN: Noop - // Test(Environment) - // JumpIf(ELSE) - // Evaluate(default) - // Jump(END) - // ELSE: Noop - // Evalulate(inverse) - // END: Noop - // Exit - var args = this.args; - var templates = this.templates; + if (!isEmpty) { + statements.push(_htmlbarsUtilTemplateUtils.buildStatement('content', 'yield')); + } - dsl.putArgs(args); - dsl.test('environment'); - dsl.block({ templates: templates }, function (dsl) { - if (templates.inverse) { - dsl.jumpIf('ELSE'); - dsl.evaluate('default'); - dsl.jump('END'); - dsl.label('ELSE'); - dsl.evaluate('inverse'); - } else { - dsl.jumpIf('END'); - dsl.evaluate('default'); - } - }); - }; - - return UnlessSyntax; - })(_glimmerRuntimeLibSyntax.Statement); - - exports.default = UnlessSyntax; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvc3ludGF4L2J1aWx0aW5zL3VubGVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7UUFVQSxZQUFBOzhCQUFBLFlBQUE7O0FBT0UsaUJBUEYsWUFBQSxDQU9jLElBQXVFLEVBQUE7Z0JBQXJFLElBQUksR0FBTixJQUF1RSxDQUFyRSxJQUFJO2dCQUFFLFNBQVMsR0FBakIsSUFBdUUsQ0FBL0QsU0FBUzs7QUFDM0IsdUNBQU8sQ0FBQztBQVBWLGdCQUFBLENBQUEsSUFBSSxHQUFHLGtCQUFrQixDQUFDO0FBSW5CLGdCQUFBLENBQUEsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUl0QixnQkFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakIsZ0JBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1NBQzVCOztBQVhILG9CQUFBLFdBYUUsT0FBTyxHQUFBLGlCQUFDLEdBQXFCLEVBQUUsR0FBZ0IsRUFBQTs7Ozs7Ozs7Ozs7O2dCQWF2QyxJQUFJLEdBQWdCLElBQUksQ0FBeEIsSUFBSTtnQkFBRSxTQUFTLEdBQUssSUFBSSxDQUFsQixTQUFTOztBQUVyQixlQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xCLGVBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFFeEIsZUFBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBVCxTQUFTLEVBQUUsRUFBRSxVQUFBLEdBQUcsRUFBQTtBQUMxQixvQkFBSSxTQUFTLENBQUMsT0FBTyxFQUFFO0FBQ3JCLHVCQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25CLHVCQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hCLHVCQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hCLHVCQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xCLHVCQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN6QixNQUFNO0FBQ0wsdUJBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEIsdUJBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3pCO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7O2VBM0NILFlBQUE7Z0NBVEUsU0FBUzs7c0JBU1gsWUFBQSIsImZpbGUiOiJ1bmxlc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTdGF0ZW1lbnQgYXMgU3RhdGVtZW50U3ludGF4XG59IGZyb20gJy4uLy4uL3N5bnRheCc7XG5cbmltcG9ydCAqIGFzIFN5bnRheCBmcm9tICcuLi9jb3JlJztcblxuaW1wb3J0IE9wY29kZUJ1aWxkZXJEU0wgZnJvbSAnLi4vLi4vY29tcGlsZWQvb3Bjb2Rlcy9idWlsZGVyJztcblxuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVW5sZXNzU3ludGF4IGV4dGVuZHMgU3RhdGVtZW50U3ludGF4IHtcbiAgdHlwZSA9IFwidW5sZXNzLXN0YXRlbWVudFwiO1xuXG4gIHB1YmxpYyBhcmdzOiBTeW50YXguQXJncztcbiAgcHVibGljIHRlbXBsYXRlczogU3ludGF4LlRlbXBsYXRlcztcbiAgcHVibGljIGlzU3RhdGljID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoeyBhcmdzLCB0ZW1wbGF0ZXMgfTogeyBhcmdzOiBTeW50YXguQXJncywgdGVtcGxhdGVzOiBTeW50YXguVGVtcGxhdGVzIH0pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgdGhpcy50ZW1wbGF0ZXMgPSB0ZW1wbGF0ZXM7XG4gIH1cblxuICBjb21waWxlKGRzbDogT3Bjb2RlQnVpbGRlckRTTCwgZW52OiBFbnZpcm9ubWVudCkge1xuICAgIC8vICAgICAgICBQdXRBcmdzXG4gICAgLy8gICAgICAgIEVudGVyKEJFR0lOLCBFTkQpXG4gICAgLy8gQkVHSU46IE5vb3BcbiAgICAvLyAgICAgICAgVGVzdChFbnZpcm9ubWVudClcbiAgICAvLyAgICAgICAgSnVtcElmKEVMU0UpXG4gICAgLy8gICAgICAgIEV2YWx1YXRlKGRlZmF1bHQpXG4gICAgLy8gICAgICAgIEp1bXAoRU5EKVxuICAgIC8vIEVMU0U6ICBOb29wXG4gICAgLy8gICAgICAgIEV2YWx1bGF0ZShpbnZlcnNlKVxuICAgIC8vIEVORDogICBOb29wXG4gICAgLy8gICAgICAgIEV4aXRcblxuICAgIGxldCB7IGFyZ3MsIHRlbXBsYXRlcyB9ID0gdGhpcztcblxuICAgIGRzbC5wdXRBcmdzKGFyZ3MpO1xuICAgIGRzbC50ZXN0KCdlbnZpcm9ubWVudCcpO1xuXG4gICAgZHNsLmJsb2NrKHsgdGVtcGxhdGVzIH0sIGRzbCA9PiB7XG4gICAgICBpZiAodGVtcGxhdGVzLmludmVyc2UpIHtcbiAgICAgICAgZHNsLmp1bXBJZignRUxTRScpO1xuICAgICAgICBkc2wuZXZhbHVhdGUoJ2RlZmF1bHQnKTtcbiAgICAgICAgZHNsLmp1bXAoJ0VORCcpO1xuICAgICAgICBkc2wubGFiZWwoJ0VMU0UnKTtcbiAgICAgICAgZHNsLmV2YWx1YXRlKCdpbnZlcnNlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkc2wuanVtcElmKCdFTkQnKTtcbiAgICAgICAgZHNsLmV2YWx1YXRlKCdkZWZhdWx0Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ== -enifed('glimmer-runtime/lib/syntax/builtins/with-dynamic-vars', ['exports', 'glimmer-runtime/lib/syntax'], function (exports, _glimmerRuntimeLibSyntax) { - 'use strict'; - - var WithDynamicVarsSyntax = (function (_StatementSyntax) { - babelHelpers.inherits(WithDynamicVarsSyntax, _StatementSyntax); - - function WithDynamicVarsSyntax(_ref) { - var args = _ref.args; - var templates = _ref.templates; - - _StatementSyntax.call(this); - this.type = "with-dynamic-vars-statement"; - this.isStatic = false; - this.args = args; - this.templates = templates; + var template = { + arity: 0, + cachedFragment: null, + hasRendered: false, + buildFragment: function buildFragment(dom) { + var el0 = dom.createDocumentFragment(); + if (tagName === 'svg') { + dom.setNamespace(svgNamespace); } + var el1 = dom.createElement(tagName); - WithDynamicVarsSyntax.prototype.compile = function compile(dsl, env) { - var args = this.args; - var templates = this.templates; - - dsl.unit({ templates: templates }, function (dsl) { - dsl.putArgs(args); - dsl.pushDynamicScope(); - dsl.bindDynamicScope(args.named.keys); - dsl.evaluate('default'); - dsl.popDynamicScope(); - }); - }; - - return WithDynamicVarsSyntax; - })(_glimmerRuntimeLibSyntax.Statement); - - exports.default = WithDynamicVarsSyntax; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvc3ludGF4L2J1aWx0aW5zL3dpdGgtZHluYW1pYy12YXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztRQVFBLHFCQUFBOzhCQUFBLHFCQUFBOztBQU9FLGlCQVBGLHFCQUFBLENBT2MsSUFBdUUsRUFBQTtnQkFBckUsSUFBSSxHQUFOLElBQXVFLENBQXJFLElBQUk7Z0JBQUUsU0FBUyxHQUFqQixJQUF1RSxDQUEvRCxTQUFTOztBQUMzQix1Q0FBTyxDQUFDO0FBUFYsZ0JBQUEsQ0FBQSxJQUFJLEdBQUcsNkJBQTZCLENBQUM7QUFJOUIsZ0JBQUEsQ0FBQSxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBSXRCLGdCQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixnQkFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7U0FDNUI7O0FBWEgsNkJBQUEsV0FhRSxPQUFPLEdBQUEsaUJBQUMsR0FBcUIsRUFBRSxHQUFnQixFQUFBO2dCQUN2QyxJQUFJLEdBQWdCLElBQUksQ0FBeEIsSUFBSTtnQkFBRSxTQUFTLEdBQUssSUFBSSxDQUFsQixTQUFTOztBQUVyQixlQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFULFNBQVMsRUFBRSxFQUFFLFVBQUEsR0FBRyxFQUFBO0FBQ3pCLG1CQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xCLG1CQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUN2QixtQkFBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsbUJBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDeEIsbUJBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN2QixDQUFDLENBQUM7U0FDSjs7ZUF2QkgscUJBQUE7Z0NBUEUsU0FBUzs7c0JBT1gscUJBQUEiLCJmaWxlIjoid2l0aC1keW5hbWljLXZhcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTdGF0ZW1lbnQgYXMgU3RhdGVtZW50U3ludGF4XG59IGZyb20gJy4uLy4uL3N5bnRheCc7XG5cbmltcG9ydCBPcGNvZGVCdWlsZGVyRFNMIGZyb20gJy4uLy4uL2NvbXBpbGVkL29wY29kZXMvYnVpbGRlcic7XG5pbXBvcnQgKiBhcyBTeW50YXggZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaXRoRHluYW1pY1ZhcnNTeW50YXggZXh0ZW5kcyBTdGF0ZW1lbnRTeW50YXgge1xuICB0eXBlID0gXCJ3aXRoLWR5bmFtaWMtdmFycy1zdGF0ZW1lbnRcIjtcblxuICBwdWJsaWMgYXJnczogU3ludGF4LkFyZ3M7XG4gIHB1YmxpYyB0ZW1wbGF0ZXM6IFN5bnRheC5UZW1wbGF0ZXM7XG4gIHB1YmxpYyBpc1N0YXRpYyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHsgYXJncywgdGVtcGxhdGVzIH06IHsgYXJnczogU3ludGF4LkFyZ3MsIHRlbXBsYXRlczogU3ludGF4LlRlbXBsYXRlcyB9KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMudGVtcGxhdGVzID0gdGVtcGxhdGVzO1xuICB9XG5cbiAgY29tcGlsZShkc2w6IE9wY29kZUJ1aWxkZXJEU0wsIGVudjogRW52aXJvbm1lbnQpIHtcbiAgICBsZXQgeyBhcmdzLCB0ZW1wbGF0ZXMgfSA9IHRoaXM7XG5cbiAgICBkc2wudW5pdCh7IHRlbXBsYXRlcyB9LCBkc2wgPT4ge1xuICAgICAgZHNsLnB1dEFyZ3MoYXJncyk7XG4gICAgICBkc2wucHVzaER5bmFtaWNTY29wZSgpO1xuICAgICAgZHNsLmJpbmREeW5hbWljU2NvcGUoYXJncy5uYW1lZC5rZXlzKTtcbiAgICAgIGRzbC5ldmFsdWF0ZSgnZGVmYXVsdCcpO1xuICAgICAgZHNsLnBvcER5bmFtaWNTY29wZSgpO1xuICAgIH0pO1xuICB9XG59XG4iXX0= -enifed('glimmer-runtime/lib/syntax/builtins/with', ['exports', 'glimmer-runtime/lib/syntax'], function (exports, _glimmerRuntimeLibSyntax) { - 'use strict'; - - var WithSyntax = (function (_StatementSyntax) { - babelHelpers.inherits(WithSyntax, _StatementSyntax); - - function WithSyntax(_ref) { - var args = _ref.args; - var templates = _ref.templates; - - _StatementSyntax.call(this); - this.type = "with-statement"; - this.isStatic = false; - this.args = args; - this.templates = templates; + for (var key in attributes) { + if (typeof attributes[key] !== 'string') { + continue; + } + dom.setAttribute(el1, key, attributes[key]); } - WithSyntax.prototype.compile = function compile(dsl, env) { - // PutArgs - // Test(Environment) - // Enter(BEGIN, END) - // BEGIN: Noop - // JumpUnless(ELSE) - // Evaluate(default) - // Jump(END) - // ELSE: Noop - // Evaluate(inverse) - // END: Noop - // Exit - var args = this.args; - var templates = this.templates; - - dsl.putArgs(args); - dsl.test('environment'); - dsl.block({ templates: templates }, function (dsl, BEGIN, END) { - if (templates.inverse) { - dsl.jumpUnless('ELSE'); - dsl.evaluate('default'); - dsl.jump(END); - dsl.label('ELSE'); - dsl.evaluate('inverse'); - } else { - dsl.jumpUnless(END); - dsl.evaluate('default'); - } - }); - }; - - return WithSyntax; - })(_glimmerRuntimeLibSyntax.Statement); - - exports.default = WithSyntax; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvc3ludGF4L2J1aWx0aW5zL3dpdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O1FBU0EsVUFBQTs4QkFBQSxVQUFBOztBQU9FLGlCQVBGLFVBQUEsQ0FPYyxJQUF1RSxFQUFBO2dCQUFyRSxJQUFJLEdBQU4sSUFBdUUsQ0FBckUsSUFBSTtnQkFBRSxTQUFTLEdBQWpCLElBQXVFLENBQS9ELFNBQVM7O0FBQzNCLHVDQUFPLENBQUM7QUFQVixnQkFBQSxDQUFBLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztBQUlqQixnQkFBQSxDQUFBLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFJdEIsZ0JBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLGdCQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztTQUM1Qjs7QUFYSCxrQkFBQSxXQWFFLE9BQU8sR0FBQSxpQkFBQyxHQUFxQixFQUFFLEdBQWdCLEVBQUE7Ozs7Ozs7Ozs7OztnQkFhdkMsSUFBSSxHQUFnQixJQUFJLENBQXhCLElBQUk7Z0JBQUUsU0FBUyxHQUFLLElBQUksQ0FBbEIsU0FBUzs7QUFFckIsZUFBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQixlQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBRXhCLGVBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQVQsU0FBUyxFQUFFLEVBQUUsVUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQTtBQUN2QyxvQkFBSSxTQUFTLENBQUMsT0FBTyxFQUFFO0FBQ3JCLHVCQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZCLHVCQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hCLHVCQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsdUJBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEIsdUJBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3pCLE1BQU07QUFDTCx1QkFBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQix1QkFBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDekI7YUFDRixDQUFDLENBQUM7U0FDSjs7ZUEzQ0gsVUFBQTtnQ0FSRSxTQUFTOztzQkFRWCxVQUFBIiwiZmlsZSI6IndpdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTdGF0ZW1lbnQgYXMgU3RhdGVtZW50U3ludGF4XG59IGZyb20gJy4uLy4uL3N5bnRheCc7XG5cbmltcG9ydCBPcGNvZGVCdWlsZGVyRFNMIGZyb20gJy4uLy4uL2NvbXBpbGVkL29wY29kZXMvYnVpbGRlcic7XG5cbmltcG9ydCAqIGFzIFN5bnRheCBmcm9tICcuLi9jb3JlJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpdGhTeW50YXggZXh0ZW5kcyBTdGF0ZW1lbnRTeW50YXgge1xuICB0eXBlID0gXCJ3aXRoLXN0YXRlbWVudFwiO1xuXG4gIHB1YmxpYyBhcmdzOiBTeW50YXguQXJncztcbiAgcHVibGljIHRlbXBsYXRlczogU3ludGF4LlRlbXBsYXRlcztcbiAgcHVibGljIGlzU3RhdGljID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoeyBhcmdzLCB0ZW1wbGF0ZXMgfTogeyBhcmdzOiBTeW50YXguQXJncywgdGVtcGxhdGVzOiBTeW50YXguVGVtcGxhdGVzIH0pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgdGhpcy50ZW1wbGF0ZXMgPSB0ZW1wbGF0ZXM7XG4gIH1cblxuICBjb21waWxlKGRzbDogT3Bjb2RlQnVpbGRlckRTTCwgZW52OiBFbnZpcm9ubWVudCkge1xuICAgIC8vICAgICAgICBQdXRBcmdzXG4gICAgLy8gICAgICAgIFRlc3QoRW52aXJvbm1lbnQpXG4gICAgLy8gICAgICAgIEVudGVyKEJFR0lOLCBFTkQpXG4gICAgLy8gQkVHSU46IE5vb3BcbiAgICAvLyAgICAgICAgSnVtcFVubGVzcyhFTFNFKVxuICAgIC8vICAgICAgICBFdmFsdWF0ZShkZWZhdWx0KVxuICAgIC8vICAgICAgICBKdW1wKEVORClcbiAgICAvLyBFTFNFOiAgTm9vcFxuICAgIC8vICAgICAgICBFdmFsdWF0ZShpbnZlcnNlKVxuICAgIC8vIEVORDogICBOb29wXG4gICAgLy8gICAgICAgIEV4aXRcblxuICAgIGxldCB7IGFyZ3MsIHRlbXBsYXRlcyB9ID0gdGhpcztcblxuICAgIGRzbC5wdXRBcmdzKGFyZ3MpO1xuICAgIGRzbC50ZXN0KCdlbnZpcm9ubWVudCcpO1xuXG4gICAgZHNsLmJsb2NrKHsgdGVtcGxhdGVzIH0sIChkc2wsIEJFR0lOLCBFTkQpID0+IHtcbiAgICAgIGlmICh0ZW1wbGF0ZXMuaW52ZXJzZSkge1xuICAgICAgICBkc2wuanVtcFVubGVzcygnRUxTRScpO1xuICAgICAgICBkc2wuZXZhbHVhdGUoJ2RlZmF1bHQnKTtcbiAgICAgICAgZHNsLmp1bXAoRU5EKTtcbiAgICAgICAgZHNsLmxhYmVsKCdFTFNFJyk7XG4gICAgICAgIGRzbC5ldmFsdWF0ZSgnaW52ZXJzZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHNsLmp1bXBVbmxlc3MoRU5EKTtcbiAgICAgICAgZHNsLmV2YWx1YXRlKCdkZWZhdWx0Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ== -enifed('glimmer-runtime/lib/syntax/core', ['exports', 'glimmer-runtime/lib/syntax', 'glimmer-runtime/lib/syntax/builtins/partial', '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/syntax/expressions', 'glimmer-runtime/lib/compiled/expressions/args', 'glimmer-runtime/lib/compiled/expressions/value', 'glimmer-runtime/lib/compiled/expressions/lookups', 'glimmer-runtime/lib/compiled/expressions/has-block', 'glimmer-runtime/lib/compiled/expressions/has-block-params', 'glimmer-runtime/lib/compiled/expressions/helper', 'glimmer-runtime/lib/compiled/expressions/concat', 'glimmer-runtime/lib/utils', 'glimmer-runtime/lib/compiled/opcodes/content'], function (exports, _glimmerRuntimeLibSyntax, _glimmerRuntimeLibSyntaxBuiltinsPartial, _glimmerRuntimeLibOpcodes, _glimmerRuntimeLibCompiledOpcodesVm, _glimmerRuntimeLibCompiledOpcodesComponent, _glimmerRuntimeLibCompiledOpcodesDom, _glimmerRuntimeLibSyntaxExpressions, _glimmerRuntimeLibCompiledExpressionsArgs, _glimmerRuntimeLibCompiledExpressionsValue, _glimmerRuntimeLibCompiledExpressionsLookups, _glimmerRuntimeLibCompiledExpressionsHasBlock, _glimmerRuntimeLibCompiledExpressionsHasBlockParams, _glimmerRuntimeLibCompiledExpressionsHelper, _glimmerRuntimeLibCompiledExpressionsConcat, _glimmerRuntimeLibUtils, _glimmerRuntimeLibCompiledOpcodesContent) { - 'use strict'; - - var Block = (function (_StatementSyntax) { - babelHelpers.inherits(Block, _StatementSyntax); - - function Block(path, args, templates) { - _StatementSyntax.call(this); - this.path = path; - this.args = args; - this.templates = templates; - this.type = "block"; + if (!isEmpty) { + var el2 = dom.createComment(""); + dom.appendChild(el1, el2); } - Block.fromSpec = function fromSpec(sexp, symbolTable, scanner) { - var path = sexp[1]; - var params = sexp[2]; - var hash = sexp[3]; - var templateId = sexp[4]; - var inverseId = sexp[5]; + dom.appendChild(el0, el1); - var template = scanner.blockFor(symbolTable, templateId); - var inverse = typeof inverseId === 'number' ? scanner.blockFor(symbolTable, inverseId) : null; - return new Block(path, Args.fromSpec(params, hash), Templates.fromSpec(template, inverse)); - }; + return el0; + }, + buildRenderNodes: function buildRenderNodes(dom, fragment) { + var element = dom.childAt(fragment, [0]); + var morphs = []; - Block.build = function build(path, args, templates) { - return new this(path, args, templates); - }; - - Block.prototype.scan = function scan(scanner) { - var _templates = this.templates; - var _default = _templates.default; - var inverse = _templates.inverse; - - if (_default) scanner.addChild(_default); - if (inverse) scanner.addChild(inverse); - return this; - }; - - Block.prototype.compile = function compile(ops) { - throw new Error("SyntaxError"); - }; - - return Block; - })(_glimmerRuntimeLibSyntax.Statement); - - exports.Block = Block; - - var Append = (function (_StatementSyntax2) { - babelHelpers.inherits(Append, _StatementSyntax2); - - function Append(_ref) { - var value = _ref.value; - var trustingMorph = _ref.trustingMorph; - - _StatementSyntax2.call(this); - this.value = value; - this.trustingMorph = trustingMorph; + for (var key in attributes) { + if (typeof attributes[key] === 'string') { + continue; + } + morphs.push(dom.createAttrMorph(element, key)); } - Append.fromSpec = function fromSpec(sexp) { - var value = sexp[1]; - var trustingMorph = sexp[2]; - - return new OptimizedAppend({ value: _glimmerRuntimeLibSyntaxExpressions.default(value), trustingMorph: trustingMorph }); - }; - - return Append; - })(_glimmerRuntimeLibSyntax.Statement); - - exports.Append = Append; - - var OptimizedAppend = (function (_Append) { - babelHelpers.inherits(OptimizedAppend, _Append); - - function OptimizedAppend() { - _Append.apply(this, arguments); - this.type = "optimized-append"; + if (!isEmpty) { + morphs.push(dom.createMorphAt(element, 0, 0)); } - OptimizedAppend.prototype.deopt = function deopt() { - return new UnoptimizedAppend(this); - }; + return morphs; + }, + statements: statements, + locals: [], + templates: [] + }; - OptimizedAppend.prototype.compile = function compile(compiler, env, symbolTable) { - compiler.append(new _glimmerRuntimeLibCompiledOpcodesVm.PutValueOpcode(this.value.compile(compiler, env, symbolTable))); - if (this.trustingMorph) { - compiler.append(new _glimmerRuntimeLibCompiledOpcodesContent.OptimizedTrustingAppendOpcode()); - } else { - compiler.append(new _glimmerRuntimeLibCompiledOpcodesContent.OptimizedCautiousAppendOpcode()); - } - }; + return template; + } - return OptimizedAppend; - })(Append); + function attachAttributes(attributes) { + var statements = []; - exports.OptimizedAppend = OptimizedAppend; - - var UnoptimizedAppend = (function (_Append2) { - babelHelpers.inherits(UnoptimizedAppend, _Append2); - - function UnoptimizedAppend() { - _Append2.apply(this, arguments); - this.type = "unoptimized-append"; - } - - UnoptimizedAppend.prototype.compile = function compile(compiler, env, symbolTable) { - var expression = this.value.compile(compiler, env, symbolTable); - if (this.trustingMorph) { - compiler.append(new _glimmerRuntimeLibCompiledOpcodesContent.GuardedTrustingAppendOpcode(expression, symbolTable)); - } else { - compiler.append(new _glimmerRuntimeLibCompiledOpcodesContent.GuardedCautiousAppendOpcode(expression, symbolTable)); - } - }; - - return UnoptimizedAppend; - })(Append); - - exports.UnoptimizedAppend = UnoptimizedAppend; - - var MODIFIER_SYNTAX = "c0420397-8ff1-4241-882b-4b7a107c9632"; - - var Modifier = (function (_StatementSyntax3) { - babelHelpers.inherits(Modifier, _StatementSyntax3); - - function Modifier(options) { - _StatementSyntax3.call(this); - this["c0420397-8ff1-4241-882b-4b7a107c9632"] = true; - this.type = "modifier"; - this.path = options.path; - this.args = options.args; - } - - Modifier.fromSpec = function fromSpec(node) { - var path = node[1]; - var params = node[2]; - var hash = node[3]; - - return new Modifier({ - path: path, - args: Args.fromSpec(params, hash) - }); - }; - - Modifier.build = function build(path, options) { - return new Modifier({ - path: path, - params: options.params, - hash: options.hash - }); - }; - - Modifier.prototype.compile = function compile(compiler, env, symbolTable) { - var args = this.args.compile(compiler, env, symbolTable); - if (env.hasModifier(this.path, symbolTable)) { - compiler.append(new _glimmerRuntimeLibCompiledOpcodesDom.ModifierOpcode(this.path[0], env.lookupModifier(this.path, symbolTable), args)); - } else { - throw new Error('Compile Error: ' + this.path.join('.') + ' is not a modifier'); - } - }; - - return Modifier; - })(_glimmerRuntimeLibSyntax.Statement); - - exports.Modifier = Modifier; - - var StaticArg = (function (_ArgumentSyntax) { - babelHelpers.inherits(StaticArg, _ArgumentSyntax); - - function StaticArg(name, value) { - _ArgumentSyntax.call(this); - this.name = name; - this.value = value; - this.type = "static-arg"; - } - - StaticArg.fromSpec = function fromSpec(node) { - var name = node[1]; - var value = node[2]; - - return new StaticArg(name, value); - }; - - StaticArg.build = function build(name, value) { - var namespace = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; - - return new this(name, value); - }; - - StaticArg.prototype.compile = function compile() { - throw new Error('Cannot compiler StaticArg "' + this.name + '" as it is a delegate for ValueSyntax<string>.'); - }; - - StaticArg.prototype.valueSyntax = function valueSyntax() { - return Value.build(this.value); - }; - - return StaticArg; - })(_glimmerRuntimeLibSyntax.Argument); - - exports.StaticArg = StaticArg; - - var DynamicArg = (function (_ArgumentSyntax2) { - babelHelpers.inherits(DynamicArg, _ArgumentSyntax2); - - function DynamicArg(name, value) { - var namespace = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; - - _ArgumentSyntax2.call(this); - this.name = name; - this.value = value; - this.namespace = namespace; - this.type = 'dynamic-arg'; - } - - DynamicArg.fromSpec = function fromSpec(sexp) { - var name = sexp[1]; - var value = sexp[2]; - - return new DynamicArg(name, _glimmerRuntimeLibSyntaxExpressions.default(value)); - }; - - DynamicArg.build = function build(name, value) { - return new this(name, value); - }; - - DynamicArg.prototype.compile = function compile() { - throw new Error('Cannot compile DynamicArg for "' + this.name + '" as it is delegate for ExpressionSyntax<Opaque>.'); - }; - - DynamicArg.prototype.valueSyntax = function valueSyntax() { - return this.value; - }; - - return DynamicArg; - })(_glimmerRuntimeLibSyntax.Argument); - - exports.DynamicArg = DynamicArg; - - var TrustingAttr = (function () { - function TrustingAttr() {} - - TrustingAttr.fromSpec = function fromSpec(sexp) { - var name = sexp[1]; - var value = sexp[2]; - var namespace = sexp[3]; - - return new DynamicAttr(name, _glimmerRuntimeLibSyntaxExpressions.default(value), namespace, true); - }; - - TrustingAttr.build = function build(name, value, isTrusting) { - var namespace = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3]; - - return new DynamicAttr(name, value, namespace, isTrusting); - }; - - TrustingAttr.prototype.compile = function compile() { - throw new Error('Attempting to compile a TrustingAttr which is just a delegate for DynamicAttr.'); - }; - - return TrustingAttr; - })(); - - exports.TrustingAttr = TrustingAttr; - - var StaticAttr = (function (_AttributeSyntax) { - babelHelpers.inherits(StaticAttr, _AttributeSyntax); - - function StaticAttr(name, value, namespace) { - _AttributeSyntax.call(this); - this.name = name; - this.value = value; - this.namespace = namespace; - this["e1185d30-7cac-4b12-b26a-35327d905d92"] = true; - this.type = "static-attr"; - this.isTrusting = false; - } - - StaticAttr.fromSpec = function fromSpec(node) { - var name = node[1]; - var value = node[2]; - var namespace = node[3]; - - return new StaticAttr(name, value, namespace); - }; - - StaticAttr.build = function build(name, value) { - var namespace = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; - - return new this(name, value, namespace); - }; - - StaticAttr.prototype.compile = function compile(compiler) { - compiler.append(new _glimmerRuntimeLibCompiledOpcodesDom.StaticAttrOpcode(this.namespace, this.name, this.value)); - }; - - StaticAttr.prototype.valueSyntax = function valueSyntax() { - return Value.build(this.value); - }; - - return StaticAttr; - })(_glimmerRuntimeLibSyntax.Attribute); - - exports.StaticAttr = StaticAttr; - - var DynamicAttr = (function (_AttributeSyntax2) { - babelHelpers.inherits(DynamicAttr, _AttributeSyntax2); - - function DynamicAttr(name, value, namespace, isTrusting) { - if (namespace === undefined) namespace = undefined; - - _AttributeSyntax2.call(this); - this.name = name; - this.value = value; - this.namespace = namespace; - this.isTrusting = isTrusting; - this["e1185d30-7cac-4b12-b26a-35327d905d92"] = true; - this.type = "dynamic-attr"; - } - - DynamicAttr.fromSpec = function fromSpec(sexp) { - var name = sexp[1]; - var value = sexp[2]; - var namespace = sexp[3]; - - return new DynamicAttr(name, _glimmerRuntimeLibSyntaxExpressions.default(value), namespace); - }; - - DynamicAttr.build = function build(name, value) { - var isTrusting = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; - var namespace = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3]; - - return new this(name, value, namespace, isTrusting); - }; - - DynamicAttr.prototype.compile = function compile(compiler, env, symbolTable) { - var namespace = this.namespace; - var value = this.value; - - compiler.append(new _glimmerRuntimeLibCompiledOpcodesVm.PutValueOpcode(value.compile(compiler, env, symbolTable))); - if (namespace) { - compiler.append(new _glimmerRuntimeLibCompiledOpcodesDom.DynamicAttrNSOpcode(this.name, this.namespace, this.isTrusting)); - } else { - compiler.append(new _glimmerRuntimeLibCompiledOpcodesDom.DynamicAttrOpcode(this.name, this.isTrusting)); - } - }; - - DynamicAttr.prototype.valueSyntax = function valueSyntax() { - return this.value; - }; - - return DynamicAttr; - })(_glimmerRuntimeLibSyntax.Attribute); - - exports.DynamicAttr = DynamicAttr; - - var FlushElement = (function (_StatementSyntax4) { - babelHelpers.inherits(FlushElement, _StatementSyntax4); - - function FlushElement() { - _StatementSyntax4.apply(this, arguments); - this.type = "flush-element"; - } - - FlushElement.fromSpec = function fromSpec() { - return new FlushElement(); - }; - - FlushElement.build = function build() { - return new this(); - }; - - FlushElement.prototype.compile = function compile(compiler) { - compiler.append(new _glimmerRuntimeLibCompiledOpcodesDom.FlushElementOpcode()); - }; - - return FlushElement; - })(_glimmerRuntimeLibSyntax.Statement); - - exports.FlushElement = FlushElement; - - var CloseElement = (function (_StatementSyntax5) { - babelHelpers.inherits(CloseElement, _StatementSyntax5); - - function CloseElement() { - _StatementSyntax5.apply(this, arguments); - this.type = "close-element"; - } - - CloseElement.fromSpec = function fromSpec() { - return new CloseElement(); - }; - - CloseElement.build = function build() { - return new this(); - }; - - CloseElement.prototype.compile = function compile(compiler) { - compiler.append(new _glimmerRuntimeLibCompiledOpcodesDom.CloseElementOpcode()); - }; - - return CloseElement; - })(_glimmerRuntimeLibSyntax.Statement); - - exports.CloseElement = CloseElement; - - var Text = (function (_StatementSyntax6) { - babelHelpers.inherits(Text, _StatementSyntax6); - - function Text(content) { - _StatementSyntax6.call(this); - this.content = content; - this.type = "text"; - } - - Text.fromSpec = function fromSpec(node) { - var content = node[1]; - - return new Text(content); - }; - - Text.build = function build(content) { - return new this(content); - }; - - Text.prototype.compile = function compile(dsl) { - dsl.text(this.content); - }; - - return Text; - })(_glimmerRuntimeLibSyntax.Statement); - - exports.Text = Text; - - var Comment = (function (_StatementSyntax7) { - babelHelpers.inherits(Comment, _StatementSyntax7); - - function Comment(comment) { - _StatementSyntax7.call(this); - this.comment = comment; - this.type = "comment"; - } - - Comment.fromSpec = function fromSpec(sexp) { - var value = sexp[1]; - - return new Comment(value); - }; - - Comment.build = function build(value) { - return new this(value); - }; - - Comment.prototype.compile = function compile(dsl) { - dsl.comment(this.comment); - }; - - return Comment; - })(_glimmerRuntimeLibSyntax.Statement); - - exports.Comment = Comment; - - var OpenElement = (function (_StatementSyntax8) { - babelHelpers.inherits(OpenElement, _StatementSyntax8); - - function OpenElement(tag, blockParams, symbolTable) { - _StatementSyntax8.call(this); - this.tag = tag; - this.blockParams = blockParams; - this.symbolTable = symbolTable; - this.type = "open-element"; - } - - OpenElement.fromSpec = function fromSpec(sexp, symbolTable) { - var tag = sexp[1]; - var blockParams = sexp[2]; - - return new OpenElement(tag, blockParams, symbolTable); - }; - - OpenElement.build = function build(tag, blockParams, symbolTable) { - return new this(tag, blockParams, symbolTable); - }; - - OpenElement.prototype.scan = function scan(scanner) { - var tag = this.tag; - - if (scanner.env.hasComponentDefinition([tag], this.symbolTable)) { - var _parameters = this.parameters(scanner); - - var args = _parameters.args; - var attrs = _parameters.attrs; - - scanner.startBlock(this.blockParams); - this.tagContents(scanner); - var template = scanner.endBlock(this.blockParams); - return new Component(tag, attrs, args, template); - } else { - return new OpenPrimitiveElement(tag); - } - }; - - OpenElement.prototype.compile = function compile(list, env) { - list.append(new _glimmerRuntimeLibCompiledOpcodesDom.OpenPrimitiveElementOpcode(this.tag)); - }; - - OpenElement.prototype.toIdentity = function toIdentity() { - var tag = this.tag; - - return new OpenPrimitiveElement(tag); - }; - - OpenElement.prototype.parameters = function parameters(scanner) { - var current = scanner.next(); - var attrs = []; - var argKeys = []; - var argValues = []; - while (!(current instanceof FlushElement)) { - if (current[MODIFIER_SYNTAX]) { - throw new Error('Compile Error: Element modifiers are not allowed in components'); - } - var param = current; - if (current[_glimmerRuntimeLibSyntax.ATTRIBUTE]) { - attrs.push(param.name); - // REMOVE ME: attributes should not be treated as args - argKeys.push(param.name); - argValues.push(param.valueSyntax()); - } else if (current[_glimmerRuntimeLibSyntax.ARGUMENT]) { - argKeys.push(param.name); - argValues.push(param.valueSyntax()); - } else { - throw new Error("Expected FlushElement, but got ${current}"); - } - current = scanner.next(); - } - return { args: Args.fromNamedArgs(NamedArgs.build(argKeys, argValues)), attrs: attrs }; - }; - - OpenElement.prototype.tagContents = function tagContents(scanner) { - var nesting = 1; - while (true) { - var current = scanner.next(); - if (current instanceof CloseElement && --nesting === 0) { - break; - } - scanner.addStatement(current); - if (current instanceof OpenElement || current instanceof OpenPrimitiveElement) { - nesting++; - } - } - }; - - return OpenElement; - })(_glimmerRuntimeLibSyntax.Statement); - - exports.OpenElement = OpenElement; - - var Component = (function (_StatementSyntax9) { - babelHelpers.inherits(Component, _StatementSyntax9); - - function Component(tag, attrs, args, template) { - _StatementSyntax9.call(this); - this.tag = tag; - this.attrs = attrs; - this.args = args; - this.template = template; - this.type = 'component'; - } - - Component.prototype.compile = function compile(list, env, symbolTable) { - var definition = env.getComponentDefinition([this.tag], symbolTable); - var args = this.args.compile(list, env, symbolTable); - var shadow = this.attrs; - var templates = new Templates(this.template); - list.append(new _glimmerRuntimeLibCompiledOpcodesComponent.PutComponentDefinitionOpcode(definition)); - list.append(new _glimmerRuntimeLibCompiledOpcodesComponent.OpenComponentOpcode(args, shadow, templates)); - list.append(new _glimmerRuntimeLibCompiledOpcodesComponent.CloseComponentOpcode()); - }; - - return Component; - })(_glimmerRuntimeLibSyntax.Statement); - - exports.Component = Component; - - var OpenPrimitiveElement = (function (_StatementSyntax10) { - babelHelpers.inherits(OpenPrimitiveElement, _StatementSyntax10); - - function OpenPrimitiveElement(tag) { - _StatementSyntax10.call(this); - this.tag = tag; - this.type = "open-primitive-element"; - } - - OpenPrimitiveElement.build = function build(tag) { - return new this(tag); - }; - - OpenPrimitiveElement.prototype.compile = function compile(compiler) { - compiler.append(new _glimmerRuntimeLibCompiledOpcodesDom.OpenPrimitiveElementOpcode(this.tag)); - }; - - return OpenPrimitiveElement; - })(_glimmerRuntimeLibSyntax.Statement); - - exports.OpenPrimitiveElement = OpenPrimitiveElement; - - var Yield = (function (_StatementSyntax11) { - babelHelpers.inherits(Yield, _StatementSyntax11); - - function Yield(to, args) { - _StatementSyntax11.call(this); - this.to = to; - this.args = args; - this.type = "yield"; - } - - Yield.fromSpec = function fromSpec(sexp) { - var to = sexp[1]; - var params = sexp[2]; - - var args = Args.fromSpec(params, null); - return new Yield(to, args); - }; - - Yield.build = function build(params, to) { - var args = Args.fromPositionalArgs(PositionalArgs.build(params)); - return new this(to, args); - }; - - Yield.prototype.compile = function compile(dsl, env, symbolTable) { - var to = dsl.getBlockSymbol(this.to); - var args = this.args.compile(dsl, env, symbolTable); - dsl.append(new OpenBlockOpcode(to, this.to, args)); - dsl.append(new CloseBlockOpcode()); - }; - - return Yield; - })(_glimmerRuntimeLibSyntax.Statement); - - exports.Yield = Yield; - - function isStaticPartialName(exp) { - return exp.type === 'value'; + for (var key in attributes) { + if (typeof attributes[key] === 'string') { + continue; + } + statements.push(_htmlbarsUtilTemplateUtils.buildStatement("attribute", key, attributes[key])); } - var Partial = (function (_StatementSyntax12) { - babelHelpers.inherits(Partial, _StatementSyntax12); - - function Partial() { - _StatementSyntax12.apply(this, arguments); + var template = { + arity: 0, + cachedFragment: null, + hasRendered: false, + buildFragment: function buildFragment(dom) { + var el0 = this.element; + if (el0.namespaceURI === "http://www.w3.org/2000/svg") { + dom.setNamespace(svgNamespace); } - - Partial.fromSpec = function fromSpec(sexp) { - var exp = sexp[1]; - - var name = _glimmerRuntimeLibSyntaxExpressions.default(exp); - if (isStaticPartialName(name)) { - return new _glimmerRuntimeLibSyntaxBuiltinsPartial.StaticPartialSyntax(name); - } else { - return new _glimmerRuntimeLibSyntaxBuiltinsPartial.DynamicPartialSyntax(name); - } - }; - - return Partial; - })(_glimmerRuntimeLibSyntax.Statement); - - exports.Partial = Partial; - - var OpenBlockOpcode = (function (_Opcode) { - babelHelpers.inherits(OpenBlockOpcode, _Opcode); - - function OpenBlockOpcode(to, label, args) { - _Opcode.call(this); - this.to = to; - this.label = label; - this.args = args; - this.type = "open-block"; + for (var key in attributes) { + if (typeof attributes[key] !== 'string') { + continue; + } + dom.setAttribute(el0, key, attributes[key]); } - OpenBlockOpcode.prototype.evaluate = function evaluate(vm) { - var block = vm.scope().getBlock(this.to); - var args = undefined; - if (block) { - args = this.args.evaluate(vm); - } - // FIXME: can we avoid doing this when we don't have a block? - vm.pushCallerScope(); - if (block) { - vm.invokeBlock(block, args); - } - }; + return el0; + }, + buildRenderNodes: function buildRenderNodes(dom) { + var element = this.element; + var morphs = []; - return OpenBlockOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - var CloseBlockOpcode = (function (_Opcode2) { - babelHelpers.inherits(CloseBlockOpcode, _Opcode2); - - function CloseBlockOpcode() { - _Opcode2.apply(this, arguments); - this.type = "close-block"; + for (var key in attributes) { + if (typeof attributes[key] === 'string') { + continue; + } + morphs.push(dom.createAttrMorph(element, key)); } - CloseBlockOpcode.prototype.evaluate = function evaluate(vm) { - vm.popScope(); - }; - - return CloseBlockOpcode; - })(_glimmerRuntimeLibOpcodes.Opcode); - - exports.CloseBlockOpcode = CloseBlockOpcode; - - var Value = (function (_ExpressionSyntax) { - babelHelpers.inherits(Value, _ExpressionSyntax); - - function Value(value) { - _ExpressionSyntax.call(this); - this.value = value; - this.type = "value"; - } - - Value.fromSpec = function fromSpec(value) { - return new Value(value); - }; - - Value.build = function build(value) { - return new this(value); - }; - - Value.prototype.inner = function inner() { - return this.value; - }; - - Value.prototype.compile = function compile(compiler) { - return new _glimmerRuntimeLibCompiledExpressionsValue.default(this.value); - }; - - return Value; - })(_glimmerRuntimeLibSyntax.Expression); - - exports.Value = Value; - - var GetArgument = (function (_ExpressionSyntax2) { - babelHelpers.inherits(GetArgument, _ExpressionSyntax2); - - function GetArgument(parts) { - _ExpressionSyntax2.call(this); - this.parts = parts; - this.type = "get-argument"; - } - - // this is separated out from Get because Unknown also has a ref, but it - // may turn out to be a helper - - GetArgument.fromSpec = function fromSpec(sexp) { - var parts = sexp[1]; - - return new GetArgument(parts); - }; - - GetArgument.build = function build(path) { - return new this(path.split('.')); - }; - - GetArgument.prototype.compile = function compile(lookup) { - var parts = this.parts; - - var head = parts[0]; - if (lookup.hasNamedSymbol(head)) { - var symbol = lookup.getNamedSymbol(head); - var path = parts.slice(1); - return new _glimmerRuntimeLibCompiledExpressionsLookups.CompiledLocalLookup(symbol, path, head); - } else if (lookup.hasPartialArgsSymbol()) { - var symbol = lookup.getPartialArgsSymbol(); - return new _glimmerRuntimeLibCompiledExpressionsLookups.CompiledLocalLookup(symbol, parts, head); - } else { - throw new Error('Compile Error: ' + this.parts.join('.') + ' is not a valid lookup path.'); - } - }; - - return GetArgument; - })(_glimmerRuntimeLibSyntax.Expression); - - exports.GetArgument = GetArgument; - - var Ref = (function (_ExpressionSyntax3) { - babelHelpers.inherits(Ref, _ExpressionSyntax3); - - function Ref(parts) { - _ExpressionSyntax3.call(this); - this.parts = parts; - this.type = "ref"; - } - - Ref.build = function build(path) { - var parts = path.split('.'); - if (parts[0] === 'this') { - parts[0] = null; - } - return new this(parts); - }; - - Ref.prototype.compile = function compile(lookup) { - var parts = this.parts; - - var head = parts[0]; - var path = parts.slice(1); - if (head === null) { - return new _glimmerRuntimeLibCompiledExpressionsLookups.CompiledSelfLookup(path); - } else if (lookup.hasLocalSymbol(head)) { - var symbol = lookup.getLocalSymbol(head); - return new _glimmerRuntimeLibCompiledExpressionsLookups.CompiledLocalLookup(symbol, path, head); - } else { - return new _glimmerRuntimeLibCompiledExpressionsLookups.CompiledSelfLookup(parts); - } - }; - - return Ref; - })(_glimmerRuntimeLibSyntax.Expression); - - exports.Ref = Ref; - - var Get = (function (_ExpressionSyntax4) { - babelHelpers.inherits(Get, _ExpressionSyntax4); - - function Get(ref) { - _ExpressionSyntax4.call(this); - this.ref = ref; - this.type = "get"; - } - - Get.fromSpec = function fromSpec(sexp) { - var parts = sexp[1]; - - return new this(new Ref(parts)); - }; - - Get.build = function build(path) { - return new this(Ref.build(path)); - }; - - Get.prototype.compile = function compile(compiler) { - return this.ref.compile(compiler); - }; - - return Get; - })(_glimmerRuntimeLibSyntax.Expression); - - exports.Get = Get; - - var Unknown = (function (_ExpressionSyntax5) { - babelHelpers.inherits(Unknown, _ExpressionSyntax5); - - function Unknown(ref) { - _ExpressionSyntax5.call(this); - this.ref = ref; - this.type = "unknown"; - } - - Unknown.fromSpec = function fromSpec(sexp) { - var path = sexp[1]; - - return new this(new Ref(path)); - }; - - Unknown.build = function build(path) { - return new this(Ref.build(path)); - }; - - Unknown.prototype.compile = function compile(compiler, env, symbolTable) { - var ref = this.ref; - - if (env.hasHelper(ref.parts, symbolTable)) { - return new _glimmerRuntimeLibCompiledExpressionsHelper.default(ref.parts, env.lookupHelper(ref.parts, symbolTable), _glimmerRuntimeLibCompiledExpressionsArgs.CompiledArgs.empty(), symbolTable); - } else { - return this.ref.compile(compiler); - } - }; - - return Unknown; - })(_glimmerRuntimeLibSyntax.Expression); - - exports.Unknown = Unknown; - - var Helper = (function (_ExpressionSyntax6) { - babelHelpers.inherits(Helper, _ExpressionSyntax6); - - function Helper(ref, args) { - _ExpressionSyntax6.call(this); - this.ref = ref; - this.args = args; - this.type = "helper"; - } - - Helper.fromSpec = function fromSpec(sexp) { - var path = sexp[1]; - var params = sexp[2]; - var hash = sexp[3]; - - return new Helper(new Ref(path), Args.fromSpec(params, hash)); - }; - - Helper.build = function build(path, positional, named) { - return new this(Ref.build(path), Args.build(positional, named)); - }; - - Helper.prototype.compile = function compile(compiler, env, symbolTable) { - if (env.hasHelper(this.ref.parts, symbolTable)) { - var args = this.args; - var ref = this.ref; - - return new _glimmerRuntimeLibCompiledExpressionsHelper.default(ref.parts, env.lookupHelper(ref.parts, symbolTable), args.compile(compiler, env, symbolTable), symbolTable); - } else { - throw new Error('Compile Error: ' + this.ref.parts.join('.') + ' is not a helper'); - } - }; - - return Helper; - })(_glimmerRuntimeLibSyntax.Expression); - - exports.Helper = Helper; - - var HasBlock = (function (_ExpressionSyntax7) { - babelHelpers.inherits(HasBlock, _ExpressionSyntax7); - - function HasBlock(blockName) { - _ExpressionSyntax7.call(this); - this.blockName = blockName; - this.type = "has-block"; - } - - HasBlock.fromSpec = function fromSpec(sexp) { - var blockName = sexp[1]; - - return new HasBlock(blockName); - }; - - HasBlock.build = function build(blockName) { - return new this(blockName); - }; - - HasBlock.prototype.compile = function compile(compiler, env) { - return new _glimmerRuntimeLibCompiledExpressionsHasBlock.default(this.blockName, compiler.getBlockSymbol(this.blockName)); - }; - - return HasBlock; - })(_glimmerRuntimeLibSyntax.Expression); - - exports.HasBlock = HasBlock; - - var HasBlockParams = (function (_ExpressionSyntax8) { - babelHelpers.inherits(HasBlockParams, _ExpressionSyntax8); - - function HasBlockParams(blockName) { - _ExpressionSyntax8.call(this); - this.blockName = blockName; - this.type = "has-block-params"; - } - - HasBlockParams.fromSpec = function fromSpec(sexp) { - var blockName = sexp[1]; - - return new HasBlockParams(blockName); - }; - - HasBlockParams.build = function build(blockName) { - return new this(blockName); - }; - - HasBlockParams.prototype.compile = function compile(compiler, env) { - return new _glimmerRuntimeLibCompiledExpressionsHasBlockParams.default(this.blockName, compiler.getBlockSymbol(this.blockName)); - }; - - return HasBlockParams; - })(_glimmerRuntimeLibSyntax.Expression); - - exports.HasBlockParams = HasBlockParams; - - var Concat = (function () { - function Concat(parts) { - this.parts = parts; - this.type = "concat"; - } - - Concat.fromSpec = function fromSpec(sexp) { - var params = sexp[1]; - - return new Concat(params.map(_glimmerRuntimeLibSyntaxExpressions.default)); - }; - - Concat.build = function build(parts) { - return new this(parts); - }; - - Concat.prototype.compile = function compile(compiler, env, symbolTable) { - return new _glimmerRuntimeLibCompiledExpressionsConcat.default(this.parts.map(function (p) { - return p.compile(compiler, env, symbolTable); - })); - }; - - return Concat; - })(); - - exports.Concat = Concat; - - var Args = (function () { - function Args(positional, named) { - this.positional = positional; - this.named = named; - this.type = "args"; - } - - Args.empty = function empty() { - return EMPTY_ARGS; - }; - - Args.fromSpec = function fromSpec(positional, named) { - return new Args(PositionalArgs.fromSpec(positional), NamedArgs.fromSpec(named)); - }; - - Args.fromPositionalArgs = function fromPositionalArgs(positional) { - return new Args(positional, EMPTY_NAMED_ARGS); - }; - - Args.fromNamedArgs = function fromNamedArgs(named) { - return new Args(EMPTY_POSITIONAL_ARGS, named); - }; - - Args.build = function build(positional, named) { - if (positional === EMPTY_POSITIONAL_ARGS && named === EMPTY_NAMED_ARGS) { - return EMPTY_ARGS; - } else { - return new this(positional, named); - } - }; - - Args.prototype.compile = function compile(compiler, env, symbolTable) { - var positional = this.positional; - var named = this.named; - - return _glimmerRuntimeLibCompiledExpressionsArgs.CompiledArgs.create(positional.compile(compiler, env, symbolTable), named.compile(compiler, env, symbolTable)); - }; - - return Args; - })(); - - exports.Args = Args; - - var PositionalArgs = (function () { - function PositionalArgs(values) { - this.values = values; - this.type = "positional"; - this.length = values.length; - } - - PositionalArgs.empty = function empty() { - return EMPTY_POSITIONAL_ARGS; - }; - - PositionalArgs.fromSpec = function fromSpec(sexp) { - if (!sexp || sexp.length === 0) return EMPTY_POSITIONAL_ARGS; - return new PositionalArgs(sexp.map(_glimmerRuntimeLibSyntaxExpressions.default)); - }; - - PositionalArgs.build = function build(exprs) { - if (exprs.length === 0) { - return EMPTY_POSITIONAL_ARGS; - } else { - return new this(exprs); - } - }; - - PositionalArgs.prototype.slice = function slice(start, end) { - return PositionalArgs.build(this.values.slice(start, end)); - }; - - PositionalArgs.prototype.at = function at(index) { - return this.values[index]; - }; - - PositionalArgs.prototype.compile = function compile(compiler, env, symbolTable) { - return _glimmerRuntimeLibCompiledExpressionsArgs.CompiledPositionalArgs.create(this.values.map(function (v) { - return v.compile(compiler, env, symbolTable); - })); - }; - - return PositionalArgs; - })(); - - exports.PositionalArgs = PositionalArgs; - - var EMPTY_POSITIONAL_ARGS = new ((function (_PositionalArgs) { - babelHelpers.inherits(_class, _PositionalArgs); - - function _class() { - _PositionalArgs.call(this, _glimmerRuntimeLibUtils.EMPTY_ARRAY); - } - - _class.prototype.slice = function slice(start, end) { - return this; - }; - - _class.prototype.at = function at(index) { - return undefined; // ??! - }; - - _class.prototype.compile = function compile(compiler, env) { - return _glimmerRuntimeLibCompiledExpressionsArgs.CompiledPositionalArgs.empty(); - }; - - return _class; - })(PositionalArgs))(); - - var NamedArgs = (function () { - function NamedArgs(keys, values) { - this.keys = keys; - this.values = values; - this.type = "named"; - this.length = keys.length; - } - - NamedArgs.empty = function empty() { - return EMPTY_NAMED_ARGS; - }; - - NamedArgs.fromSpec = function fromSpec(sexp) { - if (sexp === null || sexp === undefined) { - return EMPTY_NAMED_ARGS; - } - var keys = sexp[0]; - var exprs = sexp[1]; - - if (keys.length === 0) { - return EMPTY_NAMED_ARGS; - } - return new this(keys, exprs.map(function (expr) { - return _glimmerRuntimeLibSyntaxExpressions.default(expr); - })); - }; - - NamedArgs.build = function build(keys, values) { - if (keys.length === 0) { - return EMPTY_NAMED_ARGS; - } else { - return new this(keys, values); - } - }; - - NamedArgs.prototype.at = function at(key) { - var keys = this.keys; - var values = this.values; - - var index = keys.indexOf(key); - return values[index]; - }; - - NamedArgs.prototype.has = function has(key) { - return this.keys.indexOf(key) !== -1; - }; - - NamedArgs.prototype.compile = function compile(compiler, env, symbolTable) { - var keys = this.keys; - var values = this.values; - - return new _glimmerRuntimeLibCompiledExpressionsArgs.CompiledNamedArgs(keys, values.map(function (value) { - return value.compile(compiler, env, symbolTable); - })); - }; - - return NamedArgs; - })(); - - exports.NamedArgs = NamedArgs; - - var EMPTY_NAMED_ARGS = new ((function (_NamedArgs) { - babelHelpers.inherits(_class2, _NamedArgs); - - function _class2() { - _NamedArgs.call(this, _glimmerRuntimeLibUtils.EMPTY_ARRAY, _glimmerRuntimeLibUtils.EMPTY_ARRAY); - } - - _class2.prototype.at = function at(key) { - return undefined; // ??! - }; - - _class2.prototype.has = function has(key) { - return false; - }; - - _class2.prototype.compile = function compile(compiler, env) { - return _glimmerRuntimeLibCompiledExpressionsArgs.CompiledNamedArgs.empty(); - }; - - return _class2; - })(NamedArgs))(); - var EMPTY_ARGS = new ((function (_Args) { - babelHelpers.inherits(_class3, _Args); - - function _class3() { - _Args.call(this, EMPTY_POSITIONAL_ARGS, EMPTY_NAMED_ARGS); - } - - _class3.prototype.compile = function compile(compiler, env) { - return _glimmerRuntimeLibCompiledExpressionsArgs.CompiledArgs.empty(); - }; - - return _class3; - })(Args))(); - - var Templates = (function () { - function Templates(_default) { - var inverse = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; - - this.type = "templates"; - this.default = _default; - this.inverse = inverse; - } - - Templates.fromSpec = function fromSpec(_default) { - var inverse = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; - - return new Templates(_default, inverse); - }; - - Templates.empty = function empty() { - return new Templates(null, null); - }; - - return Templates; - })(); - - exports.Templates = Templates; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvc3ludGF4L2NvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O1FBd0dBLEtBQUE7OEJBQUEsS0FBQTs7QUFvQkUsaUJBcEJGLEtBQUEsQ0FxQlcsSUFBYyxFQUNkLElBQVUsRUFDVixTQUFvQixFQUFBO0FBRTNCLHVDQUFPLENBQUM7QUFKRCxnQkFBQSxDQUFBLElBQUksR0FBSixJQUFJLENBQVU7QUFDZCxnQkFBQSxDQUFBLElBQUksR0FBSixJQUFJLENBQU07QUFDVixnQkFBQSxDQUFBLFNBQVMsR0FBVCxTQUFTLENBQVc7QUF0QnRCLGdCQUFBLENBQUEsSUFBSSxHQUFHLE9BQU8sQ0FBQztTQXlCckI7O0FBMUJILGFBQUEsQ0FHUyxRQUFRLEdBQUEsa0JBQUMsSUFBZ0MsRUFBRSxXQUF3QixFQUFFLE9BQXFCLEVBQUE7Z0JBQ3hGLElBQUksR0FBeUMsSUFBSTtnQkFBM0MsTUFBTSxHQUFpQyxJQUFJO2dCQUFuQyxJQUFJLEdBQTJCLElBQUk7Z0JBQTdCLFVBQVUsR0FBZSxJQUFJO2dCQUFqQixTQUFTLEdBQUksSUFBSTs7QUFFeEQsZ0JBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFJLE9BQU8sR0FBRyxBQUFDLE9BQU8sU0FBUyxLQUFLLFFBQVEsR0FBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7QUFFaEcsbUJBQU8sSUFBSSxLQUFLLENBQ2QsSUFBSSxFQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUMzQixTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FDdEMsQ0FBQztTQUNIOztBQWRILGFBQUEsQ0FnQlMsS0FBSyxHQUFBLGVBQUMsSUFBYyxFQUFFLElBQVUsRUFBRSxTQUFvQixFQUFBO0FBQzNELG1C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bmltcG9ydCB7XG4gIEJsb2NrU2Nhbm5lclxufSBmcm9tICcuLi9zY2FubmVyJztcblxuaW1wb3J0IFN5bWJvbFRhYmxlIGZyb20gJy4uL3N5bWJvbC10YWJsZSc7XG5cbmltcG9ydCB7XG4gIEFUVFJJQlVURSBhcyBBVFRSSUJVVEVfU1lOVEFYLFxuICBBUkdVTUVOVCBhcyBBUkdVTUVOVF9TWU5UQVgsXG4gIENvbXBpbGVJbnRvLFxuICBQYXJhbWV0ZXIgYXMgUGFyYW1ldGVyU3ludGF4LFxuICBBdHRyaWJ1dGUgYXMgQXR0cmlidXRlU3ludGF4LFxuICBBcmd1bWVudCBhcyBBcmd1bWVudFN5bnRheCxcbiAgRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uU3ludGF4LFxuICBTdGF0ZW1lbnQgYXMgU3RhdGVtZW50U3ludGF4LFxuICBTeW1ib2xMb29rdXBcbn0gZnJvbSAnLi4vc3ludGF4JztcblxuaW1wb3J0IHtcbiAgU3RhdGljUGFydGlhbFN5bnRheCxcbiAgRHluYW1pY1BhcnRpYWxTeW50YXhcbn0gZnJvbSAnLi9idWlsdGlucy9wYXJ0aWFsJztcblxuaW1wb3J0IHtcbiAgSW5saW5lQmxvY2tcbn0gZnJvbSAnLi4vY29tcGlsZWQvYmxvY2tzJztcblxuaW1wb3J0IHtcbiAgT3Bjb2RlXG59IGZyb20gJy4uL29wY29kZXMnO1xuXG5pbXBvcnQgT3Bjb2RlQnVpbGRlckRTTCBmcm9tICcuLi9jb21waWxlZC9vcGNvZGVzL2J1aWxkZXInO1xuXG5pbXBvcnQge1xuICBQdXRWYWx1ZU9wY29kZVxufSBmcm9tICcuLi9jb21waWxlZC9vcGNvZGVzL3ZtJztcblxuaW1wb3J0IHtcbiAgUHV0Q29tcG9uZW50RGVmaW5pdGlvbk9wY29kZSxcbiAgT3BlbkNvbXBvbmVudE9wY29kZSxcbiAgQ2xvc2VDb21wb25lbnRPcGNvZGVcbn0gZnJvbSAnLi4vY29tcGlsZWQvb3Bjb2Rlcy9jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBNb2RpZmllck9wY29kZVxufSBmcm9tICcuLi9jb21waWxlZC9vcGNvZGVzL2RvbSc7XG5cbmltcG9ydCBidWlsZEV4cHJlc3Npb24gZnJvbSAnLi9leHByZXNzaW9ucyc7XG5cbmltcG9ydCB7XG4gIENvbXBpbGVkQXJncyxcbiAgQ29tcGlsZWROYW1lZEFyZ3MsXG4gIENvbXBpbGVkUG9zaXRpb25hbEFyZ3MsXG59IGZyb20gJy4uL2NvbXBpbGVkL2V4cHJlc3Npb25zL2FyZ3MnO1xuXG5pbXBvcnQgQ29tcGlsZWRWYWx1ZSBmcm9tICcuLi9jb21waWxlZC9leHByZXNzaW9ucy92YWx1ZSc7XG5cbmltcG9ydCB7XG4gIENvbXBpbGVkTG9jYWxMb29rdXAsXG4gIENvbXBpbGVkU2VsZkxvb2t1cFxufSBmcm9tICcuLi9jb21waWxlZC9leHByZXNzaW9ucy9sb29rdXBzJztcblxuaW1wb3J0IENvbXBpbGVkSGFzQmxvY2sgZnJvbSAnLi4vY29tcGlsZWQvZXhwcmVzc2lvbnMvaGFzLWJsb2NrJztcblxuaW1wb3J0IENvbXBpbGVkSGFzQmxvY2tQYXJhbXMgZnJvbSAnLi4vY29tcGlsZWQvZXhwcmVzc2lvbnMvaGFzLWJsb2NrLXBhcmFtcyc7XG5cbmltcG9ydCBDb21waWxlZEhlbHBlciBmcm9tICcuLi9jb21waWxlZC9leHByZXNzaW9ucy9oZWxwZXInO1xuXG5pbXBvcnQgQ29tcGlsZWRDb25jYXQgZnJvbSAnLi4vY29tcGlsZWQvZXhwcmVzc2lvbnMvY29uY2F0JztcblxuaW1wb3J0IHtcbiAgQ29tcGlsZWRFeHByZXNzaW9uXG59IGZyb20gJy4uL2NvbXBpbGVkL2V4cHJlc3Npb25zJztcblxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5cbmltcG9ydCB7IEVNUFRZX0FSUkFZIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5pbXBvcnQgeyBPcGFxdWUgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuXG5pbXBvcnQge1xuICBPcGVuUHJpbWl0aXZlRWxlbWVudE9wY29kZSxcbiAgRmx1c2hFbGVtZW50T3Bjb2RlLFxuICBDbG9zZUVsZW1lbnRPcGNvZGUsXG4gIFN0YXRpY0F0dHJPcGNvZGUsXG4gIER5bmFtaWNBdHRyT3Bjb2RlLFxuICBEeW5hbWljQXR0ck5TT3Bjb2RlXG59IGZyb20gJy4uL2NvbXBpbGVkL29wY29kZXMvZG9tJztcblxuaW1wb3J0IHtcbiAgT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUsXG4gIE9wdGltaXplZFRydXN0aW5nQXBwZW5kT3Bjb2RlLFxuICBHdWFyZGVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUsXG4gIEd1YXJkZWRUcnVzdGluZ0FwcGVuZE9wY29kZVxufSBmcm9tICcuLi9jb21waWxlZC9vcGNvZGVzL2NvbnRlbnQnO1xuXG5pbXBvcnQge1xuICBTdGF0ZW1lbnRzIGFzIFNlcmlhbGl6ZWRTdGF0ZW1lbnRzLFxuICBFeHByZXNzaW9ucyBhcyBTZXJpYWxpemVkRXhwcmVzc2lvbnMsXG4gIENvcmUgYXMgU2VyaWFsaXplZENvcmVcbn0gZnJvbSAnZ2xpbW1lci13aXJlLWZvcm1hdCc7XG5cbmV4cG9ydCBjbGFzcyBCbG9jayBleHRlbmRzIFN0YXRlbWVudFN5bnRheCB7XG4gIHB1YmxpYyB0eXBlID0gXCJibG9ja1wiO1xuXG4gIHN0YXRpYyBmcm9tU3BlYyhzZXhwOiBTZXJpYWxpemVkU3RhdGVtZW50cy5CbG9jaywgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlLCBzY2FubmVyOiBCbG9ja1NjYW5uZXIpOiBCbG9jayB7XG4gICAgbGV0IFssIHBhdGgsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGVJZCwgaW52ZXJzZUlkXSA9IHNleHA7XG5cbiAgICBsZXQgdGVtcGxhdGUgPSBzY2FubmVyLmJsb2NrRm9yKHN5bWJvbFRhYmxlLCB0ZW1wbGF0ZUlkKTtcbiAgICBsZXQgaW52ZXJzZSA9ICh0eXBlb2YgaW52ZXJzZUlkID09PSAnbnVtYmVyJykgPyBzY2FubmVyLmJsb2NrRm9yKHN5bWJvbFRhYmxlLCBpbnZlcnNlSWQpIDogbnVsbDtcblxuICAgIHJldHVybiBuZXcgQmxvY2soXG4gICAgICBwYXRoLFxuICAgICAgQXJncy5mcm9tU3BlYyhwYXJhbXMsIGhhc2gpLFxuICAgICAgVGVtcGxhdGVzLmZyb21TcGVjKHRlbXBsYXRlLCBpbnZlcnNlKVxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGQocGF0aDogc3RyaW5nW10sIGFyZ3M6IEFyZ3MsIHRlbXBsYXRlczogVGVtcGxhdGVzKTogQmxvY2sge1xuICAgIHJldHVybiBuZXcgdGhpcyhwYXRoLCBhcmdzLCB0ZW1wbGF0ZXMpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBhdGg6IHN0cmluZ1tdLFxuICAgIHB1YmxpYyBhcmdzOiBBcmdzLFxuICAgIHB1YmxpYyB0ZW1wbGF0ZXM6IFRlbXBsYXRlc1xuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgc2NhbihzY2FubmVyOiBCbG9ja1NjYW5uZXIpOiBTdGF0ZW1lbnRTeW50YXgge1xuICAgIGxldCB7IGRlZmF1bHQ6IF9kZWZhdWx0LCBpbnZlcnNlIH0gPSB0aGlzLnRlbXBsYXRlcztcblxuICAgIGlmIChfZGVmYXVsdCkgc2Nhbm5lci5hZGRDaGlsZChfZGVmYXVsdCk7XG4gICAgaWYgKGludmVyc2UpICBzY2FubmVyLmFkZENoaWxkKGludmVyc2UpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb21waWxlKG9wczogQ29tcGlsZUludG8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTeW50YXhFcnJvclwiKTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgQXBwZW5kT3Bjb2RlIHtcbiAgbmV3KCk6IE9wY29kZTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFwcGVuZCBleHRlbmRzIFN0YXRlbWVudFN5bnRheCB7XG4gIHN0YXRpYyBmcm9tU3BlYyhzZXhwOiBTZXJpYWxpemVkU3RhdGVtZW50cy5BcHBlbmQpOiBBcHBlbmQge1xuICAgIGxldCBbLCB2YWx1ZSwgdHJ1c3RpbmdNb3JwaF0gPSBzZXhwO1xuICAgIHJldHVybiBuZXcgT3B0aW1pemVkQXBwZW5kKHsgdmFsdWU6IGJ1aWxkRXhwcmVzc2lvbih2YWx1ZSksIHRydXN0aW5nTW9ycGggfSk7XG4gIH1cblxuICB2YWx1ZTogRXhwcmVzc2lvblN5bnRheDxhbnk+O1xuICB0cnVzdGluZ01vcnBoOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHsgdmFsdWUsIHRydXN0aW5nTW9ycGggfTogeyB2YWx1ZTogRXhwcmVzc2lvblN5bnRheDxhbnk+LCB0cnVzdGluZ01vcnBoOiBib29sZWFuIH0pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnRydXN0aW5nTW9ycGggPSB0cnVzdGluZ01vcnBoO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcHRpbWl6ZWRBcHBlbmQgZXh0ZW5kcyBBcHBlbmQge1xuICBwdWJsaWMgdHlwZSA9IFwib3B0aW1pemVkLWFwcGVuZFwiO1xuXG4gIGRlb3B0KCk6IFVub3B0aW1pemVkQXBwZW5kIHtcbiAgICByZXR1cm4gbmV3IFVub3B0aW1pemVkQXBwZW5kKHRoaXMpO1xuICB9XG5cbiAgY29tcGlsZShjb21waWxlcjogQ29tcGlsZUludG8gJiBTeW1ib2xMb29rdXAsIGVudjogRW52aXJvbm1lbnQsIHN5bWJvbFRhYmxlOiBTeW1ib2xUYWJsZSkge1xuICAgIGNvbXBpbGVyLmFwcGVuZChuZXcgUHV0VmFsdWVPcGNvZGUodGhpcy52YWx1ZS5jb21waWxlKGNvbXBpbGVyLCBlbnYsIHN5bWJvbFRhYmxlKSkpO1xuXG4gICAgaWYgKHRoaXMudHJ1c3RpbmdNb3JwaCkge1xuICAgICAgY29tcGlsZXIuYXBwZW5kKG5ldyBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcGlsZXIuYXBwZW5kKG5ldyBPcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZSgpKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVub3B0aW1pemVkQXBwZW5kIGV4dGVuZHMgQXBwZW5kIHtcbiAgcHVibGljIHR5cGUgPSBcInVub3B0aW1pemVkLWFwcGVuZFwiO1xuXG4gIGNvbXBpbGUoY29tcGlsZXI6IENvbXBpbGVJbnRvICYgU3ltYm9sTG9va3VwLCBlbnY6IEVudmlyb25tZW50LCBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpIHtcbiAgICBsZXQgZXhwcmVzc2lvbiA9IHRoaXMudmFsdWUuY29tcGlsZShjb21waWxlciwgZW52LCBzeW1ib2xUYWJsZSk7XG5cbiAgICBpZiAodGhpcy50cnVzdGluZ01vcnBoKSB7XG4gICAgICBjb21waWxlci5hcHBlbmQobmV3IEd1YXJkZWRUcnVzdGluZ0FwcGVuZE9wY29kZShleHByZXNzaW9uLCBzeW1ib2xUYWJsZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21waWxlci5hcHBlbmQobmV3IEd1YXJkZWRDYXV0aW91c0FwcGVuZE9wY29kZShleHByZXNzaW9uLCBzeW1ib2xUYWJsZSkpO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBNT0RJRklFUl9TWU5UQVggPSBcImMwNDIwMzk3LThmZjEtNDI0MS04ODJiLTRiN2ExMDdjOTYzMlwiO1xuXG5leHBvcnQgY2xhc3MgTW9kaWZpZXIgZXh0ZW5kcyBTdGF0ZW1lbnRTeW50YXgge1xuICBcImMwNDIwMzk3LThmZjEtNDI0MS04ODJiLTRiN2ExMDdjOTYzMlwiID0gdHJ1ZTtcblxuICBwdWJsaWMgdHlwZTogc3RyaW5nID0gXCJtb2RpZmllclwiO1xuICBwdWJsaWMgcGF0aDogc3RyaW5nW107XG4gIHB1YmxpYyBhcmdzOiBBcmdzO1xuXG4gIHN0YXRpYyBmcm9tU3BlYyhub2RlKSB7XG4gICAgbGV0IFssIHBhdGgsIHBhcmFtcywgaGFzaF0gPSBub2RlO1xuXG4gICAgcmV0dXJuIG5ldyBNb2RpZmllcih7XG4gICAgICBwYXRoLFxuICAgICAgYXJnczogQXJncy5mcm9tU3BlYyhwYXJhbXMsIGhhc2gpXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGQocGF0aCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTW9kaWZpZXIoe1xuICAgICAgcGF0aCxcbiAgICAgIHBhcmFtczogb3B0aW9ucy5wYXJhbXMsXG4gICAgICBoYXNoOiBvcHRpb25zLmhhc2hcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucGF0aCA9IG9wdGlvbnMucGF0aDtcbiAgICB0aGlzLmFyZ3MgPSBvcHRpb25zLmFyZ3M7XG4gIH1cblxuICBjb21waWxlKGNvbXBpbGVyOiBDb21waWxlSW50byAmIFN5bWJvbExvb2t1cCwgZW52OiBFbnZpcm9ubWVudCwgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKSB7XG4gICAgbGV0IGFyZ3MgPSB0aGlzLmFyZ3MuY29tcGlsZShjb21waWxlciwgZW52LCBzeW1ib2xUYWJsZSk7XG5cbiAgICBpZiAoZW52Lmhhc01vZGlmaWVyKHRoaXMucGF0aCwgc3ltYm9sVGFibGUpKSB7XG4gICAgICBjb21waWxlci5hcHBlbmQobmV3IE1vZGlmaWVyT3Bjb2RlKFxuICAgICAgICB0aGlzLnBhdGhbMF0sXG4gICAgICAgIGVudi5sb29rdXBNb2RpZmllcih0aGlzLnBhdGgsIHN5bWJvbFRhYmxlKSxcbiAgICAgICAgYXJnc1xuICAgICAgKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcGlsZSBFcnJvcjogJHt0aGlzLnBhdGguam9pbignLicpfSBpcyBub3QgYSBtb2RpZmllcmApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RhdGljQXJnIGV4dGVuZHMgQXJndW1lbnRTeW50YXg8c3RyaW5nPiB7XG4gIHB1YmxpYyB0eXBlID0gXCJzdGF0aWMtYXJnXCI7XG5cbiAgc3RhdGljIGZyb21TcGVjKG5vZGU6IFNlcmlhbGl6ZWRTdGF0ZW1lbnRzLlN0YXRpY0FyZyk6IFN0YXRpY0FyZyB7XG4gICAgbGV0IFssIG5hbWUsIHZhbHVlXSA9IG5vZGU7XG4gICAgcmV0dXJuIG5ldyBTdGF0aWNBcmcobmFtZSwgdmFsdWUgYXMgc3RyaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG5hbWVzcGFjZTogc3RyaW5nPW51bGwpOiBTdGF0aWNBcmcge1xuICAgIHJldHVybiBuZXcgdGhpcyhuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nLCBwdWJsaWMgdmFsdWU6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBjb21waWxlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbXBpbGVyIFN0YXRpY0FyZyBcIiR7dGhpcy5uYW1lfVwiIGFzIGl0IGlzIGEgZGVsZWdhdGUgZm9yIFZhbHVlU3ludGF4PHN0cmluZz4uYCk7XG4gIH1cblxuICB2YWx1ZVN5bnRheCgpOiBFeHByZXNzaW9uU3ludGF4PHN0cmluZz4ge1xuICAgIHJldHVybiBWYWx1ZS5idWlsZCh0aGlzLnZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRHluYW1pY0FyZyBleHRlbmRzIEFyZ3VtZW50U3ludGF4PE9wYXF1ZT4ge1xuICBwdWJsaWMgdHlwZSA9ICdkeW5hbWljLWFyZyc7XG4gIHN0YXRpYyBmcm9tU3BlYyhzZXhwOiBTZXJpYWxpemVkU3RhdGVtZW50cy5EeW5hbWljQXJnKTogRHluYW1pY0FyZyB7XG4gICAgbGV0IFssIG5hbWUsIHZhbHVlXSA9IHNleHA7XG5cbiAgICByZXR1cm4gbmV3IER5bmFtaWNBcmcoXG4gICAgICBuYW1lLFxuICAgICAgYnVpbGRFeHByZXNzaW9uKHZhbHVlKVxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGQobmFtZTogc3RyaW5nLCB2YWx1ZTogRXhwcmVzc2lvblN5bnRheDxzdHJpbmc+KTogRHluYW1pY0FyZyB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIHZhbHVlOiBFeHByZXNzaW9uU3ludGF4PE9wYXF1ZT4sXG4gICAgcHVibGljIG5hbWVzcGFjZTogc3RyaW5nID0gbnVsbFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgY29tcGlsZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb21waWxlIER5bmFtaWNBcmcgZm9yIFwiJHt0aGlzLm5hbWV9XCIgYXMgaXQgaXMgZGVsZWdhdGUgZm9yIEV4cHJlc3Npb25TeW50YXg8T3BhcXVlPi5gKTtcbiAgfVxuXG4gIHZhbHVlU3ludGF4KCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcnVzdGluZ0F0dHIge1xuICBzdGF0aWMgZnJvbVNwZWMoc2V4cDogU2VyaWFsaXplZFN0YXRlbWVudHMuVHJ1c3RpbmdBdHRyKTogRHluYW1pY0F0dHIge1xuICAgIGxldCBbLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSA9IHNleHA7XG4gICAgcmV0dXJuIG5ldyBEeW5hbWljQXR0cihcbiAgICAgIG5hbWUsXG4gICAgICBidWlsZEV4cHJlc3Npb24odmFsdWUpLFxuICAgICAgbmFtZXNwYWNlLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGQobmFtZTogc3RyaW5nLCB2YWx1ZTogRXhwcmVzc2lvblN5bnRheDxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuLCBuYW1lc3BhY2U6IHN0cmluZz1udWxsKTogRHluYW1pY0F0dHIge1xuICAgIHJldHVybiBuZXcgRHluYW1pY0F0dHIobmFtZSwgdmFsdWUsIG5hbWVzcGFjZSwgaXNUcnVzdGluZyk7XG4gIH1cblxuICBjb21waWxlKCkgeyB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRpbmcgdG8gY29tcGlsZSBhIFRydXN0aW5nQXR0ciB3aGljaCBpcyBqdXN0IGEgZGVsZWdhdGUgZm9yIER5bmFtaWNBdHRyLicpOyB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdGF0aWNBdHRyIGV4dGVuZHMgQXR0cmlidXRlU3ludGF4PHN0cmluZz4ge1xuICBcImUxMTg1ZDMwLTdjYWMtNGIxMi1iMjZhLTM1MzI3ZDkwNWQ5MlwiID0gdHJ1ZTtcbiAgdHlwZSA9IFwic3RhdGljLWF0dHJcIjtcblxuICBzdGF0aWMgZnJvbVNwZWMobm9kZTogU2VyaWFsaXplZFN0YXRlbWVudHMuU3RhdGljQXR0cik6IFN0YXRpY0F0dHIge1xuICAgIGxldCBbLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSA9IG5vZGU7XG4gICAgcmV0dXJuIG5ldyBTdGF0aWNBdHRyKG5hbWUsIHZhbHVlIGFzIHN0cmluZywgbmFtZXNwYWNlKTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG5hbWVzcGFjZTogc3RyaW5nPW51bGwpOiBTdGF0aWNBdHRyIHtcbiAgICByZXR1cm4gbmV3IHRoaXMobmFtZSwgdmFsdWUsIG5hbWVzcGFjZSk7XG4gIH1cblxuICBpc1RydXN0aW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgdmFsdWU6IHN0cmluZyxcbiAgICBwdWJsaWMgbmFtZXNwYWNlOiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGNvbXBpbGUoY29tcGlsZXI6IENvbXBpbGVJbnRvKSB7XG4gICAgY29tcGlsZXIuYXBwZW5kKG5ldyBTdGF0aWNBdHRyT3Bjb2RlKHRoaXMubmFtZXNwYWNlLCB0aGlzLm5hbWUsIHRoaXMudmFsdWUpKTtcbiAgfVxuXG4gIHZhbHVlU3ludGF4KCk6IEV4cHJlc3Npb25TeW50YXg8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFZhbHVlLmJ1aWxkKHRoaXMudmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEeW5hbWljQXR0ciBleHRlbmRzIEF0dHJpYnV0ZVN5bnRheDxzdHJpbmc+IHtcbiAgXCJlMTE4NWQzMC03Y2FjLTRiMTItYjI2YS0zNTMyN2Q5MDVkOTJcIiA9IHRydWU7XG4gIHR5cGUgPSBcImR5bmFtaWMtYXR0clwiO1xuXG4gIHN0YXRpYyBmcm9tU3BlYyhzZXhwOiBTZXJpYWxpemVkU3RhdGVtZW50cy5EeW5hbWljQXR0cik6IER5bmFtaWNBdHRyIHtcbiAgICBsZXQgWywgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0gPSBzZXhwO1xuICAgIHJldHVybiBuZXcgRHluYW1pY0F0dHIoXG4gICAgICBuYW1lLFxuICAgICAgYnVpbGRFeHByZXNzaW9uKHZhbHVlKSxcbiAgICAgIG5hbWVzcGFjZVxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGQobmFtZTogc3RyaW5nLCB2YWx1ZTogRXhwcmVzc2lvblN5bnRheDxzdHJpbmc+LCBpc1RydXN0aW5nID0gZmFsc2UsIG5hbWVzcGFjZTogc3RyaW5nPW51bGwpOiBEeW5hbWljQXR0ciB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UsIGlzVHJ1c3RpbmcpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgdmFsdWU6IEV4cHJlc3Npb25TeW50YXg8c3RyaW5nPixcbiAgICBwdWJsaWMgbmFtZXNwYWNlOiBzdHJpbmcgPSB1bmRlZmluZWQsXG4gICAgcHVibGljIGlzVHJ1c3Rpbmc/OiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgY29tcGlsZShjb21waWxlcjogQ29tcGlsZUludG8gJiBTeW1ib2xMb29rdXAsIGVudjogRW52aXJvbm1lbnQsIHN5bWJvbFRhYmxlOiBTeW1ib2xUYWJsZSkge1xuICAgIGxldCB7bmFtZXNwYWNlLCB2YWx1ZX0gPSB0aGlzO1xuICAgIGNvbXBpbGVyLmFwcGVuZChuZXcgUHV0VmFsdWVPcGNvZGUodmFsdWUuY29tcGlsZShjb21waWxlciwgZW52LCBzeW1ib2xUYWJsZSkpKTtcbiAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICBjb21waWxlci5hcHBlbmQobmV3IER5bmFtaWNBdHRyTlNPcGNvZGUodGhpcy5uYW1lLCB0aGlzLm5hbWVzcGFjZSwgdGhpcy5pc1RydXN0aW5nKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBpbGVyLmFwcGVuZChuZXcgRHluYW1pY0F0dHJPcGNvZGUodGhpcy5uYW1lLCB0aGlzLmlzVHJ1c3RpbmcpKTtcbiAgICB9XG4gIH1cblxuICB2YWx1ZVN5bnRheCgpOiBFeHByZXNzaW9uU3ludGF4PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGbHVzaEVsZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnRTeW50YXgge1xuICB0eXBlID0gXCJmbHVzaC1lbGVtZW50XCI7XG5cbiAgc3RhdGljIGZyb21TcGVjKCkge1xuICAgIHJldHVybiBuZXcgRmx1c2hFbGVtZW50KCk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGQoKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKCk7XG4gIH1cblxuICBjb21waWxlKGNvbXBpbGVyOiBDb21waWxlSW50bykge1xuICAgIGNvbXBpbGVyLmFwcGVuZChuZXcgRmx1c2hFbGVtZW50T3Bjb2RlKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDbG9zZUVsZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnRTeW50YXgge1xuICB0eXBlID0gXCJjbG9zZS1lbGVtZW50XCI7XG5cbiAgc3RhdGljIGZyb21TcGVjKCkge1xuICAgIHJldHVybiBuZXcgQ2xvc2VFbGVtZW50KCk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGQoKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKCk7XG4gIH1cblxuICBjb21waWxlKGNvbXBpbGVyOiBDb21waWxlSW50bykge1xuICAgIGNvbXBpbGVyLmFwcGVuZChuZXcgQ2xvc2VFbGVtZW50T3Bjb2RlKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZXh0IGV4dGVuZHMgU3RhdGVtZW50U3ludGF4IHtcbiAgdHlwZSA9IFwidGV4dFwiO1xuXG4gIHN0YXRpYyBmcm9tU3BlYyhub2RlOiBTZXJpYWxpemVkU3RhdGVtZW50cy5UZXh0KTogVGV4dCB7XG4gICAgbGV0IFssIGNvbnRlbnRdID0gbm9kZTtcbiAgICByZXR1cm4gbmV3IFRleHQoY29udGVudCk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGQoY29udGVudCk6IFRleHQge1xuICAgIHJldHVybiBuZXcgdGhpcyhjb250ZW50KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb250ZW50OiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgY29tcGlsZShkc2w6IE9wY29kZUJ1aWxkZXJEU0wpIHtcbiAgICBkc2wudGV4dCh0aGlzLmNvbnRlbnQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tZW50IGV4dGVuZHMgU3RhdGVtZW50U3ludGF4IHtcbiAgdHlwZSA9IFwiY29tbWVudFwiO1xuXG4gIHN0YXRpYyBmcm9tU3BlYyhzZXhwOiBTZXJpYWxpemVkU3RhdGVtZW50cy5Db21tZW50KTogQ29tbWVudCB7XG4gICAgbGV0IFssIHZhbHVlXSA9IHNleHA7XG5cbiAgICByZXR1cm4gbmV3IENvbW1lbnQodmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkKHZhbHVlOiBzdHJpbmcpOiBDb21tZW50IHtcbiAgICByZXR1cm4gbmV3IHRoaXModmFsdWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNvbW1lbnQ6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBjb21waWxlKGRzbDogT3Bjb2RlQnVpbGRlckRTTCkge1xuICAgIGRzbC5jb21tZW50KHRoaXMuY29tbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wZW5FbGVtZW50IGV4dGVuZHMgU3RhdGVtZW50U3ludGF4IHtcbiAgdHlwZSA9IFwib3Blbi1lbGVtZW50XCI7XG5cbiAgc3RhdGljIGZyb21TcGVjKHNleHA6IFNlcmlhbGl6ZWRTdGF0ZW1lbnRzLk9wZW5FbGVtZW50LCBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpOiBPcGVuRWxlbWVudCB7XG4gICAgbGV0IFssIHRhZywgYmxvY2tQYXJhbXNdID0gc2V4cDtcblxuICAgIHJldHVybiBuZXcgT3BlbkVsZW1lbnQoXG4gICAgICB0YWcsXG4gICAgICBibG9ja1BhcmFtcyxcbiAgICAgIHN5bWJvbFRhYmxlXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZCh0YWc6IHN0cmluZywgYmxvY2tQYXJhbXM6IHN0cmluZ1tdLCBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpOiBPcGVuRWxlbWVudCB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKHRhZywgYmxvY2tQYXJhbXMsIHN5bWJvbFRhYmxlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0YWc6IHN0cmluZyxcbiAgICBwdWJsaWMgYmxvY2tQYXJhbXM6IHN0cmluZ1tdLFxuICAgIHB1YmxpYyBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGVcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHNjYW4oc2Nhbm5lcjogQmxvY2tTY2FubmVyKTogU3RhdGVtZW50U3ludGF4IHtcbiAgICBsZXQgeyB0YWcgfSA9IHRoaXM7XG5cbiAgICBpZiAoc2Nhbm5lci5lbnYuaGFzQ29tcG9uZW50RGVmaW5pdGlvbihbdGFnXSwgdGhpcy5zeW1ib2xUYWJsZSkpIHtcbiAgICAgIGxldCB7IGFyZ3MsIGF0dHJzIH0gPSB0aGlzLnBhcmFtZXRlcnMoc2Nhbm5lcik7XG4gICAgICBzY2FubmVyLnN0YXJ0QmxvY2sodGhpcy5ibG9ja1BhcmFtcyk7XG4gICAgICB0aGlzLnRhZ0NvbnRlbnRzKHNjYW5uZXIpO1xuICAgICAgbGV0IHRlbXBsYXRlID0gc2Nhbm5lci5lbmRCbG9jayh0aGlzLmJsb2NrUGFyYW1zKTtcbiAgICAgIHJldHVybiBuZXcgQ29tcG9uZW50KHRhZywgYXR0cnMsIGFyZ3MsIHRlbXBsYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBPcGVuUHJpbWl0aXZlRWxlbWVudCh0YWcpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBpbGUobGlzdDogQ29tcGlsZUludG8sIGVudjogRW52aXJvbm1lbnQpIHtcbiAgICBsaXN0LmFwcGVuZChuZXcgT3BlblByaW1pdGl2ZUVsZW1lbnRPcGNvZGUodGhpcy50YWcpKTtcbiAgfVxuXG4gIHRvSWRlbnRpdHkoKTogT3BlblByaW1pdGl2ZUVsZW1lbnQge1xuICAgIGxldCB7IHRhZyB9ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IE9wZW5QcmltaXRpdmVFbGVtZW50KHRhZyk7XG4gIH1cblxuICBwcml2YXRlIHBhcmFtZXRlcnMoc2Nhbm5lcjogQmxvY2tTY2FubmVyKTogeyBhcmdzOiBBcmdzLCBhdHRyczogc3RyaW5nW10gfSB7XG4gICAgbGV0IGN1cnJlbnQgPSBzY2FubmVyLm5leHQoKTtcbiAgICBsZXQgYXR0cnM6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGFyZ0tleXM6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGFyZ1ZhbHVlczogRXhwcmVzc2lvblN5bnRheDxPcGFxdWU+W10gPSBbXTtcblxuICAgIHdoaWxlICghKGN1cnJlbnQgaW5zdGFuY2VvZiBGbHVzaEVsZW1lbnQpKSB7XG4gICAgICBpZiAoY3VycmVudFtNT0RJRklFUl9TWU5UQVhdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcGlsZSBFcnJvcjogRWxlbWVudCBtb2RpZmllcnMgYXJlIG5vdCBhbGxvd2VkIGluIGNvbXBvbmVudHNgKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHBhcmFtID0gPFBhcmFtZXRlclN5bnRheDxPcGFxdWU+PmN1cnJlbnQ7XG5cbiAgICAgIGlmIChjdXJyZW50W0FUVFJJQlVURV9TWU5UQVhdKSB7XG4gICAgICAgIGF0dHJzLnB1c2gocGFyYW0ubmFtZSk7XG5cbiAgICAgICAgLy8gUkVNT1ZFIE1FOiBhdHRyaWJ1dGVzIHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBhcmdzXG4gICAgICAgIGFyZ0tleXMucHVzaChwYXJhbS5uYW1lKTtcbiAgICAgICAgYXJnVmFsdWVzLnB1c2gocGFyYW0udmFsdWVTeW50YXgoKSk7XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRbQVJHVU1FTlRfU1lOVEFYXSkge1xuICAgICAgICBhcmdLZXlzLnB1c2gocGFyYW0ubmFtZSk7XG4gICAgICAgIGFyZ1ZhbHVlcy5wdXNoKHBhcmFtLnZhbHVlU3ludGF4KCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgRmx1c2hFbGVtZW50LCBidXQgZ290ICR7Y3VycmVudH1cIik7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQgPSBzY2FubmVyLm5leHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBhcmdzOiBBcmdzLmZyb21OYW1lZEFyZ3MoTmFtZWRBcmdzLmJ1aWxkKGFyZ0tleXMsIGFyZ1ZhbHVlcykpLCBhdHRycyB9O1xuICB9XG5cbiAgcHJpdmF0ZSB0YWdDb250ZW50cyhzY2FubmVyOiBCbG9ja1NjYW5uZXIpIHtcbiAgICBsZXQgbmVzdGluZyA9IDE7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgbGV0IGN1cnJlbnQgPSBzY2FubmVyLm5leHQoKTtcbiAgICAgIGlmIChjdXJyZW50IGluc3RhbmNlb2YgQ2xvc2VFbGVtZW50ICYmIC0tbmVzdGluZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgc2Nhbm5lci5hZGRTdGF0ZW1lbnQoY3VycmVudCk7XG5cbiAgICAgIGlmIChjdXJyZW50IGluc3RhbmNlb2YgT3BlbkVsZW1lbnQgfHwgY3VycmVudCBpbnN0YW5jZW9mIE9wZW5QcmltaXRpdmVFbGVtZW50KSB7XG4gICAgICAgIG5lc3RpbmcrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudCBleHRlbmRzIFN0YXRlbWVudFN5bnRheCB7XG4gIHB1YmxpYyB0eXBlID0gJ2NvbXBvbmVudCc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRhZzogc3RyaW5nLFxuICAgIHB1YmxpYyBhdHRyczogc3RyaW5nW10sXG4gICAgcHVibGljIGFyZ3M6IEFyZ3MsXG4gICAgcHVibGljIHRlbXBsYXRlOiBJbmxpbmVCbG9ja1xuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgY29tcGlsZShsaXN0OiBDb21waWxlSW50byAmIFN5bWJvbExvb2t1cCwgZW52OiBFbnZpcm9ubWVudCwgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKSB7XG4gICAgbGV0IGRlZmluaXRpb24gPSBlbnYuZ2V0Q29tcG9uZW50RGVmaW5pdGlvbihbdGhpcy50YWddLCBzeW1ib2xUYWJsZSk7XG4gICAgbGV0IGFyZ3MgPSB0aGlzLmFyZ3MuY29tcGlsZShsaXN0IGFzIFN5bWJvbExvb2t1cCwgZW52LCBzeW1ib2xUYWJsZSk7XG4gICAgbGV0IHNoYWRvdyA9IHRoaXMuYXR0cnM7XG4gICAgbGV0IHRlbXBsYXRlcyA9IG5ldyBUZW1wbGF0ZXModGhpcy50ZW1wbGF0ZSk7XG5cbiAgICBsaXN0LmFwcGVuZChuZXcgUHV0Q29tcG9uZW50RGVmaW5pdGlvbk9wY29kZShkZWZpbml0aW9uKSk7XG4gICAgbGlzdC5hcHBlbmQobmV3IE9wZW5Db21wb25lbnRPcGNvZGUoYXJncywgc2hhZG93LCB0ZW1wbGF0ZXMpKTtcbiAgICBsaXN0LmFwcGVuZChuZXcgQ2xvc2VDb21wb25lbnRPcGNvZGUoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wZW5QcmltaXRpdmVFbGVtZW50IGV4dGVuZHMgU3RhdGVtZW50U3ludGF4IHtcbiAgdHlwZSA9IFwib3Blbi1wcmltaXRpdmUtZWxlbWVudFwiO1xuXG4gIHN0YXRpYyBidWlsZCh0YWc6IHN0cmluZyk6IE9wZW5QcmltaXRpdmVFbGVtZW50IHtcbiAgICByZXR1cm4gbmV3IHRoaXModGFnKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0YWc6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBjb21waWxlKGNvbXBpbGVyOiBDb21waWxlSW50bykge1xuICAgIGNvbXBpbGVyLmFwcGVuZChuZXcgT3BlblByaW1pdGl2ZUVsZW1lbnRPcGNvZGUodGhpcy50YWcpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgWWllbGQgZXh0ZW5kcyBTdGF0ZW1lbnRTeW50YXgge1xuICBzdGF0aWMgZnJvbVNwZWMoc2V4cDogU2VyaWFsaXplZFN0YXRlbWVudHMuWWllbGQpOiBZaWVsZCB7XG4gICAgbGV0IFssIHRvLCBwYXJhbXNdID0gc2V4cDtcblxuICAgIGxldCBhcmdzID0gQXJncy5mcm9tU3BlYyhwYXJhbXMsIG51bGwpO1xuXG4gICAgcmV0dXJuIG5ldyBZaWVsZCh0bywgYXJncyk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGQocGFyYW1zOiBFeHByZXNzaW9uU3ludGF4PE9wYXF1ZT5bXSwgdG86IHN0cmluZyk6IFlpZWxkIHtcbiAgICBsZXQgYXJncyA9IEFyZ3MuZnJvbVBvc2l0aW9uYWxBcmdzKFBvc2l0aW9uYWxBcmdzLmJ1aWxkKHBhcmFtcykpO1xuICAgIHJldHVybiBuZXcgdGhpcyh0bywgYXJncyk7XG4gIH1cblxuICB0eXBlID0gXCJ5aWVsZFwiO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0bzogc3RyaW5nLCBwdWJsaWMgYXJnczogQXJncykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBjb21waWxlKGRzbDogT3Bjb2RlQnVpbGRlckRTTCwgZW52OiBFbnZpcm9ubWVudCwgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKSB7XG4gICAgbGV0IHRvID0gZHNsLmdldEJsb2NrU3ltYm9sKHRoaXMudG8pO1xuICAgIGxldCBhcmdzID0gdGhpcy5hcmdzLmNvbXBpbGUoZHNsLCBlbnYsIHN5bWJvbFRhYmxlKTtcbiAgICBkc2wuYXBwZW5kKG5ldyBPcGVuQmxvY2tPcGNvZGUodG8sIHRoaXMudG8sIGFyZ3MpKTtcbiAgICBkc2wuYXBwZW5kKG5ldyBDbG9zZUJsb2NrT3Bjb2RlKCkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljUGFydGlhbE5hbWUoZXhwOiBFeHByZXNzaW9uU3ludGF4PE9wYXF1ZT4pOiBleHAgaXMgVmFsdWU8YW55PiB7XG4gIHJldHVybiBleHAudHlwZSA9PT0gJ3ZhbHVlJztcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBhcnRpYWwgZXh0ZW5kcyBTdGF0ZW1lbnRTeW50YXgge1xuICBzdGF0aWMgZnJvbVNwZWMoc2V4cDogU2VyaWFsaXplZFN0YXRlbWVudHMuUGFydGlhbCk6IFBhcnRpYWwge1xuICAgIGxldCBbLCBleHBdID0gc2V4cDtcblxuICAgIGxldCBuYW1lID0gYnVpbGRFeHByZXNzaW9uKGV4cCkgYXMgRXhwcmVzc2lvblN5bnRheDxPcGFxdWU+O1xuXG4gICAgaWYgKGlzU3RhdGljUGFydGlhbE5hbWUobmFtZSkpIHtcbiAgICAgIHJldHVybiBuZXcgU3RhdGljUGFydGlhbFN5bnRheChuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEeW5hbWljUGFydGlhbFN5bnRheChuYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgT3BlbkJsb2NrT3Bjb2RlIGV4dGVuZHMgT3Bjb2RlIHtcbiAgdHlwZSA9IFwib3Blbi1ibG9ja1wiO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0bzogbnVtYmVyLFxuICAgIHB1YmxpYyBsYWJlbDogc3RyaW5nLFxuICAgIHB1YmxpYyBhcmdzOiBDb21waWxlZEFyZ3NcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIGxldCBibG9jayA9IHZtLnNjb3BlKCkuZ2V0QmxvY2sodGhpcy50byk7XG4gICAgbGV0IGFyZ3M7XG5cbiAgICBpZiAoYmxvY2spIHtcbiAgICAgIGFyZ3MgPSB0aGlzLmFyZ3MuZXZhbHVhdGUodm0pO1xuICAgIH1cblxuICAgIC8vIEZJWE1FOiBjYW4gd2UgYXZvaWQgZG9pbmcgdGhpcyB3aGVuIHdlIGRvbid0IGhhdmUgYSBibG9jaz9cbiAgICB2bS5wdXNoQ2FsbGVyU2NvcGUoKTtcblxuICAgIGlmIChibG9jaykge1xuICAgICAgdm0uaW52b2tlQmxvY2soYmxvY2ssIGFyZ3MpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xvc2VCbG9ja09wY29kZSBleHRlbmRzIE9wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJjbG9zZS1ibG9ja1wiO1xuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIHZtLnBvcFNjb3BlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZhbHVlPFQgZXh0ZW5kcyBTZXJpYWxpemVkRXhwcmVzc2lvbnMuVmFsdWU+IGV4dGVuZHMgRXhwcmVzc2lvblN5bnRheDxUPiB7XG4gIHB1YmxpYyB0eXBlID0gXCJ2YWx1ZVwiO1xuXG4gIHN0YXRpYyBmcm9tU3BlYzxVIGV4dGVuZHMgU2VyaWFsaXplZEV4cHJlc3Npb25zLlZhbHVlPih2YWx1ZTogVSk6IFZhbHVlPFU+IHtcbiAgICByZXR1cm4gbmV3IFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZDxVIGV4dGVuZHMgU2VyaWFsaXplZEV4cHJlc3Npb25zLlZhbHVlPih2YWx1ZTogVSk6IFZhbHVlPFU+IHtcbiAgICByZXR1cm4gbmV3IHRoaXModmFsdWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIHZhbHVlOiBUKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGlubmVyKCk6IFQge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG5cbiAgY29tcGlsZShjb21waWxlcjogU3ltYm9sTG9va3VwKTogQ29tcGlsZWRFeHByZXNzaW9uPFQ+IHtcbiAgICByZXR1cm4gbmV3IENvbXBpbGVkVmFsdWU8VD4odGhpcy52YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEFyZ3VtZW50PFQ+IGV4dGVuZHMgRXhwcmVzc2lvblN5bnRheDxUPiB7XG4gIHR5cGUgPSBcImdldC1hcmd1bWVudFwiO1xuXG4gIHN0YXRpYyBmcm9tU3BlYyhzZXhwOiBTZXJpYWxpemVkRXhwcmVzc2lvbnMuQXJnKTogR2V0QXJndW1lbnQ8T3BhcXVlPiB7XG4gICAgbGV0IFssIHBhcnRzXSA9IHNleHA7XG5cbiAgICByZXR1cm4gbmV3IEdldEFyZ3VtZW50PE9wYXF1ZT4ocGFydHMpO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkKHBhdGg6IHN0cmluZyk6IEdldEFyZ3VtZW50PE9wYXF1ZT4ge1xuICAgIHJldHVybiBuZXcgdGhpczxPcGFxdWU+KHBhdGguc3BsaXQoJy4nKSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGFydHM6IHN0cmluZ1tdKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGNvbXBpbGUobG9va3VwOiBTeW1ib2xMb29rdXApOiBDb21waWxlZEV4cHJlc3Npb248VD4ge1xuICAgIGxldCB7IHBhcnRzIH0gPSB0aGlzO1xuICAgIGxldCBoZWFkID0gcGFydHNbMF07XG5cbiAgICBpZiAobG9va3VwLmhhc05hbWVkU3ltYm9sKGhlYWQpKSB7XG4gICAgICBsZXQgc3ltYm9sID0gbG9va3VwLmdldE5hbWVkU3ltYm9sKGhlYWQpO1xuICAgICAgbGV0IHBhdGggPSBwYXJ0cy5zbGljZSgxKTtcbiAgICAgIHJldHVybiBuZXcgQ29tcGlsZWRMb2NhbExvb2t1cChzeW1ib2wsIHBhdGgsIGhlYWQpO1xuICAgIH0gZWxzZSBpZiAobG9va3VwLmhhc1BhcnRpYWxBcmdzU3ltYm9sKCkpIHtcbiAgICAgIGxldCBzeW1ib2wgPSBsb29rdXAuZ2V0UGFydGlhbEFyZ3NTeW1ib2woKTtcbiAgICAgIHJldHVybiBuZXcgQ29tcGlsZWRMb2NhbExvb2t1cChzeW1ib2wsIHBhcnRzLCBoZWFkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21waWxlIEVycm9yOiAke3RoaXMucGFydHMuam9pbignLicpfSBpcyBub3QgYSB2YWxpZCBsb29rdXAgcGF0aC5gKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gdGhpcyBpcyBzZXBhcmF0ZWQgb3V0IGZyb20gR2V0IGJlY2F1c2UgVW5rbm93biBhbHNvIGhhcyBhIHJlZiwgYnV0IGl0XG4vLyBtYXkgdHVybiBvdXQgdG8gYmUgYSBoZWxwZXJcbmV4cG9ydCBjbGFzcyBSZWYgZXh0ZW5kcyBFeHByZXNzaW9uU3ludGF4PE9wYXF1ZT4ge1xuICB0eXBlID0gXCJyZWZcIjtcblxuICBzdGF0aWMgYnVpbGQocGF0aDogc3RyaW5nKTogUmVmIHtcbiAgICBsZXQgcGFydHMgPSBwYXRoLnNwbGl0KCcuJyk7XG5cbiAgICBpZiAocGFydHNbMF0gPT09ICd0aGlzJykge1xuICAgICAgcGFydHNbMF0gPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgdGhpcyhwYXJ0cyk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGFydHM6IHN0cmluZ1tdKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGNvbXBpbGUobG9va3VwOiBTeW1ib2xMb29rdXApOiBDb21waWxlZEV4cHJlc3Npb248T3BhcXVlPiB7XG4gICAgbGV0IHsgcGFydHMgfSA9IHRoaXM7XG4gICAgbGV0IGhlYWQgPSBwYXJ0c1swXTtcbiAgICBsZXQgcGF0aCA9IHBhcnRzLnNsaWNlKDEpO1xuXG4gICAgaWYgKGhlYWQgPT09IG51bGwpIHsgLy8ge3t0aGlzLmZvb319XG4gICAgICByZXR1cm4gbmV3IENvbXBpbGVkU2VsZkxvb2t1cChwYXRoKTtcbiAgICB9IGVsc2UgaWYgKGxvb2t1cC5oYXNMb2NhbFN5bWJvbChoZWFkKSkge1xuICAgICAgbGV0IHN5bWJvbCA9IGxvb2t1cC5nZXRMb2NhbFN5bWJvbChoZWFkKTtcbiAgICAgIHJldHVybiBuZXcgQ29tcGlsZWRMb2NhbExvb2t1cChzeW1ib2wsIHBhdGgsIGhlYWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IENvbXBpbGVkU2VsZkxvb2t1cChwYXJ0cyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXQgZXh0ZW5kcyBFeHByZXNzaW9uU3ludGF4PE9wYXF1ZT4ge1xuICB0eXBlID0gXCJnZXRcIjtcblxuICBzdGF0aWMgZnJvbVNwZWMoc2V4cDogU2VyaWFsaXplZEV4cHJlc3Npb25zLkdldCk6IEdldCB7XG4gICAgbGV0IFssIHBhcnRzXSA9IHNleHA7XG4gICAgcmV0dXJuIG5ldyB0aGlzKG5ldyBSZWYocGFydHMpKTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZChwYXRoOiBzdHJpbmcpOiBHZXQge1xuICAgIHJldHVybiBuZXcgdGhpcyhSZWYuYnVpbGQocGF0aCkpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlZjogUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGNvbXBpbGUoY29tcGlsZXI6IFN5bWJvbExvb2t1cCk6IENvbXBpbGVkRXhwcmVzc2lvbjxPcGFxdWU+IHtcbiAgICByZXR1cm4gdGhpcy5yZWYuY29tcGlsZShjb21waWxlcik7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVua25vd24gZXh0ZW5kcyBFeHByZXNzaW9uU3ludGF4PGFueT4ge1xuICBwdWJsaWMgdHlwZSA9IFwidW5rbm93blwiO1xuXG4gIHN0YXRpYyBmcm9tU3BlYyhzZXhwOiBTZXJpYWxpemVkRXhwcmVzc2lvbnMuVW5rbm93bik6IFVua25vd24ge1xuICAgIGxldCBbLCBwYXRoXSA9IHNleHA7XG5cbiAgICByZXR1cm4gbmV3IHRoaXMobmV3IFJlZihwYXRoKSk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGQocGF0aDogc3RyaW5nKTogVW5rbm93biB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKFJlZi5idWlsZChwYXRoKSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVmOiBSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgY29tcGlsZShjb21waWxlcjogU3ltYm9sTG9va3VwLCBlbnY6IEVudmlyb25tZW50LCBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpOiBDb21waWxlZEV4cHJlc3Npb248T3BhcXVlPiB7XG4gICAgbGV0IHsgcmVmIH0gPSB0aGlzO1xuXG4gICAgaWYgKGVudi5oYXNIZWxwZXIocmVmLnBhcnRzLCBzeW1ib2xUYWJsZSkpIHtcbiAgICAgIHJldHVybiBuZXcgQ29tcGlsZWRIZWxwZXIocmVmLnBhcnRzLCBlbnYubG9va3VwSGVscGVyKHJlZi5wYXJ0cywgc3ltYm9sVGFibGUpLCBDb21waWxlZEFyZ3MuZW1wdHkoKSwgc3ltYm9sVGFibGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWYuY29tcGlsZShjb21waWxlcik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIZWxwZXIgZXh0ZW5kcyBFeHByZXNzaW9uU3ludGF4PE9wYXF1ZT4ge1xuICB0eXBlID0gXCJoZWxwZXJcIjtcblxuICBzdGF0aWMgZnJvbVNwZWMoc2V4cDogU2VyaWFsaXplZEV4cHJlc3Npb25zLkhlbHBlcik6IEhlbHBlciB7XG4gICAgbGV0IFssIHBhdGgsIHBhcmFtcywgaGFzaF0gPSBzZXhwO1xuXG4gICAgcmV0dXJuIG5ldyBIZWxwZXIoXG4gICAgICBuZXcgUmVmKHBhdGgpLFxuICAgICAgQXJncy5mcm9tU3BlYyhwYXJhbXMsIGhhc2gpXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZChwYXRoOiBzdHJpbmcsIHBvc2l0aW9uYWw6IFBvc2l0aW9uYWxBcmdzLCBuYW1lZDogTmFtZWRBcmdzKTogSGVscGVyIHtcbiAgICByZXR1cm4gbmV3IHRoaXMoUmVmLmJ1aWxkKHBhdGgpLCBBcmdzLmJ1aWxkKHBvc2l0aW9uYWwsIG5hbWVkKSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVmOiBSZWYsIHB1YmxpYyBhcmdzOiBBcmdzKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGNvbXBpbGUoY29tcGlsZXI6IFN5bWJvbExvb2t1cCwgZW52OiBFbnZpcm9ubWVudCwgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKTogQ29tcGlsZWRFeHByZXNzaW9uPE9wYXF1ZT4ge1xuICAgIGlmIChlbnYuaGFzSGVscGVyKHRoaXMucmVmLnBhcnRzLCBzeW1ib2xUYWJsZSkpIHtcbiAgICAgIGxldCB7IGFyZ3MsIHJlZiB9ID0gdGhpcztcbiAgICAgIHJldHVybiBuZXcgQ29tcGlsZWRIZWxwZXIocmVmLnBhcnRzLCBlbnYubG9va3VwSGVscGVyKHJlZi5wYXJ0cywgc3ltYm9sVGFibGUpLCBhcmdzLmNvbXBpbGUoY29tcGlsZXIsIGVudiwgc3ltYm9sVGFibGUpLCBzeW1ib2xUYWJsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcGlsZSBFcnJvcjogJHt0aGlzLnJlZi5wYXJ0cy5qb2luKCcuJyl9IGlzIG5vdCBhIGhlbHBlcmApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSGFzQmxvY2sgZXh0ZW5kcyBFeHByZXNzaW9uU3ludGF4PGJvb2xlYW4+IHtcbiAgdHlwZSA9IFwiaGFzLWJsb2NrXCI7XG5cbiAgc3RhdGljIGZyb21TcGVjKHNleHA6IFNlcmlhbGl6ZWRFeHByZXNzaW9ucy5IYXNCbG9jayk6IEhhc0Jsb2NrIHtcbiAgICBsZXQgWywgYmxvY2tOYW1lXSA9IHNleHA7XG4gICAgcmV0dXJuIG5ldyBIYXNCbG9jayhibG9ja05hbWUpO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkKGJsb2NrTmFtZTogc3RyaW5nKTogSGFzQmxvY2sge1xuICAgIHJldHVybiBuZXcgdGhpcyhibG9ja05hbWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGJsb2NrTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGNvbXBpbGUoY29tcGlsZXI6IFN5bWJvbExvb2t1cCwgZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkSGFzQmxvY2sge1xuICAgIHJldHVybiBuZXcgQ29tcGlsZWRIYXNCbG9jayhcbiAgICAgIHRoaXMuYmxvY2tOYW1lLFxuICAgICAgY29tcGlsZXIuZ2V0QmxvY2tTeW1ib2wodGhpcy5ibG9ja05hbWUpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSGFzQmxvY2tQYXJhbXMgZXh0ZW5kcyBFeHByZXNzaW9uU3ludGF4PGJvb2xlYW4+IHtcbiAgdHlwZSA9IFwiaGFzLWJsb2NrLXBhcmFtc1wiO1xuXG4gIHN0YXRpYyBmcm9tU3BlYyhzZXhwOiBTZXJpYWxpemVkRXhwcmVzc2lvbnMuSGFzQmxvY2tQYXJhbXMpOiBIYXNCbG9ja1BhcmFtcyB7XG4gICAgbGV0IFssIGJsb2NrTmFtZV0gPSBzZXhwO1xuICAgIHJldHVybiBuZXcgSGFzQmxvY2tQYXJhbXMoYmxvY2tOYW1lKTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZChibG9ja05hbWU6IHN0cmluZyk6IEhhc0Jsb2NrUGFyYW1zIHtcbiAgICByZXR1cm4gbmV3IHRoaXMoYmxvY2tOYW1lKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBibG9ja05hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBjb21waWxlKGNvbXBpbGVyOiBTeW1ib2xMb29rdXAsIGVudjogRW52aXJvbm1lbnQpOiBDb21waWxlZEhhc0Jsb2NrUGFyYW1zIHtcbiAgICByZXR1cm4gbmV3IENvbXBpbGVkSGFzQmxvY2tQYXJhbXMoXG4gICAgICB0aGlzLmJsb2NrTmFtZSxcbiAgICAgIGNvbXBpbGVyLmdldEJsb2NrU3ltYm9sKHRoaXMuYmxvY2tOYW1lKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbmNhdCB7XG4gIHB1YmxpYyB0eXBlID0gXCJjb25jYXRcIjtcblxuICBzdGF0aWMgZnJvbVNwZWMoc2V4cDogU2VyaWFsaXplZEV4cHJlc3Npb25zLkNvbmNhdCk6IENvbmNhdCB7XG4gICAgbGV0IFssIHBhcmFtc10gPSBzZXhwO1xuXG4gICAgcmV0dXJuIG5ldyBDb25jYXQocGFyYW1zLm1hcChidWlsZEV4cHJlc3Npb24pKTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZChwYXJ0cyk6IENvbmNhdCB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKHBhcnRzKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXJ0czogRXhwcmVzc2lvblN5bnRheDxPcGFxdWU+W10pIHt9XG5cbiAgY29tcGlsZShjb21waWxlcjogU3ltYm9sTG9va3VwLCBlbnY6IEVudmlyb25tZW50LCBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpOiBDb21waWxlZENvbmNhdCB7XG4gICAgcmV0dXJuIG5ldyBDb21waWxlZENvbmNhdCh0aGlzLnBhcnRzLm1hcChwID0+IHAuY29tcGlsZShjb21waWxlciwgZW52LCBzeW1ib2xUYWJsZSkpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJncyB7XG4gIHB1YmxpYyB0eXBlID0gXCJhcmdzXCI7XG5cbiAgc3RhdGljIGVtcHR5KCk6IEFyZ3Mge1xuICAgIHJldHVybiBFTVBUWV9BUkdTO1xuICB9XG5cbiAgc3RhdGljIGZyb21TcGVjKHBvc2l0aW9uYWw6IFNlcmlhbGl6ZWRDb3JlLlBhcmFtcywgbmFtZWQ6IFNlcmlhbGl6ZWRDb3JlLkhhc2gpOiBBcmdzIHtcbiAgICByZXR1cm4gbmV3IEFyZ3MoUG9zaXRpb25hbEFyZ3MuZnJvbVNwZWMocG9zaXRpb25hbCksIE5hbWVkQXJncy5mcm9tU3BlYyhuYW1lZCkpO1xuICB9XG5cbiAgc3RhdGljIGZyb21Qb3NpdGlvbmFsQXJncyhwb3NpdGlvbmFsOiBQb3NpdGlvbmFsQXJncyk6IEFyZ3Mge1xuICAgIHJldHVybiBuZXcgQXJncyhwb3NpdGlvbmFsLCBFTVBUWV9OQU1FRF9BUkdTKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTmFtZWRBcmdzKG5hbWVkOiBOYW1lZEFyZ3MpOiBBcmdzIHtcbiAgICByZXR1cm4gbmV3IEFyZ3MoRU1QVFlfUE9TSVRJT05BTF9BUkdTLCBuYW1lZCk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGQocG9zaXRpb25hbDogUG9zaXRpb25hbEFyZ3MsIG5hbWVkOiBOYW1lZEFyZ3MpOiBBcmdzIHtcbiAgICBpZiAocG9zaXRpb25hbCA9PT0gRU1QVFlfUE9TSVRJT05BTF9BUkdTICYmIG5hbWVkID09PSBFTVBUWV9OQU1FRF9BUkdTKSB7XG4gICAgICByZXR1cm4gRU1QVFlfQVJHUztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKHBvc2l0aW9uYWwsIG5hbWVkKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcG9zaXRpb25hbDogUG9zaXRpb25hbEFyZ3MsXG4gICAgcHVibGljIG5hbWVkOiBOYW1lZEFyZ3NcbiAgKSB7XG4gIH1cblxuICBjb21waWxlKGNvbXBpbGVyOiBTeW1ib2xMb29rdXAsIGVudjogRW52aXJvbm1lbnQsIHN5bWJvbFRhYmxlOiBTeW1ib2xUYWJsZSk6IENvbXBpbGVkQXJncyB7XG4gICAgbGV0IHsgcG9zaXRpb25hbCwgbmFtZWQgfSA9IHRoaXM7XG4gICAgcmV0dXJuIENvbXBpbGVkQXJncy5jcmVhdGUocG9zaXRpb25hbC5jb21waWxlKGNvbXBpbGVyLCBlbnYsIHN5bWJvbFRhYmxlKSwgbmFtZWQuY29tcGlsZShjb21waWxlciwgZW52LCBzeW1ib2xUYWJsZSkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQb3NpdGlvbmFsQXJncyB7XG4gIHB1YmxpYyB0eXBlID0gXCJwb3NpdGlvbmFsXCI7XG5cbiAgc3RhdGljIGVtcHR5KCk6IFBvc2l0aW9uYWxBcmdzIHtcbiAgICByZXR1cm4gRU1QVFlfUE9TSVRJT05BTF9BUkdTO1xuICB9XG5cbiAgc3RhdGljIGZyb21TcGVjKHNleHA6IFNlcmlhbGl6ZWRDb3JlLlBhcmFtcyk6IFBvc2l0aW9uYWxBcmdzIHtcbiAgICBpZiAoIXNleHAgfHwgc2V4cC5sZW5ndGggPT09IDApIHJldHVybiBFTVBUWV9QT1NJVElPTkFMX0FSR1M7XG4gICAgcmV0dXJuIG5ldyBQb3NpdGlvbmFsQXJncyhzZXhwLm1hcChidWlsZEV4cHJlc3Npb24pKTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZChleHByczogRXhwcmVzc2lvblN5bnRheDxPcGFxdWU+W10pOiBQb3NpdGlvbmFsQXJncyB7XG4gICAgaWYgKGV4cHJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEVNUFRZX1BPU0lUSU9OQUxfQVJHUztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKGV4cHJzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbGVuZ3RoOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHZhbHVlczogRXhwcmVzc2lvblN5bnRheDxPcGFxdWU+W10pIHtcbiAgICB0aGlzLmxlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG4gIH1cblxuICBzbGljZShzdGFydD86IG51bWJlciwgZW5kPzogbnVtYmVyKTogUG9zaXRpb25hbEFyZ3Mge1xuICAgIHJldHVybiBQb3NpdGlvbmFsQXJncy5idWlsZCh0aGlzLnZhbHVlcy5zbGljZShzdGFydCwgZW5kKSk7XG4gIH1cblxuICBhdChpbmRleDogbnVtYmVyKTogRXhwcmVzc2lvblN5bnRheDxPcGFxdWU+IHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xuICB9XG5cbiAgY29tcGlsZShjb21waWxlcjogU3ltYm9sTG9va3VwLCBlbnY6IEVudmlyb25tZW50LCBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpOiBDb21waWxlZFBvc2l0aW9uYWxBcmdzIHtcbiAgICByZXR1cm4gQ29tcGlsZWRQb3NpdGlvbmFsQXJncy5jcmVhdGUodGhpcy52YWx1ZXMubWFwKHYgPT4gdi5jb21waWxlKGNvbXBpbGVyLCBlbnYsIHN5bWJvbFRhYmxlKSkpO1xuICB9XG59XG5cbmNvbnN0IEVNUFRZX1BPU0lUSU9OQUxfQVJHUyA9IG5ldyAoY2xhc3MgZXh0ZW5kcyBQb3NpdGlvbmFsQXJncyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKEVNUFRZX0FSUkFZKTtcbiAgfVxuXG4gIHNsaWNlKHN0YXJ0PzogbnVtYmVyLCBlbmQ/OiBudW1iZXIpOiBQb3NpdGlvbmFsQXJncyB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhdChpbmRleDogbnVtYmVyKTogRXhwcmVzc2lvblN5bnRheDxPcGFxdWU+IHtcbiAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyA/PyFcbiAgfVxuXG4gIGNvbXBpbGUoY29tcGlsZXI6IFN5bWJvbExvb2t1cCwgZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkUG9zaXRpb25hbEFyZ3Mge1xuICAgIHJldHVybiBDb21waWxlZFBvc2l0aW9uYWxBcmdzLmVtcHR5KCk7XG4gIH1cbn0pO1xuXG5leHBvcnQgY2xhc3MgTmFtZWRBcmdzIHtcbiAgcHVibGljIHR5cGUgPSBcIm5hbWVkXCI7XG5cbiAgc3RhdGljIGVtcHR5KCk6IE5hbWVkQXJncyB7XG4gICAgcmV0dXJuIEVNUFRZX05BTUVEX0FSR1M7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNwZWMoc2V4cDogU2VyaWFsaXplZENvcmUuSGFzaCk6IE5hbWVkQXJncyB7XG4gICAgaWYgKHNleHAgPT09IG51bGwgfHwgc2V4cCA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBFTVBUWV9OQU1FRF9BUkdTOyB9XG5cbiAgICBsZXQgW2tleXMsIGV4cHJzXSA9IHNleHA7XG5cbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIEVNUFRZX05BTUVEX0FSR1M7IH1cblxuICAgIHJldHVybiBuZXcgdGhpcyhrZXlzLCBleHBycy5tYXAoZXhwciA9PiBidWlsZEV4cHJlc3Npb24oZXhwcikpKTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZChrZXlzOiBzdHJpbmdbXSwgdmFsdWVzOiBFeHByZXNzaW9uU3ludGF4PE9wYXF1ZT5bXSk6IE5hbWVkQXJncyB7XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gRU1QVFlfTkFNRURfQVJHUztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKGtleXMsIHZhbHVlcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGxlbmd0aDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBrZXlzOiBzdHJpbmdbXSxcbiAgICBwdWJsaWMgdmFsdWVzOiBFeHByZXNzaW9uU3ludGF4PE9wYXF1ZT5bXVxuICApIHtcbiAgICB0aGlzLmxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB9XG5cbiAgYXQoa2V5OiBzdHJpbmcpOiBFeHByZXNzaW9uU3ludGF4PE9wYXF1ZT4ge1xuICAgIGxldCB7IGtleXMsIHZhbHVlcyB9ID0gdGhpcztcbiAgICBsZXQgaW5kZXggPSBrZXlzLmluZGV4T2Yoa2V5KTtcbiAgICByZXR1cm4gdmFsdWVzW2luZGV4XTtcbiAgfVxuXG4gIGhhcyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmtleXMuaW5kZXhPZihrZXkpICE9PSAtMTtcbiAgfVxuXG4gIGNvbXBpbGUoY29tcGlsZXI6IFN5bWJvbExvb2t1cCwgZW52OiBFbnZpcm9ubWVudCwgc3ltYm9sVGFibGU6IFN5bWJvbFRhYmxlKTogQ29tcGlsZWROYW1lZEFyZ3Mge1xuICAgIGxldCB7IGtleXMsIHZhbHVlcyB9ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IENvbXBpbGVkTmFtZWRBcmdzKGtleXMsIHZhbHVlcy5tYXAodmFsdWUgPT4gdmFsdWUuY29tcGlsZShjb21waWxlciwgZW52LCBzeW1ib2xUYWJsZSkpKTtcbiAgfVxufVxuXG5jb25zdCBFTVBUWV9OQU1FRF9BUkdTID0gbmV3IChjbGFzcyBleHRlbmRzIE5hbWVkQXJncyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKEVNUFRZX0FSUkFZLCBFTVBUWV9BUlJBWSk7XG4gIH1cblxuICBhdChrZXk6IHN0cmluZyk6IEV4cHJlc3Npb25TeW50YXg8T3BhcXVlPiB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gPz8hXG4gIH1cblxuICBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb21waWxlKGNvbXBpbGVyOiBTeW1ib2xMb29rdXAsIGVudjogRW52aXJvbm1lbnQpOiBDb21waWxlZE5hbWVkQXJncyB7XG4gICAgcmV0dXJuIENvbXBpbGVkTmFtZWRBcmdzLmVtcHR5KCk7XG4gIH1cbn0pO1xuXG5jb25zdCBFTVBUWV9BUkdTOiBBcmdzID0gbmV3IChjbGFzcyBleHRlbmRzIEFyZ3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihFTVBUWV9QT1NJVElPTkFMX0FSR1MsIEVNUFRZX05BTUVEX0FSR1MpO1xuICB9XG5cbiAgY29tcGlsZShjb21waWxlcjogU3ltYm9sTG9va3VwLCBlbnY6IEVudmlyb25tZW50KTogQ29tcGlsZWRBcmdzIHtcbiAgICByZXR1cm4gQ29tcGlsZWRBcmdzLmVtcHR5KCk7XG4gIH1cbn0pO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVzIHtcbiAgcHVibGljIHR5cGUgPSBcInRlbXBsYXRlc1wiO1xuXG4gIHN0YXRpYyBmcm9tU3BlYyhfZGVmYXVsdDogSW5saW5lQmxvY2ssIGludmVyc2U6IElubGluZUJsb2NrID0gbnVsbCk6IFRlbXBsYXRlcyB7XG4gICAgcmV0dXJuIG5ldyBUZW1wbGF0ZXMoX2RlZmF1bHQsIGludmVyc2UpO1xuICB9XG5cbiAgc3RhdGljIGVtcHR5KCk6IFRlbXBsYXRlcyB7XG4gICAgcmV0dXJuIG5ldyBUZW1wbGF0ZXMobnVsbCwgbnVsbCk7XG4gIH1cblxuICBwdWJsaWMgZGVmYXVsdDogSW5saW5lQmxvY2s7XG4gIHB1YmxpYyBpbnZlcnNlOiBJbmxpbmVCbG9jaztcblxuICBjb25zdHJ1Y3RvcihfZGVmYXVsdDogSW5saW5lQmxvY2ssIGludmVyc2U6IElubGluZUJsb2NrID0gbnVsbCkge1xuICAgIHRoaXMuZGVmYXVsdCA9IF9kZWZhdWx0O1xuICAgIHRoaXMuaW52ZXJzZSA9IGludmVyc2U7XG4gIH1cbn1cbiJdfQ== -enifed('glimmer-runtime/lib/syntax/expressions', ['exports', 'glimmer-runtime/lib/syntax/core', 'glimmer-wire-format'], function (exports, _glimmerRuntimeLibSyntaxCore, _glimmerWireFormat) { - 'use strict'; - - var isArg = _glimmerWireFormat.Expressions.isArg; - var isConcat = _glimmerWireFormat.Expressions.isConcat; - var isGet = _glimmerWireFormat.Expressions.isGet; - var isHasBlock = _glimmerWireFormat.Expressions.isHasBlock; - var isHasBlockParams = _glimmerWireFormat.Expressions.isHasBlockParams; - var isHelper = _glimmerWireFormat.Expressions.isHelper; - var isUnknown = _glimmerWireFormat.Expressions.isUnknown; - var isPrimitiveValue = _glimmerWireFormat.Expressions.isPrimitiveValue; - var isUndefined = _glimmerWireFormat.Expressions.isUndefined; - - exports.default = function (sexp) { - if (isPrimitiveValue(sexp)) return _glimmerRuntimeLibSyntaxCore.Value.fromSpec(sexp); - if (isUndefined(sexp)) return _glimmerRuntimeLibSyntaxCore.Value.build(undefined); - if (isArg(sexp)) return _glimmerRuntimeLibSyntaxCore.GetArgument.fromSpec(sexp); - if (isConcat(sexp)) return _glimmerRuntimeLibSyntaxCore.Concat.fromSpec(sexp); - if (isGet(sexp)) return _glimmerRuntimeLibSyntaxCore.Get.fromSpec(sexp); - if (isHelper(sexp)) return _glimmerRuntimeLibSyntaxCore.Helper.fromSpec(sexp); - if (isUnknown(sexp)) return _glimmerRuntimeLibSyntaxCore.Unknown.fromSpec(sexp); - if (isHasBlock(sexp)) return _glimmerRuntimeLibSyntaxCore.HasBlock.fromSpec(sexp); - if (isHasBlockParams(sexp)) return _glimmerRuntimeLibSyntaxCore.HasBlockParams.fromSpec(sexp); - throw new Error('Unexpected wire format: ' + JSON.stringify(sexp)); + return morphs; + }, + statements: statements, + locals: [], + templates: [], + element: null }; - ; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvc3ludGF4L2V4cHJlc3Npb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztRQWlCRSxLQUFLLHNCQUxMLFdBQVcsQ0FLWCxLQUFLO1FBQ0wsUUFBUSxzQkFOUixXQUFXLENBTVgsUUFBUTtRQUNSLEtBQUssc0JBUEwsV0FBVyxDQU9YLEtBQUs7UUFDTCxVQUFVLHNCQVJWLFdBQVcsQ0FRWCxVQUFVO1FBQ1YsZ0JBQWdCLHNCQVRoQixXQUFXLENBU1gsZ0JBQWdCO1FBQ2hCLFFBQVEsc0JBVlIsV0FBVyxDQVVYLFFBQVE7UUFDUixTQUFTLHNCQVhULFdBQVcsQ0FXWCxTQUFTO1FBQ1QsZ0JBQWdCLHNCQVpoQixXQUFXLENBWVgsZ0JBQWdCO1FBQ2hCLFdBQVcsc0JBYlgsV0FBVyxDQWFYLFdBQVc7O3NCQUdiLFVBQXdCLElBQTBCLEVBQUE7QUFDaEQsWUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLDZCQTVCbkMsS0FBSyxDQTRCMEMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlELFlBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sNkJBN0I5QixLQUFLLENBNkJxQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0QsWUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyw2QkE3QnhCLFdBQVcsQ0E2QnVCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRCxZQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLDZCQTdCM0IsTUFBTSxDQTZCa0MsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZELFlBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sNkJBN0J4QixHQUFHLENBNkIrQixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsWUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyw2QkEzQjNCLE1BQU0sQ0EyQmtDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2RCxZQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLDZCQTNCNUIsT0FBTyxDQTJCbUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELFlBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sNkJBL0I3QixRQUFRLENBK0JvQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0QsWUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLDZCQS9CbkMsY0FBYyxDQStCMEMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRXZFLGNBQU0sSUFBSSxLQUFLLDhCQUE0QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFHLENBQUM7S0FDcEU7O0FBQUEsS0FBQyIsImZpbGUiOiJleHByZXNzaW9ucy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFZhbHVlIGFzIFZhbHVlU3ludGF4LFxuICBHZXRBcmd1bWVudCBhcyBBcmdTeW50YXgsXG4gIENvbmNhdCBhcyBDb25jYXRTeW50YXgsXG4gIEdldCBhcyBHZXRTeW50YXgsXG4gIEhhc0Jsb2NrIGFzIEhhc0Jsb2NrU3ludGF4LFxuICBIYXNCbG9ja1BhcmFtcyBhcyBIYXNCbG9ja1BhcmFtc1N5bnRheCxcbiAgSGVscGVyIGFzIEhlbHBlclN5bnRheCxcbiAgVW5rbm93biBhcyBVbmtub3duU3ludGF4XG59IGZyb20gJy4vY29yZSc7XG5cbmltcG9ydCB7XG4gIEV4cHJlc3Npb25zIGFzIFNlcmlhbGl6ZWRFeHByZXNzaW9ucyxcbiAgRXhwcmVzc2lvbiBhcyBTZXJpYWxpemVkRXhwcmVzc2lvblxufSBmcm9tICdnbGltbWVyLXdpcmUtZm9ybWF0JztcblxuY29uc3Qge1xuICBpc0FyZyxcbiAgaXNDb25jYXQsXG4gIGlzR2V0LFxuICBpc0hhc0Jsb2NrLFxuICBpc0hhc0Jsb2NrUGFyYW1zLFxuICBpc0hlbHBlcixcbiAgaXNVbmtub3duLFxuICBpc1ByaW1pdGl2ZVZhbHVlLFxuICBpc1VuZGVmaW5lZFxufSA9IFNlcmlhbGl6ZWRFeHByZXNzaW9ucztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2V4cDogU2VyaWFsaXplZEV4cHJlc3Npb24pOiBhbnkge1xuICBpZiAoaXNQcmltaXRpdmVWYWx1ZShzZXhwKSkgcmV0dXJuIFZhbHVlU3ludGF4LmZyb21TcGVjKHNleHApO1xuICBpZiAoaXNVbmRlZmluZWQoc2V4cCkpIHJldHVybiBWYWx1ZVN5bnRheC5idWlsZCh1bmRlZmluZWQpO1xuICBpZiAoaXNBcmcoc2V4cCkpIHJldHVybiBBcmdTeW50YXguZnJvbVNwZWMoc2V4cCk7XG4gIGlmIChpc0NvbmNhdChzZXhwKSkgcmV0dXJuIENvbmNhdFN5bnRheC5mcm9tU3BlYyhzZXhwKTtcbiAgaWYgKGlzR2V0KHNleHApKSByZXR1cm4gR2V0U3ludGF4LmZyb21TcGVjKHNleHApO1xuICBpZiAoaXNIZWxwZXIoc2V4cCkpIHJldHVybiBIZWxwZXJTeW50YXguZnJvbVNwZWMoc2V4cCk7XG4gIGlmIChpc1Vua25vd24oc2V4cCkpIHJldHVybiBVbmtub3duU3ludGF4LmZyb21TcGVjKHNleHApO1xuICBpZiAoaXNIYXNCbG9jayhzZXhwKSkgcmV0dXJuIEhhc0Jsb2NrU3ludGF4LmZyb21TcGVjKHNleHApO1xuICBpZiAoaXNIYXNCbG9ja1BhcmFtcyhzZXhwKSkgcmV0dXJuIEhhc0Jsb2NrUGFyYW1zU3ludGF4LmZyb21TcGVjKHNleHApO1xuXG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB3aXJlIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShzZXhwKX1gKTtcbn07XG4iXX0= -enifed('glimmer-runtime/lib/syntax/statements', ['exports', 'glimmer-runtime/lib/syntax/core', 'glimmer-wire-format'], function (exports, _glimmerRuntimeLibSyntaxCore, _glimmerWireFormat) { - 'use strict'; + return template; + } - var isYield = _glimmerWireFormat.Statements.isYield; - var isBlock = _glimmerWireFormat.Statements.isBlock; - var isPartial = _glimmerWireFormat.Statements.isPartial; - var isAppend = _glimmerWireFormat.Statements.isAppend; - var isDynamicAttr = _glimmerWireFormat.Statements.isDynamicAttr; - var isText = _glimmerWireFormat.Statements.isText; - var isComment = _glimmerWireFormat.Statements.isComment; - var isOpenElement = _glimmerWireFormat.Statements.isOpenElement; - var isFlushElement = _glimmerWireFormat.Statements.isFlushElement; - var isCloseElement = _glimmerWireFormat.Statements.isCloseElement; - var isStaticAttr = _glimmerWireFormat.Statements.isStaticAttr; - var isModifier = _glimmerWireFormat.Statements.isModifier; - var isDynamicArg = _glimmerWireFormat.Statements.isDynamicArg; - var isStaticArg = _glimmerWireFormat.Statements.isStaticArg; - var isTrustingAttr = _glimmerWireFormat.Statements.isTrustingAttr; + RenderResult.prototype.initializeNodes = function (ownerNode) { + var childNodes = this.root.childNodes; - exports.default = function (sexp, symbolTable, scanner) { - if (isYield(sexp)) return _glimmerRuntimeLibSyntaxCore.Yield.fromSpec(sexp); - if (isPartial(sexp)) return _glimmerRuntimeLibSyntaxCore.Partial.fromSpec(sexp); - if (isBlock(sexp)) return _glimmerRuntimeLibSyntaxCore.Block.fromSpec(sexp, symbolTable, scanner); - if (isAppend(sexp)) return _glimmerRuntimeLibSyntaxCore.OptimizedAppend.fromSpec(sexp); - if (isDynamicAttr(sexp)) return _glimmerRuntimeLibSyntaxCore.DynamicAttr.fromSpec(sexp); - if (isDynamicArg(sexp)) return _glimmerRuntimeLibSyntaxCore.DynamicArg.fromSpec(sexp); - if (isTrustingAttr(sexp)) return _glimmerRuntimeLibSyntaxCore.TrustingAttr.fromSpec(sexp); - if (isText(sexp)) return _glimmerRuntimeLibSyntaxCore.Text.fromSpec(sexp); - if (isComment(sexp)) return _glimmerRuntimeLibSyntaxCore.Comment.fromSpec(sexp); - if (isOpenElement(sexp)) return _glimmerRuntimeLibSyntaxCore.OpenElement.fromSpec(sexp, symbolTable); - if (isFlushElement(sexp)) return _glimmerRuntimeLibSyntaxCore.FlushElement.fromSpec(); - if (isCloseElement(sexp)) return _glimmerRuntimeLibSyntaxCore.CloseElement.fromSpec(); - if (isStaticAttr(sexp)) return _glimmerRuntimeLibSyntaxCore.StaticAttr.fromSpec(sexp); - if (isStaticArg(sexp)) return _glimmerRuntimeLibSyntaxCore.StaticArg.fromSpec(sexp); - if (isModifier(sexp)) return _glimmerRuntimeLibSyntaxCore.Modifier.fromSpec(sexp); - }; + for (var i = 0, l = childNodes.length; i < l; i++) { + childNodes[i].ownerNode = ownerNode; + } + }; - ; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvc3ludGF4L3N0YXRlbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O1FBMkJFLE9BQU8sc0JBTlAsVUFBVSxDQU1WLE9BQU87UUFDUCxPQUFPLHNCQVBQLFVBQVUsQ0FPVixPQUFPO1FBQ1AsU0FBUyxzQkFSVCxVQUFVLENBUVYsU0FBUztRQUNULFFBQVEsc0JBVFIsVUFBVSxDQVNWLFFBQVE7UUFDUixhQUFhLHNCQVZiLFVBQVUsQ0FVVixhQUFhO1FBQ2IsTUFBTSxzQkFYTixVQUFVLENBV1YsTUFBTTtRQUNOLFNBQVMsc0JBWlQsVUFBVSxDQVlWLFNBQVM7UUFDVCxhQUFhLHNCQWJiLFVBQVUsQ0FhVixhQUFhO1FBQ2IsY0FBYyxzQkFkZCxVQUFVLENBY1YsY0FBYztRQUNkLGNBQWMsc0JBZmQsVUFBVSxDQWVWLGNBQWM7UUFDZCxZQUFZLHNCQWhCWixVQUFVLENBZ0JWLFlBQVk7UUFDWixVQUFVLHNCQWpCVixVQUFVLENBaUJWLFVBQVU7UUFDVixZQUFZLHNCQWxCWixVQUFVLENBa0JWLFlBQVk7UUFDWixXQUFXLHNCQW5CWCxVQUFVLENBbUJWLFdBQVc7UUFDWCxjQUFjLHNCQXBCZCxVQUFVLENBb0JWLGNBQWM7O3NCQUdoQixVQUF3QixJQUF5QixFQUFFLFdBQXdCLEVBQUUsT0FBcUIsRUFBQTtBQUNoRyxZQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLDZCQTVDMUIsS0FBSyxDQTRDMkIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DLFlBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sNkJBNUM1QixPQUFPLENBNEM2QixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkQsWUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyw2QkE1QzFCLEtBQUssQ0E0QzJCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3JFLFlBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sNkJBNUMzQixlQUFlLENBNEM0QixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUQsWUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyw2QkE1Q2hDLFdBQVcsQ0E0Q2lDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzRCxZQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLDZCQXJDL0IsVUFBVSxDQXFDZ0MsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELFlBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sNkJBcENqQyxZQUFZLENBb0NrQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0QsWUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyw2QkE5Q3pCLElBQUksQ0E4QzBCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxZQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLDZCQTlDNUIsT0FBTyxDQThDNkIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25ELFlBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sNkJBOUNoQyxXQUFXLENBOENpQyxRQUFRLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3hFLFlBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sNkJBOUNqQyxZQUFZLENBOENrQyxRQUFRLEVBQUUsQ0FBQztBQUN6RCxZQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLDZCQTlDakMsWUFBWSxDQThDa0MsUUFBUSxFQUFFLENBQUM7QUFDekQsWUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyw2QkE5Qy9CLFVBQVUsQ0E4Q2dDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6RCxZQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLDZCQTVDOUIsU0FBUyxDQTRDK0IsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZELFlBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sNkJBL0M3QixRQUFRLENBK0M4QixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdEQ7O0FBQUEsS0FBQyIsImZpbGUiOiJzdGF0ZW1lbnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgWWllbGQsXG4gIFBhcnRpYWwsXG4gIEJsb2NrLFxuICBPcHRpbWl6ZWRBcHBlbmQsXG4gIER5bmFtaWNBdHRyLFxuICBUZXh0LFxuICBDb21tZW50LFxuICBPcGVuRWxlbWVudCxcbiAgRmx1c2hFbGVtZW50LFxuICBDbG9zZUVsZW1lbnQsXG4gIFN0YXRpY0F0dHIsXG4gIE1vZGlmaWVyLFxuICBEeW5hbWljQXJnLFxuICBTdGF0aWNBcmcsXG4gIFRydXN0aW5nQXR0clxufSBmcm9tICcuL2NvcmUnO1xuXG5pbXBvcnQgU3ltYm9sVGFibGUgZnJvbSAnLi4vc3ltYm9sLXRhYmxlJztcbmltcG9ydCB7IFN0YXRlbWVudCBhcyBTdGF0ZW1lbnRTeW50YXggfSBmcm9tICcuLi9zeW50YXgnO1xuaW1wb3J0IHtcbiAgU3RhdGVtZW50cyBhcyBTZXJpYWxpemVkU3RhdGVtZW50cyxcbiAgU3RhdGVtZW50IGFzIFNlcmlhbGl6ZWRTdGF0ZW1lbnRcbn0gZnJvbSAnZ2xpbW1lci13aXJlLWZvcm1hdCc7XG5pbXBvcnQgeyBCbG9ja1NjYW5uZXIgIH0gZnJvbSAnLi4vc2Nhbm5lcic7XG5cbmNvbnN0IHtcbiAgaXNZaWVsZCxcbiAgaXNCbG9jayxcbiAgaXNQYXJ0aWFsLFxuICBpc0FwcGVuZCxcbiAgaXNEeW5hbWljQXR0cixcbiAgaXNUZXh0LFxuICBpc0NvbW1lbnQsXG4gIGlzT3BlbkVsZW1lbnQsXG4gIGlzRmx1c2hFbGVtZW50LFxuICBpc0Nsb3NlRWxlbWVudCxcbiAgaXNTdGF0aWNBdHRyLFxuICBpc01vZGlmaWVyLFxuICBpc0R5bmFtaWNBcmcsXG4gIGlzU3RhdGljQXJnLFxuICBpc1RydXN0aW5nQXR0clxufSA9IFNlcmlhbGl6ZWRTdGF0ZW1lbnRzO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXhwOiBTZXJpYWxpemVkU3RhdGVtZW50LCBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUsIHNjYW5uZXI6IEJsb2NrU2Nhbm5lcik6IFN0YXRlbWVudFN5bnRheCB7XG4gIGlmIChpc1lpZWxkKHNleHApKSByZXR1cm4gWWllbGQuZnJvbVNwZWMoc2V4cCk7XG4gIGlmIChpc1BhcnRpYWwoc2V4cCkpIHJldHVybiBQYXJ0aWFsLmZyb21TcGVjKHNleHApO1xuICBpZiAoaXNCbG9jayhzZXhwKSkgcmV0dXJuIEJsb2NrLmZyb21TcGVjKHNleHAsIHN5bWJvbFRhYmxlLCBzY2FubmVyKTtcbiAgaWYgKGlzQXBwZW5kKHNleHApKSByZXR1cm4gT3B0aW1pemVkQXBwZW5kLmZyb21TcGVjKHNleHApO1xuICBpZiAoaXNEeW5hbWljQXR0cihzZXhwKSkgcmV0dXJuIER5bmFtaWNBdHRyLmZyb21TcGVjKHNleHApO1xuICBpZiAoaXNEeW5hbWljQXJnKHNleHApKSByZXR1cm4gRHluYW1pY0FyZy5mcm9tU3BlYyhzZXhwKTtcbiAgaWYgKGlzVHJ1c3RpbmdBdHRyKHNleHApKSByZXR1cm4gVHJ1c3RpbmdBdHRyLmZyb21TcGVjKHNleHApO1xuICBpZiAoaXNUZXh0KHNleHApKSByZXR1cm4gVGV4dC5mcm9tU3BlYyhzZXhwKTtcbiAgaWYgKGlzQ29tbWVudChzZXhwKSkgcmV0dXJuIENvbW1lbnQuZnJvbVNwZWMoc2V4cCk7XG4gIGlmIChpc09wZW5FbGVtZW50KHNleHApKSByZXR1cm4gT3BlbkVsZW1lbnQuZnJvbVNwZWMoc2V4cCwgc3ltYm9sVGFibGUpO1xuICBpZiAoaXNGbHVzaEVsZW1lbnQoc2V4cCkpIHJldHVybiBGbHVzaEVsZW1lbnQuZnJvbVNwZWMoKTtcbiAgaWYgKGlzQ2xvc2VFbGVtZW50KHNleHApKSByZXR1cm4gQ2xvc2VFbGVtZW50LmZyb21TcGVjKCk7XG4gIGlmIChpc1N0YXRpY0F0dHIoc2V4cCkpIHJldHVybiBTdGF0aWNBdHRyLmZyb21TcGVjKHNleHApO1xuICBpZiAoaXNTdGF0aWNBcmcoc2V4cCkpIHJldHVybiBTdGF0aWNBcmcuZnJvbVNwZWMoc2V4cCk7XG4gIGlmIChpc01vZGlmaWVyKHNleHApKSByZXR1cm4gTW9kaWZpZXIuZnJvbVNwZWMoc2V4cCk7XG59O1xuIl19 -enifed('glimmer-runtime/lib/template', ['exports', 'glimmer-util', 'glimmer-runtime/lib/builder', 'glimmer-runtime/lib/vm', 'glimmer-runtime/lib/scanner'], function (exports, _glimmerUtil, _glimmerRuntimeLibBuilder, _glimmerRuntimeLibVm, _glimmerRuntimeLibScanner) { - 'use strict'; + RenderResult.prototype.render = function () { + this.root.lastResult = this; + this.root.rendered = true; + this.populateNodes(_htmlbarsRuntimeNodeVisitor.AlwaysDirtyVisitor); - exports.default = templateFactory; - - var clientId = 0; - - function templateFactory(_ref) { - var id = _ref.id; - var meta = _ref.meta; - var block = _ref.block; - - var parsedBlock = undefined; - if (!id) { - id = 'client-' + clientId++; - } - var create = function (env, envMeta) { - var newMeta = envMeta ? _glimmerUtil.assign({}, envMeta, meta) : meta; - if (!parsedBlock) { - parsedBlock = JSON.parse(block); - } - return template(parsedBlock, id, newMeta, env); - }; - return { id: id, meta: meta, create: create }; + if (this.shouldSetContent && this.root.setContent) { + this.root.setContent(this.fragment); } + }; - function template(block, id, meta, env) { - var scanner = new _glimmerRuntimeLibScanner.default(block, meta, env); - var entryPoint = undefined; - var asEntryPoint = function () { - if (!entryPoint) entryPoint = scanner.scanEntryPoint(); - return entryPoint; - }; - var layout = undefined; - var asLayout = function () { - if (!layout) layout = scanner.scanLayout(); - return layout; - }; - var asPartial = function (symbols) { - return scanner.scanPartial(symbols); - }; - var render = function (self, appendTo, dynamicScope) { - var elementStack = _glimmerRuntimeLibBuilder.ElementStack.forInitialRender(env, appendTo, null); - var compiled = asEntryPoint().compile(env); - var vm = _glimmerRuntimeLibVm.VM.initial(env, self, dynamicScope, elementStack, compiled.symbols); - return vm.execute(compiled.ops); - }; - return { id: id, meta: meta, _block: block, asEntryPoint: asEntryPoint, asLayout: asLayout, asPartial: asPartial, render: render }; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvdGVtcGxhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O3NCQWtGQSxlQUFBOztBQVRBLFFBQUksUUFBUSxHQUFHLENBQUMsQ0FBQzs7QUFTakIsYUFBQSxlQUFBLENBQXdDLElBQXlELEVBQUE7WUFBdkQsRUFBRSxHQUFKLElBQXlELENBQXZELEVBQUU7WUFBRSxJQUFJLEdBQVYsSUFBeUQsQ0FBbkQsSUFBSTtZQUFFLEtBQUssR0FBakIsSUFBeUQsQ0FBN0MsS0FBSzs7QUFDdkQsWUFBSSxXQUFvQyxZQUFBLENBQUM7QUFDekMsWUFBSSxDQUFDLEVBQUUsRUFBRTtBQUNQLGNBQUUsZUFBYSxRQUFRLEVBQUcsQUFBRSxDQUFDO1NBQzlCO0FBQ0QsWUFBSSxNQUFNLEdBQUcsVUFBQyxHQUFnQixFQUFFLE9BQVksRUFBQTtBQUMxQyxnQkFBSSxPQUFPLEdBQUcsT0FBTyxHQUFHLGFBbkZuQixNQUFNLENBbUZvQixFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6RCxnQkFBSSxDQUFDLFdBQVcsRUFBRTtBQUNoQiwyQkFBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDakM7QUFDRCxtQkFBTyxRQUFRLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDaEQsQ0FBQztBQUNGLGVBQU8sRUFBRSxFQUFFLEVBQUYsRUFBRSxFQUFFLElBQUksRUFBSixJQUFJLEVBQUUsTUFBTSxFQUFOLE1BQU0sRUFBRSxDQUFDO0tBQzdCOztBQUVELGFBQUEsUUFBQSxDQUFxQixLQUE4QixFQUFFLEVBQVUsRUFBRSxJQUFPLEVBQUUsR0FBZ0IsRUFBQTtBQUN4RixZQUFJLE9BQU8sR0FBRyxzQ0FBWSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLFlBQUksVUFBc0IsWUFBQSxDQUFDO0FBQzNCLFlBQUksWUFBWSxHQUFHLFlBQUE7QUFDakIsZ0JBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN2RCxtQkFBTyxVQUFVLENBQUM7U0FDbkIsQ0FBQztBQUNGLFlBQUksTUFBYyxZQUFBLENBQUM7QUFDbkIsWUFBSSxRQUFRLEdBQUcsWUFBQTtBQUNiLGdCQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDM0MsbUJBQU8sTUFBTSxDQUFDO1NBQ2YsQ0FBQztBQUNGLFlBQUksU0FBUyxHQUFHLFVBQUEsT0FBTzttQkFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztTQUFBLENBQUM7QUFDeEQsWUFBSSxNQUFNLEdBQUcsVUFBQyxJQUF3QixFQUFFLFFBQXdCLEVBQUUsWUFBMEIsRUFBQTtBQUMxRixnQkFBSSxZQUFZLEdBQUcsMEJBdEdkLFlBQVksQ0FzR2UsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0RSxnQkFBSSxRQUFRLEdBQUcsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLGdCQUFJLEVBQUUsR0FBRyxxQkF2R0osRUFBRSxDQXVHSyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3RSxtQkFBTyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNqQyxDQUFDO0FBQ0YsZUFBTyxFQUFFLEVBQUUsRUFBRixFQUFFLEVBQUUsSUFBSSxFQUFKLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBWixZQUFZLEVBQUUsUUFBUSxFQUFSLFFBQVEsRUFBRSxTQUFTLEVBQVQsU0FBUyxFQUFFLE1BQU0sRUFBTixNQUFNLEVBQUUsQ0FBQztLQUMvRSIsImZpbGUiOiJ0ZW1wbGF0ZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZVdpdGhMYXp5QmxvY2ssXG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrXG59IGZyb20gJ2dsaW1tZXItd2lyZS1mb3JtYXQnO1xuaW1wb3J0IHsgUGF0aFJlZmVyZW5jZSB9IGZyb20gJ2dsaW1tZXItcmVmZXJlbmNlJztcbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJ2dsaW1tZXItdXRpbCc7XG5pbXBvcnQgeyBFbnRyeVBvaW50LCBMYXlvdXQsIFBhcnRpYWxCbG9jayB9IGZyb20gJy4vY29tcGlsZWQvYmxvY2tzJztcbmltcG9ydCBTeW1ib2xUYWJsZSBmcm9tICcuL3N5bWJvbC10YWJsZSc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgRHluYW1pY1Njb3BlIH0gZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBFbGVtZW50U3RhY2sgfSBmcm9tICcuL2J1aWxkZXInO1xuaW1wb3J0IHsgVk0gfSBmcm9tICcuL3ZtJztcbmltcG9ydCBSZW5kZXJSZXN1bHQgZnJvbSAnLi92bS9yZW5kZXItcmVzdWx0JztcbmltcG9ydCBTY2FubmVyIGZyb20gJy4vc2Nhbm5lcic7XG5pbXBvcnQgKiBhcyBTaW1wbGUgZnJvbSAnLi9kb20vaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogRW52aXJvbm1lbnQgc3BlY2lmaWMgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGU8VD4ge1xuICAvKipcbiAgICogVGVtcGxhdGUgaWRlbnRpZmllciwgaWYgcHJlY29tcGlsZWQgd2lsbCBiZSB0aGUgaWQgb2YgdGhlXG4gICAqIHByZWNvbXBpbGVkIHRlbXBsYXRlLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGVtcGxhdGUgbWV0YSAoYm90aCBjb21waWxlIHRpbWUgYW5kIGVudmlyb25tZW50IHNwZWNpZmljKS5cbiAgICovXG4gIG1ldGE6IFQ7XG5cbiAgLyoqXG4gICAqIEhlbHBlciB0byByZW5kZXIgdGVtcGxhdGUgYXMgcm9vdCBlbnRyeSBwb2ludC5cbiAgICovXG4gIHJlbmRlcihzZWxmOiBQYXRoUmVmZXJlbmNlPGFueT4sIGFwcGVuZFRvOiBTaW1wbGUuRWxlbWVudCwgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGUpOiBSZW5kZXJSZXN1bHQ7XG5cbiAgLy8gaW50ZXJuYWwgY2FzdHMsIHRoZXNlIGFyZSBsYXppbHkgY3JlYXRlZCBhbmQgY2FjaGVkXG4gIGFzRW50cnlQb2ludCgpOiBFbnRyeVBvaW50O1xuICBhc0xheW91dCgpOiBMYXlvdXQ7XG4gIGFzUGFydGlhbChzeW1ib2xzOiBTeW1ib2xUYWJsZSk6IFBhcnRpYWxCbG9jaztcblxuICAvLyBleHBvc2VkIGZvciB2aXN1YWxpemVyXG4gIF9ibG9jazogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2s7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGVGYWN0b3J5PFQsIFU+IHtcbiAgLyoqXG4gICAqIFRlbXBsYXRlIGlkZW50aWZpZXIsIGlmIHByZWNvbXBpbGVkIHdpbGwgYmUgdGhlIGlkIG9mIHRoZVxuICAgKiBwcmVjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbXBpbGUgdGltZSBtZXRhLlxuICAgKi9cbiAgbWV0YTogVDtcblxuICAvKipcbiAgICogVXNlZCB0byBjcmVhdGUgYW4gZW52aXJvbm1lbnQgc3BlY2lmaWMgc2luZ2xldG9uIGluc3RhbmNlXG4gICAqIG9mIHRoZSB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtFbnZpcm9ubWVudH0gZW52IGdsaW1tZXIgRW52aXJvbm1lbnRcbiAgICovXG4gIGNyZWF0ZShlbnYpOiBUZW1wbGF0ZTxUPjtcbiAgLyoqXG4gICAqIFVzZWQgdG8gY3JlYXRlIGFuIGVudmlyb25tZW50IHNwZWNpZmljIHNpbmdsZXRvbiBpbnN0YW5jZVxuICAgKiBvZiB0aGUgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RW52aXJvbm1lbnR9IGVudiBnbGltbWVyIEVudmlyb25tZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtZXRhIGVudmlyb25tZW50IHNwZWNpZmljIGluamVjdGlvbnMgaW50byBtZXRhXG4gICAqL1xuICBjcmVhdGUoZW52LCBtZXRhOiBVKTogVGVtcGxhdGU8VCAmIFU+O1xufVxuXG5sZXQgY2xpZW50SWQgPSAwO1xuXG4vKipcbiAqIFdyYXBzIGEgdGVtcGxhdGUganMgaW4gYSB0ZW1wbGF0ZSBtb2R1bGUgdG8gY2hhbmdlIGl0IGludG8gYSBmYWN0b3J5XG4gKiB0aGF0IGhhbmRsZXMgbGF6eSBwYXJzaW5nIHRoZSB0ZW1wbGF0ZSBhbmQgdG8gY3JlYXRlIHBlciBlbnYgc2luZ2xldG9uc1xuICogb2YgdGhlIHRlbXBsYXRlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0ZW1wbGF0ZUZhY3Rvcnk8VD4oc2VyaWFsaXplZFRlbXBsYXRlOiBTZXJpYWxpemVkVGVtcGxhdGVXaXRoTGF6eUJsb2NrPFQ+KTogVGVtcGxhdGVGYWN0b3J5PFQsIFQ+O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGVtcGxhdGVGYWN0b3J5PFQsIFU+KHNlcmlhbGl6ZWRUZW1wbGF0ZTogU2VyaWFsaXplZFRlbXBsYXRlV2l0aExhenlCbG9jazxUPik6IFRlbXBsYXRlRmFjdG9yeTxULCBVPjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRlbXBsYXRlRmFjdG9yeSh7IGlkLCBtZXRhLCBibG9jayB9OiBTZXJpYWxpemVkVGVtcGxhdGVXaXRoTGF6eUJsb2NrPGFueT4pOiBUZW1wbGF0ZUZhY3Rvcnk8e30sIHt9PiB7XG4gIGxldCBwYXJzZWRCbG9jazogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2s7XG4gIGlmICghaWQpIHtcbiAgICBpZCA9IGBjbGllbnQtJHtjbGllbnRJZCArK31gO1xuICB9XG4gIGxldCBjcmVhdGUgPSAoZW52OiBFbnZpcm9ubWVudCwgZW52TWV0YT86IHt9KSA9PiB7XG4gICAgbGV0IG5ld01ldGEgPSBlbnZNZXRhID8gYXNzaWduKHt9LCBlbnZNZXRhLCBtZXRhKSA6IG1ldGE7XG4gICAgaWYgKCFwYXJzZWRCbG9jaykge1xuICAgICAgcGFyc2VkQmxvY2sgPSBKU09OLnBhcnNlKGJsb2NrKTtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBsYXRlKHBhcnNlZEJsb2NrLCBpZCwgbmV3TWV0YSwgZW52KTtcbiAgfTtcbiAgcmV0dXJuIHsgaWQsIG1ldGEsIGNyZWF0ZSB9O1xufVxuXG5mdW5jdGlvbiB0ZW1wbGF0ZTxUPihibG9jazogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2ssIGlkOiBzdHJpbmcsIG1ldGE6IFQsIGVudjogRW52aXJvbm1lbnQpOiBUZW1wbGF0ZTxUPiB7XG4gIGxldCBzY2FubmVyID0gbmV3IFNjYW5uZXIoYmxvY2ssIG1ldGEsIGVudik7XG4gIGxldCBlbnRyeVBvaW50OiBFbnRyeVBvaW50O1xuICBsZXQgYXNFbnRyeVBvaW50ID0gKCkgPT4ge1xuICAgIGlmICghZW50cnlQb2ludCkgZW50cnlQb2ludCA9IHNjYW5uZXIuc2NhbkVudHJ5UG9pbnQoKTtcbiAgICByZXR1cm4gZW50cnlQb2ludDtcbiAgfTtcbiAgbGV0IGxheW91dDogTGF5b3V0O1xuICBsZXQgYXNMYXlvdXQgPSAoKSA9PiB7XG4gICAgaWYgKCFsYXlvdXQpIGxheW91dCA9IHNjYW5uZXIuc2NhbkxheW91dCgpO1xuICAgIHJldHVybiBsYXlvdXQ7XG4gIH07XG4gIGxldCBhc1BhcnRpYWwgPSBzeW1ib2xzID0+IHNjYW5uZXIuc2NhblBhcnRpYWwoc3ltYm9scyk7XG4gIGxldCByZW5kZXIgPSAoc2VsZjogUGF0aFJlZmVyZW5jZTxhbnk+LCBhcHBlbmRUbzogU2ltcGxlLkVsZW1lbnQsIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlKSA9PiB7XG4gICAgbGV0IGVsZW1lbnRTdGFjayA9IEVsZW1lbnRTdGFjay5mb3JJbml0aWFsUmVuZGVyKGVudiwgYXBwZW5kVG8sIG51bGwpO1xuICAgIGxldCBjb21waWxlZCA9IGFzRW50cnlQb2ludCgpLmNvbXBpbGUoZW52KTtcbiAgICBsZXQgdm0gPSBWTS5pbml0aWFsKGVudiwgc2VsZiwgZHluYW1pY1Njb3BlLCBlbGVtZW50U3RhY2ssIGNvbXBpbGVkLnN5bWJvbHMpO1xuICAgIHJldHVybiB2bS5leGVjdXRlKGNvbXBpbGVkLm9wcyk7XG4gIH07XG4gIHJldHVybiB7IGlkLCBtZXRhLCBfYmxvY2s6IGJsb2NrLCBhc0VudHJ5UG9pbnQsIGFzTGF5b3V0LCBhc1BhcnRpYWwsIHJlbmRlciB9O1xufVxuIl19 -enifed('glimmer-runtime/lib/upsert', ['exports', 'glimmer-runtime/lib/bounds'], function (exports, _glimmerRuntimeLibBounds) { - 'use strict'; + RenderResult.prototype.dirty = function () { + _htmlbarsUtilMorphUtils.visitChildren([this.root], function (node) { + node.isDirty = true; + }); + }; - exports.isSafeString = isSafeString; - exports.isNode = isNode; - exports.isString = isString; - exports.cautiousInsert = cautiousInsert; - exports.trustingInsert = trustingInsert; + RenderResult.prototype.revalidate = function (env, self, blockArguments, scope) { + this.revalidateWith(env, scope, self, blockArguments, _htmlbarsRuntimeNodeVisitor.default); + }; - function isSafeString(value) { - return value && typeof value['toHTML'] === 'function'; - } + RenderResult.prototype.rerender = function (env, self, blockArguments, scope) { + this.revalidateWith(env, scope, self, blockArguments, _htmlbarsRuntimeNodeVisitor.AlwaysDirtyVisitor); + }; - function isNode(value) { - return value !== null && typeof value === 'object' && typeof value['nodeType'] === 'number'; + RenderResult.prototype.revalidateWith = function (env, scope, self, blockArguments, visitor) { + if (env !== undefined) { + this.env = env; } - - function isString(value) { - return typeof value === 'string'; + if (scope !== undefined) { + this.scope = scope; } + this.updateScope(); - var Upsert = function Upsert(bounds) { - this.bounds = bounds; - }; - - exports.default = Upsert; - - function cautiousInsert(dom, cursor, value) { - if (isString(value)) { - return TextUpsert.insert(dom, cursor, value); - } - if (isSafeString(value)) { - return SafeStringUpsert.insert(dom, cursor, value); - } - if (isNode(value)) { - return NodeUpsert.insert(dom, cursor, value); - } + if (self !== undefined) { + this.updateSelf(self); } - - function trustingInsert(dom, cursor, value) { - if (isString(value)) { - return HTMLUpsert.insert(dom, cursor, value); - } - if (isNode(value)) { - return NodeUpsert.insert(dom, cursor, value); - } + if (blockArguments !== undefined) { + this.updateLocals(blockArguments); } - var TextUpsert = (function (_Upsert) { - babelHelpers.inherits(TextUpsert, _Upsert); + this.populateNodes(visitor); + }; - function TextUpsert(bounds, textNode) { - _Upsert.call(this, bounds); - this.textNode = textNode; - } + RenderResult.prototype.destroy = function () { + var rootNode = this.root; + _htmlbarsUtilTemplateUtils.clearMorph(rootNode, this.env, true); + }; - TextUpsert.insert = function insert(dom, cursor, value) { - var textNode = dom.createTextNode(value); - dom.insertBefore(cursor.element, textNode, cursor.nextSibling); - var bounds = new _glimmerRuntimeLibBounds.SingleNodeBounds(cursor.element, textNode); - return new TextUpsert(bounds, textNode); - }; + RenderResult.prototype.populateNodes = function (visitor) { + var env = this.env; + var scope = this.scope; + var template = this.template; + var nodes = this.nodes; + var statements = this.statements; + var i, l; - TextUpsert.prototype.update = function update(dom, value) { - if (isString(value)) { - var textNode = this.textNode; + for (i = 0, l = statements.length; i < l; i++) { + var statement = statements[i]; + var morph = nodes[i]; - textNode.nodeValue = value; - return true; - } else { - return false; - } - }; + if (env.hooks.willRenderNode) { + env.hooks.willRenderNode(morph, env, scope); + } - return TextUpsert; - })(Upsert); + switch (statement[0]) { + case 'block': + visitor.block(statement, morph, env, scope, template, visitor);break; + case 'inline': + visitor.inline(statement, morph, env, scope, visitor);break; + case 'content': + visitor.content(statement, morph, env, scope, visitor);break; + case 'element': + visitor.element(statement, morph, env, scope, template, visitor);break; + case 'attribute': + visitor.attribute(statement, morph, env, scope);break; + case 'component': + visitor.component(statement, morph, env, scope, template, visitor);break; + } - var HTMLUpsert = (function (_Upsert2) { - babelHelpers.inherits(HTMLUpsert, _Upsert2); + if (env.hooks.didRenderNode) { + env.hooks.didRenderNode(morph, env, scope); + } + } + }; - function HTMLUpsert() { - _Upsert2.apply(this, arguments); - } + RenderResult.prototype.bindScope = function () { + this.env.hooks.bindScope(this.env, this.scope); + }; - HTMLUpsert.insert = function insert(dom, cursor, value) { - var bounds = dom.insertHTMLBefore(cursor.element, value, cursor.nextSibling); - return new HTMLUpsert(bounds); - }; + RenderResult.prototype.updateScope = function () { + this.env.hooks.updateScope(this.env, this.scope); + }; - HTMLUpsert.prototype.update = function update(dom, value) { - if (isString(value)) { - var bounds = this.bounds; + RenderResult.prototype.bindSelf = function (self) { + this.env.hooks.bindSelf(this.env, this.scope, self); + }; - var parentElement = bounds.parentElement(); - var nextSibling = _glimmerRuntimeLibBounds.clear(bounds); - this.bounds = dom.insertHTMLBefore(parentElement, nextSibling, value); - return true; - } else { - return false; - } - }; + RenderResult.prototype.updateSelf = function (self) { + this.env.hooks.updateSelf(this.env, this.scope, self); + }; - return HTMLUpsert; - })(Upsert); + RenderResult.prototype.bindLocals = function (blockArguments) { + var localNames = this.template.locals; - var SafeStringUpsert = (function (_Upsert3) { - babelHelpers.inherits(SafeStringUpsert, _Upsert3); + for (var i = 0, l = localNames.length; i < l; i++) { + this.env.hooks.bindLocal(this.env, this.scope, localNames[i], blockArguments[i]); + } + }; - function SafeStringUpsert(bounds, lastStringValue) { - _Upsert3.call(this, bounds); - this.lastStringValue = lastStringValue; - } + RenderResult.prototype.updateLocals = function (blockArguments) { + var localNames = this.template.locals; - SafeStringUpsert.insert = function insert(dom, cursor, value) { - var stringValue = value.toHTML(); - var bounds = dom.insertHTMLBefore(cursor.element, stringValue, cursor.nextSibling); - return new SafeStringUpsert(bounds, stringValue); - }; + for (var i = 0, l = localNames.length; i < l; i++) { + this.env.hooks.updateLocal(this.env, this.scope, localNames[i], blockArguments[i]); + } + }; - SafeStringUpsert.prototype.update = function update(dom, value) { - if (isSafeString(value)) { - var stringValue = value.toHTML(); - if (stringValue !== this.lastStringValue) { - var bounds = this.bounds; + function initializeNode(node, owner) { + node.ownerNode = owner; + } - var parentElement = bounds.parentElement(); - var nextSibling = _glimmerRuntimeLibBounds.clear(bounds); - this.bounds = dom.insertHTMLBefore(parentElement, nextSibling, stringValue); - this.lastStringValue = stringValue; - } - return true; - } else { - return false; - } - }; + function createChildMorph(dom, parentMorph, contextualElement) { + var morph = _htmlbarsRuntimeMorph.default.empty(dom, contextualElement || parentMorph.contextualElement); + initializeNode(morph, parentMorph.ownerNode); + return morph; + } - return SafeStringUpsert; - })(Upsert); - - var NodeUpsert = (function (_Upsert4) { - babelHelpers.inherits(NodeUpsert, _Upsert4); - - function NodeUpsert() { - _Upsert4.apply(this, arguments); + function getCachedFragment(template, env) { + var dom = env.dom, + fragment; + if (env.useFragmentCache && dom.canClone) { + if (template.cachedFragment === null) { + fragment = template.buildFragment(dom); + if (template.hasRendered) { + template.cachedFragment = fragment; + } else { + template.hasRendered = true; } + } + if (template.cachedFragment) { + fragment = dom.cloneNode(template.cachedFragment, true); + } + } else if (!fragment) { + fragment = template.buildFragment(dom); + } - NodeUpsert.insert = function insert(dom, cursor, node) { - dom.insertBefore(cursor.element, node, cursor.nextSibling); - return new NodeUpsert(_glimmerRuntimeLibBounds.single(cursor.element, node)); - }; - - NodeUpsert.prototype.update = function update(dom, value) { - if (isNode(value)) { - var bounds = this.bounds; - - var parentElement = bounds.parentElement(); - var nextSibling = _glimmerRuntimeLibBounds.clear(bounds); - this.bounds = dom.insertNodeBefore(parentElement, value, nextSibling); - return true; - } else { - return false; - } - }; - - return NodeUpsert; - })(Upsert); + return fragment; + } }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvdXBzZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVVBLGFBQUEsWUFBQSxDQUE2QixLQUFhLEVBQUE7QUFDeEMsZUFBTyxLQUFLLElBQUksT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssVUFBVSxDQUFDO0tBQ3ZEOztBQUVELGFBQUEsTUFBQSxDQUF1QixLQUFhLEVBQUE7QUFDbEMsZUFBTyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxRQUFRLENBQUM7S0FDN0Y7O0FBRUQsYUFBQSxRQUFBLENBQXlCLEtBQWEsRUFBQTtBQUNwQyxlQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQztLQUNsQzs7UUFNRCxNQUFBLEdBQ0UsU0FERixNQUFBLENBQ3FCLE1BQWMsRUFBQTtBQUFkLFlBQUEsQ0FBQSxNQUFNLEdBQU4sTUFBTSxDQUFRO0tBQ2hDOztzQkFLWSxNQUFNOztBQUVyQixhQUFBLGNBQUEsQ0FBK0IsR0FBd0IsRUFBRSxNQUFjLEVBQUUsS0FBd0IsRUFBQTtBQUMvRixZQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNuQixtQkFBTyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDOUM7QUFDRCxZQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN2QixtQkFBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNwRDtBQUNELFlBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2pCLG1CQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM5QztLQUNGOztBQUVELGFBQUEsY0FBQSxDQUErQixHQUF3QixFQUFFLE1BQWMsRUFBRSxLQUF3QixFQUFBO0FBQy9GLFlBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ25CLG1CQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM5QztBQUNELFlBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2pCLG1CQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM5QztLQUNGOztRQUVELFVBQUE7OEJBQUEsVUFBQTs7QUFVRSxpQkFWRixVQUFBLENBVWMsTUFBYyxFQUFFLFFBQXFCLEVBQUE7QUFDL0MsK0JBQU0sTUFBTSxDQUFDLENBQUM7QUFDZCxnQkFBSSxDQUFDLFFBQVEsR0FBRyxRQUFnQixDQUFDO1NBQ2xDOztBQWJILGtCQUFBLENBQ1MsTUFBTSxHQUFBLGdCQUFDLEdBQXdCLEVBQUUsTUFBYyxFQUFFLEtBQWEsRUFBQTtBQUNuRSxnQkFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QyxlQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMvRCxnQkFBSSxNQUFNLEdBQUcsNkJBeERRLGdCQUFnQixDQXdESCxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzVELG1CQUFPLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztTQUN6Qzs7QUFOSCxrQkFBQSxXQWVFLE1BQU0sR0FBQSxnQkFBQyxHQUFlLEVBQUUsS0FBZ0IsRUFBQTtBQUN0QyxnQkFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2IsUUFBUSxHQUFLLElBQUksQ0FBakIsUUFBUTs7QUFDZCx3QkFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDM0IsdUJBQU8sSUFBSSxDQUFDO2FBQ2IsTUFBTTtBQUNMLHVCQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7O2VBdkJILFVBQUE7T0FBeUIsTUFBTTs7UUEwQi9CLFVBQUE7OEJBQUEsVUFBQTs7aUJBQUEsVUFBQTs7OztBQUFBLGtCQUFBLENBQ1MsTUFBTSxHQUFBLGdCQUFDLEdBQXdCLEVBQUUsTUFBYyxFQUFFLEtBQWEsRUFBQTtBQUNuRSxnQkFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM3RSxtQkFBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQjs7QUFKSCxrQkFBQSxXQU1FLE1BQU0sR0FBQSxnQkFBQyxHQUFlLEVBQUUsS0FBZ0IsRUFBQTtBQUN0QyxnQkFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2IsTUFBTSxHQUFLLElBQUksQ0FBZixNQUFNOztBQUVaLG9CQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDM0Msb0JBQUksV0FBVyxHQUFHLHlCQXpGMkIsS0FBSyxDQXlGMUIsTUFBTSxDQUFDLENBQUM7QUFFaEMsb0JBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGFBQXlDLEVBQUUsV0FBb0MsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUUzSCx1QkFBTyxJQUFJLENBQUM7YUFDYixNQUFNO0FBQ0wsdUJBQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjs7ZUFuQkgsVUFBQTtPQUF5QixNQUFNOztRQXNCL0IsZ0JBQUE7OEJBQUEsZ0JBQUE7O0FBT0UsaUJBUEYsZ0JBQUEsQ0FPYyxNQUFjLEVBQVUsZUFBdUIsRUFBQTtBQUN6RCxnQ0FBTSxNQUFNLENBQUMsQ0FBQztBQURvQixnQkFBQSxDQUFBLGVBQWUsR0FBZixlQUFlLENBQVE7U0FFMUQ7O0FBVEgsd0JBQUEsQ0FDUyxNQUFNLEdBQUEsZ0JBQUMsR0FBd0IsRUFBRSxNQUFjLEVBQUUsS0FBaUIsRUFBQTtBQUN2RSxnQkFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLGdCQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ25GLG1CQUFPLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ2xEOztBQUxILHdCQUFBLFdBV0UsTUFBTSxHQUFBLGdCQUFDLEdBQWUsRUFBRSxLQUFnQixFQUFBO0FBQ3RDLGdCQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN2QixvQkFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBRWpDLG9CQUFJLFdBQVcsS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFO3dCQUNsQyxNQUFNLEdBQUssSUFBSSxDQUFmLE1BQU07O0FBRVosd0JBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUMzQyx3QkFBSSxXQUFXLEdBQUcseUJBdkh5QixLQUFLLENBdUh4QixNQUFNLENBQUMsQ0FBQztBQUVoQyx3QkFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsYUFBeUMsRUFBRSxXQUFvQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2pJLHdCQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQztpQkFDcEM7QUFFRCx1QkFBTyxJQUFJLENBQUM7YUFDYixNQUFNO0FBQ0wsdUJBQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjs7ZUE3QkgsZ0JBQUE7T0FBK0IsTUFBTTs7UUFnQ3JDLFVBQUE7OEJBQUEsVUFBQTs7aUJBQUEsVUFBQTs7OztBQUFBLGtCQUFBLENBQ1MsTUFBTSxHQUFBLGdCQUFDLEdBQXdCLEVBQUUsTUFBYyxFQUFFLElBQWlCLEVBQUE7QUFDdkUsZUFBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0QsbUJBQU8sSUFBSSxVQUFVLENBQUMseUJBdklpQixNQUFNLENBdUloQixNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDckQ7O0FBSkgsa0JBQUEsV0FNRSxNQUFNLEdBQUEsZ0JBQUMsR0FBZSxFQUFFLEtBQWdCLEVBQUE7QUFDdEMsZ0JBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNYLE1BQU0sR0FBSyxJQUFJLENBQWYsTUFBTTs7QUFFWixvQkFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQzNDLG9CQUFJLFdBQVcsR0FBRyx5QkEvSTJCLEtBQUssQ0ErSTFCLE1BQU0sQ0FBQyxDQUFDO0FBRWhDLG9CQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUF5QyxFQUFFLEtBQUssRUFBRSxXQUFvQyxDQUFDLENBQUM7QUFFM0gsdUJBQU8sSUFBSSxDQUFDO2FBQ2IsTUFBTTtBQUNMLHVCQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7O2VBbkJILFVBQUE7T0FBeUIsTUFBTSIsImZpbGUiOiJ1cHNlcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGFxdWUgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuaW1wb3J0IHsgRE9NQ2hhbmdlcywgRE9NVHJlZUNvbnN0cnVjdGlvbiB9IGZyb20gJy4vZG9tL2hlbHBlcic7XG5pbXBvcnQgKiBhcyBTaW1wbGUgZnJvbSAnLi9kb20vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGSVhfUkVJRklDQVRJT04gfSBmcm9tICcuL2RvbS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEJvdW5kcywgQ3Vyc29yLCBTaW5nbGVOb2RlQm91bmRzLCBzaW5nbGUsIGNsZWFyIH0gZnJvbSAnLi9ib3VuZHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNhZmVTdHJpbmcge1xuICB0b0hUTUwoKTogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTYWZlU3RyaW5nKHZhbHVlOiBPcGFxdWUpOiB2YWx1ZSBpcyBTYWZlU3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZVsndG9IVE1MJ10gPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGUodmFsdWU6IE9wYXF1ZSk6IHZhbHVlIGlzIE5vZGUge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWVbJ25vZGVUeXBlJ10gPT09ICdudW1iZXInO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcodmFsdWU6IE9wYXF1ZSk6IHZhbHVlIGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xufVxuXG5leHBvcnQgdHlwZSBJbnNlcnRpb24gPSBDYXV0aW91c0luc2VydGlvbiB8IFRydXN0aW5nSW5zZXJ0aW9uO1xuZXhwb3J0IHR5cGUgQ2F1dGlvdXNJbnNlcnRpb24gPSBzdHJpbmcgfCBTYWZlU3RyaW5nIHwgTm9kZTtcbmV4cG9ydCB0eXBlIFRydXN0aW5nSW5zZXJ0aW9uID0gc3RyaW5nIHwgTm9kZTtcblxuYWJzdHJhY3QgY2xhc3MgVXBzZXJ0IHtcbiAgY29uc3RydWN0b3IocHVibGljIGJvdW5kczogQm91bmRzKSB7XG4gIH1cblxuICBhYnN0cmFjdCB1cGRhdGUoZG9tOiBET01DaGFuZ2VzLCB2YWx1ZTogSW5zZXJ0aW9uKTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVXBzZXJ0O1xuXG5leHBvcnQgZnVuY3Rpb24gY2F1dGlvdXNJbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IENhdXRpb3VzSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiBUZXh0VXBzZXJ0Lmluc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG4gIGlmIChpc1NhZmVTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIFNhZmVTdHJpbmdVcHNlcnQuaW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cbiAgaWYgKGlzTm9kZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gTm9kZVVwc2VydC5pbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ1c3RpbmdJbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiBIVE1MVXBzZXJ0Lmluc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG4gIGlmIChpc05vZGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIE5vZGVVcHNlcnQuaW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cbn1cblxuY2xhc3MgVGV4dFVwc2VydCBleHRlbmRzIFVwc2VydCB7XG4gIHN0YXRpYyBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IHN0cmluZyk6IFVwc2VydCB7XG4gICAgbGV0IHRleHROb2RlID0gZG9tLmNyZWF0ZVRleHROb2RlKHZhbHVlKTtcbiAgICBkb20uaW5zZXJ0QmVmb3JlKGN1cnNvci5lbGVtZW50LCB0ZXh0Tm9kZSwgY3Vyc29yLm5leHRTaWJsaW5nKTtcbiAgICBsZXQgYm91bmRzID0gbmV3IFNpbmdsZU5vZGVCb3VuZHMoY3Vyc29yLmVsZW1lbnQsIHRleHROb2RlKTtcbiAgICByZXR1cm4gbmV3IFRleHRVcHNlcnQoYm91bmRzLCB0ZXh0Tm9kZSk7XG4gIH1cblxuICBwcml2YXRlIHRleHROb2RlOiBUZXh0O1xuXG4gIGNvbnN0cnVjdG9yKGJvdW5kczogQm91bmRzLCB0ZXh0Tm9kZTogU2ltcGxlLlRleHQpIHtcbiAgICBzdXBlcihib3VuZHMpO1xuICAgIHRoaXMudGV4dE5vZGUgPSB0ZXh0Tm9kZSBhcyBUZXh0O1xuICB9XG5cbiAgdXBkYXRlKGRvbTogRE9NQ2hhbmdlcywgdmFsdWU6IEluc2VydGlvbik6IGJvb2xlYW4ge1xuICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIGxldCB7IHRleHROb2RlIH0gPSB0aGlzO1xuICAgICAgdGV4dE5vZGUubm9kZVZhbHVlID0gdmFsdWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBIVE1MVXBzZXJ0IGV4dGVuZHMgVXBzZXJ0IHtcbiAgc3RhdGljIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogc3RyaW5nKTogVXBzZXJ0IHtcbiAgICBsZXQgYm91bmRzID0gZG9tLmluc2VydEhUTUxCZWZvcmUoY3Vyc29yLmVsZW1lbnQsIHZhbHVlLCBjdXJzb3IubmV4dFNpYmxpbmcpO1xuICAgIHJldHVybiBuZXcgSFRNTFVwc2VydChib3VuZHMpO1xuICB9XG5cbiAgdXBkYXRlKGRvbTogRE9NQ2hhbmdlcywgdmFsdWU6IEluc2VydGlvbik6IGJvb2xlYW4ge1xuICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIGxldCB7IGJvdW5kcyB9ID0gdGhpcztcblxuICAgICAgbGV0IHBhcmVudEVsZW1lbnQgPSBib3VuZHMucGFyZW50RWxlbWVudCgpO1xuICAgICAgbGV0IG5leHRTaWJsaW5nID0gY2xlYXIoYm91bmRzKTtcblxuICAgICAgdGhpcy5ib3VuZHMgPSBkb20uaW5zZXJ0SFRNTEJlZm9yZShwYXJlbnRFbGVtZW50IGFzIEZJWF9SRUlGSUNBVElPTjxFbGVtZW50PiwgbmV4dFNpYmxpbmcgYXMgRklYX1JFSUZJQ0FUSU9OPE5vZGU+LCB2YWx1ZSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFNhZmVTdHJpbmdVcHNlcnQgZXh0ZW5kcyBVcHNlcnQge1xuICBzdGF0aWMgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBTYWZlU3RyaW5nKTogVXBzZXJ0IHtcbiAgICBsZXQgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b0hUTUwoKTtcbiAgICBsZXQgYm91bmRzID0gZG9tLmluc2VydEhUTUxCZWZvcmUoY3Vyc29yLmVsZW1lbnQsIHN0cmluZ1ZhbHVlLCBjdXJzb3IubmV4dFNpYmxpbmcpO1xuICAgIHJldHVybiBuZXcgU2FmZVN0cmluZ1Vwc2VydChib3VuZHMsIHN0cmluZ1ZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGJvdW5kczogQm91bmRzLCBwcml2YXRlIGxhc3RTdHJpbmdWYWx1ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYm91bmRzKTtcbiAgfVxuXG4gIHVwZGF0ZShkb206IERPTUNoYW5nZXMsIHZhbHVlOiBJbnNlcnRpb24pOiBib29sZWFuIHtcbiAgICBpZiAoaXNTYWZlU3RyaW5nKHZhbHVlKSkge1xuICAgICAgbGV0IHN0cmluZ1ZhbHVlID0gdmFsdWUudG9IVE1MKCk7XG5cbiAgICAgIGlmIChzdHJpbmdWYWx1ZSAhPT0gdGhpcy5sYXN0U3RyaW5nVmFsdWUpIHtcbiAgICAgICAgbGV0IHsgYm91bmRzIH0gPSB0aGlzO1xuXG4gICAgICAgIGxldCBwYXJlbnRFbGVtZW50ID0gYm91bmRzLnBhcmVudEVsZW1lbnQoKTtcbiAgICAgICAgbGV0IG5leHRTaWJsaW5nID0gY2xlYXIoYm91bmRzKTtcblxuICAgICAgICB0aGlzLmJvdW5kcyA9IGRvbS5pbnNlcnRIVE1MQmVmb3JlKHBhcmVudEVsZW1lbnQgYXMgRklYX1JFSUZJQ0FUSU9OPEVsZW1lbnQ+LCBuZXh0U2libGluZyBhcyBGSVhfUkVJRklDQVRJT048Tm9kZT4sIHN0cmluZ1ZhbHVlKTtcbiAgICAgICAgdGhpcy5sYXN0U3RyaW5nVmFsdWUgPSBzdHJpbmdWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgTm9kZVVwc2VydCBleHRlbmRzIFVwc2VydCB7XG4gIHN0YXRpYyBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgbm9kZTogU2ltcGxlLk5vZGUpOiBVcHNlcnQge1xuICAgIGRvbS5pbnNlcnRCZWZvcmUoY3Vyc29yLmVsZW1lbnQsIG5vZGUsIGN1cnNvci5uZXh0U2libGluZyk7XG4gICAgcmV0dXJuIG5ldyBOb2RlVXBzZXJ0KHNpbmdsZShjdXJzb3IuZWxlbWVudCwgbm9kZSkpO1xuICB9XG5cbiAgdXBkYXRlKGRvbTogRE9NQ2hhbmdlcywgdmFsdWU6IEluc2VydGlvbik6IGJvb2xlYW4ge1xuICAgIGlmIChpc05vZGUodmFsdWUpKSB7XG4gICAgICBsZXQgeyBib3VuZHMgfSA9IHRoaXM7XG5cbiAgICAgIGxldCBwYXJlbnRFbGVtZW50ID0gYm91bmRzLnBhcmVudEVsZW1lbnQoKTtcbiAgICAgIGxldCBuZXh0U2libGluZyA9IGNsZWFyKGJvdW5kcyk7XG5cbiAgICAgIHRoaXMuYm91bmRzID0gZG9tLmluc2VydE5vZGVCZWZvcmUocGFyZW50RWxlbWVudCBhcyBGSVhfUkVJRklDQVRJT048RWxlbWVudD4sIHZhbHVlLCBuZXh0U2libGluZyBhcyBGSVhfUkVJRklDQVRJT048Tm9kZT4pO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIl19 -enifed('glimmer-runtime/lib/utils', ['exports', 'glimmer-util'], function (exports, _glimmerUtil) { - 'use strict'; +enifed("htmlbars-syntax", ["exports", "htmlbars-syntax/builders", "htmlbars-syntax/parser", "htmlbars-syntax/generation/print", "htmlbars-syntax/traversal/traverse", "htmlbars-syntax/traversal/walker"], function (exports, _htmlbarsSyntaxBuilders, _htmlbarsSyntaxParser, _htmlbarsSyntaxGenerationPrint, _htmlbarsSyntaxTraversalTraverse, _htmlbarsSyntaxTraversalWalker) { + "use strict"; - var EMPTY_ARRAY = Object.freeze([]); - exports.EMPTY_ARRAY = EMPTY_ARRAY; - var EMPTY_DICT = Object.freeze(_glimmerUtil.dict()); - exports.EMPTY_DICT = EMPTY_DICT; - - var ListRange = (function () { - function ListRange(list, start, end) { - this.list = list; - this.start = start; - this.end = end; - } - - ListRange.prototype.at = function at(index) { - if (index >= this.list.length) return null; - return this.list[index]; - }; - - ListRange.prototype.min = function min() { - return this.start; - }; - - ListRange.prototype.max = function max() { - return this.end; - }; - - return ListRange; - })(); - - exports.ListRange = ListRange; + exports.builders = _htmlbarsSyntaxBuilders.default; + exports.parse = _htmlbarsSyntaxParser.default; + exports.print = _htmlbarsSyntaxGenerationPrint.default; + exports.traverse = _htmlbarsSyntaxTraversalTraverse.default; + exports.Walker = _htmlbarsSyntaxTraversalWalker.default; }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRU8sUUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQzs7QUFDdEMsUUFBTSxVQUFVLEdBQWMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUhwQyxJQUFJLEVBRzJDLENBQUMsQ0FBQzs7O1FBb0JoRSxTQUFBO0FBT0UsaUJBUEYsU0FBQSxDQU9jLElBQVMsRUFBRSxLQUFhLEVBQUUsR0FBVyxFQUFBO0FBQy9DLGdCQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixnQkFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsZ0JBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1NBQ2hCOztBQVhILGlCQUFBLFdBYUUsRUFBRSxHQUFBLFlBQUMsS0FBYSxFQUFBO0FBQ2QsZ0JBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQzNDLG1CQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekI7O0FBaEJILGlCQUFBLFdBa0JFLEdBQUcsR0FBQSxlQUFBO0FBQ0QsbUJBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztTQUNuQjs7QUFwQkgsaUJBQUEsV0FzQkUsR0FBRyxHQUFBLGVBQUE7QUFDRCxtQkFBTyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQ2pCOztlQXhCSCxTQUFBIiwiZmlsZSI6InV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGljdCwgZGljdCB9IGZyb20gJ2dsaW1tZXItdXRpbCc7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9BUlJBWSA9IE9iamVjdC5mcmVlemUoW10pO1xuZXhwb3J0IGNvbnN0IEVNUFRZX0RJQ1Q6IERpY3Q8YW55PiA9IE9iamVjdC5mcmVlemUoZGljdDxhbnk+KCkpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudW1lcmFibGVDYWxsYmFjazxUPiB7XG4gIChpdGVtOiBUKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnVtZXJhYmxlPFQ+IHtcbiAgZm9yRWFjaChjYWxsYmFjazogRW51bWVyYWJsZUNhbGxiYWNrPFQ+KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXN0cm95YWJsZSB7XG4gIGRlc3Ryb3koKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSYW5nZTxUPiB7XG4gIG1pbigpOiBudW1iZXI7XG4gIG1heCgpOiBudW1iZXI7XG4gIGF0KGluZGV4OiBudW1iZXIpOiBUO1xufVxuXG5leHBvcnQgY2xhc3MgTGlzdFJhbmdlPFQ+IGltcGxlbWVudHMgUmFuZ2U8VD4ge1xuICBwcml2YXRlIGxpc3Q6IFRbXTtcblxuICAvLyBbc3RhcnQsIGVuZF1cbiAgcHJpdmF0ZSBzdGFydDogbnVtYmVyO1xuICBwcml2YXRlIGVuZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGxpc3Q6IFRbXSwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgICB0aGlzLmxpc3QgPSBsaXN0O1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIGF0KGluZGV4OiBudW1iZXIpOiBUIHtcbiAgICBpZiAoaW5kZXggPj0gdGhpcy5saXN0Lmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMubGlzdFtpbmRleF07XG4gIH1cblxuICBtaW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDtcbiAgfVxuXG4gIG1heCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmVuZDtcbiAgfVxufVxuIl19 -enifed('glimmer-runtime/lib/vm', ['exports', 'glimmer-runtime/lib/vm/append', 'glimmer-runtime/lib/vm/update', 'glimmer-runtime/lib/vm/render-result'], function (exports, _glimmerRuntimeLibVmAppend, _glimmerRuntimeLibVmUpdate, _glimmerRuntimeLibVmRenderResult) { - 'use strict'; +enifed("htmlbars-syntax/builders", ["exports"], function (exports) { + // Statements - exports.VM = _glimmerRuntimeLibVmAppend.default; - exports.PublicVM = _glimmerRuntimeLibVmAppend.PublicVM; - exports.UpdatingVM = _glimmerRuntimeLibVmUpdate.default; - exports.RenderResult = _glimmerRuntimeLibVmRenderResult.default; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvdm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O1VBQW9CLEVBQUUsOEJBQWIsT0FBTztVQUFRLFFBQVEsOEJBQVIsUUFBUTtVQUNaLFVBQVUsOEJBQXJCLE9BQU87VUFDSSxZQUFZLG9DQUF2QixPQUFPIiwiZmlsZSI6InZtLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBWTSwgUHVibGljVk0gfSBmcm9tICcuL3ZtL2FwcGVuZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVwZGF0aW5nVk0gfSBmcm9tICcuL3ZtL3VwZGF0ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlbmRlclJlc3VsdCB9IGZyb20gJy4vdm0vcmVuZGVyLXJlc3VsdCc7XG4iXX0= -enifed('glimmer-runtime/lib/vm/append', ['exports', 'glimmer-runtime/lib/environment', 'glimmer-util', 'glimmer-reference', 'glimmer-runtime/lib/compiled/opcodes/vm', 'glimmer-runtime/lib/vm/update', 'glimmer-runtime/lib/vm/render-result', 'glimmer-runtime/lib/vm/frame'], function (exports, _glimmerRuntimeLibEnvironment, _glimmerUtil, _glimmerReference, _glimmerRuntimeLibCompiledOpcodesVm, _glimmerRuntimeLibVmUpdate, _glimmerRuntimeLibVmRenderResult, _glimmerRuntimeLibVmFrame) { - 'use strict'; + "use strict"; - var VM = (function () { - function VM(env, scope, dynamicScope, elementStack) { - this.env = env; - this.elementStack = elementStack; - this.dynamicScopeStack = new _glimmerUtil.Stack(); - this.scopeStack = new _glimmerUtil.Stack(); - this.updatingOpcodeStack = new _glimmerUtil.Stack(); - this.cacheGroups = new _glimmerUtil.Stack(); - this.listBlockStack = new _glimmerUtil.Stack(); - this.frame = new _glimmerRuntimeLibVmFrame.FrameStack(); - this.env = env; - this.elementStack = elementStack; - this.scopeStack.push(scope); - this.dynamicScopeStack.push(dynamicScope); - } + exports.buildMustache = buildMustache; + exports.buildBlock = buildBlock; + exports.buildElementModifier = buildElementModifier; + exports.buildPartial = buildPartial; + exports.buildComment = buildComment; + exports.buildConcat = buildConcat; + exports.buildElement = buildElement; + exports.buildComponent = buildComponent; + exports.buildAttr = buildAttr; + exports.buildText = buildText; + exports.buildSexpr = buildSexpr; + exports.buildPath = buildPath; + exports.buildString = buildString; + exports.buildBoolean = buildBoolean; + exports.buildNumber = buildNumber; + exports.buildNull = buildNull; + exports.buildUndefined = buildUndefined; + exports.buildHash = buildHash; + exports.buildPair = buildPair; + exports.buildProgram = buildProgram; - VM.initial = function initial(env, self, dynamicScope, elementStack, size) { - var scope = _glimmerRuntimeLibEnvironment.Scope.root(self, size); - return new VM(env, scope, dynamicScope, elementStack); - }; + function buildMustache(path, params, hash, raw, loc) { + return { + type: "MustacheStatement", + path: buildPath(path), + params: params || [], + hash: hash || buildHash([]), + escaped: !raw, + loc: buildLoc(loc) + }; + } - VM.prototype.capture = function capture() { - return { - env: this.env, - scope: this.scope(), - dynamicScope: this.dynamicScope(), - frame: this.frame.capture() - }; - }; + function buildBlock(path, params, hash, program, inverse, loc) { + return { + type: "BlockStatement", + path: buildPath(path), + params: params || [], + hash: hash || buildHash([]), + program: program || null, + inverse: inverse || null, + loc: buildLoc(loc) + }; + } - VM.prototype.goto = function goto(op) { - // assert(this.frame.getOps().contains(op), `Illegal jump to ${op.label}`); - this.frame.goto(op); - }; + function buildElementModifier(path, params, hash, loc) { + return { + type: "ElementModifierStatement", + path: buildPath(path), + params: params || [], + hash: hash || buildHash([]), + loc: buildLoc(loc) + }; + } - VM.prototype.beginCacheGroup = function beginCacheGroup() { - this.cacheGroups.push(this.updatingOpcodeStack.current.tail()); - }; + function buildPartial(name, params, hash, indent) { + return { + type: "PartialStatement", + name: name, + params: params || [], + hash: hash || buildHash([]), + indent: indent + }; + } - VM.prototype.commitCacheGroup = function commitCacheGroup() { - // JumpIfNotModified(END) - // (head) - // (....) - // (tail) - // DidModify - // END: Noop - var END = new _glimmerRuntimeLibCompiledOpcodesVm.LabelOpcode("END"); - var opcodes = this.updatingOpcodeStack.current; - var marker = this.cacheGroups.pop(); - var head = marker ? opcodes.nextNode(marker) : opcodes.head(); - var tail = opcodes.tail(); - var tag = _glimmerReference.combineSlice(new _glimmerUtil.ListSlice(head, tail)); - var guard = new _glimmerRuntimeLibCompiledOpcodesVm.JumpIfNotModifiedOpcode(tag, END); - opcodes.insertBefore(guard, head); - opcodes.append(new _glimmerRuntimeLibCompiledOpcodesVm.DidModifyOpcode(guard)); - opcodes.append(END); - }; + function buildComment(value) { + return { + type: "CommentStatement", + value: value + }; + } - VM.prototype.enter = function enter(ops) { - var updating = new _glimmerUtil.LinkedList(); - var tracker = this.stack().pushUpdatableBlock(); - var state = this.capture(); - var tryOpcode = new _glimmerRuntimeLibVmUpdate.TryOpcode(ops, state, tracker, updating); - this.didEnter(tryOpcode, updating); - }; + function buildConcat(parts) { + return { + type: "ConcatStatement", + parts: parts || [] + }; + } - VM.prototype.enterWithKey = function enterWithKey(key, ops) { - var updating = new _glimmerUtil.LinkedList(); - var tracker = this.stack().pushUpdatableBlock(); - var state = this.capture(); - var tryOpcode = new _glimmerRuntimeLibVmUpdate.TryOpcode(ops, state, tracker, updating); - this.listBlockStack.current.map[key] = tryOpcode; - this.didEnter(tryOpcode, updating); - }; + // Nodes - VM.prototype.enterList = function enterList(ops) { - var updating = new _glimmerUtil.LinkedList(); - var tracker = this.stack().pushBlockList(updating); - var state = this.capture(); - var artifacts = this.frame.getIterator().artifacts; - var opcode = new _glimmerRuntimeLibVmUpdate.ListBlockOpcode(ops, state, tracker, updating, artifacts); - this.listBlockStack.push(opcode); - this.didEnter(opcode, updating); - }; + function buildElement(tag, attributes, modifiers, children, loc) { + return { + type: "ElementNode", + tag: tag || "", + attributes: attributes || [], + modifiers: modifiers || [], + children: children || [], + loc: buildLoc(loc) + }; + } - VM.prototype.didEnter = function didEnter(opcode, updating) { - this.updateWith(opcode); - this.updatingOpcodeStack.push(updating); - }; + function buildComponent(tag, attributes, program, loc) { + return { + type: "ComponentNode", + tag: tag, + attributes: attributes, + program: program, + loc: buildLoc(loc), - VM.prototype.exit = function exit() { - this.stack().popBlock(); - this.updatingOpcodeStack.pop(); - var parent = this.updatingOpcodeStack.current.tail(); - parent.didInitializeChildren(); - }; + // this should be true only if this component node is guaranteed + // to produce start and end points that can never change after the + // initial render, regardless of changes to dynamic inputs. If + // a component represents a "fragment" (any number of top-level nodes), + // this will usually not be true. + isStatic: false + }; + } - VM.prototype.exitList = function exitList() { - this.exit(); - this.listBlockStack.pop(); - }; + function buildAttr(name, value, loc) { + return { + type: "AttrNode", + name: name, + value: value, + loc: buildLoc(loc) + }; + } - VM.prototype.updateWith = function updateWith(opcode) { - this.updatingOpcodeStack.current.append(opcode); - }; + function buildText(chars, loc) { + return { + type: "TextNode", + chars: chars || "", + loc: buildLoc(loc) + }; + } - VM.prototype.stack = function stack() { - return this.elementStack; - }; + // Expressions - VM.prototype.scope = function scope() { - return this.scopeStack.current; - }; - - VM.prototype.dynamicScope = function dynamicScope() { - return this.dynamicScopeStack.current; - }; - - VM.prototype.pushFrame = function pushFrame(block, args, blocks, callerScope) { - this.frame.push(block.ops); - if (args) this.frame.setArgs(args); - if (blocks) this.frame.setBlocks(blocks); - if (callerScope) this.frame.setCallerScope(callerScope); - }; - - VM.prototype.pushComponentFrame = function pushComponentFrame(layout, args, blocks, callerScope, component, manager, shadow) { - this.frame.push(layout.ops, component, manager, shadow); - if (args) this.frame.setArgs(args); - if (blocks) this.frame.setBlocks(blocks); - if (callerScope) this.frame.setCallerScope(callerScope); - }; - - VM.prototype.pushEvalFrame = function pushEvalFrame(ops) { - this.frame.push(ops); - }; - - VM.prototype.pushChildScope = function pushChildScope() { - this.scopeStack.push(this.scopeStack.current.child()); - }; - - VM.prototype.pushCallerScope = function pushCallerScope() { - this.scopeStack.push(this.scope().getCallerScope()); - }; - - VM.prototype.pushDynamicScope = function pushDynamicScope() { - var child = this.dynamicScopeStack.current.child(); - this.dynamicScopeStack.push(child); - return child; - }; - - VM.prototype.pushRootScope = function pushRootScope(self, size) { - var scope = _glimmerRuntimeLibEnvironment.Scope.root(self, size); - this.scopeStack.push(scope); - return scope; - }; - - VM.prototype.popScope = function popScope() { - this.scopeStack.pop(); - }; - - VM.prototype.popDynamicScope = function popDynamicScope() { - this.dynamicScopeStack.pop(); - }; - - VM.prototype.newDestroyable = function newDestroyable(d) { - this.stack().newDestroyable(d); - }; - - /// SCOPE HELPERS - - VM.prototype.getSelf = function getSelf() { - return this.scope().getSelf(); - }; - - VM.prototype.referenceForSymbol = function referenceForSymbol(symbol) { - return this.scope().getSymbol(symbol); - }; - - VM.prototype.getArgs = function getArgs() { - return this.frame.getArgs(); - }; - - /// EXECUTION - - VM.prototype.resume = function resume(opcodes, frame) { - return this.execute(opcodes, function (vm) { - return vm.frame.restore(frame); - }); - }; - - VM.prototype.execute = function execute(opcodes, initialize) { - _glimmerUtil.LOGGER.debug("[VM] Begin program execution"); - var elementStack = this.elementStack; - var frame = this.frame; - var updatingOpcodeStack = this.updatingOpcodeStack; - var env = this.env; - - elementStack.pushSimpleBlock(); - updatingOpcodeStack.push(new _glimmerUtil.LinkedList()); - frame.push(opcodes); - if (initialize) initialize(this); - var opcode = undefined; - while (frame.hasOpcodes()) { - if (opcode = frame.nextStatement()) { - _glimmerUtil.LOGGER.debug('[VM] OP ' + opcode.type); - _glimmerUtil.LOGGER.trace(opcode); - opcode.evaluate(this); - } - } - _glimmerUtil.LOGGER.debug("[VM] Completed program execution"); - return new _glimmerRuntimeLibVmRenderResult.default(env, updatingOpcodeStack.pop(), elementStack.popBlock()); - }; - - VM.prototype.evaluateOpcode = function evaluateOpcode(opcode) { - opcode.evaluate(this); - }; - - // Make sure you have opcodes that push and pop a scope around this opcode - // if you need to change the scope. - - VM.prototype.invokeBlock = function invokeBlock(block, args) { - var compiled = block.compile(this.env); - this.pushFrame(compiled, args); - }; - - VM.prototype.invokePartial = function invokePartial(block) { - var compiled = block.compile(this.env); - this.pushFrame(compiled); - }; - - VM.prototype.invokeLayout = function invokeLayout(args, layout, templates, callerScope, component, manager, shadow) { - this.pushComponentFrame(layout, args, templates, callerScope, component, manager, shadow); - }; - - VM.prototype.evaluateOperand = function evaluateOperand(expr) { - this.frame.setOperand(expr.evaluate(this)); - }; - - VM.prototype.evaluateArgs = function evaluateArgs(args) { - var evaledArgs = this.frame.setArgs(args.evaluate(this)); - this.frame.setOperand(evaledArgs.positional.at(0)); - }; - - VM.prototype.bindPositionalArgs = function bindPositionalArgs(symbols) { - var args = this.frame.getArgs(); - _glimmerUtil.assert(args, "Cannot bind positional args"); - var positional = args.positional; - - var scope = this.scope(); - for (var i = 0; i < symbols.length; i++) { - scope.bindSymbol(symbols[i], positional.at(i)); - } - }; - - VM.prototype.bindNamedArgs = function bindNamedArgs(names, symbols) { - var args = this.frame.getArgs(); - _glimmerUtil.assert(args, "Cannot bind named args"); - var named = args.named; - - var scope = this.scope(); - for (var i = 0; i < names.length; i++) { - scope.bindSymbol(symbols[i], named.get(names[i])); - } - }; - - VM.prototype.bindBlocks = function bindBlocks(names, symbols) { - var blocks = this.frame.getBlocks(); - var callerScope = this.frame.getCallerScope(); - var scope = this.scope(); - scope.bindCallerScope(callerScope); - for (var i = 0; i < names.length; i++) { - scope.bindBlock(symbols[i], blocks && blocks[names[i]] || null); - } - }; - - VM.prototype.bindPartialArgs = function bindPartialArgs(symbol) { - var args = this.frame.getArgs(); - _glimmerUtil.assert(args, "Cannot bind named args"); - this.scope().bindSymbol(symbol, args.named); - }; - - VM.prototype.bindDynamicScope = function bindDynamicScope(names) { - var args = this.frame.getArgs(); - _glimmerUtil.assert(args, "Cannot bind dynamic scope"); - var scope = this.dynamicScope(); - for (var i = 0; i < names.length; i++) { - scope.set(names[i], args.named.get(names[i])); - } - }; - - return VM; - })(); - - exports.default = VM; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvdm0vYXBwZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztRQXdDQSxFQUFBO0FBbUJFLGlCQW5CRixFQUFBLENBb0JXLEdBQWdCLEVBQ3ZCLEtBQVksRUFDWixZQUEwQixFQUNsQixZQUEwQixFQUFBO0FBSDNCLGdCQUFBLENBQUEsR0FBRyxHQUFILEdBQUcsQ0FBYTtBQUdmLGdCQUFBLENBQUEsWUFBWSxHQUFaLFlBQVksQ0FBYztBQXRCNUIsZ0JBQUEsQ0FBQSxpQkFBaUIsR0FBRyxpQkF2Q1IsS0FBSyxFQXVDNEIsQ0FBQztBQUM5QyxnQkFBQSxDQUFBLFVBQVUsR0FBRyxpQkF4Q0QsS0FBSyxFQXdDYyxDQUFDO0FBQ2pDLGdCQUFBLENBQUEsbUJBQW1CLEdBQUcsaUJBekNULEtBQUssRUF5QzJDLENBQUM7QUFDOUQsZ0JBQUEsQ0FBQSxXQUFXLEdBQUcsaUJBMUNELEtBQUssRUEwQ3VCLENBQUM7QUFDMUMsZ0JBQUEsQ0FBQSxjQUFjLEdBQUcsaUJBM0NKLEtBQUssRUEyQzJCLENBQUM7QUFDOUMsZ0JBQUEsQ0FBQSxLQUFLLEdBQUcsOEJBaENPLFVBQVUsRUFnQ0QsQ0FBQztBQW1COUIsZ0JBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2YsZ0JBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ2pDLGdCQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixnQkFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMzQzs7QUE3QkgsVUFBQSxDQVFTLE9BQU8sR0FBQSxpQkFDWixHQUFnQixFQUNoQixJQUEyQixFQUMzQixZQUEwQixFQUMxQixZQUEwQixFQUMxQixJQUFZLEVBQUE7QUFFWixnQkFBSSxLQUFLLEdBQUcsOEJBdkRQLEtBQUssQ0F1RFEsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztB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R0FBQSwwQkFBQyxLQUFlLEVBQUE7QUFDOUIsZ0JBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFFaEMseUJBcFlnRSxNQUFNLENBb1kvRCxJQUFJLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztBQUUxQyxnQkFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBRWhDLGlCQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsQyxxQkFBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMvQztTQUNGOztlQXJXSCxFQUFBOzs7c0JBQUEsRUFBQSIsImZpbGUiOiJhcHBlbmQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY29wZSwgRHluYW1pY1Njb3BlLCBFbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEVsZW1lbnRTdGFjayB9IGZyb20gJy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgRGVzdHJveWFibGUsIFN0YWNrLCBMaW5rZWRMaXN0LCBMaXN0U2xpY2UsIExPR0dFUiwgT3BhcXVlLCBhc3NlcnQgfSBmcm9tICdnbGltbWVyLXV0aWwnO1xuaW1wb3J0IHsgUGF0aFJlZmVyZW5jZSwgY29tYmluZVNsaWNlIH0gZnJvbSAnZ2xpbW1lci1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgVGVtcGxhdGVzIH0gZnJvbSAnLi4vc3ludGF4L2NvcmUnO1xuaW1wb3J0IHsgSW5saW5lQmxvY2ssIFBhcnRpYWxCbG9jaywgQ29tcGlsZWRCbG9jayB9IGZyb20gJy4uL2NvbXBpbGVkL2Jsb2Nrcyc7XG5pbXBvcnQgeyBDb21waWxlZEV4cHJlc3Npb24gfSBmcm9tICcuLi9jb21waWxlZC9leHByZXNzaW9ucyc7XG5pbXBvcnQgeyBDb21waWxlZEFyZ3MsIEV2YWx1YXRlZEFyZ3MgfSBmcm9tICcuLi9jb21waWxlZC9leHByZXNzaW9ucy9hcmdzJztcbmltcG9ydCB7IE9wY29kZSwgT3BTZXEsIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBMYWJlbE9wY29kZSwgSnVtcElmTm90TW9kaWZpZWRPcGNvZGUsIERpZE1vZGlmeU9wY29kZSB9IGZyb20gJy4uL2NvbXBpbGVkL29wY29kZXMvdm0nO1xuaW1wb3J0IHsgUmFuZ2UgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIENvbXBvbmVudE1hbmFnZXIgfSBmcm9tICcuLi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBWTVN0YXRlLCBMaXN0QmxvY2tPcGNvZGUsIFRyeU9wY29kZSwgQmxvY2tPcGNvZGUgfSBmcm9tICcuL3VwZGF0ZSc7XG5pbXBvcnQgUmVuZGVyUmVzdWx0IGZyb20gJy4vcmVuZGVyLXJlc3VsdCc7XG5pbXBvcnQgeyBDYXB0dXJlZEZyYW1lLCBGcmFtZVN0YWNrLCBCbG9ja3MgfSBmcm9tICcuL2ZyYW1lJztcblxuaW50ZXJmYWNlIFZNSW5pdGlhbE9wdGlvbnMge1xuICBzZWxmOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT47XG4gIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlO1xuICBlbGVtZW50U3RhY2s6IEVsZW1lbnRTdGFjaztcbiAgc2l6ZTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUHVzaEZyYW1lT3B0aW9ucyB7XG4gIGJsb2NrOiBDb21waWxlZEJsb2NrO1xuICBhcmdzPzogRXZhbHVhdGVkQXJncztcbiAgYmxvY2tzPzogQmxvY2tzO1xuICBjYWxsZXJTY29wZT86IFNjb3BlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY1ZNIHtcbiAgZW52OiBFbnZpcm9ubWVudDtcbiAgZ2V0QXJncygpOiBFdmFsdWF0ZWRBcmdzO1xuICBkeW5hbWljU2NvcGUoKTogRHluYW1pY1Njb3BlO1xuICBnZXRTZWxmKCk6IFBhdGhSZWZlcmVuY2U8T3BhcXVlPjtcbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpO1xufVxuXG50eXBlIE9wTGlzdCA9IFJhbmdlPE9wY29kZT47XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZNIGltcGxlbWVudHMgUHVibGljVk0ge1xuICBwcml2YXRlIGR5bmFtaWNTY29wZVN0YWNrID0gbmV3IFN0YWNrPER5bmFtaWNTY29wZT4oKTtcbiAgcHJpdmF0ZSBzY29wZVN0YWNrID0gbmV3IFN0YWNrPFNjb3BlPigpO1xuICBwdWJsaWMgdXBkYXRpbmdPcGNvZGVTdGFjayA9IG5ldyBTdGFjazxMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPj4oKTtcbiAgcHVibGljIGNhY2hlR3JvdXBzID0gbmV3IFN0YWNrPFVwZGF0aW5nT3Bjb2RlPigpO1xuICBwdWJsaWMgbGlzdEJsb2NrU3RhY2sgPSBuZXcgU3RhY2s8TGlzdEJsb2NrT3Bjb2RlPigpO1xuICBwdWJsaWMgZnJhbWUgPSBuZXcgRnJhbWVTdGFjaygpO1xuXG4gIHN0YXRpYyBpbml0aWFsKFxuICAgIGVudjogRW52aXJvbm1lbnQsXG4gICAgc2VsZjogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LFxuICAgIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlLFxuICAgIGVsZW1lbnRTdGFjazogRWxlbWVudFN0YWNrLFxuICAgIHNpemU6IG51bWJlclxuICApIHtcbiAgICBsZXQgc2NvcGUgPSBTY29wZS5yb290KHNlbGYsIHNpemUpO1xuICAgIHJldHVybiBuZXcgVk0oZW52LCBzY29wZSwgZHluYW1pY1Njb3BlLCBlbGVtZW50U3RhY2spO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVudjogRW52aXJvbm1lbnQsXG4gICAgc2NvcGU6IFNjb3BlLFxuICAgIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlLFxuICAgIHByaXZhdGUgZWxlbWVudFN0YWNrOiBFbGVtZW50U3RhY2ssXG4gICkge1xuICAgIHRoaXMuZW52ID0gZW52O1xuICAgIHRoaXMuZWxlbWVudFN0YWNrID0gZWxlbWVudFN0YWNrO1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKHNjb3BlKTtcbiAgICB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnB1c2goZHluYW1pY1Njb3BlKTtcbiAgfVxuXG4gIGNhcHR1cmUoKTogVk1TdGF0ZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICBzY29wZTogdGhpcy5zY29wZSgpLFxuICAgICAgZHluYW1pY1Njb3BlOiB0aGlzLmR5bmFtaWNTY29wZSgpLFxuICAgICAgZnJhbWU6IHRoaXMuZnJhbWUuY2FwdHVyZSgpXG4gICAgfTtcbiAgfVxuXG4gIGdvdG8ob3A6IExhYmVsT3Bjb2RlKSB7XG4gICAgLy8gYXNzZXJ0KHRoaXMuZnJhbWUuZ2V0T3BzKCkuY29udGFpbnMob3ApLCBgSWxsZWdhbCBqdW1wIHRvICR7b3AubGFiZWx9YCk7XG4gICAgdGhpcy5mcmFtZS5nb3RvKG9wKTtcbiAgfVxuXG4gIGJlZ2luQ2FjaGVHcm91cCgpIHtcbiAgICB0aGlzLmNhY2hlR3JvdXBzLnB1c2godGhpcy51cGRhdGluZ09wY29kZVN0YWNrLmN1cnJlbnQudGFpbCgpKTtcbiAgfVxuXG4gIGNvbW1pdENhY2hlR3JvdXAoKSB7XG4gICAgLy8gICAgICAgIEp1bXBJZk5vdE1vZGlmaWVkKEVORClcbiAgICAvLyAgICAgICAgKGhlYWQpXG4gICAgLy8gICAgICAgICguLi4uKVxuICAgIC8vICAgICAgICAodGFpbClcbiAgICAvLyAgICAgICAgRGlkTW9kaWZ5XG4gICAgLy8gRU5EOiAgIE5vb3BcblxuICAgIGxldCBFTkQgPSBuZXcgTGFiZWxPcGNvZGUoXCJFTkRcIik7XG5cbiAgICBsZXQgb3Bjb2RlcyA9IHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5jdXJyZW50O1xuICAgIGxldCBtYXJrZXIgPSB0aGlzLmNhY2hlR3JvdXBzLnBvcCgpO1xuICAgIGxldCBoZWFkID0gbWFya2VyID8gb3Bjb2Rlcy5uZXh0Tm9kZShtYXJrZXIpIDogb3Bjb2Rlcy5oZWFkKCk7XG4gICAgbGV0IHRhaWwgPSBvcGNvZGVzLnRhaWwoKTtcbiAgICBsZXQgdGFnID0gY29tYmluZVNsaWNlKG5ldyBMaXN0U2xpY2UoaGVhZCwgdGFpbCkpO1xuXG4gICAgbGV0IGd1YXJkID0gbmV3IEp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlKHRhZywgRU5EKTtcblxuICAgIG9wY29kZXMuaW5zZXJ0QmVmb3JlKGd1YXJkLCBoZWFkKTtcbiAgICBvcGNvZGVzLmFwcGVuZChuZXcgRGlkTW9kaWZ5T3Bjb2RlKGd1YXJkKSk7XG4gICAgb3Bjb2Rlcy5hcHBlbmQoRU5EKTtcbiAgfVxuXG4gIGVudGVyKG9wczogT3BTZXEpIHtcbiAgICBsZXQgdXBkYXRpbmcgPSBuZXcgTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4oKTtcblxuICAgIGxldCB0cmFja2VyID0gdGhpcy5zdGFjaygpLnB1c2hVcGRhdGFibGVCbG9jaygpO1xuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2FwdHVyZSgpO1xuXG4gICAgbGV0IHRyeU9wY29kZSA9IG5ldyBUcnlPcGNvZGUob3BzLCBzdGF0ZSwgdHJhY2tlciwgdXBkYXRpbmcpO1xuXG4gICAgdGhpcy5kaWRFbnRlcih0cnlPcGNvZGUsIHVwZGF0aW5nKTtcbiAgfVxuXG4gIGVudGVyV2l0aEtleShrZXk6IHN0cmluZywgb3BzOiBPcFNlcSkge1xuICAgIGxldCB1cGRhdGluZyA9IG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpO1xuXG4gICAgbGV0IHRyYWNrZXIgPSB0aGlzLnN0YWNrKCkucHVzaFVwZGF0YWJsZUJsb2NrKCk7XG4gICAgbGV0IHN0YXRlID0gdGhpcy5jYXB0dXJlKCk7XG5cbiAgICBsZXQgdHJ5T3Bjb2RlID0gbmV3IFRyeU9wY29kZShvcHMsIHN0YXRlLCB0cmFja2VyLCB1cGRhdGluZyk7XG5cbiAgICB0aGlzLmxpc3RCbG9ja1N0YWNrLmN1cnJlbnQubWFwW2tleV0gPSB0cnlPcGNvZGU7XG5cbiAgICB0aGlzLmRpZEVudGVyKHRyeU9wY29kZSwgdXBkYXRpbmcpO1xuICB9XG5cbiAgZW50ZXJMaXN0KG9wczogT3BTZXEpIHtcbiAgICBsZXQgdXBkYXRpbmcgPSBuZXcgTGlua2VkTGlzdDxCbG9ja09wY29kZT4oKTtcblxuICAgIGxldCB0cmFja2VyID0gdGhpcy5zdGFjaygpLnB1c2hCbG9ja0xpc3QodXBkYXRpbmcpO1xuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2FwdHVyZSgpO1xuICAgIGxldCBhcnRpZmFjdHMgPSB0aGlzLmZyYW1lLmdldEl0ZXJhdG9yKCkuYXJ0aWZhY3RzO1xuXG4gICAgbGV0IG9wY29kZSA9IG5ldyBMaXN0QmxvY2tPcGNvZGUob3BzLCBzdGF0ZSwgdHJhY2tlciwgdXBkYXRpbmcsIGFydGlmYWN0cyk7XG5cbiAgICB0aGlzLmxpc3RCbG9ja1N0YWNrLnB1c2gob3Bjb2RlKTtcblxuICAgIHRoaXMuZGlkRW50ZXIob3Bjb2RlLCB1cGRhdGluZyk7XG4gIH1cblxuICBwcml2YXRlIGRpZEVudGVyKG9wY29kZTogQmxvY2tPcGNvZGUsIHVwZGF0aW5nOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPikge1xuICAgIHRoaXMudXBkYXRlV2l0aChvcGNvZGUpO1xuICAgIHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5wdXNoKHVwZGF0aW5nKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5zdGFjaygpLnBvcEJsb2NrKCk7XG4gICAgdGhpcy51cGRhdGluZ09wY29kZVN0YWNrLnBvcCgpO1xuXG4gICAgbGV0IHBhcmVudCA9IHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5jdXJyZW50LnRhaWwoKSBhcyBCbG9ja09wY29kZTtcblxuICAgIHBhcmVudC5kaWRJbml0aWFsaXplQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIGV4aXRMaXN0KCkge1xuICAgIHRoaXMuZXhpdCgpO1xuICAgIHRoaXMubGlzdEJsb2NrU3RhY2sucG9wKCk7XG4gIH1cblxuICB1cGRhdGVXaXRoKG9wY29kZTogVXBkYXRpbmdPcGNvZGUpIHtcbiAgICB0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2suY3VycmVudC5hcHBlbmQob3Bjb2RlKTtcbiAgfVxuXG4gIHN0YWNrKCk6IEVsZW1lbnRTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFN0YWNrO1xuICB9XG5cbiAgc2NvcGUoKTogU2NvcGUge1xuICAgIHJldHVybiB0aGlzLnNjb3BlU3RhY2suY3VycmVudDtcbiAgfVxuXG4gIGR5bmFtaWNTY29wZSgpOiBEeW5hbWljU2NvcGUge1xuICAgIHJldHVybiB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLmN1cnJlbnQ7XG4gIH1cblxuICBwdXNoRnJhbWUoXG4gICAgYmxvY2s6IENvbXBpbGVkQmxvY2ssXG4gICAgYXJncz86IEV2YWx1YXRlZEFyZ3MsXG4gICAgYmxvY2tzPzogQmxvY2tzLFxuICAgIGNhbGxlclNjb3BlPzogU2NvcGVcbiAgKSB7XG4gICAgdGhpcy5mcmFtZS5wdXNoKGJsb2NrLm9wcyk7XG5cbiAgICBpZiAoYXJncykgdGhpcy5mcmFtZS5zZXRBcmdzKGFyZ3MpO1xuICAgIGlmIChibG9ja3MpIHRoaXMuZnJhbWUuc2V0QmxvY2tzKGJsb2Nrcyk7XG4gICAgaWYgKGNhbGxlclNjb3BlKSB0aGlzLmZyYW1lLnNldENhbGxlclNjb3BlKGNhbGxlclNjb3BlKTtcbiAgfVxuXG4gIHB1c2hDb21wb25lbnRGcmFtZShcbiAgICBsYXlvdXQ6IENvbXBpbGVkQmxvY2ssXG4gICAgYXJnczogRXZhbHVhdGVkQXJncyxcbiAgICBibG9ja3M6IEJsb2NrcyxcbiAgICBjYWxsZXJTY29wZTogU2NvcGUsXG4gICAgY29tcG9uZW50OiBDb21wb25lbnQsXG4gICAgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxDb21wb25lbnQ+LFxuICAgIHNoYWRvdzogc3RyaW5nW11cbiAgKSB7XG4gICAgdGhpcy5mcmFtZS5wdXNoKGxheW91dC5vcHMsIGNvbXBvbmVudCwgbWFuYWdlciwgc2hhZG93KTtcblxuICAgIGlmIChhcmdzKSB0aGlzLmZyYW1lLnNldEFyZ3MoYXJncyk7XG4gICAgaWYgKGJsb2NrcykgdGhpcy5mcmFtZS5zZXRCbG9ja3MoYmxvY2tzKTtcbiAgICBpZiAoY2FsbGVyU2NvcGUpIHRoaXMuZnJhbWUuc2V0Q2FsbGVyU2NvcGUoY2FsbGVyU2NvcGUpO1xuICB9XG5cbiAgcHVzaEV2YWxGcmFtZShvcHM6IE9wU2VxKSB7XG4gICAgdGhpcy5mcmFtZS5wdXNoKG9wcyk7XG4gIH1cblxuICBwdXNoQ2hpbGRTY29wZSgpIHtcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaCh0aGlzLnNjb3BlU3RhY2suY3VycmVudC5jaGlsZCgpKTtcbiAgfVxuXG4gIHB1c2hDYWxsZXJTY29wZSgpIHtcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaCh0aGlzLnNjb3BlKCkuZ2V0Q2FsbGVyU2NvcGUoKSk7XG4gIH1cblxuICBwdXNoRHluYW1pY1Njb3BlKCk6IER5bmFtaWNTY29wZSB7XG4gICAgbGV0IGNoaWxkID0gdGhpcy5keW5hbWljU2NvcGVTdGFjay5jdXJyZW50LmNoaWxkKCk7XG4gICAgdGhpcy5keW5hbWljU2NvcGVTdGFjay5wdXNoKGNoaWxkKTtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICBwdXNoUm9vdFNjb3BlKHNlbGY6IFBhdGhSZWZlcmVuY2U8YW55Piwgc2l6ZTogbnVtYmVyKTogU2NvcGUge1xuICAgIGxldCBzY29wZSA9IFNjb3BlLnJvb3Qoc2VsZiwgc2l6ZSk7XG4gICAgdGhpcy5zY29wZVN0YWNrLnB1c2goc2NvcGUpO1xuICAgIHJldHVybiBzY29wZTtcbiAgfVxuXG4gIHBvcFNjb3BlKCkge1xuICAgIHRoaXMuc2NvcGVTdGFjay5wb3AoKTtcbiAgfVxuXG4gIHBvcER5bmFtaWNTY29wZSgpIHtcbiAgICB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnBvcCgpO1xuICB9XG5cbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpIHtcbiAgICB0aGlzLnN0YWNrKCkubmV3RGVzdHJveWFibGUoZCk7XG4gIH1cblxuICAvLy8gU0NPUEUgSEVMUEVSU1xuXG4gIGdldFNlbGYoKTogUGF0aFJlZmVyZW5jZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5zY29wZSgpLmdldFNlbGYoKTtcbiAgfVxuXG4gIHJlZmVyZW5jZUZvclN5bWJvbChzeW1ib2w6IG51bWJlcik6IFBhdGhSZWZlcmVuY2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2NvcGUoKS5nZXRTeW1ib2woc3ltYm9sKTtcbiAgfVxuXG4gIGdldEFyZ3MoKTogRXZhbHVhdGVkQXJncyB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWUuZ2V0QXJncygpO1xuICB9XG5cbiAgLy8vIEVYRUNVVElPTlxuXG4gIHJlc3VtZShvcGNvZGVzOiBPcFNlcSwgZnJhbWU6IENhcHR1cmVkRnJhbWUpOiBSZW5kZXJSZXN1bHQge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUob3Bjb2Rlcywgdm0gPT4gdm0uZnJhbWUucmVzdG9yZShmcmFtZSkpO1xuICB9XG5cbiAgZXhlY3V0ZShvcGNvZGVzOiBPcFNlcSwgaW5pdGlhbGl6ZT86ICh2bTogVk0pID0+IHZvaWQpOiBSZW5kZXJSZXN1bHQge1xuICAgIExPR0dFUi5kZWJ1ZyhcIltWTV0gQmVnaW4gcHJvZ3JhbSBleGVjdXRpb25cIik7XG5cbiAgICBsZXQgeyBlbGVtZW50U3RhY2ssIGZyYW1lLCB1cGRhdGluZ09wY29kZVN0YWNrLCBlbnYgfSA9IHRoaXM7XG5cbiAgICBlbGVtZW50U3RhY2sucHVzaFNpbXBsZUJsb2NrKCk7XG5cbiAgICB1cGRhdGluZ09wY29kZVN0YWNrLnB1c2gobmV3IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KCkpO1xuICAgIGZyYW1lLnB1c2gob3Bjb2Rlcyk7XG5cbiAgICBpZiAoaW5pdGlhbGl6ZSkgaW5pdGlhbGl6ZSh0aGlzKTtcblxuICAgIGxldCBvcGNvZGU6IE9wY29kZTtcblxuICAgIHdoaWxlIChmcmFtZS5oYXNPcGNvZGVzKCkpIHtcbiAgICAgIGlmIChvcGNvZGUgPSBmcmFtZS5uZXh0U3RhdGVtZW50KCkpIHtcbiAgICAgICAgTE9HR0VSLmRlYnVnKGBbVk1dIE9QICR7b3Bjb2RlLnR5cGV9YCk7XG4gICAgICAgIExPR0dFUi50cmFjZShvcGNvZGUpO1xuICAgICAgICBvcGNvZGUuZXZhbHVhdGUodGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgTE9HR0VSLmRlYnVnKFwiW1ZNXSBDb21wbGV0ZWQgcHJvZ3JhbSBleGVjdXRpb25cIik7XG5cbiAgICByZXR1cm4gbmV3IFJlbmRlclJlc3VsdChcbiAgICAgIGVudixcbiAgICAgIHVwZGF0aW5nT3Bjb2RlU3RhY2sucG9wKCksXG4gICAgICBlbGVtZW50U3RhY2sucG9wQmxvY2soKVxuICAgICk7XG4gIH1cblxuICBldmFsdWF0ZU9wY29kZShvcGNvZGU6IE9wY29kZSkge1xuICAgIG9wY29kZS5ldmFsdWF0ZSh0aGlzKTtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB5b3UgaGF2ZSBvcGNvZGVzIHRoYXQgcHVzaCBhbmQgcG9wIGEgc2NvcGUgYXJvdW5kIHRoaXMgb3Bjb2RlXG4gIC8vIGlmIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgc2NvcGUuXG4gIGludm9rZUJsb2NrKGJsb2NrOiBJbmxpbmVCbG9jaywgYXJnczogRXZhbHVhdGVkQXJncykge1xuICAgIGxldCBjb21waWxlZCA9IGJsb2NrLmNvbXBpbGUodGhpcy5lbnYpO1xuICAgIHRoaXMucHVzaEZyYW1lKGNvbXBpbGVkLCBhcmdzKTtcbiAgfVxuXG4gIGludm9rZVBhcnRpYWwoYmxvY2s6IFBhcnRpYWxCbG9jaykge1xuICAgIGxldCBjb21waWxlZCA9IGJsb2NrLmNvbXBpbGUodGhpcy5lbnYpO1xuICAgIHRoaXMucHVzaEZyYW1lKGNvbXBpbGVkKTtcbiAgfVxuXG4gIGludm9rZUxheW91dChcbiAgICBhcmdzOiBFdmFsdWF0ZWRBcmdzLFxuICAgIGxheW91dDogQ29tcGlsZWRCbG9jayxcbiAgICB0ZW1wbGF0ZXM6IFRlbXBsYXRlcyxcbiAgICBjYWxsZXJTY29wZTogU2NvcGUsXG4gICAgY29tcG9uZW50OiBDb21wb25lbnQsXG4gICAgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxDb21wb25lbnQ+LFxuICAgIHNoYWRvdzogc3RyaW5nW11cbiAgKSB7XG4gICAgdGhpcy5wdXNoQ29tcG9uZW50RnJhbWUobGF5b3V0LCBhcmdzLCB0ZW1wbGF0ZXMsIGNhbGxlclNjb3BlLCBjb21wb25lbnQsIG1hbmFnZXIsIHNoYWRvdyk7XG4gIH1cblxuICBldmFsdWF0ZU9wZXJhbmQoZXhwcjogQ29tcGlsZWRFeHByZXNzaW9uPGFueT4pIHtcbiAgICB0aGlzLmZyYW1lLnNldE9wZXJhbmQoZXhwci5ldmFsdWF0ZSh0aGlzKSk7XG4gIH1cblxuICBldmFsdWF0ZUFyZ3MoYXJnczogQ29tcGlsZWRBcmdzKSB7XG4gICAgbGV0IGV2YWxlZEFyZ3MgPSB0aGlzLmZyYW1lLnNldEFyZ3MoYXJncy5ldmFsdWF0ZSh0aGlzKSk7XG4gICAgdGhpcy5mcmFtZS5zZXRPcGVyYW5kKGV2YWxlZEFyZ3MucG9zaXRpb25hbC5hdCgwKSk7XG4gIH1cblxuICBiaW5kUG9zaXRpb25hbEFyZ3Moc3ltYm9sczogbnVtYmVyW10pIHtcbiAgICBsZXQgYXJncyA9IHRoaXMuZnJhbWUuZ2V0QXJncygpO1xuXG4gICAgYXNzZXJ0KGFyZ3MsIFwiQ2Fubm90IGJpbmQgcG9zaXRpb25hbCBhcmdzXCIpO1xuXG4gICAgbGV0IHsgcG9zaXRpb25hbCB9ID0gYXJncztcblxuICAgIGxldCBzY29wZSA9IHRoaXMuc2NvcGUoKTtcblxuICAgIGZvcihsZXQgaT0wOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuICAgICAgc2NvcGUuYmluZFN5bWJvbChzeW1ib2xzW2ldLCBwb3NpdGlvbmFsLmF0KGkpKTtcbiAgICB9XG4gIH1cblxuICBiaW5kTmFtZWRBcmdzKG5hbWVzOiBzdHJpbmdbXSwgc3ltYm9sczogbnVtYmVyW10pIHtcbiAgICBsZXQgYXJncyA9IHRoaXMuZnJhbWUuZ2V0QXJncygpO1xuXG4gICAgYXNzZXJ0KGFyZ3MsIFwiQ2Fubm90IGJpbmQgbmFtZWQgYXJnc1wiKTtcblxuICAgIGxldCB7IG5hbWVkIH0gPSBhcmdzO1xuXG4gICAgbGV0IHNjb3BlID0gdGhpcy5zY29wZSgpO1xuXG4gICAgZm9yKGxldCBpPTA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgc2NvcGUuYmluZFN5bWJvbChzeW1ib2xzW2ldLCBuYW1lZC5nZXQobmFtZXNbaV0pKTtcbiAgICB9XG4gIH1cblxuICBiaW5kQmxvY2tzKG5hbWVzOiBzdHJpbmdbXSwgc3ltYm9sczogbnVtYmVyW10pIHtcbiAgICBsZXQgYmxvY2tzID0gdGhpcy5mcmFtZS5nZXRCbG9ja3MoKTtcbiAgICBsZXQgY2FsbGVyU2NvcGUgPSB0aGlzLmZyYW1lLmdldENhbGxlclNjb3BlKCk7XG5cbiAgICBsZXQgc2NvcGUgPSB0aGlzLnNjb3BlKCk7XG5cbiAgICBzY29wZS5iaW5kQ2FsbGVyU2NvcGUoY2FsbGVyU2NvcGUpO1xuXG4gICAgZm9yKGxldCBpPTA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgc2NvcGUuYmluZEJsb2NrKHN5bWJvbHNbaV0sIChibG9ja3MgJiYgYmxvY2tzW25hbWVzW2ldXSkgfHwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgYmluZFBhcnRpYWxBcmdzKHN5bWJvbDogbnVtYmVyKSB7XG4gICAgbGV0IGFyZ3MgPSB0aGlzLmZyYW1lLmdldEFyZ3MoKTtcblxuICAgIGFzc2VydChhcmdzLCBcIkNhbm5vdCBiaW5kIG5hbWVkIGFyZ3NcIik7XG5cbiAgICB0aGlzLnNjb3BlKCkuYmluZFN5bWJvbChzeW1ib2wsIGFyZ3MubmFtZWQpO1xuICB9XG5cbiAgYmluZER5bmFtaWNTY29wZShuYW1lczogc3RyaW5nW10pIHtcbiAgICBsZXQgYXJncyA9IHRoaXMuZnJhbWUuZ2V0QXJncygpO1xuXG4gICAgYXNzZXJ0KGFyZ3MsIFwiQ2Fubm90IGJpbmQgZHluYW1pYyBzY29wZVwiKTtcblxuICAgIGxldCBzY29wZSA9IHRoaXMuZHluYW1pY1Njb3BlKCk7XG5cbiAgICBmb3IobGV0IGk9MDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzY29wZS5zZXQobmFtZXNbaV0sIGFyZ3MubmFtZWQuZ2V0KG5hbWVzW2ldKSk7XG4gICAgfVxuICB9XG59XG5cbmludGVyZmFjZSBFeGNlcHRpb25IYW5kbGVyIHtcbiAgaGFuZGxlRXhjZXB0aW9uKGluaXRpYWxpemU/OiAodm06IFZNKSA9PiB2b2lkKTtcbn1cblxuaW50ZXJmYWNlIFJldHVybkhhbmRsZXIge1xuICBzZXRSZW5kZXJSZXN1bHQocmVuZGVyUmVzdWx0OiBSZW5kZXJSZXN1bHQpO1xufVxuIl19 -enifed('glimmer-runtime/lib/vm/frame', ['exports'], function (exports) { - 'use strict'; - - var CapturedFrame = function CapturedFrame(operand, args, condition) { - this.operand = operand; - this.args = args; - this.condition = condition; + function buildSexpr(path, params, hash) { + return { + type: "SubExpression", + path: buildPath(path), + params: params || [], + hash: hash || buildHash([]) }; + } - exports.CapturedFrame = CapturedFrame; - - var Frame = (function () { - function Frame(ops) { - var component = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; - var manager = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; - var shadow = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3]; - - this.component = component; - this.manager = manager; - this.shadow = shadow; - this.operand = null; - this.immediate = null; - this.args = null; - this.callerScope = null; - this.blocks = null; - this.condition = null; - this.iterator = null; - this.key = null; - this.ops = ops; - this.op = ops.head(); - } - - Frame.prototype.capture = function capture() { - return new CapturedFrame(this.operand, this.args, this.condition); - }; - - Frame.prototype.restore = function restore(frame) { - this.operand = frame['operand']; - this.args = frame['args']; - this.condition = frame['condition']; - }; - - return Frame; - })(); - - var FrameStack = (function () { - function FrameStack() { - this.frames = []; - this.frame = undefined; - } - - FrameStack.prototype.push = function push(ops) { - var component = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; - var manager = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; - var shadow = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3]; - - var frame = this.frame === undefined ? this.frame = 0 : ++this.frame; - if (this.frames.length <= frame) { - this.frames.push(null); - } - this.frames[frame] = new Frame(ops, component, manager, shadow); - }; - - FrameStack.prototype.pop = function pop() { - var frames = this.frames; - var frame = this.frame; - - frames[frame] = null; - this.frame = frame === 0 ? undefined : frame - 1; - }; - - FrameStack.prototype.capture = function capture() { - return this.frames[this.frame].capture(); - }; - - FrameStack.prototype.restore = function restore(frame) { - this.frames[this.frame].restore(frame); - }; - - FrameStack.prototype.getOps = function getOps() { - return this.frames[this.frame].ops; - }; - - FrameStack.prototype.getCurrent = function getCurrent() { - return this.frames[this.frame].op; - }; - - FrameStack.prototype.setCurrent = function setCurrent(op) { - return this.frames[this.frame].op = op; - }; - - FrameStack.prototype.getOperand = function getOperand() { - return this.frames[this.frame].operand; - }; - - FrameStack.prototype.setOperand = function setOperand(operand) { - return this.frames[this.frame].operand = operand; - }; - - FrameStack.prototype.getImmediate = function getImmediate() { - return this.frames[this.frame].immediate; - }; - - FrameStack.prototype.setImmediate = function setImmediate(value) { - return this.frames[this.frame].immediate = value; - }; - - FrameStack.prototype.getArgs = function getArgs() { - return this.frames[this.frame].args; - }; - - FrameStack.prototype.setArgs = function setArgs(args) { - var frame = this.frames[this.frame]; - return frame.args = args; - }; - - FrameStack.prototype.getCondition = function getCondition() { - return this.frames[this.frame].condition; - }; - - FrameStack.prototype.setCondition = function setCondition(condition) { - return this.frames[this.frame].condition = condition; - }; - - FrameStack.prototype.getIterator = function getIterator() { - return this.frames[this.frame].iterator; - }; - - FrameStack.prototype.setIterator = function setIterator(iterator) { - return this.frames[this.frame].iterator = iterator; - }; - - FrameStack.prototype.getKey = function getKey() { - return this.frames[this.frame].key; - }; - - FrameStack.prototype.setKey = function setKey(key) { - return this.frames[this.frame].key = key; - }; - - FrameStack.prototype.getBlocks = function getBlocks() { - return this.frames[this.frame].blocks; - }; - - FrameStack.prototype.setBlocks = function setBlocks(blocks) { - return this.frames[this.frame].blocks = blocks; - }; - - FrameStack.prototype.getCallerScope = function getCallerScope() { - return this.frames[this.frame].callerScope; - }; - - FrameStack.prototype.setCallerScope = function setCallerScope(callerScope) { - return this.frames[this.frame].callerScope = callerScope; - }; - - FrameStack.prototype.getComponent = function getComponent() { - return this.frames[this.frame].component; - }; - - FrameStack.prototype.getManager = function getManager() { - return this.frames[this.frame].manager; - }; - - FrameStack.prototype.getShadow = function getShadow() { - return this.frames[this.frame].shadow; - }; - - FrameStack.prototype.goto = function goto(op) { - this.setCurrent(op); - }; - - FrameStack.prototype.hasOpcodes = function hasOpcodes() { - return this.frame !== undefined; - }; - - FrameStack.prototype.nextStatement = function nextStatement() { - var op = this.frames[this.frame].op; - var ops = this.getOps(); - if (op) { - this.setCurrent(ops.nextNode(op)); - return op; - } else { - this.pop(); - return null; - } - }; - - return FrameStack; - })(); - - exports.FrameStack = FrameStack; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvdm0vZnJhbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O1FBUUEsYUFBQSxHQUNFLFNBREYsYUFBQSxDQUVZLE9BQTJCLEVBQzNCLElBQW1CLEVBQ25CLFNBQTZCLEVBQUE7QUFGN0IsWUFBQSxDQUFBLE9BQU8sR0FBUCxPQUFPLENBQW9CO0FBQzNCLFlBQUEsQ0FBQSxJQUFJLEdBQUosSUFBSSxDQUFlO0FBQ25CLFlBQUEsQ0FBQSxTQUFTLEdBQVQsU0FBUyxDQUFvQjtLQUNuQzs7OztRQUdOLEtBQUE7QUFZRSxpQkFaRixLQUFBLENBYUksR0FBVSxFQUdvQjtnQkFGdkIsU0FBUyx5REFBYyxJQUFJO2dCQUMzQixPQUFPLHlEQUFnQyxJQUFJO2dCQUMzQyxNQUFNLHlEQUFhLElBQUk7O0FBRnZCLGdCQUFBLENBQUEsU0FBUyxHQUFULFNBQVMsQ0FBa0I7QUFDM0IsZ0JBQUEsQ0FBQSxPQUFPLEdBQVAsT0FBTyxDQUFvQztBQUMzQyxnQkFBQSxDQUFBLE1BQU0sR0FBTixNQUFNLENBQWlCO0FBYmhDLGdCQUFBLENBQUEsT0FBTyxHQUF1QixJQUFJLENBQUM7QUFDbkMsZ0JBQUEsQ0FBQSxTQUFTLEdBQVEsSUFBSSxDQUFDO0FBQ3RCLGdCQUFBLENBQUEsSUFBSSxHQUFrQixJQUFJLENBQUM7QUFDM0IsZ0JBQUEsQ0FBQSxXQUFXLEdBQVUsSUFBSSxDQUFDO0FBQzFCLGdCQUFBLENBQUEsTUFBTSxHQUFXLElBQUksQ0FBQztBQUN0QixnQkFBQSxDQUFBLFNBQVMsR0FBdUIsSUFBSSxDQUFDO0FBQ3JDLGdCQUFBLENBQUEsUUFBUSxHQUFzQixJQUFJLENBQUM7QUFDbkMsZ0JBQUEsQ0FBQSxHQUFHLEdBQVcsSUFBSSxDQUFDO0FBUWpCLGdCQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNmLGdCQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN0Qjs7QUFwQkgsYUFB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WyJpbXBvcnQgeyBTY29wZSB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IFJlZmVyZW5jZSwgUGF0aFJlZmVyZW5jZSwgUmVmZXJlbmNlSXRlcmF0b3IgfSBmcm9tICdnbGltbWVyLXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBJbmxpbmVCbG9jayB9IGZyb20gJy4uL2NvbXBpbGVkL2Jsb2Nrcyc7XG5pbXBvcnQgeyBFdmFsdWF0ZWRBcmdzIH0gZnJvbSAnLi4vY29tcGlsZWQvZXhwcmVzc2lvbnMvYXJncyc7XG5pbXBvcnQgeyBPcGNvZGUsIE9wU2VxIH0gZnJvbSAnLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBMYWJlbE9wY29kZSB9IGZyb20gJy4uL2NvbXBpbGVkL29wY29kZXMvdm0nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRNYW5hZ2VyIH0gZnJvbSAnLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY2xhc3MgQ2FwdHVyZWRGcmFtZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3BlcmFuZDogUGF0aFJlZmVyZW5jZTxhbnk+LFxuICAgIHByaXZhdGUgYXJnczogRXZhbHVhdGVkQXJncyxcbiAgICBwcml2YXRlIGNvbmRpdGlvbjogUmVmZXJlbmNlPGJvb2xlYW4+XG4gICkge31cbn1cblxuY2xhc3MgRnJhbWUge1xuICBvcHM6IE9wU2VxO1xuICBvcDogT3Bjb2RlO1xuICBvcGVyYW5kOiBQYXRoUmVmZXJlbmNlPGFueT4gPSBudWxsO1xuICBpbW1lZGlhdGU6IGFueSA9IG51bGw7XG4gIGFyZ3M6IEV2YWx1YXRlZEFyZ3MgPSBudWxsO1xuICBjYWxsZXJTY29wZTogU2NvcGUgPSBudWxsO1xuICBibG9ja3M6IEJsb2NrcyA9IG51bGw7XG4gIGNvbmRpdGlvbjogUmVmZXJlbmNlPGJvb2xlYW4+ID0gbnVsbDtcbiAgaXRlcmF0b3I6IFJlZmVyZW5jZUl0ZXJhdG9yID0gbnVsbDtcbiAga2V5OiBzdHJpbmcgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wczogT3BTZXEsXG4gICAgcHVibGljIGNvbXBvbmVudDogQ29tcG9uZW50ID0gbnVsbCxcbiAgICBwdWJsaWMgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxDb21wb25lbnQ+ID0gbnVsbCxcbiAgICBwdWJsaWMgc2hhZG93OiBzdHJpbmdbXSA9IG51bGxcbiAgKSB7XG4gICAgdGhpcy5vcHMgPSBvcHM7XG4gICAgdGhpcy5vcCA9IG9wcy5oZWFkKCk7XG4gIH1cblxuICBjYXB0dXJlKCk6IENhcHR1cmVkRnJhbWUge1xuICAgIHJldHVybiBuZXcgQ2FwdHVyZWRGcmFtZSh0aGlzLm9wZXJhbmQsIHRoaXMuYXJncywgdGhpcy5jb25kaXRpb24pO1xuICB9XG5cbiAgcmVzdG9yZShmcmFtZTogQ2FwdHVyZWRGcmFtZSkge1xuICAgIHRoaXMub3BlcmFuZCA9IGZyYW1lWydvcGVyYW5kJ107XG4gICAgdGhpcy5hcmdzID0gZnJhbWVbJ2FyZ3MnXTtcbiAgICB0aGlzLmNvbmRpdGlvbiA9IGZyYW1lWydjb25kaXRpb24nXTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJsb2NrcyB7XG4gIGRlZmF1bHQ6IElubGluZUJsb2NrO1xuICBpbnZlcnNlOiBJbmxpbmVCbG9jaztcbn1cblxuZXhwb3J0IGNsYXNzIEZyYW1lU3RhY2sge1xuICBwcml2YXRlIGZyYW1lczogRnJhbWVbXSA9IFtdO1xuICBwcml2YXRlIGZyYW1lOiBudW1iZXIgPSB1bmRlZmluZWQ7XG5cbiAgcHVzaChvcHM6IE9wU2VxLCBjb21wb25lbnQ6IENvbXBvbmVudCA9IG51bGwsIG1hbmFnZXI6IENvbXBvbmVudE1hbmFnZXI8Q29tcG9uZW50PiA9IG51bGwsIHNoYWRvdzogc3RyaW5nW10gPSBudWxsKSB7XG4gICAgbGV0IGZyYW1lID0gKHRoaXMuZnJhbWUgPT09IHVuZGVmaW5lZCkgPyAodGhpcy5mcmFtZSA9IDApIDogKyt0aGlzLmZyYW1lO1xuXG4gICAgaWYgKHRoaXMuZnJhbWVzLmxlbmd0aCA8PSBmcmFtZSkge1xuICAgICAgdGhpcy5mcmFtZXMucHVzaChudWxsKTtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lc1tmcmFtZV0gPSBuZXcgRnJhbWUob3BzLCBjb21wb25lbnQsIG1hbmFnZXIsIHNoYWRvdyk7XG4gIH1cblxuICBwb3AoKSB7XG4gICAgbGV0IHsgZnJhbWVzLCBmcmFtZSB9ID0gdGhpcztcbiAgICBmcmFtZXNbZnJhbWVdID0gbnVsbDtcbiAgICB0aGlzLmZyYW1lID0gZnJhbWUgPT09IDAgPyB1bmRlZmluZWQgOiBmcmFtZSAtIDE7XG4gIH1cblxuICBjYXB0dXJlKCk6IENhcHR1cmVkRnJhbWUge1xuICAgIHJldHVybiB0aGlzLmZyYW1lc1t0aGlzLmZyYW1lXS5jYXB0dXJlKCk7XG4gIH1cblxuICByZXN0b3JlKGZyYW1lOiBDYXB0dXJlZEZyYW1lKSB7XG4gICAgdGhpcy5mcmFtZXNbdGhpcy5mcmFtZV0ucmVzdG9yZShmcmFtZSk7XG4gIH1cblxuICBnZXRPcHMoKTogT3BTZXEge1xuICAgIHJldHVybiB0aGlzLmZyYW1lc1t0aGlzLmZyYW1lXS5vcHM7XG4gIH1cblxuICBnZXRDdXJyZW50KCk6IE9wY29kZSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVzW3RoaXMuZnJhbWVdLm9wO1xuICB9XG5cbiAgc2V0Q3VycmVudChvcDogT3Bjb2RlKTogT3Bjb2RlIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZXNbdGhpcy5mcmFtZV0ub3AgPSBvcDtcbiAgfVxuXG4gIGdldE9wZXJhbmQ8VD4oKTogUGF0aFJlZmVyZW5jZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVzW3RoaXMuZnJhbWVdLm9wZXJhbmQ7XG4gIH1cblxuICBzZXRPcGVyYW5kPFQ+KG9wZXJhbmQ6IFBhdGhSZWZlcmVuY2U8VD4pOiBQYXRoUmVmZXJlbmNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZXNbdGhpcy5mcmFtZV0ub3BlcmFuZCA9IG9wZXJhbmQ7XG4gIH1cblxuICBnZXRJbW1lZGlhdGU8VD4oKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVzW3RoaXMuZnJhbWVdLmltbWVkaWF0ZTtcbiAgfVxuXG4gIHNldEltbWVkaWF0ZTxUPih2YWx1ZTogVCk6IFQge1xuICAgIHJldHVybiB0aGlzLmZyYW1lc1t0aGlzLmZyYW1lXS5pbW1lZGlhdGUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldEFyZ3MoKTogRXZhbHVhdGVkQXJncyB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVzW3RoaXMuZnJhbWVdLmFyZ3M7XG4gIH1cblxuICBzZXRBcmdzKGFyZ3M6IEV2YWx1YXRlZEFyZ3MpOiBFdmFsdWF0ZWRBcmdzIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmZyYW1lc1t0aGlzLmZyYW1lXTtcbiAgICByZXR1cm4gZnJhbWUuYXJncyA9IGFyZ3M7XG4gIH1cblxuICBnZXRDb25kaXRpb24oKTogUmVmZXJlbmNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZXNbdGhpcy5mcmFtZV0uY29uZGl0aW9uO1xuICB9XG5cbiAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbjogUmVmZXJlbmNlPGJvb2xlYW4+KTogUmVmZXJlbmNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZXNbdGhpcy5mcmFtZV0uY29uZGl0aW9uID0gY29uZGl0aW9uO1xuICB9XG5cbiAgZ2V0SXRlcmF0b3IoKTogUmVmZXJlbmNlSXRlcmF0b3Ige1xuICAgIHJldHVybiB0aGlzLmZyYW1lc1t0aGlzLmZyYW1lXS5pdGVyYXRvcjtcbiAgfVxuXG4gIHNldEl0ZXJhdG9yKGl0ZXJhdG9yOiBSZWZlcmVuY2VJdGVyYXRvcik6IFJlZmVyZW5jZUl0ZXJhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZXNbdGhpcy5mcmFtZV0uaXRlcmF0b3IgPSBpdGVyYXRvcjtcbiAgfVxuXG4gIGdldEtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZyYW1lc1t0aGlzLmZyYW1lXS5rZXk7XG4gIH1cblxuICBzZXRLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZyYW1lc1t0aGlzLmZyYW1lXS5rZXkgPSBrZXk7XG4gIH1cblxuICBnZXRCbG9ja3MoKTogQmxvY2tzIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZXNbdGhpcy5mcmFtZV0uYmxvY2tzO1xuICB9XG5cbiAgc2V0QmxvY2tzKGJsb2NrczogQmxvY2tzKTogQmxvY2tzIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZXNbdGhpcy5mcmFtZV0uYmxvY2tzID0gYmxvY2tzO1xuICB9XG5cbiAgZ2V0Q2FsbGVyU2NvcGUoKTogU2NvcGUge1xuICAgIHJldHVybiB0aGlzLmZyYW1lc1t0aGlzLmZyYW1lXS5jYWxsZXJTY29wZTtcbiAgfVxuXG4gIHNldENhbGxlclNjb3BlKGNhbGxlclNjb3BlOiBTY29wZSk6IFNjb3BlIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZXNbdGhpcy5mcmFtZV0uY2FsbGVyU2NvcGUgPSBjYWxsZXJTY29wZTtcbiAgfVxuXG4gIGdldENvbXBvbmVudCgpOiBDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLmZyYW1lc1t0aGlzLmZyYW1lXS5jb21wb25lbnQ7XG4gIH1cblxuICBnZXRNYW5hZ2VyKCk6IENvbXBvbmVudE1hbmFnZXI8Q29tcG9uZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVzW3RoaXMuZnJhbWVdLm1hbmFnZXI7XG4gIH1cblxuICBnZXRTaGFkb3coKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmZyYW1lc1t0aGlzLmZyYW1lXS5zaGFkb3c7XG4gIH1cblxuICBnb3RvKG9wOiBMYWJlbE9wY29kZSkge1xuICAgIHRoaXMuc2V0Q3VycmVudChvcCk7XG4gIH1cblxuICBoYXNPcGNvZGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZyYW1lICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBuZXh0U3RhdGVtZW50KCk6IE9wY29kZSB7XG4gICAgbGV0IG9wID0gdGhpcy5mcmFtZXNbdGhpcy5mcmFtZV0ub3A7XG4gICAgbGV0IG9wcyA9IHRoaXMuZ2V0T3BzKCk7XG5cbiAgICBpZiAob3ApIHtcbiAgICAgIHRoaXMuc2V0Q3VycmVudChvcHMubmV4dE5vZGUob3ApKTtcbiAgICAgIHJldHVybiBvcDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb3AoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIl19 -enifed('glimmer-runtime/lib/vm/render-result', ['exports', 'glimmer-runtime/lib/bounds', 'glimmer-runtime/lib/vm/update'], function (exports, _glimmerRuntimeLibBounds, _glimmerRuntimeLibVmUpdate) { - 'use strict'; - - var RenderResult = (function () { - function RenderResult(env, updating, bounds) { - this.env = env; - this.updating = updating; - this.bounds = bounds; - } - - RenderResult.prototype.rerender = function rerender() { - var _ref = arguments.length <= 0 || arguments[0] === undefined ? { alwaysRevalidate: false } : arguments[0]; - - var _ref$alwaysRevalidate = _ref.alwaysRevalidate; - var alwaysRevalidate = _ref$alwaysRevalidate === undefined ? false : _ref$alwaysRevalidate; - var env = this.env; - var updating = this.updating; - - var vm = new _glimmerRuntimeLibVmUpdate.default(env, { alwaysRevalidate: alwaysRevalidate }); - vm.execute(updating, this); - }; - - RenderResult.prototype.parentElement = function parentElement() { - return this.bounds.parentElement(); - }; - - RenderResult.prototype.firstNode = function firstNode() { - return this.bounds.firstNode(); - }; - - RenderResult.prototype.lastNode = function lastNode() { - return this.bounds.lastNode(); - }; - - RenderResult.prototype.opcodes = function opcodes() { - return this.updating; - }; - - RenderResult.prototype.handleException = function handleException() { - throw "this should never happen"; - }; - - RenderResult.prototype.destroy = function destroy() { - this.bounds.destroy(); - _glimmerRuntimeLibBounds.clear(this.bounds); - }; - - return RenderResult; - })(); - - exports.default = RenderResult; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvdm0vcmVuZGVyLXJlc3VsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7UUFPQSxZQUFBO0FBQ0UsaUJBREYsWUFBQSxDQUVZLEdBQWdCLEVBQ2hCLFFBQW9DLEVBQ3BDLE1BQXlCLEVBQUE7QUFGekIsZ0JBQUEsQ0FBQSxHQUFHLEdBQUgsR0FBRyxDQUFhO0FBQ2hCLGdCQUFBLENBQUEsUUFBUSxHQUFSLFFBQVEsQ0FBNEI7QUFDcEMsZ0JBQUEsQ0FBQSxNQUFNLEdBQU4sTUFBTSxDQUFtQjtTQUMvQjs7QUFMTixvQkFBQSxXQU9FLFFBQVEsR0FBQSxvQkFBMkQ7NkVBQTNCLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFOzs2Q0FBeEQsZ0JBQWdCO2dCQUFoQixnQkFBZ0IseUNBQUcsS0FBSztnQkFDM0IsR0FBRyxHQUFlLElBQUksQ0FBdEIsR0FBRztnQkFBRSxRQUFRLEdBQUssSUFBSSxDQUFqQixRQUFROztBQUNuQixnQkFBSSxFQUFFLEdBQUcsdUNBQWUsR0FBRyxFQUFFLEVBQUUsZ0JBQWdCLEVBQWhCLGdCQUFnQixFQUFFLENBQUMsQ0FBQztBQUNuRCxjQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM1Qjs7QUFYSCxvQkFBQSxXQWFFLGFBQWEsR0FBQSx5QkFBQTtBQUNYLG1CQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDcEM7O0FBZkgsb0JBQUEsV0FpQkUsU0FBUyxHQUFBLHFCQUFBO0FBQ1AsbUJBQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNoQzs7QUFuQkgsb0JBQUEsV0FxQkUsUUFBUSxHQUFBLG9CQUFBO0FBQ04sbUJBQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUMvQjs7QUF2Qkgsb0JBQUEsV0F5QkUsT0FBTyxHQUFBLG1CQUFBO0FBQ0wsbUJBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN0Qjs7QUEzQkgsb0JBQUEsV0E2QkUsZUFBZSxHQUFBLDJCQUFBO0FBQ2Isa0JBQU0sMEJBQTBCLENBQUM7U0FDbEM7O0FBL0JILG9CQUFBLFdBaUNFLE9BQU8sR0FBQSxtQkFBQTtBQUNMLGdCQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3RCLHFDQXhDd0IsS0FBSyxDQXdDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3BCOztlQXBDSCxZQUFBOzs7c0JBQUEsWUFBQSIsImZpbGUiOiJyZW5kZXItcmVzdWx0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGlua2VkTGlzdCB9IGZyb20gJ2dsaW1tZXItdXRpbCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRGVzdHJveWFibGVCb3VuZHMsIGNsZWFyIH0gZnJvbSAnLi4vYm91bmRzJztcbmltcG9ydCBVcGRhdGluZ1ZNLCB7IEV4Y2VwdGlvbkhhbmRsZXIgfSBmcm9tICcuL3VwZGF0ZSc7XG5pbXBvcnQgeyBVcGRhdGluZ09wY29kZSB9IGZyb20gJy4uL29wY29kZXMnO1xuaW1wb3J0ICogYXMgU2ltcGxlIGZyb20gJy4uL2RvbS9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVuZGVyUmVzdWx0IGltcGxlbWVudHMgRGVzdHJveWFibGVCb3VuZHMsIEV4Y2VwdGlvbkhhbmRsZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVudjogRW52aXJvbm1lbnQsXG4gICAgcHJpdmF0ZSB1cGRhdGluZzogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4sXG4gICAgcHJpdmF0ZSBib3VuZHM6IERlc3Ryb3lhYmxlQm91bmRzXG4gICkge31cblxuICByZXJlbmRlcih7IGFsd2F5c1JldmFsaWRhdGUgPSBmYWxzZSB9ID0geyBhbHdheXNSZXZhbGlkYXRlOiBmYWxzZSB9KSB7XG4gICAgbGV0IHsgZW52LCB1cGRhdGluZyB9ID0gdGhpcztcbiAgICBsZXQgdm0gPSBuZXcgVXBkYXRpbmdWTShlbnYsIHsgYWx3YXlzUmV2YWxpZGF0ZSB9KTtcbiAgICB2bS5leGVjdXRlKHVwZGF0aW5nLCB0aGlzKTtcbiAgfVxuXG4gIHBhcmVudEVsZW1lbnQoKTogU2ltcGxlLkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5wYXJlbnRFbGVtZW50KCk7XG4gIH1cblxuICBmaXJzdE5vZGUoKTogU2ltcGxlLk5vZGUge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5maXJzdE5vZGUoKTtcbiAgfVxuXG4gIGxhc3ROb2RlKCk6IFNpbXBsZS5Ob2RlIHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMubGFzdE5vZGUoKTtcbiAgfVxuXG4gIG9wY29kZXMoKTogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0aW5nO1xuICB9XG5cbiAgaGFuZGxlRXhjZXB0aW9uKCkge1xuICAgIHRocm93IFwidGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuXCI7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuYm91bmRzLmRlc3Ryb3koKTtcbiAgICBjbGVhcih0aGlzLmJvdW5kcyk7XG4gIH1cbn1cbiJdfQ== -enifed('glimmer-runtime/lib/vm/update', ['exports', 'glimmer-runtime/lib/bounds', 'glimmer-runtime/lib/builder', 'glimmer-util', 'glimmer-reference', 'glimmer-runtime/lib/compiled/expressions/args', 'glimmer-runtime/lib/opcodes', 'glimmer-runtime/lib/vm/append'], function (exports, _glimmerRuntimeLibBounds, _glimmerRuntimeLibBuilder, _glimmerUtil, _glimmerReference, _glimmerRuntimeLibCompiledExpressionsArgs, _glimmerRuntimeLibOpcodes, _glimmerRuntimeLibVmAppend) { - 'use strict'; - - var UpdatingVM = (function () { - function UpdatingVM(env, _ref) { - var _ref$alwaysRevalidate = _ref.alwaysRevalidate; - var alwaysRevalidate = _ref$alwaysRevalidate === undefined ? false : _ref$alwaysRevalidate; - - this.frameStack = new _glimmerUtil.Stack(); - this.env = env; - this.dom = env.getDOM(); - this.alwaysRevalidate = alwaysRevalidate; - } - - UpdatingVM.prototype.execute = function execute(opcodes, handler) { - var frameStack = this.frameStack; - - this.try(opcodes, handler); - while (true) { - if (frameStack.isEmpty()) break; - var opcode = this.frameStack.current.nextStatement(); - if (opcode === null) { - this.frameStack.pop(); - continue; - } - _glimmerUtil.LOGGER.debug('[VM] OP ' + opcode.type); - _glimmerUtil.LOGGER.trace(opcode); - opcode.evaluate(this); - } - }; - - UpdatingVM.prototype.goto = function goto(op) { - this.frameStack.current.goto(op); - }; - - UpdatingVM.prototype.try = function _try(ops, handler) { - this.frameStack.push(new UpdatingVMFrame(this, ops, handler)); - }; - - UpdatingVM.prototype.throw = function _throw() { - this.frameStack.current.handleException(); - this.frameStack.pop(); - }; - - UpdatingVM.prototype.evaluateOpcode = function evaluateOpcode(opcode) { - opcode.evaluate(this); - }; - - return UpdatingVM; - })(); - - exports.default = UpdatingVM; - - var BlockOpcode = (function (_UpdatingOpcode) { - babelHelpers.inherits(BlockOpcode, _UpdatingOpcode); - - function BlockOpcode(ops, state, bounds, children) { - _UpdatingOpcode.call(this); - this.type = "block"; - this.next = null; - this.prev = null; - var env = state.env; - var scope = state.scope; - var dynamicScope = state.dynamicScope; - var frame = state.frame; - - this.ops = ops; - this.children = children; - this.env = env; - this.scope = scope; - this.dynamicScope = dynamicScope; - this.frame = frame; - this.bounds = bounds; - } - - BlockOpcode.prototype.parentElement = function parentElement() { - return this.bounds.parentElement(); - }; - - BlockOpcode.prototype.firstNode = function firstNode() { - return this.bounds.firstNode(); - }; - - BlockOpcode.prototype.lastNode = function lastNode() { - return this.bounds.lastNode(); - }; - - BlockOpcode.prototype.evaluate = function evaluate(vm) { - vm.try(this.children, null); - }; - - BlockOpcode.prototype.destroy = function destroy() { - this.bounds.destroy(); - }; - - BlockOpcode.prototype.didDestroy = function didDestroy() { - this.env.didDestroy(this.bounds); - }; - - BlockOpcode.prototype.toJSON = function toJSON() { - var begin = this.ops.head(); - var end = this.ops.tail(); - var details = _glimmerUtil.dict(); - details["guid"] = '' + this._guid; - details["begin"] = begin.inspect(); - details["end"] = end.inspect(); - return { - guid: this._guid, - type: this.type, - details: details, - children: this.children.toArray().map(function (op) { - return op.toJSON(); - }) - }; - }; - - return BlockOpcode; - })(_glimmerRuntimeLibOpcodes.UpdatingOpcode); - - exports.BlockOpcode = BlockOpcode; - - var TryOpcode = (function (_BlockOpcode) { - babelHelpers.inherits(TryOpcode, _BlockOpcode); - - function TryOpcode(ops, state, bounds, children) { - _BlockOpcode.call(this, ops, state, bounds, children); - this.type = "try"; - this.tag = this._tag = new _glimmerReference.UpdatableTag(_glimmerReference.CONSTANT_TAG); - } - - TryOpcode.prototype.didInitializeChildren = function didInitializeChildren() { - this._tag.update(_glimmerReference.combineSlice(this.children)); - }; - - TryOpcode.prototype.evaluate = function evaluate(vm) { - vm.try(this.children, this); - }; - - TryOpcode.prototype.handleException = function handleException() { - var env = this.env; - var scope = this.scope; - var ops = this.ops; - var dynamicScope = this.dynamicScope; - var frame = this.frame; - - var elementStack = _glimmerRuntimeLibBuilder.ElementStack.resume(this.env, this.bounds, this.bounds.reset(env)); - var vm = new _glimmerRuntimeLibVmAppend.default(env, scope, dynamicScope, elementStack); - var result = vm.resume(ops, frame); - this.children = result.opcodes(); - this.didInitializeChildren(); - }; - - TryOpcode.prototype.toJSON = function toJSON() { - var json = _BlockOpcode.prototype.toJSON.call(this); - var begin = this.ops.head(); - var end = this.ops.tail(); - json["details"]["begin"] = JSON.stringify(begin.inspect()); - json["details"]["end"] = JSON.stringify(end.inspect()); - return _BlockOpcode.prototype.toJSON.call(this); - }; - - return TryOpcode; - })(BlockOpcode); - - exports.TryOpcode = TryOpcode; - - var ListRevalidationDelegate = (function () { - function ListRevalidationDelegate(opcode, marker) { - this.opcode = opcode; - this.marker = marker; - this.didInsert = false; - this.didDelete = false; - this.map = opcode.map; - this.updating = opcode['children']; - } - - ListRevalidationDelegate.prototype.insert = function insert(key, item, memo, before) { - var map = this.map; - var opcode = this.opcode; - var updating = this.updating; - - var nextSibling = null; - var reference = null; - if (before) { - reference = map[before]; - nextSibling = reference.bounds.firstNode(); - } else { - nextSibling = this.marker; - } - var vm = opcode.vmForInsertion(nextSibling); - var tryOpcode = undefined; - vm.execute(opcode.ops, function (vm) { - vm.frame.setArgs(_glimmerRuntimeLibCompiledExpressionsArgs.EvaluatedArgs.positional([item, memo])); - vm.frame.setOperand(item); - vm.frame.setCondition(new _glimmerReference.ConstReference(true)); - vm.frame.setKey(key); - var state = vm.capture(); - var tracker = vm.stack().pushUpdatableBlock(); - tryOpcode = new TryOpcode(opcode.ops, state, tracker, vm.updatingOpcodeStack.current); - }); - tryOpcode.didInitializeChildren(); - updating.insertBefore(tryOpcode, reference); - map[key] = tryOpcode; - this.didInsert = true; - }; - - ListRevalidationDelegate.prototype.retain = function retain(key, item, memo) {}; - - ListRevalidationDelegate.prototype.move = function move(key, item, memo, before) { - var map = this.map; - var updating = this.updating; - - var entry = map[key]; - var reference = map[before] || null; - if (before) { - _glimmerRuntimeLibBounds.move(entry, reference.firstNode()); - } else { - _glimmerRuntimeLibBounds.move(entry, this.marker); - } - updating.remove(entry); - updating.insertBefore(entry, reference); - }; - - ListRevalidationDelegate.prototype.delete = function _delete(key) { - var map = this.map; - - var opcode = map[key]; - opcode.didDestroy(); - _glimmerRuntimeLibBounds.clear(opcode); - this.updating.remove(opcode); - delete map[key]; - this.didDelete = true; - }; - - ListRevalidationDelegate.prototype.done = function done() { - this.opcode.didInitializeChildren(this.didInsert || this.didDelete); - }; - - return ListRevalidationDelegate; - })(); - - var ListBlockOpcode = (function (_BlockOpcode2) { - babelHelpers.inherits(ListBlockOpcode, _BlockOpcode2); - - function ListBlockOpcode(ops, state, bounds, children, artifacts) { - _BlockOpcode2.call(this, ops, state, bounds, children); - this.type = "list-block"; - this.map = _glimmerUtil.dict(); - this.lastIterated = _glimmerReference.INITIAL; - this.artifacts = artifacts; - var _tag = this._tag = new _glimmerReference.UpdatableTag(_glimmerReference.CONSTANT_TAG); - this.tag = _glimmerReference.combine([artifacts.tag, _tag]); - } - - ListBlockOpcode.prototype.didInitializeChildren = function didInitializeChildren() { - var listDidChange = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0]; - - this.lastIterated = this.artifacts.tag.value(); - if (listDidChange) { - this._tag.update(_glimmerReference.combineSlice(this.children)); - } - }; - - ListBlockOpcode.prototype.evaluate = function evaluate(vm) { - var artifacts = this.artifacts; - var lastIterated = this.lastIterated; - - if (!artifacts.tag.validate(lastIterated)) { - var bounds = this.bounds; - var dom = vm.dom; - - var marker = dom.createComment(''); - dom.insertAfter(bounds.parentElement(), marker, bounds.lastNode()); - var target = new ListRevalidationDelegate(this, marker); - var synchronizer = new _glimmerReference.IteratorSynchronizer({ target: target, artifacts: artifacts }); - synchronizer.sync(); - this.parentElement().removeChild(marker); - } - // Run now-updated updating opcodes - _BlockOpcode2.prototype.evaluate.call(this, vm); - }; - - ListBlockOpcode.prototype.vmForInsertion = function vmForInsertion(nextSibling) { - var env = this.env; - var scope = this.scope; - var dynamicScope = this.dynamicScope; - - var elementStack = _glimmerRuntimeLibBuilder.ElementStack.forInitialRender(this.env, this.bounds.parentElement(), nextSibling); - return new _glimmerRuntimeLibVmAppend.default(env, scope, dynamicScope, elementStack); - }; - - ListBlockOpcode.prototype.toJSON = function toJSON() { - var json = _BlockOpcode2.prototype.toJSON.call(this); - var map = this.map; - var inner = Object.keys(map).map(function (key) { - return JSON.stringify(key) + ': ' + map[key]._guid; - }).join(", "); - json["details"]["map"] = '{' + inner + '}'; - return json; - }; - - return ListBlockOpcode; - })(BlockOpcode); - - exports.ListBlockOpcode = ListBlockOpcode; - - var UpdatingVMFrame = (function () { - function UpdatingVMFrame(vm, ops, handler) { - this.vm = vm; - this.ops = ops; - this.current = ops.head(); - this.exceptionHandler = handler; - } - - UpdatingVMFrame.prototype.goto = function goto(op) { - this.current = op; - }; - - UpdatingVMFrame.prototype.nextStatement = function nextStatement() { - var current = this.current; - var ops = this.ops; - - if (current) this.current = ops.nextNode(current); - return current; - }; - - UpdatingVMFrame.prototype.handleException = function handleException() { - this.exceptionHandler.handleException(); - }; - - return UpdatingVMFrame; - })(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItcnVudGltZS9saWIvdm0vdXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztRQTRCQSxVQUFBO0FBTUUsaUJBTkYsVUFBQSxDQU1jLEdBQWdCLEVBQUUsSUFBNEIsRUFBQTt3Q0FBNUIsSUFBNEIsQ0FBMUIsZ0JBQWdCO2dCQUFoQixnQkFBZ0IseUNBQUcsS0FBSzs7QUFGaEQsZ0JBQUEsQ0FBQSxVQUFVLEdBQTJCLGlCQTdCdEIsS0FBSyxFQTZCNkMsQ0FBQztBQUd4RSxnQkFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDZixnQkFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDeEIsZ0JBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztTQUMxQzs7QUFWSCxrQkFBQSxXQVlFLE9BQU8sR0FBQSxpQkFBQyxPQUFzQixFQUFFLE9BQXlCLEVBQUE7Z0JBQ2pELFVBQVUsR0FBSyxJQUFJLENBQW5CLFVBQVU7O0FBRWhCLGdCQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUUzQixtQkFBTyxJQUFJLEVBQUU7QUFDWCxvQkFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTTtBQUVoQyxvQkFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7QUFFckQsb0JBQUksTUFBTSxLQUFLLElBQUksRUFBRTtBQUNuQix3QkFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN0Qiw2QkFBUztpQkFDVjtBQUVELDZCQXBERyxNQUFNLENBb0RGLEtBQUssY0FBWSxNQUFNLENBQUMsSUFBSSxDQUFHLENBQUM7QUFDdkMsNkJBckRHLE1BQU0sQ0FxREYsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRXJCLHNCQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3ZCO1NB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V0FpQkUsYUFBYSxHQUFBLHlCQUFBO2dCQUNMLE9BQU8sR0FBVSxJQUFJLENBQXJCLE9BQU87Z0JBQUUsR0FBRyxHQUFLLElBQUksQ0FBWixHQUFHOztBQUNsQixnQkFBSSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xELG1CQUFPLE9BQU8sQ0FBQztTQUNoQjs7QUFyQkgsdUJBQUEsV0F1QkUsZUFBZSxHQUFBLDJCQUFBO0FBQ2IsZ0JBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN6Qzs7ZUF6QkgsZUFBQSIsImZpbGUiOiJ1cGRhdGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY29wZSwgRHluYW1pY1Njb3BlLCBFbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IERlc3Ryb3lhYmxlQm91bmRzLCBjbGVhciwgbW92ZSBhcyBtb3ZlQm91bmRzIH0gZnJvbSAnLi4vYm91bmRzJztcbmltcG9ydCB7IEVsZW1lbnRTdGFjaywgVHJhY2tlciwgVXBkYXRhYmxlVHJhY2tlciB9IGZyb20gJy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgTE9HR0VSLCBPcGFxdWUsIFN0YWNrLCBMaW5rZWRMaXN0LCBEaWN0LCBkaWN0IH0gZnJvbSAnZ2xpbW1lci11dGlsJztcbmltcG9ydCB7XG4gIENvbnN0UmVmZXJlbmNlLFxuICBQYXRoUmVmZXJlbmNlLFxuICBJdGVyYXRpb25BcnRpZmFjdHMsXG4gIEl0ZXJhdG9yU3luY2hyb25pemVyLFxuICBJdGVyYXRvclN5bmNocm9uaXplckRlbGVnYXRlLFxuXG4gIC8vIFRhZ3NcbiAgY29tYmluZSxcbiAgUmV2aXNpb24sXG4gIFVwZGF0YWJsZVRhZyxcbiAgY29tYmluZVNsaWNlLFxuICBDT05TVEFOVF9UQUcsXG4gIElOSVRJQUxcbn0gZnJvbSAnZ2xpbW1lci1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgRXZhbHVhdGVkQXJncyB9IGZyb20gJy4uL2NvbXBpbGVkL2V4cHJlc3Npb25zL2FyZ3MnO1xuaW1wb3J0IHsgT3Bjb2RlSlNPTiwgT3BTZXEsIFVwZGF0aW5nT3Bjb2RlLCBVcGRhdGluZ09wU2VxIH0gZnJvbSAnLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBMYWJlbE9wY29kZSB9IGZyb20gJy4uL2NvbXBpbGVkL29wY29kZXMvdm0nO1xuaW1wb3J0IHsgRE9NQ2hhbmdlcyB9IGZyb20gJy4uL2RvbS9oZWxwZXInO1xuaW1wb3J0ICogYXMgU2ltcGxlIGZyb20gJy4uL2RvbS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENhcHR1cmVkRnJhbWUgfSBmcm9tICcuL2ZyYW1lJztcblxuaW1wb3J0IFZNIGZyb20gJy4vYXBwZW5kJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXBkYXRpbmdWTSB7XG4gIHB1YmxpYyBlbnY6IEVudmlyb25tZW50O1xuICBwdWJsaWMgZG9tOiBET01DaGFuZ2VzO1xuICBwdWJsaWMgYWx3YXlzUmV2YWxpZGF0ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBmcmFtZVN0YWNrOiBTdGFjazxVcGRhdGluZ1ZNRnJhbWU+ID0gbmV3IFN0YWNrPFVwZGF0aW5nVk1GcmFtZT4oKTtcblxuICBjb25zdHJ1Y3RvcihlbnY6IEVudmlyb25tZW50LCB7IGFsd2F5c1JldmFsaWRhdGUgPSBmYWxzZSB9KSB7XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgdGhpcy5kb20gPSBlbnYuZ2V0RE9NKCk7XG4gICAgdGhpcy5hbHdheXNSZXZhbGlkYXRlID0gYWx3YXlzUmV2YWxpZGF0ZTtcbiAgfVxuXG4gIGV4ZWN1dGUob3Bjb2RlczogVXBkYXRpbmdPcFNlcSwgaGFuZGxlcjogRXhjZXB0aW9uSGFuZGxlcikge1xuICAgIGxldCB7IGZyYW1lU3RhY2sgfSA9IHRoaXM7XG5cbiAgICB0aGlzLnRyeShvcGNvZGVzLCBoYW5kbGVyKTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoZnJhbWVTdGFjay5pc0VtcHR5KCkpIGJyZWFrO1xuXG4gICAgICBsZXQgb3Bjb2RlID0gdGhpcy5mcmFtZVN0YWNrLmN1cnJlbnQubmV4dFN0YXRlbWVudCgpO1xuXG4gICAgICBpZiAob3Bjb2RlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZnJhbWVTdGFjay5wb3AoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIExPR0dFUi5kZWJ1ZyhgW1ZNXSBPUCAke29wY29kZS50eXBlfWApO1xuICAgICAgTE9HR0VSLnRyYWNlKG9wY29kZSk7XG5cbiAgICAgIG9wY29kZS5ldmFsdWF0ZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBnb3RvKG9wOiBVcGRhdGluZ09wY29kZSkge1xuICAgIHRoaXMuZnJhbWVTdGFjay5jdXJyZW50LmdvdG8ob3ApO1xuICB9XG5cbiAgdHJ5KG9wczogVXBkYXRpbmdPcFNlcSwgaGFuZGxlcjogRXhjZXB0aW9uSGFuZGxlcikge1xuICAgIHRoaXMuZnJhbWVTdGFjay5wdXNoKG5ldyBVcGRhdGluZ1ZNRnJhbWUodGhpcywgb3BzLCBoYW5kbGVyKSk7XG4gIH1cblxuICB0aHJvdygpIHtcbiAgICB0aGlzLmZyYW1lU3RhY2suY3VycmVudC5oYW5kbGVFeGNlcHRpb24oKTtcbiAgICB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gIH1cblxuICBldmFsdWF0ZU9wY29kZShvcGNvZGU6IFVwZGF0aW5nT3Bjb2RlKSB7XG4gICAgb3Bjb2RlLmV2YWx1YXRlKHRoaXMpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhjZXB0aW9uSGFuZGxlciB7XG4gIGhhbmRsZUV4Y2VwdGlvbigpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZNU3RhdGUge1xuICBlbnY6IEVudmlyb25tZW50O1xuICBzY29wZTogU2NvcGU7XG4gIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlO1xuICBmcmFtZTogQ2FwdHVyZWRGcmFtZTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJsb2NrT3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUgaW1wbGVtZW50cyBEZXN0cm95YWJsZUJvdW5kcyB7XG4gIHB1YmxpYyB0eXBlID0gXCJibG9ja1wiO1xuICBwdWJsaWMgbmV4dCA9IG51bGw7XG4gIHB1YmxpYyBwcmV2ID0gbnVsbDtcblxuICBwcm90ZWN0ZWQgZW52OiBFbnZpcm9ubWVudDtcbiAgcHJvdGVjdGVkIHNjb3BlOiBTY29wZTtcbiAgcHJvdGVjdGVkIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlO1xuICBwcm90ZWN0ZWQgZnJhbWU6IENhcHR1cmVkRnJhbWU7XG4gIHByb3RlY3RlZCBjaGlsZHJlbjogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT47XG4gIHByb3RlY3RlZCBib3VuZHM6IERlc3Ryb3lhYmxlQm91bmRzO1xuICBwdWJsaWMgb3BzOiBPcFNlcTtcblxuICBjb25zdHJ1Y3RvcihvcHM6IE9wU2VxLCBzdGF0ZTogVk1TdGF0ZSwgYm91bmRzOiBEZXN0cm95YWJsZUJvdW5kcywgY2hpbGRyZW46IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KSB7XG4gICAgc3VwZXIoKTtcbiAgICBsZXQgeyBlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIGZyYW1lIH0gPSBzdGF0ZTtcbiAgICB0aGlzLm9wcyA9IG9wcztcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuICAgIHRoaXMuZHluYW1pY1Njb3BlID0gZHluYW1pY1Njb3BlO1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgfVxuXG4gIGFic3RyYWN0IGRpZEluaXRpYWxpemVDaGlsZHJlbigpO1xuXG4gIHBhcmVudEVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRzLnBhcmVudEVsZW1lbnQoKTtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMuZmlyc3ROb2RlKCk7XG4gIH1cblxuICBsYXN0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMubGFzdE5vZGUoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgdm0udHJ5KHRoaXMuY2hpbGRyZW4sIG51bGwpO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmJvdW5kcy5kZXN0cm95KCk7XG4gIH1cblxuICBkaWREZXN0cm95KCkge1xuICAgIHRoaXMuZW52LmRpZERlc3Ryb3kodGhpcy5ib3VuZHMpO1xuICB9XG5cbiAgdG9KU09OKCkgOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgYmVnaW4gPSB0aGlzLm9wcy5oZWFkKCkgYXMgTGFiZWxPcGNvZGU7XG4gICAgbGV0IGVuZCA9IHRoaXMub3BzLnRhaWwoKSBhcyBMYWJlbE9wY29kZTtcbiAgICBsZXQgZGV0YWlscyA9IGRpY3Q8c3RyaW5nPigpO1xuXG4gICAgZGV0YWlsc1tcImd1aWRcIl0gPSBgJHt0aGlzLl9ndWlkfWA7XG4gICAgZGV0YWlsc1tcImJlZ2luXCJdID0gYmVnaW4uaW5zcGVjdCgpO1xuICAgIGRldGFpbHNbXCJlbmRcIl0gPSBlbmQuaW5zcGVjdCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBkZXRhaWxzLFxuICAgICAgY2hpbGRyZW46IHRoaXMuY2hpbGRyZW4udG9BcnJheSgpLm1hcChvcCA9PiBvcC50b0pTT04oKSlcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcnlPcGNvZGUgZXh0ZW5kcyBCbG9ja09wY29kZSBpbXBsZW1lbnRzIEV4Y2VwdGlvbkhhbmRsZXIge1xuICBwdWJsaWMgdHlwZSA9IFwidHJ5XCI7XG5cbiAgcHJpdmF0ZSBfdGFnOiBVcGRhdGFibGVUYWc7XG5cbiAgcHJvdGVjdGVkIGJvdW5kczogVXBkYXRhYmxlVHJhY2tlcjtcblxuICBjb25zdHJ1Y3RvcihvcHM6IE9wU2VxLCBzdGF0ZTogVk1TdGF0ZSwgYm91bmRzOiBVcGRhdGFibGVUcmFja2VyLCBjaGlsZHJlbjogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4pIHtcbiAgICBzdXBlcihvcHMsIHN0YXRlLCBib3VuZHMsIGNoaWxkcmVuKTtcbiAgICB0aGlzLnRhZyA9IHRoaXMuX3RhZyA9IG5ldyBVcGRhdGFibGVUYWcoQ09OU1RBTlRfVEFHKTtcbiAgfVxuXG4gIGRpZEluaXRpYWxpemVDaGlsZHJlbigpIHtcbiAgICB0aGlzLl90YWcudXBkYXRlKGNvbWJpbmVTbGljZSh0aGlzLmNoaWxkcmVuKSk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIHZtLnRyeSh0aGlzLmNoaWxkcmVuLCB0aGlzKTtcbiAgfVxuXG4gIGhhbmRsZUV4Y2VwdGlvbigpIHtcbiAgICBsZXQgeyBlbnYsIHNjb3BlLCBvcHMsIGR5bmFtaWNTY29wZSwgZnJhbWUgfSA9IHRoaXM7XG5cbiAgICBsZXQgZWxlbWVudFN0YWNrID0gRWxlbWVudFN0YWNrLnJlc3VtZShcbiAgICAgIHRoaXMuZW52LFxuICAgICAgdGhpcy5ib3VuZHMsXG4gICAgICB0aGlzLmJvdW5kcy5yZXNldChlbnYpXG4gICAgKTtcblxuICAgIGxldCB2bSA9IG5ldyBWTShlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIGVsZW1lbnRTdGFjayk7XG4gICAgbGV0IHJlc3VsdCA9IHZtLnJlc3VtZShvcHMsIGZyYW1lKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSByZXN1bHQub3Bjb2RlcygpO1xuICAgIHRoaXMuZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKCk7XG4gIH1cblxuICB0b0pTT04oKSA6IE9wY29kZUpTT04ge1xuICAgIGxldCBqc29uID0gc3VwZXIudG9KU09OKCk7XG4gICAgbGV0IGJlZ2luID0gdGhpcy5vcHMuaGVhZCgpIGFzIExhYmVsT3Bjb2RlO1xuICAgIGxldCBlbmQgPSB0aGlzLm9wcy50YWlsKCkgYXMgTGFiZWxPcGNvZGU7XG5cbiAgICBqc29uW1wiZGV0YWlsc1wiXVtcImJlZ2luXCJdID0gSlNPTi5zdHJpbmdpZnkoYmVnaW4uaW5zcGVjdCgpKTtcbiAgICBqc29uW1wiZGV0YWlsc1wiXVtcImVuZFwiXSA9IEpTT04uc3RyaW5naWZ5KGVuZC5pbnNwZWN0KCkpO1xuXG4gICAgcmV0dXJuIHN1cGVyLnRvSlNPTigpO1xuICB9XG59XG5cbmNsYXNzIExpc3RSZXZhbGlkYXRpb25EZWxlZ2F0ZSBpbXBsZW1lbnRzIEl0ZXJhdG9yU3luY2hyb25pemVyRGVsZWdhdGUge1xuICBwcml2YXRlIG1hcDogRGljdDxCbG9ja09wY29kZT47XG4gIHByaXZhdGUgdXBkYXRpbmc6IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+O1xuXG4gIHByaXZhdGUgZGlkSW5zZXJ0ID0gZmFsc2U7XG4gIHByaXZhdGUgZGlkRGVsZXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvcGNvZGU6IExpc3RCbG9ja09wY29kZSwgcHJpdmF0ZSBtYXJrZXI6IFNpbXBsZS5Db21tZW50KSB7XG4gICAgdGhpcy5tYXAgPSBvcGNvZGUubWFwO1xuICAgIHRoaXMudXBkYXRpbmcgPSBvcGNvZGVbJ2NoaWxkcmVuJ107XG4gIH1cblxuICBpbnNlcnQoa2V5OiBzdHJpbmcsIGl0ZW06IFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgbWVtbzogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBiZWZvcmU6IHN0cmluZykge1xuICAgIGxldCB7IG1hcCwgb3Bjb2RlLCB1cGRhdGluZyB9ID0gdGhpcztcbiAgICBsZXQgbmV4dFNpYmxpbmc6IFNpbXBsZS5Ob2RlID0gbnVsbDtcbiAgICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgIHJlZmVyZW5jZSA9IG1hcFtiZWZvcmVdO1xuICAgICAgbmV4dFNpYmxpbmcgPSByZWZlcmVuY2UuYm91bmRzLmZpcnN0Tm9kZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0U2libGluZyA9IHRoaXMubWFya2VyO1xuICAgIH1cblxuICAgIGxldCB2bSA9IG9wY29kZS52bUZvckluc2VydGlvbihuZXh0U2libGluZyk7XG4gICAgbGV0IHRyeU9wY29kZTogVHJ5T3Bjb2RlO1xuXG4gICAgdm0uZXhlY3V0ZShvcGNvZGUub3BzLCB2bSA9PiB7XG4gICAgICB2bS5mcmFtZS5zZXRBcmdzKEV2YWx1YXRlZEFyZ3MucG9zaXRpb25hbChbaXRlbSwgbWVtb10pKTtcbiAgICAgIHZtLmZyYW1lLnNldE9wZXJhbmQoaXRlbSk7XG4gICAgICB2bS5mcmFtZS5zZXRDb25kaXRpb24obmV3IENvbnN0UmVmZXJlbmNlKHRydWUpKTtcbiAgICAgIHZtLmZyYW1lLnNldEtleShrZXkpO1xuXG4gICAgICBsZXQgc3RhdGUgPSB2bS5jYXB0dXJlKCk7XG4gICAgICBsZXQgdHJhY2tlciA9IHZtLnN0YWNrKCkucHVzaFVwZGF0YWJsZUJsb2NrKCk7XG5cbiAgICAgIHRyeU9wY29kZSA9IG5ldyBUcnlPcGNvZGUob3Bjb2RlLm9wcywgc3RhdGUsIHRyYWNrZXIsIHZtLnVwZGF0aW5nT3Bjb2RlU3RhY2suY3VycmVudCk7XG4gICAgfSk7XG5cbiAgICB0cnlPcGNvZGUuZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKCk7XG5cbiAgICB1cGRhdGluZy5pbnNlcnRCZWZvcmUodHJ5T3Bjb2RlLCByZWZlcmVuY2UpO1xuXG4gICAgbWFwW2tleV0gPSB0cnlPcGNvZGU7XG5cbiAgICB0aGlzLmRpZEluc2VydCA9IHRydWU7XG4gIH1cblxuICByZXRhaW4oa2V5OiBzdHJpbmcsIGl0ZW06IFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgbWVtbzogUGF0aFJlZmVyZW5jZTxPcGFxdWU+KSB7XG4gIH1cblxuICBtb3ZlKGtleTogc3RyaW5nLCBpdGVtOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIG1lbW86IFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgYmVmb3JlOiBzdHJpbmcpIHtcbiAgICBsZXQgeyBtYXAsIHVwZGF0aW5nIH0gPSB0aGlzO1xuXG4gICAgbGV0IGVudHJ5ID0gbWFwW2tleV07XG4gICAgbGV0IHJlZmVyZW5jZSA9IG1hcFtiZWZvcmVdIHx8IG51bGw7XG5cbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICBtb3ZlQm91bmRzKGVudHJ5LCByZWZlcmVuY2UuZmlyc3ROb2RlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtb3ZlQm91bmRzKGVudHJ5LCB0aGlzLm1hcmtlcik7XG4gICAgfVxuXG4gICAgdXBkYXRpbmcucmVtb3ZlKGVudHJ5KTtcbiAgICB1cGRhdGluZy5pbnNlcnRCZWZvcmUoZW50cnksIHJlZmVyZW5jZSk7XG4gIH1cblxuICBkZWxldGUoa2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgeyBtYXAgfSA9IHRoaXM7XG4gICAgbGV0IG9wY29kZSA9IG1hcFtrZXldO1xuICAgIG9wY29kZS5kaWREZXN0cm95KCk7XG4gICAgY2xlYXIob3Bjb2RlKTtcbiAgICB0aGlzLnVwZGF0aW5nLnJlbW92ZShvcGNvZGUpO1xuICAgIGRlbGV0ZSBtYXBba2V5XTtcblxuICAgIHRoaXMuZGlkRGVsZXRlID0gdHJ1ZTtcbiAgfVxuXG4gIGRvbmUoKSB7XG4gICAgdGhpcy5vcGNvZGUuZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKHRoaXMuZGlkSW5zZXJ0IHx8IHRoaXMuZGlkRGVsZXRlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEJsb2NrT3Bjb2RlIGV4dGVuZHMgQmxvY2tPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwibGlzdC1ibG9ja1wiO1xuICBwdWJsaWMgbWFwID0gZGljdDxCbG9ja09wY29kZT4oKTtcbiAgcHVibGljIGFydGlmYWN0czogSXRlcmF0aW9uQXJ0aWZhY3RzO1xuXG4gIHByaXZhdGUgbGFzdEl0ZXJhdGVkOiBSZXZpc2lvbiA9IElOSVRJQUw7XG4gIHByaXZhdGUgX3RhZzogVXBkYXRhYmxlVGFnO1xuXG4gIGNvbnN0cnVjdG9yKG9wczogT3BTZXEsIHN0YXRlOiBWTVN0YXRlLCBib3VuZHM6IFRyYWNrZXIsIGNoaWxkcmVuOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPiwgYXJ0aWZhY3RzOiBJdGVyYXRpb25BcnRpZmFjdHMpIHtcbiAgICBzdXBlcihvcHMsIHN0YXRlLCBib3VuZHMsIGNoaWxkcmVuKTtcbiAgICB0aGlzLmFydGlmYWN0cyA9IGFydGlmYWN0cztcbiAgICBsZXQgX3RhZyA9IHRoaXMuX3RhZyA9IG5ldyBVcGRhdGFibGVUYWcoQ09OU1RBTlRfVEFHKTtcbiAgICB0aGlzLnRhZyA9IGNvbWJpbmUoW2FydGlmYWN0cy50YWcsIF90YWddKTtcbiAgfVxuXG4gIGRpZEluaXRpYWxpemVDaGlsZHJlbihsaXN0RGlkQ2hhbmdlID0gdHJ1ZSkge1xuICAgIHRoaXMubGFzdEl0ZXJhdGVkID0gdGhpcy5hcnRpZmFjdHMudGFnLnZhbHVlKCk7XG5cbiAgICBpZiAobGlzdERpZENoYW5nZSkge1xuICAgICAgdGhpcy5fdGFnLnVwZGF0ZShjb21iaW5lU2xpY2UodGhpcy5jaGlsZHJlbikpO1xuICAgIH1cbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHsgYXJ0aWZhY3RzLCBsYXN0SXRlcmF0ZWQgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWFydGlmYWN0cy50YWcudmFsaWRhdGUobGFzdEl0ZXJhdGVkKSkge1xuICAgICAgbGV0IHsgYm91bmRzIH0gPSB0aGlzO1xuICAgICAgbGV0IHsgZG9tIH0gPSB2bTtcblxuICAgICAgbGV0IG1hcmtlciA9IGRvbS5jcmVhdGVDb21tZW50KCcnKTtcbiAgICAgIGRvbS5pbnNlcnRBZnRlcihib3VuZHMucGFyZW50RWxlbWVudCgpLCBtYXJrZXIsIGJvdW5kcy5sYXN0Tm9kZSgpKTtcblxuICAgICAgbGV0IHRhcmdldCA9IG5ldyBMaXN0UmV2YWxpZGF0aW9uRGVsZWdhdGUodGhpcywgbWFya2VyKTtcbiAgICAgIGxldCBzeW5jaHJvbml6ZXIgPSBuZXcgSXRlcmF0b3JTeW5jaHJvbml6ZXIoeyB0YXJnZXQsIGFydGlmYWN0cyB9KTtcblxuICAgICAgc3luY2hyb25pemVyLnN5bmMoKTtcblxuICAgICAgdGhpcy5wYXJlbnRFbGVtZW50KCkucmVtb3ZlQ2hpbGQobWFya2VyKTtcbiAgICB9XG5cbiAgICAvLyBSdW4gbm93LXVwZGF0ZWQgdXBkYXRpbmcgb3Bjb2Rlc1xuICAgIHN1cGVyLmV2YWx1YXRlKHZtKTtcbiAgfVxuXG4gIHZtRm9ySW5zZXJ0aW9uKG5leHRTaWJsaW5nOiBTaW1wbGUuTm9kZSkge1xuICAgIGxldCB7IGVudiwgc2NvcGUsIGR5bmFtaWNTY29wZSB9ID0gdGhpcztcblxuICAgIGxldCBlbGVtZW50U3RhY2sgPSBFbGVtZW50U3RhY2suZm9ySW5pdGlhbFJlbmRlcihcbiAgICAgIHRoaXMuZW52LFxuICAgICAgdGhpcy5ib3VuZHMucGFyZW50RWxlbWVudCgpLFxuICAgICAgbmV4dFNpYmxpbmdcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBWTShlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIGVsZW1lbnRTdGFjayk7XG4gIH1cblxuICB0b0pTT04oKSA6IE9wY29kZUpTT04ge1xuICAgIGxldCBqc29uID0gc3VwZXIudG9KU09OKCk7XG4gICAgbGV0IG1hcCA9IHRoaXMubWFwO1xuXG4gICAgbGV0IGlubmVyID0gT2JqZWN0LmtleXMobWFwKS5tYXAoa2V5ID0+IHtcbiAgICAgIHJldHVybiBgJHtKU09OLnN0cmluZ2lmeShrZXkpfTogJHttYXBba2V5XS5fZ3VpZH1gO1xuICAgIH0pLmpvaW4oXCIsIFwiKTtcblxuICAgIGpzb25bXCJkZXRhaWxzXCJdW1wibWFwXCJdID0gYHske2lubmVyfX1gO1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cbn1cblxuY2xhc3MgVXBkYXRpbmdWTUZyYW1lIHtcbiAgcHJpdmF0ZSB2bTogVXBkYXRpbmdWTTtcbiAgcHJpdmF0ZSBvcHM6IFVwZGF0aW5nT3BTZXE7XG4gIHByaXZhdGUgY3VycmVudDogVXBkYXRpbmdPcGNvZGU7XG4gIHByaXZhdGUgZXhjZXB0aW9uSGFuZGxlcjogRXhjZXB0aW9uSGFuZGxlcjtcblxuICBjb25zdHJ1Y3Rvcih2bTogVXBkYXRpbmdWTSwgb3BzOiBVcGRhdGluZ09wU2VxLCBoYW5kbGVyOiBFeGNlcHRpb25IYW5kbGVyKSB7XG4gICAgdGhpcy52bSA9IHZtO1xuICAgIHRoaXMub3BzID0gb3BzO1xuICAgIHRoaXMuY3VycmVudCA9IG9wcy5oZWFkKCk7XG4gICAgdGhpcy5leGNlcHRpb25IYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdvdG8ob3A6IFVwZGF0aW5nT3Bjb2RlKSB7XG4gICAgdGhpcy5jdXJyZW50ID0gb3A7XG4gIH1cblxuICBuZXh0U3RhdGVtZW50KCk6IFVwZGF0aW5nT3Bjb2RlIHtcbiAgICBsZXQgeyBjdXJyZW50LCBvcHMgfSA9IHRoaXM7XG4gICAgaWYgKGN1cnJlbnQpIHRoaXMuY3VycmVudCA9IG9wcy5uZXh0Tm9kZShjdXJyZW50KTtcbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuXG4gIGhhbmRsZUV4Y2VwdGlvbigpIHtcbiAgICB0aGlzLmV4Y2VwdGlvbkhhbmRsZXIuaGFuZGxlRXhjZXB0aW9uKCk7XG4gIH1cbn1cbiJdfQ== -enifed('glimmer-syntax/index', ['exports', 'glimmer-syntax/lib/parser', 'glimmer-syntax/lib/builders', 'glimmer-syntax/lib/traversal/traverse', 'glimmer-syntax/lib/traversal/walker', 'glimmer-syntax/lib/generation/print'], function (exports, _glimmerSyntaxLibParser, _glimmerSyntaxLibBuilders, _glimmerSyntaxLibTraversalTraverse, _glimmerSyntaxLibTraversalWalker, _glimmerSyntaxLibGenerationPrint) { - // used by ember-compiler - 'use strict'; - - exports.preprocess = _glimmerSyntaxLibParser.preprocess; - - // needed for tests only - exports.builders = _glimmerSyntaxLibBuilders.default; - exports.traverse = _glimmerSyntaxLibTraversalTraverse.default; - exports.Walker = _glimmerSyntaxLibTraversalWalker.default; - exports.print = _glimmerSyntaxLibGenerationPrint.default; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItc3ludGF4L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7VUFDUyxVQUFVLDJCQUFWLFVBQVU7OztVQUdDLFFBQVEsNkJBQW5CLE9BQU87VUFDSSxRQUFRLHNDQUFuQixPQUFPO1VBQ0ksTUFBTSxvQ0FBakIsT0FBTztVQUNJLEtBQUssb0NBQWhCLE9BQU8iLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB1c2VkIGJ5IGVtYmVyLWNvbXBpbGVyXG5leHBvcnQgeyBwcmVwcm9jZXNzIH0gZnJvbSAnLi9saWIvcGFyc2VyJztcblxuLy8gbmVlZGVkIGZvciB0ZXN0cyBvbmx5XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJ1aWxkZXJzIH0gZnJvbSAnLi9saWIvYnVpbGRlcnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0cmF2ZXJzZSB9IGZyb20gJy4vbGliL3RyYXZlcnNhbC90cmF2ZXJzZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFdhbGtlciB9IGZyb20gJy4vbGliL3RyYXZlcnNhbC93YWxrZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcmludCB9IGZyb20gJy4vbGliL2dlbmVyYXRpb24vcHJpbnQnO1xuIl19 -enifed("glimmer-syntax/lib/builders", ["exports"], function (exports) { - // Statements - "use strict"; - - function buildMustache(path, params, hash, raw, loc) { - return { - type: "MustacheStatement", - path: buildPath(path), - params: params || [], - hash: hash || buildHash([]), - escaped: !raw, - loc: buildLoc(loc) - }; + function buildPath(original) { + if (typeof original === 'string') { + return { + type: "PathExpression", + original: original, + parts: original.split('.') + }; + } else { + return original; } - function buildBlock(path, params, hash, program, inverse, loc) { - return { - type: "BlockStatement", - path: buildPath(path), - params: params ? params.map(buildPath) : [], - hash: hash || buildHash([]), - program: program || null, - inverse: inverse || null, - loc: buildLoc(loc) - }; - } - function buildElementModifier(path, params, hash, loc) { - return { - type: "ElementModifierStatement", - path: buildPath(path), - params: params || [], - hash: hash || buildHash([]), - loc: buildLoc(loc) - }; - } - function buildPartial(name, params, hash, indent) { - return { - type: "PartialStatement", - name: name, - params: params || [], - hash: hash || buildHash([]), - indent: indent - }; - } - function buildComment(value) { - return { - type: "CommentStatement", - value: value - }; - } - function buildConcat(parts) { - return { - type: "ConcatStatement", - parts: parts || [] - }; - } - // Nodes - function buildElement(tag, attributes, modifiers, children, loc) { - return { - type: "ElementNode", - tag: tag || "", - attributes: attributes || [], - blockParams: [], - modifiers: modifiers || [], - children: children || [], - loc: buildLoc(loc) - }; - } - function buildAttr(name, value, loc) { - return { - type: "AttrNode", - name: name, - value: value, - loc: buildLoc(loc) - }; - } - function buildText(chars, loc) { - return { - type: "TextNode", - chars: chars || "", - loc: buildLoc(loc) - }; - } - // Expressions - function buildSexpr(path, params, hash, loc) { - return { - type: "SubExpression", - path: buildPath(path), - params: params || [], - hash: hash || buildHash([]), - loc: buildLoc(loc) - }; - } - function buildPath(original, loc) { - if (typeof original !== 'string') return original; - var parts = original.split('.'); - if (parts[0] === 'this') { - parts[0] = null; - } - return { - type: "PathExpression", - original: original, - parts: parts, - data: false, - loc: buildLoc(loc) - }; - } - function buildString(value) { - return { - type: "StringLiteral", - value: value, - original: value - }; - } - function buildBoolean(value) { - return { - type: "BooleanLiteral", - value: value, - original: value - }; - } - function buildNumber(value) { - return { - type: "NumberLiteral", - value: value, - original: value - }; - } - function buildNull() { - return { - type: "NullLiteral", - value: null, - original: null - }; - } - function buildUndefined() { - return { - type: "UndefinedLiteral", - value: undefined, - original: undefined - }; - } - // Miscellaneous - function buildHash(pairs) { - return { - type: "Hash", - pairs: pairs || [] - }; - } - function buildPair(key, value) { - return { - type: "HashPair", - key: key, - value: value - }; - } - function buildProgram(body, blockParams, loc) { - return { - type: "Program", - body: body || [], - blockParams: blockParams || [], - loc: buildLoc(loc) - }; - } - function buildSource(source) { - return source || null; - } - function buildPosition(line, column) { - return { - line: typeof line === 'number' ? line : null, - column: typeof column === 'number' ? column : null - }; - } - function buildLoc() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } + } - if (args.length === 1) { - var loc = args[0]; - if (typeof loc === 'object') { - return { - source: buildSource(loc.source), - start: buildPosition(loc.start.line, loc.start.column), - end: buildPosition(loc.end.line, loc.end.column) - }; - } else { - return null; - } - } else { - var startLine = args[0]; - var startColumn = args[1]; - var endLine = args[2]; - var endColumn = args[3]; - var source = args[4]; + function buildString(value) { + return { + type: "StringLiteral", + value: value, + original: value + }; + } - return { - source: buildSource(source), - start: buildPosition(startLine, startColumn), - end: buildPosition(endLine, endColumn) - }; - } - } - exports.default = { - mustache: buildMustache, - block: buildBlock, - partial: buildPartial, - comment: buildComment, - element: buildElement, - elementModifier: buildElementModifier, - attr: buildAttr, - text: buildText, - sexpr: buildSexpr, - path: buildPath, - string: buildString, - boolean: buildBoolean, - number: buildNumber, - undefined: buildUndefined, - null: buildNull, - concat: buildConcat, - hash: buildHash, - pair: buildPair, - program: buildProgram, - loc: buildLoc, - pos: buildPosition + function buildBoolean(value) { + return { + type: "BooleanLiteral", + value: value, + original: value }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItc3ludGF4L2xpYi9idWlsZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsYUFBQSxhQUFBLENBQXVCLElBQUksRUFBRSxNQUFPLEVBQUUsSUFBSyxFQUFFLEdBQUksRUFBRSxHQUFJLEVBQUE7QUFDckQsZUFBTztBQUNMLGdCQUFJLEVBQUUsbUJBQW1CO0FBQ3pCLGdCQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztBQUNyQixrQkFBTSxFQUFFLE1BQU0sSUFBSSxFQUFFO0FBQ3BCLGdCQUFJLEVBQUUsSUFBSSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUM7QUFDM0IsbUJBQU8sRUFBRSxDQUFDLEdBQUc7QUFDYixlQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQztTQUNuQixDQUFDO0tBQ0g7QUFFRCxhQUFBLFVBQUEsQ0FBb0IsSUFBSSxFQUFFLE1BQU8sRUFBRSxJQUFLLEVBQUUsT0FBUSxFQUFFLE9BQVEsRUFBRSxHQUFJLEVBQUE7QUFDaEUsZUFBTztBQUNMLGdCQUFJLEVBQUUsZ0JBQWdCO0FBQ3RCLGdCQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztBQUNyQixrQkFBTSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7QUFDM0MsZ0JBQUksRUFBRSxJQUFJLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQztBQUMzQixtQkFBTyxFQUFFLE9BQU8sSUFBSSxJQUFJO0FBQ3hCLG1CQUFPLEVBQUUsT0FBTyxJQUFJLElBQUk7QUFDeEIsZUFBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUM7U0FDbkIsQ0FBQztLQUNIO0FBRUQsYUFBQSxvQkFBQSxDQUE4QixJQUFJLEVBQUUsTUFBTyxFQUFFLElBQUssRUFBRSxHQUFJLEVBQUE7QUFDdEQsZUFBTztBQUNMLGdCQUFJLEVBQUUsMEJBQTBCO0FBQ2hDLGdCQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztB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QUNiO1NBQ0YsTUFBTTtnQkFDQyxTQUFTLEdBQThDLElBQUk7Z0JBQWhELFdBQVcsR0FBaUMsSUFBSTtnQkFBbkMsT0FBTyxHQUF3QixJQUFJO2dCQUExQixTQUFTLEdBQWEsSUFBSTtnQkFBZixNQUFNLEdBQUssSUFBSTs7QUFDakUsbUJBQU87QUFDTCxzQkFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUM7QUFDM0IscUJBQUssRUFBRSxhQUFhLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQztBQUM1QyxtQkFBRyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDO2FBQ3ZDLENBQUM7U0FDSDtLQUNGO3NCQUVjO0FBQ2IsZ0JBQVEsRUFBRSxhQUFhO0FBQ3ZCLGFBQUssRUFBRSxVQUFVO0FBQ2pCLGVBQU8sRUFBRSxZQUFZO0FBQ3JCLGVBQU8sRUFBRSxZQUFZO0FBQ3JCLGVBQU8sRUFBRSxZQUFZO0FBQ3JCLHVCQUFlLEVBQUUsb0JBQW9CO0FBQ3JDLFlBQUksRUFBRSxTQUFTO0FBQ2YsWUFBSSxFQUFFLFNBQVM7QUFDZixhQUFLLEVBQUUsVUFBVTtBQUNqQixZQUFJLEVBQUUsU0FBUztBQUNmLGNBQU0sRUFBRSxXQUFXO0FBQ25CLGVBQU8sRUFBRSxZQUFZO0FBQ3JCLGNBQU0sRUFBRSxXQUFXO0FBQ25CLGlCQUFTLEVBQUUsY0FBYztBQUN6QixZQUFJLEVBQUUsU0FBUztBQUNmLGNBQU0sRUFBRSxXQUFXO0FBQ25CLFlBQUksRUFBRSxTQUFTO0FBQ2YsWUFBSSxFQUFFLFNBQVM7QUFDZixlQUFPLEVBQUUsWUFBWTtBQUNyQixXQUFHLEVBQUUsUUFBUTtBQUNiLFdBQUcsRUFBRSxhQUFhO0tBQ25CIiwiZmlsZSI6ImJ1aWxkZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU3RhdGVtZW50c1xuXG5mdW5jdGlvbiBidWlsZE11c3RhY2hlKHBhdGgsIHBhcmFtcz8sIGhhc2g/LCByYXc/LCBsb2M/KSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJNdXN0YWNoZVN0YXRlbWVudFwiLFxuICAgIHBhdGg6IGJ1aWxkUGF0aChwYXRoKSxcbiAgICBwYXJhbXM6IHBhcmFtcyB8fCBbXSxcbiAgICBoYXNoOiBoYXNoIHx8IGJ1aWxkSGFzaChbXSksXG4gICAgZXNjYXBlZDogIXJhdyxcbiAgICBsb2M6IGJ1aWxkTG9jKGxvYylcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRCbG9jayhwYXRoLCBwYXJhbXM/LCBoYXNoPywgcHJvZ3JhbT8sIGludmVyc2U/LCBsb2M/KSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJCbG9ja1N0YXRlbWVudFwiLFxuICAgIHBhdGg6IGJ1aWxkUGF0aChwYXRoKSxcbiAgICBwYXJhbXM6IHBhcmFtcyA/IHBhcmFtcy5tYXAoYnVpbGRQYXRoKSA6IFtdLFxuICAgIGhhc2g6IGhhc2ggfHwgYnVpbGRIYXNoKFtdKSxcbiAgICBwcm9ncmFtOiBwcm9ncmFtIHx8IG51bGwsXG4gICAgaW52ZXJzZTogaW52ZXJzZSB8fCBudWxsLFxuICAgIGxvYzogYnVpbGRMb2MobG9jKVxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZEVsZW1lbnRNb2RpZmllcihwYXRoLCBwYXJhbXM/LCBoYXNoPywgbG9jPykge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiRWxlbWVudE1vZGlmaWVyU3RhdGVtZW50XCIsXG4gICAgcGF0aDogYnVpbGRQYXRoKHBhdGgpLFxuICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgIGhhc2g6IGhhc2ggfHwgYnVpbGRIYXNoKFtdKSxcbiAgICBsb2M6IGJ1aWxkTG9jKGxvYylcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRQYXJ0aWFsKG5hbWUsIHBhcmFtcywgaGFzaCwgaW5kZW50KSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJQYXJ0aWFsU3RhdGVtZW50XCIsXG4gICAgbmFtZTogbmFtZSxcbiAgICBwYXJhbXM6IHBhcmFtcyB8fCBbXSxcbiAgICBoYXNoOiBoYXNoIHx8IGJ1aWxkSGFzaChbXSksXG4gICAgaW5kZW50OiBpbmRlbnRcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRDb21tZW50KHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJDb21tZW50U3RhdGVtZW50XCIsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ29uY2F0KHBhcnRzKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJDb25jYXRTdGF0ZW1lbnRcIixcbiAgICBwYXJ0czogcGFydHMgfHwgW11cbiAgfTtcbn1cblxuLy8gTm9kZXNcblxuZnVuY3Rpb24gYnVpbGRFbGVtZW50KHRhZywgYXR0cmlidXRlcz8sIG1vZGlmaWVycz8sIGNoaWxkcmVuPywgbG9jPykge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiRWxlbWVudE5vZGVcIixcbiAgICB0YWc6IHRhZyB8fCBcIlwiLFxuICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMgfHwgW10sXG4gICAgYmxvY2tQYXJhbXM6IFtdLFxuICAgIG1vZGlmaWVyczogbW9kaWZpZXJzIHx8IFtdLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbiB8fCBbXSxcbiAgICBsb2M6IGJ1aWxkTG9jKGxvYylcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBdHRyKG5hbWUsIHZhbHVlLCBsb2M/KSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJBdHRyTm9kZVwiLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGxvYzogYnVpbGRMb2MobG9jKVxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZFRleHQoY2hhcnM/LCBsb2M/KSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJUZXh0Tm9kZVwiLFxuICAgIGNoYXJzOiBjaGFycyB8fCBcIlwiLFxuICAgIGxvYzogYnVpbGRMb2MobG9jKVxuICB9O1xufVxuXG4vLyBFeHByZXNzaW9uc1xuXG5mdW5jdGlvbiBidWlsZFNleHByKHBhdGgsIHBhcmFtcz8sIGhhc2g/LCBsb2M/KSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJTdWJFeHByZXNzaW9uXCIsXG4gICAgcGF0aDogYnVpbGRQYXRoKHBhdGgpLFxuICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgIGhhc2g6IGhhc2ggfHwgYnVpbGRIYXNoKFtdKSxcbiAgICBsb2M6IGJ1aWxkTG9jKGxvYylcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRQYXRoKG9yaWdpbmFsLCBsb2M/KSB7XG4gIGlmICh0eXBlb2Ygb3JpZ2luYWwgIT09ICdzdHJpbmcnKSByZXR1cm4gb3JpZ2luYWw7XG5cbiAgbGV0IHBhcnRzID0gb3JpZ2luYWwuc3BsaXQoJy4nKTtcblxuICBpZiAocGFydHNbMF0gPT09ICd0aGlzJykge1xuICAgIHBhcnRzWzBdID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJQYXRoRXhwcmVzc2lvblwiLFxuICAgIG9yaWdpbmFsLFxuICAgIHBhcnRzLFxuICAgIGRhdGE6IGZhbHNlLFxuICAgIGxvYzogYnVpbGRMb2MobG9jKVxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZFN0cmluZyh2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiU3RyaW5nTGl0ZXJhbFwiLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBvcmlnaW5hbDogdmFsdWVcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRCb29sZWFuKHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJCb29sZWFuTGl0ZXJhbFwiLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBvcmlnaW5hbDogdmFsdWVcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGROdW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcIk51bWJlckxpdGVyYWxcIixcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgb3JpZ2luYWw6IHZhbHVlXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTnVsbCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcIk51bGxMaXRlcmFsXCIsXG4gICAgdmFsdWU6IG51bGwsXG4gICAgb3JpZ2luYWw6IG51bGxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRVbmRlZmluZWQoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJVbmRlZmluZWRMaXRlcmFsXCIsXG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICBvcmlnaW5hbDogdW5kZWZpbmVkXG4gIH07XG59XG5cbi8vIE1pc2NlbGxhbmVvdXNcblxuZnVuY3Rpb24gYnVpbGRIYXNoKHBhaXJzPykge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiSGFzaFwiLFxuICAgIHBhaXJzOiBwYWlycyB8fCBbXVxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZFBhaXIoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiSGFzaFBhaXJcIixcbiAgICBrZXk6IGtleSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRQcm9ncmFtKGJvZHk/LCBibG9ja1BhcmFtcz8sIGxvYz8pIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcIlByb2dyYW1cIixcbiAgICBib2R5OiBib2R5IHx8IFtdLFxuICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyB8fCBbXSxcbiAgICBsb2M6IGJ1aWxkTG9jKGxvYylcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRTb3VyY2Uoc291cmNlPykge1xuICByZXR1cm4gc291cmNlIHx8IG51bGw7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUG9zaXRpb24obGluZSwgY29sdW1uKSB7XG4gIHJldHVybiB7XG4gICAgbGluZTogKHR5cGVvZiBsaW5lID09PSAnbnVtYmVyJykgPyBsaW5lIDogbnVsbCxcbiAgICBjb2x1bW46ICh0eXBlb2YgY29sdW1uID09PSAnbnVtYmVyJykgPyBjb2x1bW4gOiBudWxsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTG9jKGxvYzogeyBzb3VyY2U6IGFueSwgc3RhcnQ6IGFueSwgZW5kOiBhbnkgfSk6IHsgc291cmNlOiBhbnksIHN0YXJ0OiBhbnksIGVuZDogYW55IH07XG5mdW5jdGlvbiBidWlsZExvYyhzdGFydExpbmUsIHN0YXJ0Q29sdW1uLCBlbmRMaW5lPywgZW5kQ29sdW1uPywgc291cmNlPyk6IHsgc291cmNlOiBhbnksIHN0YXJ0OiBhbnksIGVuZDogYW55IH07XG5cbmZ1bmN0aW9uIGJ1aWxkTG9jKC4uLmFyZ3MpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgbGV0IGxvYyA9IGFyZ3NbMF07XG5cbiAgICBpZiAodHlwZW9mIGxvYyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogYnVpbGRTb3VyY2UobG9jLnNvdXJjZSksXG4gICAgICAgIHN0YXJ0OiBidWlsZFBvc2l0aW9uKGxvYy5zdGFydC5saW5lLCBsb2Muc3RhcnQuY29sdW1uKSxcbiAgICAgICAgZW5kOiBidWlsZFBvc2l0aW9uKGxvYy5lbmQubGluZSwgbG9jLmVuZC5jb2x1bW4pXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IFsgc3RhcnRMaW5lLCBzdGFydENvbHVtbiwgZW5kTGluZSwgZW5kQ29sdW1uLCBzb3VyY2UgXSA9IGFyZ3M7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNvdXJjZTogYnVpbGRTb3VyY2Uoc291cmNlKSxcbiAgICAgIHN0YXJ0OiBidWlsZFBvc2l0aW9uKHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4pLFxuICAgICAgZW5kOiBidWlsZFBvc2l0aW9uKGVuZExpbmUsIGVuZENvbHVtbilcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbXVzdGFjaGU6IGJ1aWxkTXVzdGFjaGUsXG4gIGJsb2NrOiBidWlsZEJsb2NrLFxuICBwYXJ0aWFsOiBidWlsZFBhcnRpYWwsXG4gIGNvbW1lbnQ6IGJ1aWxkQ29tbWVudCxcbiAgZWxlbWVudDogYnVpbGRFbGVtZW50LFxuICBlbGVtZW50TW9kaWZpZXI6IGJ1aWxkRWxlbWVudE1vZGlmaWVyLFxuICBhdHRyOiBidWlsZEF0dHIsXG4gIHRleHQ6IGJ1aWxkVGV4dCxcbiAgc2V4cHI6IGJ1aWxkU2V4cHIsXG4gIHBhdGg6IGJ1aWxkUGF0aCxcbiAgc3RyaW5nOiBidWlsZFN0cmluZyxcbiAgYm9vbGVhbjogYnVpbGRCb29sZWFuLFxuICBudW1iZXI6IGJ1aWxkTnVtYmVyLFxuICB1bmRlZmluZWQ6IGJ1aWxkVW5kZWZpbmVkLFxuICBudWxsOiBidWlsZE51bGwsXG4gIGNvbmNhdDogYnVpbGRDb25jYXQsXG4gIGhhc2g6IGJ1aWxkSGFzaCxcbiAgcGFpcjogYnVpbGRQYWlyLFxuICBwcm9ncmFtOiBidWlsZFByb2dyYW0sXG4gIGxvYzogYnVpbGRMb2MsXG4gIHBvczogYnVpbGRQb3NpdGlvblxufTtcbiJdfQ== -enifed('glimmer-syntax/lib/generation/print', ['exports'], function (exports) { - 'use strict'; + } - exports.default = build; + function buildNumber(value) { + return { + type: "NumberLiteral", + value: value, + original: value + }; + } - function build(ast) { - if (!ast) { - return ''; - } - var output = []; - switch (ast.type) { - case 'Program': - { - var chainBlock = ast.chained && ast.body[0]; - if (chainBlock) { - chainBlock.chained = true; - } - var body = buildEach(ast.body).join(''); - output.push(body); - } - break; - case 'ElementNode': - output.push('<', ast.tag); - if (ast.attributes.length) { - output.push(' ', buildEach(ast.attributes).join(' ')); - } - if (ast.modifiers.length) { - output.push(' ', buildEach(ast.modifiers).join(' ')); - } - output.push('>'); - output.push.apply(output, buildEach(ast.children)); - output.push('</', ast.tag, '>'); - break; - case 'AttrNode': - output.push(ast.name, '='); - var value = build(ast.value); - if (ast.value.type === 'TextNode') { - output.push('"', value, '"'); - } else { - output.push(value); - } - break; - case 'ConcatStatement': - output.push('"'); - ast.parts.forEach(function (node) { - if (node.type === 'StringLiteral') { - output.push(node.original); - } else { - output.push(build(node)); - } - }); - output.push('"'); - break; - case 'TextNode': - output.push(ast.chars); - break; - case 'MustacheStatement': - { - output.push(compactJoin(['{{', pathParams(ast), '}}'])); - } - break; - case 'ElementModifierStatement': - { - output.push(compactJoin(['{{', pathParams(ast), '}}'])); - } - break; - case 'PathExpression': - output.push(ast.original); - break; - case 'SubExpression': - { - output.push('(', pathParams(ast), ')'); - } - break; - case 'BooleanLiteral': - output.push(ast.value ? 'true' : false); - break; - case 'BlockStatement': - { - var lines = []; - if (ast.chained) { - lines.push(['{{else ', pathParams(ast), '}}'].join('')); - } else { - lines.push(openBlock(ast)); - } - lines.push(build(ast.program)); - if (ast.inverse) { - if (!ast.inverse.chained) { - lines.push('{{else}}'); - } - lines.push(build(ast.inverse)); - } - if (!ast.chained) { - lines.push(closeBlock(ast)); - } - output.push(lines.join('')); - } - break; - case 'PartialStatement': - { - output.push(compactJoin(['{{>', pathParams(ast), '}}'])); - } - break; - case 'CommentStatement': - { - output.push(compactJoin(['<!--', ast.value, '-->'])); - } - break; - case 'StringLiteral': - { - output.push('"' + ast.value + '"'); - } - break; - case 'NumberLiteral': - { - output.push(ast.value); - } - break; - case 'UndefinedLiteral': - { - output.push('undefined'); - } - break; - case 'NullLiteral': - { - output.push('null'); - } - break; - case 'Hash': - { - output.push(ast.pairs.map(function (pair) { - return build(pair); - }).join(' ')); - } - break; - case 'HashPair': - { - output.push(ast.key + '=' + build(ast.value)); - } - break; - } - return output.join(''); - } + function buildNull() { + return { + type: "NullLiteral", + value: null, + original: null + }; + } - function compact(array) { - var newArray = []; - array.forEach(function (a) { - if (typeof a !== 'undefined' && a !== null && a !== '') { - newArray.push(a); - } - }); - return newArray; - } - function buildEach(asts) { - var output = []; - asts.forEach(function (node) { - output.push(build(node)); - }); - return output; - } - function pathParams(ast) { - var name = build(ast.name); - var path = build(ast.path); - var params = buildEach(ast.params).join(' '); - var hash = build(ast.hash); - return compactJoin([name, path, params, hash], ' '); - } - function compactJoin(array, delimiter) { - return compact(array).join(delimiter || ''); - } - function blockParams(block) { - var params = block.program.blockParams; - if (params.length) { - return ' as |' + params.join(',') + '|'; - } - } - function openBlock(block) { - return ['{{#', pathParams(block), blockParams(block), '}}'].join(''); - } - function closeBlock(block) { - return ['{{/', build(block.path), '}}'].join(''); - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItc3ludGF4L2xpYi9nZW5lcmF0aW9uL3ByaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztzQkFBQSxLQUFBOztBQUFBLGFBQUEsS0FBQSxDQUE4QixHQUFHLEVBQUE7QUFDL0IsWUFBRyxDQUFDLEdBQUcsRUFBRTtBQUNQLG1CQUFPLEVBQUUsQ0FBQztTQUNYO0FBQ0QsWUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBRWxCLGdCQUFPLEdBQUcsQ0FBQyxJQUFJO0FBQ2IsaUJBQUssU0FBUztBQUFFO0FBQ2Qsd0JBQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5Qyx3QkFBRyxVQUFVLEVBQUU7QUFDYixrQ0FBVSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7cUJBQzNCO0FBQ0Qsd0JBQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLDBCQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNuQjtBQUNELHNCQUFNO0FBQUEsQUFDTixpQkFBSyxhQUFhO0FBQ2hCLHNCQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsb0JBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDeEIsMEJBQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZEO0FBQ0Qsb0JBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7QUFDdkIsMEJBQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxD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LEdBQUcsQ0FBQyxPQUFJO1NBQ3BDO0tBQ0Y7QUFFRCxhQUFBLFNBQUEsQ0FBbUIsS0FBSyxFQUFBO0FBQ3RCLGVBQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDdEU7QUFFRCxhQUFBLFVBQUEsQ0FBb0IsS0FBSyxFQUFBO0FBQ3ZCLGVBQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbEQiLCJmaWxlIjoicHJpbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZChhc3QpIHtcbiAgaWYoIWFzdCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBvdXRwdXQgPSBbXTtcblxuICBzd2l0Y2goYXN0LnR5cGUpIHtcbiAgICBjYXNlICdQcm9ncmFtJzoge1xuICAgICAgY29uc3QgY2hhaW5CbG9jayA9IGFzdC5jaGFpbmVkICYmIGFzdC5ib2R5WzBdO1xuICAgICAgaWYoY2hhaW5CbG9jaykge1xuICAgICAgICBjaGFpbkJsb2NrLmNoYWluZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgYm9keSA9IGJ1aWxkRWFjaChhc3QuYm9keSkuam9pbignJyk7XG4gICAgICBvdXRwdXQucHVzaChib2R5KTtcbiAgICB9XG4gICAgYnJlYWs7XG4gICAgY2FzZSAnRWxlbWVudE5vZGUnOlxuICAgICAgb3V0cHV0LnB1c2goJzwnLCBhc3QudGFnKTtcbiAgICAgIGlmKGFzdC5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICBvdXRwdXQucHVzaCgnICcsIGJ1aWxkRWFjaChhc3QuYXR0cmlidXRlcykuam9pbignICcpKTtcbiAgICAgIH1cbiAgICAgIGlmKGFzdC5tb2RpZmllcnMubGVuZ3RoKSB7XG4gICAgICAgIG91dHB1dC5wdXNoKCcgJywgYnVpbGRFYWNoKGFzdC5tb2RpZmllcnMpLmpvaW4oJyAnKSk7XG4gICAgICB9XG4gICAgICBvdXRwdXQucHVzaCgnPicpO1xuICAgICAgb3V0cHV0LnB1c2guYXBwbHkob3V0cHV0LCBidWlsZEVhY2goYXN0LmNoaWxkcmVuKSk7XG4gICAgICBvdXRwdXQucHVzaCgnPC8nLCBhc3QudGFnLCAnPicpO1xuICAgIGJyZWFrO1xuICAgIGNhc2UgJ0F0dHJOb2RlJzpcbiAgICAgIG91dHB1dC5wdXNoKGFzdC5uYW1lLCAnPScpO1xuICAgICAgY29uc3QgdmFsdWUgPSBidWlsZChhc3QudmFsdWUpO1xuICAgICAgaWYoYXN0LnZhbHVlLnR5cGUgPT09ICdUZXh0Tm9kZScpIHtcbiAgICAgICAgb3V0cHV0LnB1c2goJ1wiJywgdmFsdWUsICdcIicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIGJyZWFrO1xuICAgIGNhc2UgJ0NvbmNhdFN0YXRlbWVudCc6XG4gICAgICBvdXRwdXQucHVzaCgnXCInKTtcbiAgICAgIGFzdC5wYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgaWYobm9kZS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChub2RlLm9yaWdpbmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChidWlsZChub2RlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgb3V0cHV0LnB1c2goJ1wiJyk7XG4gICAgYnJlYWs7XG4gICAgY2FzZSAnVGV4dE5vZGUnOlxuICAgICAgb3V0cHV0LnB1c2goYXN0LmNoYXJzKTtcbiAgICBicmVhaztcbiAgICBjYXNlICdNdXN0YWNoZVN0YXRlbWVudCc6IHtcbiAgICAgIG91dHB1dC5wdXNoKGNvbXBhY3RKb2luKFsne3snLCBwYXRoUGFyYW1zKGFzdCksICd9fSddKSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICAgIGNhc2UgJ0VsZW1lbnRNb2RpZmllclN0YXRlbWVudCc6IHtcbiAgICAgIG91dHB1dC5wdXNoKGNvbXBhY3RKb2luKFsne3snLCBwYXRoUGFyYW1zKGFzdCksICd9fSddKSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BhdGhFeHByZXNzaW9uJzpcbiAgICAgIG91dHB1dC5wdXNoKGFzdC5vcmlnaW5hbCk7XG4gICAgYnJlYWs7XG4gICAgY2FzZSAnU3ViRXhwcmVzc2lvbic6IHtcbiAgICAgIG91dHB1dC5wdXNoKCcoJywgcGF0aFBhcmFtcyhhc3QpLCAnKScpO1xuICAgIH1cbiAgICBicmVhaztcbiAgICBjYXNlICdCb29sZWFuTGl0ZXJhbCc6XG4gICAgICBvdXRwdXQucHVzaChhc3QudmFsdWUgPyAndHJ1ZScgOiBmYWxzZSk7XG4gICAgYnJlYWs7XG4gICAgY2FzZSAnQmxvY2tTdGF0ZW1lbnQnOiB7XG4gICAgICBjb25zdCBsaW5lcyA9IFtdO1xuXG4gICAgICBpZihhc3QuY2hhaW5lZCl7XG4gICAgICAgIGxpbmVzLnB1c2goWyd7e2Vsc2UgJywgcGF0aFBhcmFtcyhhc3QpLCAnfX0nXS5qb2luKCcnKSk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgbGluZXMucHVzaChvcGVuQmxvY2soYXN0KSk7XG4gICAgICB9XG5cbiAgICAgIGxpbmVzLnB1c2goYnVpbGQoYXN0LnByb2dyYW0pKTtcblxuICAgICAgaWYoYXN0LmludmVyc2UpIHtcbiAgICAgICAgaWYoIWFzdC5pbnZlcnNlLmNoYWluZWQpe1xuICAgICAgICAgIGxpbmVzLnB1c2goJ3t7ZWxzZX19Jyk7XG4gICAgICAgIH1cbiAgICAgICAgbGluZXMucHVzaChidWlsZChhc3QuaW52ZXJzZSkpO1xuICAgICAgfVxuXG4gICAgICBpZighYXN0LmNoYWluZWQpe1xuICAgICAgICBsaW5lcy5wdXNoKGNsb3NlQmxvY2soYXN0KSk7XG4gICAgICB9XG5cbiAgICAgIG91dHB1dC5wdXNoKGxpbmVzLmpvaW4oJycpKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gICAgY2FzZSAnUGFydGlhbFN0YXRlbWVudCc6IHtcbiAgICAgIG91dHB1dC5wdXNoKGNvbXBhY3RKb2luKFsne3s+JywgcGF0aFBhcmFtcyhhc3QpLCAnfX0nXSkpO1xuICAgIH1cbiAgICBicmVhaztcbiAgICBjYXNlICdDb21tZW50U3RhdGVtZW50Jzoge1xuICAgICAgb3V0cHV0LnB1c2goY29tcGFjdEpvaW4oWyc8IS0tJywgYXN0LnZhbHVlLCAnLS0+J10pKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gICAgY2FzZSAnU3RyaW5nTGl0ZXJhbCc6IHtcbiAgICAgIG91dHB1dC5wdXNoKGBcIiR7YXN0LnZhbHVlfVwiYCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICAgIGNhc2UgJ051bWJlckxpdGVyYWwnOiB7XG4gICAgICBvdXRwdXQucHVzaChhc3QudmFsdWUpO1xuICAgIH1cbiAgICBicmVhaztcbiAgICBjYXNlICdVbmRlZmluZWRMaXRlcmFsJzoge1xuICAgICAgb3V0cHV0LnB1c2goJ3VuZGVmaW5lZCcpO1xuICAgIH1cbiAgICBicmVhaztcbiAgICBjYXNlICdOdWxsTGl0ZXJhbCc6IHtcbiAgICAgIG91dHB1dC5wdXNoKCdudWxsJyk7XG4gICAgfVxuICAgIGJyZWFrO1xuICAgIGNhc2UgJ0hhc2gnOiB7XG4gICAgICBvdXRwdXQucHVzaChhc3QucGFpcnMubWFwKGZ1bmN0aW9uKHBhaXIpIHtcbiAgICAgICAgcmV0dXJuIGJ1aWxkKHBhaXIpO1xuICAgICAgfSkuam9pbignICcpKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gICAgY2FzZSAnSGFzaFBhaXInOiB7XG4gICAgICBvdXRwdXQucHVzaChgJHthc3Qua2V5fT0ke2J1aWxkKGFzdC52YWx1ZSl9YCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIGNvbXBhY3QoYXJyYXkpIHtcbiAgY29uc3QgbmV3QXJyYXkgPSBbXTtcbiAgYXJyYXkuZm9yRWFjaChmdW5jdGlvbihhKSB7XG4gICAgaWYodHlwZW9mKGEpICE9PSAndW5kZWZpbmVkJyAmJiBhICE9PSBudWxsICYmIGEgIT09ICcnKSB7XG4gICAgICBuZXdBcnJheS5wdXNoKGEpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBuZXdBcnJheTtcbn1cblxuZnVuY3Rpb24gYnVpbGRFYWNoKGFzdHMpIHtcbiAgY29uc3Qgb3V0cHV0ID0gW107XG4gIGFzdHMuZm9yRWFjaChmdW5jdGlvbihub2RlKSB7XG4gICAgb3V0cHV0LnB1c2goYnVpbGQobm9kZSkpO1xuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuZnVuY3Rpb24gcGF0aFBhcmFtcyhhc3QpIHtcbiAgY29uc3QgbmFtZSA9IGJ1aWxkKGFzdC5uYW1lKTtcbiAgY29uc3QgcGF0aCA9IGJ1aWxkKGFzdC5wYXRoKTtcbiAgY29uc3QgcGFyYW1zID0gYnVpbGRFYWNoKGFzdC5wYXJhbXMpLmpvaW4oJyAnKTtcbiAgY29uc3QgaGFzaCA9IGJ1aWxkKGFzdC5oYXNoKTtcbiAgcmV0dXJuIGNvbXBhY3RKb2luKFtuYW1lLCBwYXRoLCBwYXJhbXMsIGhhc2hdLCAnICcpO1xufVxuXG5mdW5jdGlvbiBjb21wYWN0Sm9pbihhcnJheSwgZGVsaW1pdGVyPykge1xuICByZXR1cm4gY29tcGFjdChhcnJheSkuam9pbihkZWxpbWl0ZXIgfHwgJycpO1xufVxuXG5mdW5jdGlvbiBibG9ja1BhcmFtcyhibG9jaykge1xuICBjb25zdCBwYXJhbXMgPSBibG9jay5wcm9ncmFtLmJsb2NrUGFyYW1zO1xuICBpZihwYXJhbXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGAgYXMgfCR7cGFyYW1zLmpvaW4oJywnKX18YDtcbiAgfVxufVxuXG5mdW5jdGlvbiBvcGVuQmxvY2soYmxvY2spIHtcbiAgcmV0dXJuIFsne3sjJywgcGF0aFBhcmFtcyhibG9jayksIGJsb2NrUGFyYW1zKGJsb2NrKSwgJ319J10uam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlQmxvY2soYmxvY2spIHtcbiAgcmV0dXJuIFsne3svJywgYnVpbGQoYmxvY2sucGF0aCksICd9fSddLmpvaW4oJycpO1xufVxuIl19 -enifed("glimmer-syntax/lib/parser", ["exports", "handlebars/compiler/base", "glimmer-syntax/lib/builders", "glimmer-syntax/lib/generation/print", "glimmer-syntax/lib/traversal/traverse", "glimmer-syntax/lib/traversal/walker", "simple-html-tokenizer", "glimmer-syntax/lib/parser/handlebars-node-visitors", "glimmer-syntax/lib/parser/tokenizer-event-handlers"], function (exports, _handlebarsCompilerBase, _glimmerSyntaxLibBuilders, _glimmerSyntaxLibGenerationPrint, _glimmerSyntaxLibTraversalTraverse, _glimmerSyntaxLibTraversalWalker, _simpleHtmlTokenizer, _glimmerSyntaxLibParserHandlebarsNodeVisitors, _glimmerSyntaxLibParserTokenizerEventHandlers) { - "use strict"; - - exports.preprocess = preprocess; - exports.Parser = Parser; - var syntax = { - parse: preprocess, - builders: _glimmerSyntaxLibBuilders.default, - print: _glimmerSyntaxLibGenerationPrint.default, - traverse: _glimmerSyntaxLibTraversalTraverse.default, - Walker: _glimmerSyntaxLibTraversalWalker.default + function buildUndefined() { + return { + type: "UndefinedLiteral", + value: undefined, + original: undefined }; - exports.syntax = syntax; + } - function preprocess(html, options) { - var ast = typeof html === 'object' ? html : _handlebarsCompilerBase.parse(html); - var combined = new Parser(html, options).acceptNode(ast); - if (options && options.plugins && options.plugins.ast) { - for (var i = 0, l = options.plugins.ast.length; i < l; i++) { - var plugin = new options.plugins.ast[i](options); - plugin.syntax = syntax; - combined = plugin.transform(combined); - } - } - return combined; - } + // Miscellaneous - var entityParser = new _simpleHtmlTokenizer.EntityParser(_simpleHtmlTokenizer.HTML5NamedCharRefs); + function buildHash(pairs) { + return { + type: "Hash", + pairs: pairs || [] + }; + } - function Parser(source, options) { - this.options = options || {}; - this.elementStack = []; - this.tokenizer = new _simpleHtmlTokenizer.EventedTokenizer(this, entityParser); - this.currentNode = null; - this.currentAttribute = null; - if (typeof source === 'string') { - this.source = source.split(/(?:\r\n?|\n)/g); - } - } + function buildPair(key, value) { + return { + type: "HashPair", + key: key, + value: value + }; + } - for (var key in _glimmerSyntaxLibParserHandlebarsNodeVisitors.default) { - Parser.prototype[key] = _glimmerSyntaxLibParserHandlebarsNodeVisitors.default[key]; - } - for (var key in _glimmerSyntaxLibParserTokenizerEventHandlers.default) { - Parser.prototype[key] = _glimmerSyntaxLibParserTokenizerEventHandlers.default[key]; - } - Parser.prototype.acceptNode = function (node) { - return this[node.type](node); + function buildProgram(body, blockParams, loc) { + return { + type: "Program", + body: body || [], + blockParams: blockParams || [], + loc: buildLoc(loc) }; - Parser.prototype.currentElement = function () { - return this.elementStack[this.elementStack.length - 1]; - }; - Parser.prototype.sourceForMustache = function (mustache) { - var firstLine = mustache.loc.start.line - 1; - var lastLine = mustache.loc.end.line - 1; - var currentLine = firstLine - 1; - var firstColumn = mustache.loc.start.column + 2; - var lastColumn = mustache.loc.end.column - 2; - var string = []; - var line = undefined; - if (!this.source) { - return '{{' + mustache.path.id.original + '}}'; - } - while (currentLine < lastLine) { - currentLine++; - line = this.source[currentLine]; - if (currentLine === firstLine) { - if (firstLine === lastLine) { - string.push(line.slice(firstColumn, lastColumn)); - } else { - string.push(line.slice(firstColumn)); - } - } else if (currentLine === lastLine) { - string.push(line.slice(0, lastColumn)); - } else { - string.push(line); - } - } - return string.join('\n'); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItc3ludGF4L2xpYi9wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFhTyxRQUFNLE1BQU0sR0FBRztBQUNwQixhQUFLLEVBQUUsVUFBVTtBQUNqQixnQkFBUSxtQ0FBQTtBQUNSLGFBQUssMENBQUE7QUFDTCxnQkFBUSw0Q0FBQTtBQUNSLGNBQU0sMENBQUE7S0FDUCxDQUFDOzs7QUFFRixhQUFBLFVBQUEsQ0FBMkIsSUFBSSxFQUFFLE9BQVEsRUFBQTtBQUN2QyxZQUFJLEdBQUcsR0FBRyxBQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsR0FBSSxJQUFJLEdBQUcsd0JBdEJ2QyxLQUFLLENBc0J3QyxJQUFJLENBQUMsQ0FBQztBQUMxRCxZQUFJLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRXpELFlBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDckQsaUJBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxRCxvQkFBSSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVqRCxzQkFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFFdkIsd0JBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0Y7QUFFRCxlQUFPLFFBQVEsQ0FBQztLQUNqQjs7QUFFRCxRQUFNLFlBQVksR0FBRyx5QkEvQm5CLFlBQVksc0JBQ1osa0JBQWtCLENBOEJnQyxDQUFDOztBQUVyRCxh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QUM7YUFDeEMsTUFBTTtBQUNMLHNCQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ25CO1NBQ0Y7QUFFRCxlQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDMUIsQ0FBQyIsImZpbGUiOiJwYXJzZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXJzZSB9IGZyb20gXCJoYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2VcIjtcbmltcG9ydCBidWlsZGVycyBmcm9tIFwiLi9idWlsZGVyc1wiO1xuaW1wb3J0IHByaW50IGZyb20gXCIuL2dlbmVyYXRpb24vcHJpbnRcIjtcbmltcG9ydCB0cmF2ZXJzZSBmcm9tIFwiLi90cmF2ZXJzYWwvdHJhdmVyc2VcIjtcbmltcG9ydCBXYWxrZXIgZnJvbSBcIi4vdHJhdmVyc2FsL3dhbGtlclwiO1xuaW1wb3J0IHtcbiAgRXZlbnRlZFRva2VuaXplcixcbiAgRW50aXR5UGFyc2VyLFxuICBIVE1MNU5hbWVkQ2hhclJlZnMgYXMgbmFtZWRDaGFyUmVmc1xufSBmcm9tIFwic2ltcGxlLWh0bWwtdG9rZW5pemVyXCI7XG5pbXBvcnQgaGFuZGxlYmFyc05vZGVWaXNpdG9ycyBmcm9tIFwiLi9wYXJzZXIvaGFuZGxlYmFycy1ub2RlLXZpc2l0b3JzXCI7XG5pbXBvcnQgdG9rZW5pemVyRXZlbnRIYW5kbGVycyBmcm9tIFwiLi9wYXJzZXIvdG9rZW5pemVyLWV2ZW50LWhhbmRsZXJzXCI7XG5cbmV4cG9ydCBjb25zdCBzeW50YXggPSB7XG4gIHBhcnNlOiBwcmVwcm9jZXNzLFxuICBidWlsZGVycyxcbiAgcHJpbnQsXG4gIHRyYXZlcnNlLFxuICBXYWxrZXJcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwcm9jZXNzKGh0bWwsIG9wdGlvbnM/KSB7XG4gIGxldCBhc3QgPSAodHlwZW9mIGh0bWwgPT09ICdvYmplY3QnKSA/IGh0bWwgOiBwYXJzZShodG1sKTtcbiAgbGV0IGNvbWJpbmVkID0gbmV3IFBhcnNlcihodG1sLCBvcHRpb25zKS5hY2NlcHROb2RlKGFzdCk7XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wbHVnaW5zICYmIG9wdGlvbnMucGx1Z2lucy5hc3QpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IG9wdGlvbnMucGx1Z2lucy5hc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBsZXQgcGx1Z2luID0gbmV3IG9wdGlvbnMucGx1Z2lucy5hc3RbaV0ob3B0aW9ucyk7XG5cbiAgICAgIHBsdWdpbi5zeW50YXggPSBzeW50YXg7XG5cbiAgICAgIGNvbWJpbmVkID0gcGx1Z2luLnRyYW5zZm9ybShjb21iaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmVkO1xufVxuXG5jb25zdCBlbnRpdHlQYXJzZXIgPSBuZXcgRW50aXR5UGFyc2VyKG5hbWVkQ2hhclJlZnMpO1xuXG5leHBvcnQgZnVuY3Rpb24gUGFyc2VyKHNvdXJjZSwgb3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB0aGlzLmVsZW1lbnRTdGFjayA9IFtdO1xuICB0aGlzLnRva2VuaXplciA9IG5ldyBFdmVudGVkVG9rZW5pemVyKHRoaXMsIGVudGl0eVBhcnNlcik7XG5cbiAgdGhpcy5jdXJyZW50Tm9kZSA9IG51bGw7XG4gIHRoaXMuY3VycmVudEF0dHJpYnV0ZSA9IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2Uuc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgfVxufVxuXG5mb3IgKGxldCBrZXkgaW4gaGFuZGxlYmFyc05vZGVWaXNpdG9ycykge1xuICBQYXJzZXIucHJvdG90eXBlW2tleV0gPSBoYW5kbGViYXJzTm9kZVZpc2l0b3JzW2tleV07XG59XG5cbmZvciAobGV0IGtleSBpbiB0b2tlbml6ZXJFdmVudEhhbmRsZXJzKSB7XG4gIFBhcnNlci5wcm90b3R5cGVba2V5XSA9IHRva2VuaXplckV2ZW50SGFuZGxlcnNba2V5XTtcbn1cblxuUGFyc2VyLnByb3RvdHlwZS5hY2NlcHROb2RlID0gZnVuY3Rpb24obm9kZSkge1xuICByZXR1cm4gdGhpc1tub2RlLnR5cGVdKG5vZGUpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5jdXJyZW50RWxlbWVudCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lbGVtZW50U3RhY2tbdGhpcy5lbGVtZW50U3RhY2subGVuZ3RoIC0gMV07XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLnNvdXJjZUZvck11c3RhY2hlID0gZnVuY3Rpb24obXVzdGFjaGUpIHtcbiAgbGV0IGZpcnN0TGluZSA9IG11c3RhY2hlLmxvYy5zdGFydC5saW5lIC0gMTtcbiAgbGV0IGxhc3RMaW5lID0gbXVzdGFjaGUubG9jLmVuZC5saW5lIC0gMTtcbiAgbGV0IGN1cnJlbnRMaW5lID0gZmlyc3RMaW5lIC0gMTtcbiAgbGV0IGZpcnN0Q29sdW1uID0gbXVzdGFjaGUubG9jLnN0YXJ0LmNvbHVtbiArIDI7XG4gIGxldCBsYXN0Q29sdW1uID0gbXVzdGFjaGUubG9jLmVuZC5jb2x1bW4gLSAyO1xuICBsZXQgc3RyaW5nID0gW107XG4gIGxldCBsaW5lO1xuXG4gIGlmICghdGhpcy5zb3VyY2UpIHtcbiAgICByZXR1cm4gJ3t7JyArIG11c3RhY2hlLnBhdGguaWQub3JpZ2luYWwgKyAnfX0nO1xuICB9XG5cbiAgd2hpbGUgKGN1cnJlbnRMaW5lIDwgbGFzdExpbmUpIHtcbiAgICBjdXJyZW50TGluZSsrO1xuICAgIGxpbmUgPSB0aGlzLnNvdXJjZVtjdXJyZW50TGluZV07XG5cbiAgICBpZiAoY3VycmVudExpbmUgPT09IGZpcnN0TGluZSkge1xuICAgICAgaWYgKGZpcnN0TGluZSA9PT0gbGFzdExpbmUpIHtcbiAgICAgICAgc3RyaW5nLnB1c2gobGluZS5zbGljZShmaXJzdENvbHVtbiwgbGFzdENvbHVtbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyaW5nLnB1c2gobGluZS5zbGljZShmaXJzdENvbHVtbikpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY3VycmVudExpbmUgPT09IGxhc3RMaW5lKSB7XG4gICAgICBzdHJpbmcucHVzaChsaW5lLnNsaWNlKDAsIGxhc3RDb2x1bW4pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyaW5nLnB1c2gobGluZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZy5qb2luKCdcXG4nKTtcbn07XG4iXX0= -enifed("glimmer-syntax/lib/parser/handlebars-node-visitors", ["exports", "glimmer-syntax/lib/builders", "glimmer-syntax/lib/utils"], function (exports, _glimmerSyntaxLibBuilders, _glimmerSyntaxLibUtils) { - "use strict"; + } - exports.default = { - Program: function (program) { - var body = []; - var node = _glimmerSyntaxLibBuilders.default.program(body, program.blockParams, program.loc); - var i = undefined, - l = program.body.length; - this.elementStack.push(node); - if (l === 0) { - return this.elementStack.pop(); - } - for (i = 0; i < l; i++) { - this.acceptNode(program.body[i]); - } - // Ensure that that the element stack is balanced properly. - var poppedNode = this.elementStack.pop(); - if (poppedNode !== node) { - throw new Error("Unclosed element `" + poppedNode.tag + "` (on line " + poppedNode.loc.start.line + ")."); - } - return node; - }, - BlockStatement: function (block) { - delete block.inverseStrip; - delete block.openString; - delete block.closeStrip; - if (this.tokenizer.state === 'comment') { - this.appendToCommentData('{{' + this.sourceForMustache(block) + '}}'); - return; - } - if (this.tokenizer.state !== 'comment' && this.tokenizer.state !== 'data' && this.tokenizer.state !== 'beforeData') { - throw new Error("A block may only be used inside an HTML element or another block."); - } - block = acceptCommonNodes(this, block); - var program = block.program ? this.acceptNode(block.program) : null; - var inverse = block.inverse ? this.acceptNode(block.inverse) : null; - var node = _glimmerSyntaxLibBuilders.default.block(block.path, block.params, block.hash, program, inverse, block.loc); - var parentProgram = this.currentElement(); - _glimmerSyntaxLibUtils.appendChild(parentProgram, node); - }, - MustacheStatement: function (rawMustache) { - var tokenizer = this.tokenizer; - var path = rawMustache.path; - var params = rawMustache.params; - var hash = rawMustache.hash; - var escaped = rawMustache.escaped; - var loc = rawMustache.loc; + function buildSource(source) { + return source || null; + } - var mustache = _glimmerSyntaxLibBuilders.default.mustache(path, params, hash, !escaped, loc); - if (tokenizer.state === 'comment') { - this.appendToCommentData('{{' + this.sourceForMustache(mustache) + '}}'); - return; - } - acceptCommonNodes(this, mustache); - switch (tokenizer.state) { - // Tag helpers - case "tagName": - addElementModifier(this.currentNode, mustache); - tokenizer.state = "beforeAttributeName"; - break; - case "beforeAttributeName": - addElementModifier(this.currentNode, mustache); - break; - case "attributeName": - case "afterAttributeName": - this.beginAttributeValue(false); - this.finishAttributeValue(); - addElementModifier(this.currentNode, mustache); - tokenizer.state = "beforeAttributeName"; - break; - case "afterAttributeValueQuoted": - addElementModifier(this.currentNode, mustache); - tokenizer.state = "beforeAttributeName"; - break; - // Attribute values - case "beforeAttributeValue": - appendDynamicAttributeValuePart(this.currentAttribute, mustache); - tokenizer.state = 'attributeValueUnquoted'; - break; - case "attributeValueDoubleQuoted": - case "attributeValueSingleQuoted": - case "attributeValueUnquoted": - appendDynamicAttributeValuePart(this.currentAttribute, mustache); - break; - // TODO: Only append child when the tokenizer state makes - // sense to do so, otherwise throw an error. - default: - _glimmerSyntaxLibUtils.appendChild(this.currentElement(), mustache); - } - return mustache; - }, - ContentStatement: function (content) { - updateTokenizerLocation(this.tokenizer, content); - this.tokenizer.tokenizePart(content.value); - this.tokenizer.flushData(); - }, - CommentStatement: function (comment) { - return comment; - }, - PartialStatement: function (partial) { - _glimmerSyntaxLibUtils.appendChild(this.currentElement(), partial); - return partial; - }, - SubExpression: function (sexpr) { - return acceptCommonNodes(this, sexpr); - }, - PathExpression: function (path) { - var original = path.original; - var loc = path.loc; - - if (original.indexOf('/') !== -1) { - // TODO add a SyntaxError with loc info - if (original.slice(0, 2) === './') { - throw new Error("Using \"./\" is not supported in Glimmer and unnecessary: \"" + path.original + "\" on line " + loc.start.line + "."); - } - if (original.slice(0, 3) === '../') { - throw new Error("Changing context using \"../\" is not supported in Glimmer: \"" + path.original + "\" on line " + loc.start.line + "."); - } - if (original.indexOf('.') !== -1) { - throw new Error("Mixing '.' and '/' in paths is not supported in Glimmer; use only '.' to separate property paths: \"" + path.original + "\" on line " + loc.start.line + "."); - } - path.parts = [path.parts.join('/')]; - } - delete path.depth; - // This is to fix a bug in the Handlebars AST where the path expressions in - // `{{this.foo}}` (and similarly `{{foo-bar this.foo named=this.foo}}` etc) - // are simply turned into `{{foo}}`. The fix is to push it back onto the - // parts array and let the runtime see the difference. However, we cannot - // simply use the string `this` as it means literally the property called - // "this" in the current context (it can be expressed in the syntax as - // `{{[this]}}`, where the square bracket are generally for this kind of - // escaping – such as `{{foo.["bar.baz"]}}` would mean lookup a property - // named literally "bar.baz" on `this.foo`). By convention, we use `null` - // for this purpose. - if (original.match(/^this(\..+)?$/)) { - path.parts.unshift(null); - } - return path; - }, - Hash: function (hash) { - for (var i = 0; i < hash.pairs.length; i++) { - this.acceptNode(hash.pairs[i].value); - } - return hash; - }, - StringLiteral: function () {}, - BooleanLiteral: function () {}, - NumberLiteral: function () {}, - UndefinedLiteral: function () {}, - NullLiteral: function () {} + function buildPosition(line, column) { + return { + line: typeof line === 'number' ? line : null, + column: typeof column === 'number' ? column : null }; + } - function calculateRightStrippedOffsets(original, value) { - if (value === '') { - // if it is empty, just return the count of newlines - // in original - return { - lines: original.split("\n").length - 1, - columns: 0 - }; - } - // otherwise, return the number of newlines prior to - // `value` - var difference = original.split(value)[0]; - var lines = difference.split(/\n/); - var lineCount = lines.length - 1; + function buildLoc(startLine, startColumn, endLine, endColumn, source) { + if (arguments.length === 1) { + var loc = startLine; + + if (typeof loc === 'object') { return { - lines: lineCount, - columns: lines[lineCount].length + source: buildSource(loc.source), + start: buildPosition(loc.start.line, loc.start.column), + end: buildPosition(loc.end.line, loc.end.column) }; + } else { + return null; + } + } else { + return { + source: buildSource(source), + start: buildPosition(startLine, startColumn), + end: buildPosition(endLine, endColumn) + }; } - function updateTokenizerLocation(tokenizer, content) { - var line = content.loc.start.line; - var column = content.loc.start.column; - if (content.rightStripped) { - var offsets = calculateRightStrippedOffsets(content.original, content.value); - line = line + offsets.lines; - if (offsets.lines) { - column = offsets.columns; - } else { - column = column + offsets.columns; - } - } - tokenizer.line = line; - tokenizer.column = column; - } - function acceptCommonNodes(compiler, node) { - compiler.acceptNode(node.path); - if (node.params) { - for (var i = 0; i < node.params.length; i++) { - compiler.acceptNode(node.params[i]); - } - } else { - node.params = []; - } - if (node.hash) { - compiler.acceptNode(node.hash); - } else { - node.hash = _glimmerSyntaxLibBuilders.default.hash(); - } - return node; - } - function addElementModifier(element, mustache) { - var path = mustache.path; - var params = mustache.params; - var hash = mustache.hash; - var loc = mustache.loc; + } - var modifier = _glimmerSyntaxLibBuilders.default.elementModifier(path, params, hash, loc); - element.modifiers.push(modifier); - } - function appendDynamicAttributeValuePart(attribute, part) { - attribute.isDynamic = true; - attribute.parts.push(part); - } + exports.default = { + mustache: buildMustache, + block: buildBlock, + partial: buildPartial, + comment: buildComment, + element: buildElement, + elementModifier: buildElementModifier, + component: buildComponent, + attr: buildAttr, + text: buildText, + sexpr: buildSexpr, + path: buildPath, + string: buildString, + boolean: buildBoolean, + number: buildNumber, + undefined: buildUndefined, + null: buildNull, + concat: buildConcat, + hash: buildHash, + pair: buildPair, + program: buildProgram, + loc: buildLoc, + pos: buildPosition + }; }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItc3ludGF4L2xpYi9wYXJzZXIvaGFuZGxlYmFycy1ub2RlLXZpc2l0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztzQkFHZTtBQUViLGVBQU8sRUFBRSxVQUFTLE9BQU8sRUFBQTtBQUN2QixnQkFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2QsZ0JBQUksSUFBSSxHQUFHLGtDQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0QsZ0JBQUksQ0FBQyxZQUFBO2dCQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUUvQixnQkFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFN0IsZ0JBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUFFLHVCQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7YUFBRTtBQUVoRCxpQkFBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEIsb0JBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xDOztBQUdELGdCQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3pDLGdCQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUU7QUFDdkIsc0JBQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDLEdBQUcsR0FBRyxhQUFhLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQzNHO0FBRUQsbUJBQU8sSUFBSSxDQUFDO1NBQ2I7QUFFRCxzQkFBYyxFQUFFLFVBQVMsS0FBSyxFQUFBO0FBQzVCLG1CQUFPLEtB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QUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyQztTQUNGLE1BQU07QUFDTCxnQkFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7U0FDbEI7QUFFRCxZQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDYixvQkFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEMsTUFBTTtBQUNMLGdCQUFJLENBQUMsSUFBSSxHQUFHLGtDQUFFLElBQUksRUFBRSxDQUFDO1NBQ3RCO0FBRUQsZUFBTyxJQUFJLENBQUM7S0FDYjtBQUVELGFBQUEsa0JBQUEsQ0FBNEIsT0FBTyxFQUFFLFFBQVEsRUFBQTtZQUNyQyxJQUFJLEdBQXdCLFFBQVEsQ0FBcEMsSUFBSTtZQUFFLE1BQU0sR0FBZ0IsUUFBUSxDQUE5QixNQUFNO1lBQUUsSUFBSSxHQUFVLFFBQVEsQ0FBdEIsSUFBSTtZQUFFLEdBQUcsR0FBSyxRQUFRLENBQWhCLEdBQUc7O0FBQzdCLFlBQUksUUFBUSxHQUFHLGtDQUFFLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxRCxlQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNsQztBQUVELGFBQUEsK0JBQUEsQ0FBeUMsU0FBUyxFQUFFLElBQUksRUFBQTtBQUN0RCxpQkFBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDM0IsaUJBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzVCIiwiZmlsZSI6ImhhbmRsZWJhcnMtbm9kZS12aXNpdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiIGZyb20gXCIuLi9idWlsZGVyc1wiO1xuaW1wb3J0IHsgYXBwZW5kQ2hpbGQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuXG4gIFByb2dyYW06IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgICBsZXQgYm9keSA9IFtdO1xuICAgIGxldCBub2RlID0gYi5wcm9ncmFtKGJvZHksIHByb2dyYW0uYmxvY2tQYXJhbXMsIHByb2dyYW0ubG9jKTtcbiAgICBsZXQgaSwgbCA9IHByb2dyYW0uYm9keS5sZW5ndGg7XG5cbiAgICB0aGlzLmVsZW1lbnRTdGFjay5wdXNoKG5vZGUpO1xuXG4gICAgaWYgKGwgPT09IDApIHsgcmV0dXJuIHRoaXMuZWxlbWVudFN0YWNrLnBvcCgpOyB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLmFjY2VwdE5vZGUocHJvZ3JhbS5ib2R5W2ldKTtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgdGhhdCB0aGF0IHRoZSBlbGVtZW50IHN0YWNrIGlzIGJhbGFuY2VkIHByb3Blcmx5LlxuICAgIGxldCBwb3BwZWROb2RlID0gdGhpcy5lbGVtZW50U3RhY2sucG9wKCk7XG4gICAgaWYgKHBvcHBlZE5vZGUgIT09IG5vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuY2xvc2VkIGVsZW1lbnQgYFwiICsgcG9wcGVkTm9kZS50YWcgKyBcImAgKG9uIGxpbmUgXCIgKyBwb3BwZWROb2RlLmxvYy5zdGFydC5saW5lICsgXCIpLlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfSxcblxuICBCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24oYmxvY2spIHtcbiAgICBkZWxldGUgYmxvY2suaW52ZXJzZVN0cmlwO1xuICAgIGRlbGV0ZSBibG9jay5vcGVuU3RyaW5nO1xuICAgIGRlbGV0ZSBibG9jay5jbG9zZVN0cmlwO1xuXG4gICAgaWYgKHRoaXMudG9rZW5pemVyLnN0YXRlID09PSAnY29tbWVudCcpIHtcbiAgICAgIHRoaXMuYXBwZW5kVG9Db21tZW50RGF0YSgne3snICsgdGhpcy5zb3VyY2VGb3JNdXN0YWNoZShibG9jaykgKyAnfX0nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbml6ZXIuc3RhdGUgIT09ICdjb21tZW50JyAmJiB0aGlzLnRva2VuaXplci5zdGF0ZSAhPT0gJ2RhdGEnICYmIHRoaXMudG9rZW5pemVyLnN0YXRlICE9PSAnYmVmb3JlRGF0YScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgYmxvY2sgbWF5IG9ubHkgYmUgdXNlZCBpbnNpZGUgYW4gSFRNTCBlbGVtZW50IG9yIGFub3RoZXIgYmxvY2suXCIpO1xuICAgIH1cblxuICAgIGJsb2NrID0gYWNjZXB0Q29tbW9uTm9kZXModGhpcywgYmxvY2spO1xuICAgIGxldCBwcm9ncmFtID0gYmxvY2sucHJvZ3JhbSA/IHRoaXMuYWNjZXB0Tm9kZShibG9jay5wcm9ncmFtKSA6IG51bGw7XG4gICAgbGV0IGludmVyc2UgPSBibG9jay5pbnZlcnNlID8gdGhpcy5hY2NlcHROb2RlKGJsb2NrLmludmVyc2UpIDogbnVsbDtcblxuICAgIGxldCBub2RlID0gYi5ibG9jayhibG9jay5wYXRoLCBibG9jay5wYXJhbXMsIGJsb2NrLmhhc2gsIHByb2dyYW0sIGludmVyc2UsIGJsb2NrLmxvYyk7XG4gICAgbGV0IHBhcmVudFByb2dyYW0gPSB0aGlzLmN1cnJlbnRFbGVtZW50KCk7XG4gICAgYXBwZW5kQ2hpbGQocGFyZW50UHJvZ3JhbSwgbm9kZSk7XG4gIH0sXG5cbiAgTXVzdGFjaGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHJhd011c3RhY2hlKSB7XG4gICAgbGV0IHRva2VuaXplciA9IHRoaXMudG9rZW5pemVyO1xuICAgIGxldCB7IHBhdGgsIHBhcmFtcywgaGFzaCwgZXNjYXBlZCwgbG9jIH0gPSByYXdNdXN0YWNoZTtcbiAgICBsZXQgbXVzdGFjaGUgPSBiLm11c3RhY2hlKHBhdGgsIHBhcmFtcywgaGFzaCwgIWVzY2FwZWQsIGxvYyk7XG5cbiAgICBpZiAodG9rZW5pemVyLnN0YXRlID09PSAnY29tbWVudCcpIHtcbiAgICAgIHRoaXMuYXBwZW5kVG9Db21tZW50RGF0YSgne3snICsgdGhpcy5zb3VyY2VGb3JNdXN0YWNoZShtdXN0YWNoZSkgKyAnfX0nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhY2NlcHRDb21tb25Ob2Rlcyh0aGlzLCBtdXN0YWNoZSk7XG5cbiAgICBzd2l0Y2ggKHRva2VuaXplci5zdGF0ZSkge1xuICAgICAgLy8gVGFnIGhlbHBlcnNcbiAgICAgIGNhc2UgXCJ0YWdOYW1lXCI6XG4gICAgICAgIGFkZEVsZW1lbnRNb2RpZmllcih0aGlzLmN1cnJlbnROb2RlLCBtdXN0YWNoZSk7XG4gICAgICAgIHRva2VuaXplci5zdGF0ZSA9IFwiYmVmb3JlQXR0cmlidXRlTmFtZVwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJiZWZvcmVBdHRyaWJ1dGVOYW1lXCI6XG4gICAgICAgIGFkZEVsZW1lbnRNb2RpZmllcih0aGlzLmN1cnJlbnROb2RlLCBtdXN0YWNoZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImF0dHJpYnV0ZU5hbWVcIjpcbiAgICAgIGNhc2UgXCJhZnRlckF0dHJpYnV0ZU5hbWVcIjpcbiAgICAgICAgdGhpcy5iZWdpbkF0dHJpYnV0ZVZhbHVlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5maW5pc2hBdHRyaWJ1dGVWYWx1ZSgpO1xuICAgICAgICBhZGRFbGVtZW50TW9kaWZpZXIodGhpcy5jdXJyZW50Tm9kZSwgbXVzdGFjaGUpO1xuICAgICAgICB0b2tlbml6ZXIuc3RhdGUgPSBcImJlZm9yZUF0dHJpYnV0ZU5hbWVcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYWZ0ZXJBdHRyaWJ1dGVWYWx1ZVF1b3RlZFwiOlxuICAgICAgICBhZGRFbGVtZW50TW9kaWZpZXIodGhpcy5jdXJyZW50Tm9kZSwgbXVzdGFjaGUpO1xuICAgICAgICB0b2tlbml6ZXIuc3RhdGUgPSBcImJlZm9yZUF0dHJpYnV0ZU5hbWVcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIEF0dHJpYnV0ZSB2YWx1ZXNcbiAgICAgIGNhc2UgXCJiZWZvcmVBdHRyaWJ1dGVWYWx1ZVwiOlxuICAgICAgICBhcHBlbmREeW5hbWljQXR0cmlidXRlVmFsdWVQYXJ0KHRoaXMuY3VycmVudEF0dHJpYnV0ZSwgbXVzdGFjaGUpO1xuICAgICAgICB0b2tlbml6ZXIuc3RhdGUgPSAnYXR0cmlidXRlVmFsdWVVbnF1b3RlZCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImF0dHJpYnV0ZVZhbHVlRG91YmxlUXVvdGVkXCI6XG4gICAgICBjYXNlIFwiYXR0cmlidXRlVmFsdWVTaW5nbGVRdW90ZWRcIjpcbiAgICAgIGNhc2UgXCJhdHRyaWJ1dGVWYWx1ZVVucXVvdGVkXCI6XG4gICAgICAgIGFwcGVuZER5bmFtaWNBdHRyaWJ1dGVWYWx1ZVBhcnQodGhpcy5jdXJyZW50QXR0cmlidXRlLCBtdXN0YWNoZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBUT0RPOiBPbmx5IGFwcGVuZCBjaGlsZCB3aGVuIHRoZSB0b2tlbml6ZXIgc3RhdGUgbWFrZXNcbiAgICAgIC8vIHNlbnNlIHRvIGRvIHNvLCBvdGhlcndpc2UgdGhyb3cgYW4gZXJyb3IuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhcHBlbmRDaGlsZCh0aGlzLmN1cnJlbnRFbGVtZW50KCksIG11c3RhY2hlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbXVzdGFjaGU7XG4gIH0sXG5cbiAgQ29udGVudFN0YXRlbWVudDogZnVuY3Rpb24oY29udGVudCkge1xuICAgIHVwZGF0ZVRva2VuaXplckxvY2F0aW9uKHRoaXMudG9rZW5pemVyLCBjb250ZW50KTtcblxuICAgIHRoaXMudG9rZW5pemVyLnRva2VuaXplUGFydChjb250ZW50LnZhbHVlKTtcbiAgICB0aGlzLnRva2VuaXplci5mbHVzaERhdGEoKTtcbiAgfSxcblxuICBDb21tZW50U3RhdGVtZW50OiBmdW5jdGlvbihjb21tZW50KSB7XG4gICAgcmV0dXJuIGNvbW1lbnQ7XG4gIH0sXG5cbiAgUGFydGlhbFN0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbCkge1xuICAgIGFwcGVuZENoaWxkKHRoaXMuY3VycmVudEVsZW1lbnQoKSwgcGFydGlhbCk7XG4gICAgcmV0dXJuIHBhcnRpYWw7XG4gIH0sXG5cbiAgU3ViRXhwcmVzc2lvbjogZnVuY3Rpb24oc2V4cHIpIHtcbiAgICByZXR1cm4gYWNjZXB0Q29tbW9uTm9kZXModGhpcywgc2V4cHIpO1xuICB9LFxuXG4gIFBhdGhFeHByZXNzaW9uOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgbGV0IHsgb3JpZ2luYWwsIGxvYyB9ID0gcGF0aDtcblxuICAgIGlmIChvcmlnaW5hbC5pbmRleE9mKCcvJykgIT09IC0xKSB7XG4gICAgICAvLyBUT0RPIGFkZCBhIFN5bnRheEVycm9yIHdpdGggbG9jIGluZm9cbiAgICAgIGlmIChvcmlnaW5hbC5zbGljZSgwLCAyKSA9PT0gJy4vJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVzaW5nIFwiLi9cIiBpcyBub3Qgc3VwcG9ydGVkIGluIEdsaW1tZXIgYW5kIHVubmVjZXNzYXJ5OiBcIiR7cGF0aC5vcmlnaW5hbH1cIiBvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9LmApO1xuICAgICAgfVxuICAgICAgaWYgKG9yaWdpbmFsLnNsaWNlKDAsIDMpID09PSAnLi4vJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENoYW5naW5nIGNvbnRleHQgdXNpbmcgXCIuLi9cIiBpcyBub3Qgc3VwcG9ydGVkIGluIEdsaW1tZXI6IFwiJHtwYXRoLm9yaWdpbmFsfVwiIG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0uYCk7XG4gICAgICB9XG4gICAgICBpZiAob3JpZ2luYWwuaW5kZXhPZignLicpICE9PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1peGluZyAnLicgYW5kICcvJyBpbiBwYXRocyBpcyBub3Qgc3VwcG9ydGVkIGluIEdsaW1tZXI7IHVzZSBvbmx5ICcuJyB0byBzZXBhcmF0ZSBwcm9wZXJ0eSBwYXRoczogXCIke3BhdGgub3JpZ2luYWx9XCIgb24gbGluZSAke2xvYy5zdGFydC5saW5lfS5gKTtcbiAgICAgIH1cbiAgICAgIHBhdGgucGFydHMgPSBbIHBhdGgucGFydHMuam9pbignLycpIF07XG4gICAgfVxuXG4gICAgZGVsZXRlIHBhdGguZGVwdGg7XG5cbiAgICAvLyBUaGlzIGlzIHRvIGZpeCBhIGJ1ZyBpbiB0aGUgSGFuZGxlYmFycyBBU1Qgd2hlcmUgdGhlIHBhdGggZXhwcmVzc2lvbnMgaW5cbiAgICAvLyBge3t0aGlzLmZvb319YCAoYW5kIHNpbWlsYXJseSBge3tmb28tYmFyIHRoaXMuZm9vIG5hbWVkPXRoaXMuZm9vfX1gIGV0YylcbiAgICAvLyBhcmUgc2ltcGx5IHR1cm5lZCBpbnRvIGB7e2Zvb319YC4gVGhlIGZpeCBpcyB0byBwdXNoIGl0IGJhY2sgb250byB0aGVcbiAgICAvLyBwYXJ0cyBhcnJheSBhbmQgbGV0IHRoZSBydW50aW1lIHNlZSB0aGUgZGlmZmVyZW5jZS4gSG93ZXZlciwgd2UgY2Fubm90XG4gICAgLy8gc2ltcGx5IHVzZSB0aGUgc3RyaW5nIGB0aGlzYCBhcyBpdCBtZWFucyBsaXRlcmFsbHkgdGhlIHByb3BlcnR5IGNhbGxlZFxuICAgIC8vIFwidGhpc1wiIGluIHRoZSBjdXJyZW50IGNvbnRleHQgKGl0IGNhbiBiZSBleHByZXNzZWQgaW4gdGhlIHN5bnRheCBhc1xuICAgIC8vIGB7e1t0aGlzXX19YCwgd2hlcmUgdGhlIHNxdWFyZSBicmFja2V0IGFyZSBnZW5lcmFsbHkgZm9yIHRoaXMga2luZCBvZlxuICAgIC8vIGVzY2FwaW5nIOKAkyBzdWNoIGFzIGB7e2Zvby5bXCJiYXIuYmF6XCJdfX1gIHdvdWxkIG1lYW4gbG9va3VwIGEgcHJvcGVydHlcbiAgICAvLyBuYW1lZCBsaXRlcmFsbHkgXCJiYXIuYmF6XCIgb24gYHRoaXMuZm9vYCkuIEJ5IGNvbnZlbnRpb24sIHdlIHVzZSBgbnVsbGBcbiAgICAvLyBmb3IgdGhpcyBwdXJwb3NlLlxuICAgIGlmIChvcmlnaW5hbC5tYXRjaCgvXnRoaXMoXFwuLispPyQvKSkge1xuICAgICAgcGF0aC5wYXJ0cy51bnNoaWZ0KG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXRoO1xuICB9LFxuXG4gIEhhc2g6IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhhc2gucGFpcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWNjZXB0Tm9kZShoYXNoLnBhaXJzW2ldLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFzaDtcbiAgfSxcblxuICBTdHJpbmdMaXRlcmFsOiBmdW5jdGlvbigpIHt9LFxuICBCb29sZWFuTGl0ZXJhbDogZnVuY3Rpb24oKSB7fSxcbiAgTnVtYmVyTGl0ZXJhbDogZnVuY3Rpb24oKSB7fSxcbiAgVW5kZWZpbmVkTGl0ZXJhbDogZnVuY3Rpb24oKSB7fSxcbiAgTnVsbExpdGVyYWw6IGZ1bmN0aW9uKCkge31cbn07XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVJpZ2h0U3RyaXBwZWRPZmZzZXRzKG9yaWdpbmFsLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgLy8gaWYgaXQgaXMgZW1wdHksIGp1c3QgcmV0dXJuIHRoZSBjb3VudCBvZiBuZXdsaW5lc1xuICAgIC8vIGluIG9yaWdpbmFsXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmVzOiBvcmlnaW5hbC5zcGxpdChcIlxcblwiKS5sZW5ndGggLSAxLFxuICAgICAgY29sdW1uczogMFxuICAgIH07XG4gIH1cblxuICAvLyBvdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIG5ld2xpbmVzIHByaW9yIHRvXG4gIC8vIGB2YWx1ZWBcbiAgbGV0IGRpZmZlcmVuY2UgPSBvcmlnaW5hbC5zcGxpdCh2YWx1ZSlbMF07XG4gIGxldCBsaW5lcyA9IGRpZmZlcmVuY2Uuc3BsaXQoL1xcbi8pO1xuICBsZXQgbGluZUNvdW50ID0gbGluZXMubGVuZ3RoIC0gMTtcblxuICByZXR1cm4ge1xuICAgIGxpbmVzOiBsaW5lQ291bnQsXG4gICAgY29sdW1uczogbGluZXNbbGluZUNvdW50XS5sZW5ndGhcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVG9rZW5pemVyTG9jYXRpb24odG9rZW5pemVyLCBjb250ZW50KSB7XG4gIGxldCBsaW5lID0gY29udGVudC5sb2Muc3RhcnQubGluZTtcbiAgbGV0IGNvbHVtbiA9IGNvbnRlbnQubG9jLnN0YXJ0LmNvbHVtbjtcblxuICBpZiAoY29udGVudC5yaWdodFN0cmlwcGVkKSB7XG4gICAgbGV0IG9mZnNldHMgPSBjYWxjdWxhdGVSaWdodFN0cmlwcGVkT2Zmc2V0cyhjb250ZW50Lm9yaWdpbmFsLCBjb250ZW50LnZhbHVlKTtcblxuICAgIGxpbmUgPSBsaW5lICsgb2Zmc2V0cy5saW5lcztcbiAgICBpZiAob2Zmc2V0cy5saW5lcykge1xuICAgICAgY29sdW1uID0gb2Zmc2V0cy5jb2x1bW5zO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2x1bW4gPSBjb2x1bW4gKyBvZmZzZXRzLmNvbHVtbnM7XG4gICAgfVxuICB9XG5cbiAgdG9rZW5pemVyLmxpbmUgPSBsaW5lO1xuICB0b2tlbml6ZXIuY29sdW1uID0gY29sdW1uO1xufVxuZnVuY3Rpb24gYWNjZXB0Q29tbW9uTm9kZXMoY29tcGlsZXIsIG5vZGUpIHtcbiAgY29tcGlsZXIuYWNjZXB0Tm9kZShub2RlLnBhdGgpO1xuXG4gIGlmIChub2RlLnBhcmFtcykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5wYXJhbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbXBpbGVyLmFjY2VwdE5vZGUobm9kZS5wYXJhbXNbaV0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBub2RlLnBhcmFtcyA9IFtdO1xuICB9XG5cbiAgaWYgKG5vZGUuaGFzaCkge1xuICAgIGNvbXBpbGVyLmFjY2VwdE5vZGUobm9kZS5oYXNoKTtcbiAgfSBlbHNlIHtcbiAgICBub2RlLmhhc2ggPSBiLmhhc2goKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBhZGRFbGVtZW50TW9kaWZpZXIoZWxlbWVudCwgbXVzdGFjaGUpIHtcbiAgbGV0IHsgcGF0aCwgcGFyYW1zLCBoYXNoLCBsb2MgfSA9IG11c3RhY2hlO1xuICBsZXQgbW9kaWZpZXIgPSBiLmVsZW1lbnRNb2RpZmllcihwYXRoLCBwYXJhbXMsIGhhc2gsIGxvYyk7XG4gIGVsZW1lbnQubW9kaWZpZXJzLnB1c2gobW9kaWZpZXIpO1xufVxuXG5mdW5jdGlvbiBhcHBlbmREeW5hbWljQXR0cmlidXRlVmFsdWVQYXJ0KGF0dHJpYnV0ZSwgcGFydCkge1xuICBhdHRyaWJ1dGUuaXNEeW5hbWljID0gdHJ1ZTtcbiAgYXR0cmlidXRlLnBhcnRzLnB1c2gocGFydCk7XG59XG4iXX0= -enifed("glimmer-syntax/lib/parser/tokenizer-event-handlers", ["exports", "glimmer-syntax/lib/builders", "glimmer-syntax/lib/utils"], function (exports, _glimmerSyntaxLibBuilders, _glimmerSyntaxLibUtils) { - "use strict"; +enifed('htmlbars-syntax/generation/print', ['exports'], function (exports) { + 'use strict'; - var voidMap = Object.create(null); - var voidTagNames = "area base br col command embed hr img input keygen link meta param source track wbr"; - voidTagNames.split(" ").forEach(function (tagName) { - voidMap[tagName] = true; - }); - exports.default = { - reset: function () { - this.currentNode = null; - }, - // Comment - beginComment: function () { - this.currentNode = _glimmerSyntaxLibBuilders.default.comment(""); - this.currentNode.loc = { - source: null, - start: _glimmerSyntaxLibBuilders.default.pos(this.tagOpenLine, this.tagOpenColumn), - end: null - }; - }, - appendToCommentData: function (char) { - this.currentNode.value += char; - }, - finishComment: function () { - this.currentNode.loc.end = _glimmerSyntaxLibBuilders.default.pos(this.tokenizer.line, this.tokenizer.column); - _glimmerSyntaxLibUtils.appendChild(this.currentElement(), this.currentNode); - }, - // Data - beginData: function () { - this.currentNode = _glimmerSyntaxLibBuilders.default.text(); - this.currentNode.loc = { - source: null, - start: _glimmerSyntaxLibBuilders.default.pos(this.tokenizer.line, this.tokenizer.column), - end: null - }; - }, - appendToData: function (char) { - this.currentNode.chars += char; - }, - finishData: function () { - this.currentNode.loc.end = _glimmerSyntaxLibBuilders.default.pos(this.tokenizer.line, this.tokenizer.column); - _glimmerSyntaxLibUtils.appendChild(this.currentElement(), this.currentNode); - }, - // Tags - basic - tagOpen: function () { - this.tagOpenLine = this.tokenizer.line; - this.tagOpenColumn = this.tokenizer.column; - }, - beginStartTag: function () { - this.currentNode = { - type: 'StartTag', - name: "", - attributes: [], - modifiers: [], - selfClosing: false, - loc: null - }; - }, - beginEndTag: function () { - this.currentNode = { - type: 'EndTag', - name: "", - attributes: [], - modifiers: [], - selfClosing: false, - loc: null - }; - }, - finishTag: function () { - var _tokenizer = this.tokenizer; - var line = _tokenizer.line; - var column = _tokenizer.column; + exports.default = build; - var tag = this.currentNode; - tag.loc = _glimmerSyntaxLibBuilders.default.loc(this.tagOpenLine, this.tagOpenColumn, line, column); - if (tag.type === 'StartTag') { - this.finishStartTag(); - if (voidMap[tag.name] || tag.selfClosing) { - this.finishEndTag(true); - } - } else if (tag.type === 'EndTag') { - this.finishEndTag(false); - } - }, - finishStartTag: function () { - var _currentNode = this.currentNode; - var name = _currentNode.name; - var attributes = _currentNode.attributes; - var modifiers = _currentNode.modifiers; - - var loc = _glimmerSyntaxLibBuilders.default.loc(this.tagOpenLine, this.tagOpenColumn); - var element = _glimmerSyntaxLibBuilders.default.element(name, attributes, modifiers, [], loc); - this.elementStack.push(element); - }, - finishEndTag: function (isVoid) { - var tag = this.currentNode; - var element = this.elementStack.pop(); - var parent = this.currentElement(); - validateEndTag(tag, element, isVoid); - element.loc.end.line = this.tokenizer.line; - element.loc.end.column = this.tokenizer.column; - _glimmerSyntaxLibUtils.parseElementBlockParams(element); - _glimmerSyntaxLibUtils.appendChild(parent, element); - }, - markTagAsSelfClosing: function () { - this.currentNode.selfClosing = true; - }, - // Tags - name - appendToTagName: function (char) { - this.currentNode.name += char; - }, - // Tags - attributes - beginAttribute: function () { - var tag = this.currentNode; - if (tag.type === 'EndTag') { - throw new Error("Invalid end tag: closing tag must not have attributes, " + ("in `" + tag.name + "` (on line " + this.tokenizer.line + ").")); - } - this.currentAttribute = { - name: "", - parts: [], - isQuoted: false, - isDynamic: false, - start: _glimmerSyntaxLibBuilders.default.pos(this.tokenizer.line, this.tokenizer.column), - valueStartLine: null, - valueStartColumn: null - }; - }, - appendToAttributeName: function (char) { - this.currentAttribute.name += char; - }, - beginAttributeValue: function (isQuoted) { - this.currentAttribute.isQuoted = isQuoted; - this.currentAttribute.valueStartLine = this.tokenizer.line; - this.currentAttribute.valueStartColumn = this.tokenizer.column; - }, - appendToAttributeValue: function (char) { - var parts = this.currentAttribute.parts; - if (typeof parts[parts.length - 1] === 'string') { - parts[parts.length - 1] += char; - } else { - parts.push(char); - } - }, - finishAttributeValue: function () { - var _currentAttribute = this.currentAttribute; - var name = _currentAttribute.name; - var parts = _currentAttribute.parts; - var isQuoted = _currentAttribute.isQuoted; - var isDynamic = _currentAttribute.isDynamic; - var valueStartLine = _currentAttribute.valueStartLine; - var valueStartColumn = _currentAttribute.valueStartColumn; - - var value = assembleAttributeValue(parts, isQuoted, isDynamic, this.tokenizer.line); - value.loc = _glimmerSyntaxLibBuilders.default.loc(valueStartLine, valueStartColumn, this.tokenizer.line, this.tokenizer.column); - var loc = _glimmerSyntaxLibBuilders.default.loc(this.currentAttribute.start.line, this.currentAttribute.start.column, this.tokenizer.line, this.tokenizer.column); - var attribute = _glimmerSyntaxLibBuilders.default.attr(name, value, loc); - this.currentNode.attributes.push(attribute); - } - }; - - function assembleAttributeValue(parts, isQuoted, isDynamic, line) { - if (isDynamic) { - if (isQuoted) { - return assembleConcatenatedValue(parts); - } else { - if (parts.length === 1 || parts.length === 2 && parts[1] === '/') { - return parts[0]; - } else { - throw new Error("An unquoted attribute value must be a string or a mustache, " + "preceeded by whitespace or a '=' character, and " + ("followed by whitespace, a '>' character, or '/>' (on line " + line + ")")); - } - } - } else { - return _glimmerSyntaxLibBuilders.default.text(parts.length > 0 ? parts[0] : ""); - } + function build(ast) { + if (!ast) { + return ''; } - function assembleConcatenatedValue(parts) { - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - if (typeof part === 'string') { - parts[i] = _glimmerSyntaxLibBuilders.default.text(parts[i]); - } else { - if (part.type !== 'MustacheStatement') { - throw new Error("Unsupported node in quoted attribute value: " + part.type); - } - } - } - return _glimmerSyntaxLibBuilders.default.concat(parts); - } - function validateEndTag(tag, element, selfClosing) { - var error = undefined; - if (voidMap[tag.name] && !selfClosing) { - // EngTag is also called by StartTag for void and self-closing tags (i.e. - // <input> or <br />, so we need to check for that here. Otherwise, we would - // throw an error for those cases. - error = "Invalid end tag " + formatEndTagInfo(tag) + " (void elements cannot have end tags)."; - } else if (element.tag === undefined) { - error = "Closing tag " + formatEndTagInfo(tag) + " without an open tag."; - } else if (element.tag !== tag.name) { - error = "Closing tag " + formatEndTagInfo(tag) + " did not match last open tag `" + element.tag + "` (on line " + element.loc.start.line + ")."; - } - if (error) { - throw new Error(error); - } - } - function formatEndTagInfo(tag) { - return "`" + tag.name + "` (on line " + tag.loc.end.line + ")"; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItc3ludGF4L2xpYi9wYXJzZXIvdG9rZW5pemVyLWV2ZW50LWhhbmRsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLFFBQU0sT0FBTyxHQUVULE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFeEIsUUFBSSxZQUFZLEdBQUcscUZBQXFGLENBQUM7QUFDekcsZ0JBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsT0FBTyxFQUFBO0FBQ3JDLGVBQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDekIsQ0FBQyxDQUFDO3NCQUVZO0FBQ2IsYUFBSyxFQUFFLFlBQUE7QUFDTCxnQkFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDekI7O0FBSUQsb0JBQVksRUFBRSxZQUFBO0FBQ1osZ0JBQUksQ0FBQyxXQUFXLEdBQUcsa0NBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLGdCQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRztBQUNyQixzQkFBTSxFQUFFLElBQUk7QUFDWixxQkFBSyxFQUFFLGtDQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDbEQsbUJBQUcsRUFBRSxJQUFJO2FBQ1YsQ0FBQztTQUNIO0FBRUQsMkJBQW1CLEVBQUUsVUFBUyxJQUFJLEVBQUE7QUFDaEMsZ0JBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztTQUNoQztBQUVELHFCQUFhLEVBQUUsWUFBQTtBQUNiLGdCQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsa0NBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFN0UsbUNBbENLLFdBQVcsQ0FrQ0osSUFBSSxDQUFD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QU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN4QjtBQUVELGFBQUEsY0FBQSxDQUF3QixHQUFHLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBQTtBQUMvQyxZQUFJLEtBQUssWUFBQSxDQUFDO0FBRVYsWUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFOzs7O0FBSXJDLGlCQUFLLEdBQUcsa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsd0NBQXdDLENBQUM7U0FDL0YsTUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFO0FBQ3BDLGlCQUFLLEdBQUcsY0FBYyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO1NBQzFFLE1BQU0sSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEVBQUU7QUFDbkMsaUJBQUssR0FBRyxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsZ0NBQWdDLEdBQUcsT0FBTyxDQUFDLEdBQUcsR0FBRyxhQUFhLEdBQ3ZHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7U0FDdkM7QUFFRCxZQUFJLEtBQUssRUFBRTtBQUFFLGtCQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQUU7S0FDdkM7QUFFRCxhQUFBLGdCQUFBLENBQTBCLEdBQUcsRUFBQTtBQUMzQixlQUFPLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLGFBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0tBQ2hFIiwiZmlsZSI6InRva2VuaXplci1ldmVudC1oYW5kbGVycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiIGZyb20gXCIuLi9idWlsZGVyc1wiO1xuaW1wb3J0IHsgYXBwZW5kQ2hpbGQsIHBhcnNlRWxlbWVudEJsb2NrUGFyYW1zIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IHZvaWRNYXA6IHtcbiAgW3RhZ05hbWU6IHN0cmluZ106IGJvb2xlYW5cbn0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5sZXQgdm9pZFRhZ05hbWVzID0gXCJhcmVhIGJhc2UgYnIgY29sIGNvbW1hbmQgZW1iZWQgaHIgaW1nIGlucHV0IGtleWdlbiBsaW5rIG1ldGEgcGFyYW0gc291cmNlIHRyYWNrIHdiclwiO1xudm9pZFRhZ05hbWVzLnNwbGl0KFwiIFwiKS5mb3JFYWNoKHRhZ05hbWUgPT4ge1xuICB2b2lkTWFwW3RhZ05hbWVdID0gdHJ1ZTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmN1cnJlbnROb2RlID0gbnVsbDtcbiAgfSxcblxuICAvLyBDb21tZW50XG5cbiAgYmVnaW5Db21tZW50OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmN1cnJlbnROb2RlID0gYi5jb21tZW50KFwiXCIpO1xuICAgIHRoaXMuY3VycmVudE5vZGUubG9jID0ge1xuICAgICAgc291cmNlOiBudWxsLFxuICAgICAgc3RhcnQ6IGIucG9zKHRoaXMudGFnT3BlbkxpbmUsIHRoaXMudGFnT3BlbkNvbHVtbiksXG4gICAgICBlbmQ6IG51bGxcbiAgICB9O1xuICB9LFxuXG4gIGFwcGVuZFRvQ29tbWVudERhdGE6IGZ1bmN0aW9uKGNoYXIpIHtcbiAgICB0aGlzLmN1cnJlbnROb2RlLnZhbHVlICs9IGNoYXI7XG4gIH0sXG5cbiAgZmluaXNoQ29tbWVudDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jdXJyZW50Tm9kZS5sb2MuZW5kID0gYi5wb3ModGhpcy50b2tlbml6ZXIubGluZSwgdGhpcy50b2tlbml6ZXIuY29sdW1uKTtcblxuICAgIGFwcGVuZENoaWxkKHRoaXMuY3VycmVudEVsZW1lbnQoKSwgdGhpcy5jdXJyZW50Tm9kZSk7XG4gIH0sXG5cbiAgLy8gRGF0YVxuXG4gIGJlZ2luRGF0YTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jdXJyZW50Tm9kZSA9IGIudGV4dCgpO1xuICAgIHRoaXMuY3VycmVudE5vZGUubG9jID0ge1xuICAgICAgc291cmNlOiBudWxsLFxuICAgICAgc3RhcnQ6IGIucG9zKHRoaXMudG9rZW5pemVyLmxpbmUsIHRoaXMudG9rZW5pemVyLmNvbHVtbiksXG4gICAgICBlbmQ6IG51bGxcbiAgICB9O1xuICB9LFxuXG4gIGFwcGVuZFRvRGF0YTogZnVuY3Rpb24oY2hhcikge1xuICAgIHRoaXMuY3VycmVudE5vZGUuY2hhcnMgKz0gY2hhcjtcbiAgfSxcblxuICBmaW5pc2hEYXRhOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmN1cnJlbnROb2RlLmxvYy5lbmQgPSBiLnBvcyh0aGlzLnRva2VuaXplci5saW5lLCB0aGlzLnRva2VuaXplci5jb2x1bW4pO1xuXG4gICAgYXBwZW5kQ2hpbGQodGhpcy5jdXJyZW50RWxlbWVudCgpLCB0aGlzLmN1cnJlbnROb2RlKTtcbiAgfSxcblxuICAvLyBUYWdzIC0gYmFzaWNcblxuICB0YWdPcGVuOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRhZ09wZW5MaW5lID0gdGhpcy50b2tlbml6ZXIubGluZTtcbiAgICB0aGlzLnRhZ09wZW5Db2x1bW4gPSB0aGlzLnRva2VuaXplci5jb2x1bW47XG4gIH0sXG5cbiAgYmVnaW5TdGFydFRhZzogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jdXJyZW50Tm9kZSA9IHtcbiAgICAgIHR5cGU6ICdTdGFydFRhZycsXG4gICAgICBuYW1lOiBcIlwiLFxuICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICBtb2RpZmllcnM6IFtdLFxuICAgICAgc2VsZkNsb3Npbmc6IGZhbHNlLFxuICAgICAgbG9jOiBudWxsXG4gICAgfTtcbiAgfSxcblxuICBiZWdpbkVuZFRhZzogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jdXJyZW50Tm9kZSA9IHtcbiAgICAgIHR5cGU6ICdFbmRUYWcnLFxuICAgICAgbmFtZTogXCJcIixcbiAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgbW9kaWZpZXJzOiBbXSxcbiAgICAgIHNlbGZDbG9zaW5nOiBmYWxzZSxcbiAgICAgIGxvYzogbnVsbFxuICAgIH07XG4gIH0sXG5cbiAgZmluaXNoVGFnOiBmdW5jdGlvbigpIHtcbiAgICBsZXQgeyBsaW5lLCBjb2x1bW4gfSA9IHRoaXMudG9rZW5pemVyO1xuXG4gICAgbGV0IHRhZyA9IHRoaXMuY3VycmVudE5vZGU7XG4gICAgdGFnLmxvYyA9IGIubG9jKHRoaXMudGFnT3BlbkxpbmUsIHRoaXMudGFnT3BlbkNvbHVtbiwgbGluZSwgY29sdW1uKTtcblxuICAgIGlmICh0YWcudHlwZSA9PT0gJ1N0YXJ0VGFnJykge1xuICAgICAgdGhpcy5maW5pc2hTdGFydFRhZygpO1xuXG4gICAgICBpZiAodm9pZE1hcFt0YWcubmFtZV0gfHwgdGFnLnNlbGZDbG9zaW5nKSB7XG4gICAgICAgIHRoaXMuZmluaXNoRW5kVGFnKHRydWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGFnLnR5cGUgPT09ICdFbmRUYWcnKSB7XG4gICAgICB0aGlzLmZpbmlzaEVuZFRhZyhmYWxzZSk7XG4gICAgfVxuICB9LFxuXG4gIGZpbmlzaFN0YXJ0VGFnOiBmdW5jdGlvbigpIHtcbiAgICBsZXQgeyBuYW1lLCBhdHRyaWJ1dGVzLCBtb2RpZmllcnMgfSA9IHRoaXMuY3VycmVudE5vZGU7XG5cbiAgICBsZXQgbG9jID0gYi5sb2ModGhpcy50YWdPcGVuTGluZSwgdGhpcy50YWdPcGVuQ29sdW1uKTtcbiAgICBsZXQgZWxlbWVudCA9IGIuZWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzLCBtb2RpZmllcnMsIFtdLCBsb2MpO1xuICAgIHRoaXMuZWxlbWVudFN0YWNrLnB1c2goZWxlbWVudCk7XG4gIH0sXG5cbiAgZmluaXNoRW5kVGFnOiBmdW5jdGlvbihpc1ZvaWQpIHtcbiAgICBsZXQgdGFnID0gdGhpcy5jdXJyZW50Tm9kZTtcblxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5lbGVtZW50U3RhY2sucG9wKCk7XG4gICAgbGV0IHBhcmVudCA9IHRoaXMuY3VycmVudEVsZW1lbnQoKTtcblxuICAgIHZhbGlkYXRlRW5kVGFnKHRhZywgZWxlbWVudCwgaXNWb2lkKTtcblxuICAgIGVsZW1lbnQubG9jLmVuZC5saW5lID0gdGhpcy50b2tlbml6ZXIubGluZTtcbiAgICBlbGVtZW50LmxvYy5lbmQuY29sdW1uID0gdGhpcy50b2tlbml6ZXIuY29sdW1uO1xuXG4gICAgcGFyc2VFbGVtZW50QmxvY2tQYXJhbXMoZWxlbWVudCk7XG4gICAgYXBwZW5kQ2hpbGQocGFyZW50LCBlbGVtZW50KTtcbiAgfSxcblxuICBtYXJrVGFnQXNTZWxmQ2xvc2luZzogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jdXJyZW50Tm9kZS5zZWxmQ2xvc2luZyA9IHRydWU7XG4gIH0sXG5cbiAgLy8gVGFncyAtIG5hbWVcblxuICBhcHBlbmRUb1RhZ05hbWU6IGZ1bmN0aW9uKGNoYXIpIHtcbiAgICB0aGlzLmN1cnJlbnROb2RlLm5hbWUgKz0gY2hhcjtcbiAgfSxcblxuICAvLyBUYWdzIC0gYXR0cmlidXRlc1xuXG4gIGJlZ2luQXR0cmlidXRlOiBmdW5jdGlvbigpIHtcbiAgICBsZXQgdGFnID0gdGhpcy5jdXJyZW50Tm9kZTtcbiAgICBpZiAodGFnLnR5cGUgPT09ICdFbmRUYWcnKSB7XG4gICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBlbmQgdGFnOiBjbG9zaW5nIHRhZyBtdXN0IG5vdCBoYXZlIGF0dHJpYnV0ZXMsIGAgK1xuICAgICAgICBgaW4gXFxgJHt0YWcubmFtZX1cXGAgKG9uIGxpbmUgJHt0aGlzLnRva2VuaXplci5saW5lfSkuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRBdHRyaWJ1dGUgPSB7XG4gICAgICBuYW1lOiBcIlwiLFxuICAgICAgcGFydHM6IFtdLFxuICAgICAgaXNRdW90ZWQ6IGZhbHNlLFxuICAgICAgaXNEeW5hbWljOiBmYWxzZSxcbiAgICAgIHN0YXJ0OiBiLnBvcyh0aGlzLnRva2VuaXplci5saW5lLCB0aGlzLnRva2VuaXplci5jb2x1bW4pLFxuICAgICAgdmFsdWVTdGFydExpbmU6IG51bGwsXG4gICAgICB2YWx1ZVN0YXJ0Q29sdW1uOiBudWxsXG4gICAgfTtcbiAgfSxcblxuICBhcHBlbmRUb0F0dHJpYnV0ZU5hbWU6IGZ1bmN0aW9uKGNoYXIpIHtcbiAgICB0aGlzLmN1cnJlbnRBdHRyaWJ1dGUubmFtZSArPSBjaGFyO1xuICB9LFxuXG4gIGJlZ2luQXR0cmlidXRlVmFsdWU6IGZ1bmN0aW9uKGlzUXVvdGVkKSB7XG4gICAgdGhpcy5jdXJyZW50QXR0cmlidXRlLmlzUXVvdGVkID0gaXNRdW90ZWQ7XG4gICAgdGhpcy5jdXJyZW50QXR0cmlidXRlLnZhbHVlU3RhcnRMaW5lID0gdGhpcy50b2tlbml6ZXIubGluZTtcbiAgICB0aGlzLmN1cnJlbnRBdHRyaWJ1dGUudmFsdWVTdGFydENvbHVtbiA9IHRoaXMudG9rZW5pemVyLmNvbHVtbjtcbiAgfSxcblxuICBhcHBlbmRUb0F0dHJpYnV0ZVZhbHVlOiBmdW5jdGlvbihjaGFyKSB7XG4gICAgbGV0IHBhcnRzID0gdGhpcy5jdXJyZW50QXR0cmlidXRlLnBhcnRzO1xuXG4gICAgaWYgKHR5cGVvZiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdICs9IGNoYXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRzLnB1c2goY2hhcik7XG4gICAgfVxuICB9LFxuXG4gIGZpbmlzaEF0dHJpYnV0ZVZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICBsZXQgeyBuYW1lLCBwYXJ0cywgaXNRdW90ZWQsIGlzRHluYW1pYywgdmFsdWVTdGFydExpbmUsIHZhbHVlU3RhcnRDb2x1bW4gfSA9IHRoaXMuY3VycmVudEF0dHJpYnV0ZTtcbiAgICBsZXQgdmFsdWUgPSBhc3NlbWJsZUF0dHJpYnV0ZVZhbHVlKHBhcnRzLCBpc1F1b3RlZCwgaXNEeW5hbWljLCB0aGlzLnRva2VuaXplci5saW5lKTtcbiAgICB2YWx1ZS5sb2MgPSBiLmxvYyhcbiAgICAgIHZhbHVlU3RhcnRMaW5lLCB2YWx1ZVN0YXJ0Q29sdW1uLFxuICAgICAgdGhpcy50b2tlbml6ZXIubGluZSwgdGhpcy50b2tlbml6ZXIuY29sdW1uXG4gICAgKTtcblxuICAgIGxldCBsb2MgPSBiLmxvYyhcbiAgICAgIHRoaXMuY3VycmVudEF0dHJpYnV0ZS5zdGFydC5saW5lLCB0aGlzLmN1cnJlbnRBdHRyaWJ1dGUuc3RhcnQuY29sdW1uLFxuICAgICAgdGhpcy50b2tlbml6ZXIubGluZSwgdGhpcy50b2tlbml6ZXIuY29sdW1uXG4gICAgKTtcblxuICAgIGxldCBhdHRyaWJ1dGUgPSBiLmF0dHIobmFtZSwgdmFsdWUsIGxvYyk7XG5cbiAgICB0aGlzLmN1cnJlbnROb2RlLmF0dHJpYnV0ZXMucHVzaChhdHRyaWJ1dGUpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBhc3NlbWJsZUF0dHJpYnV0ZVZhbHVlKHBhcnRzLCBpc1F1b3RlZCwgaXNEeW5hbWljLCBsaW5lKSB7XG4gIGlmIChpc0R5bmFtaWMpIHtcbiAgICBpZiAoaXNRdW90ZWQpIHtcbiAgICAgIHJldHVybiBhc3NlbWJsZUNvbmNhdGVuYXRlZFZhbHVlKHBhcnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSB8fCAocGFydHMubGVuZ3RoID09PSAyICYmIHBhcnRzWzFdID09PSAnLycpKSB7XG4gICAgICAgIHJldHVybiBwYXJ0c1swXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQW4gdW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBtdXN0YWNoZSwgYCArXG4gICAgICAgICAgYHByZWNlZWRlZCBieSB3aGl0ZXNwYWNlIG9yIGEgJz0nIGNoYXJhY3RlciwgYW5kIGAgK1xuICAgICAgICAgIGBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlLCBhICc+JyBjaGFyYWN0ZXIsIG9yICcvPicgKG9uIGxpbmUgJHtsaW5lfSlgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiLnRleHQoKHBhcnRzLmxlbmd0aCA+IDApID8gcGFydHNbMF0gOiBcIlwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlbWJsZUNvbmNhdGVuYXRlZFZhbHVlKHBhcnRzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgcGFydCA9IHBhcnRzW2ldO1xuXG4gICAgaWYgKHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgcGFydHNbaV0gPSBiLnRleHQocGFydHNbaV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocGFydC50eXBlICE9PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIG5vZGUgaW4gcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZTogXCIgKyBwYXJ0LnR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiLmNvbmNhdChwYXJ0cyk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRW5kVGFnKHRhZywgZWxlbWVudCwgc2VsZkNsb3NpbmcpIHtcbiAgbGV0IGVycm9yO1xuXG4gIGlmICh2b2lkTWFwW3RhZy5uYW1lXSAmJiAhc2VsZkNsb3NpbmcpIHtcbiAgICAvLyBFbmdUYWcgaXMgYWxzbyBjYWxsZWQgYnkgU3RhcnRUYWcgZm9yIHZvaWQgYW5kIHNlbGYtY2xvc2luZyB0YWdzIChpLmUuXG4gICAgLy8gPGlucHV0PiBvciA8YnIgLz4sIHNvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHRoYXQgaGVyZS4gT3RoZXJ3aXNlLCB3ZSB3b3VsZFxuICAgIC8vIHRocm93IGFuIGVycm9yIGZvciB0aG9zZSBjYXNlcy5cbiAgICBlcnJvciA9IFwiSW52YWxpZCBlbmQgdGFnIFwiICsgZm9ybWF0RW5kVGFnSW5mbyh0YWcpICsgXCIgKHZvaWQgZWxlbWVudHMgY2Fubm90IGhhdmUgZW5kIHRhZ3MpLlwiO1xuICB9IGVsc2UgaWYgKGVsZW1lbnQudGFnID09PSB1bmRlZmluZWQpIHtcbiAgICBlcnJvciA9IFwiQ2xvc2luZyB0YWcgXCIgKyBmb3JtYXRFbmRUYWdJbmZvKHRhZykgKyBcIiB3aXRob3V0IGFuIG9wZW4gdGFnLlwiO1xuICB9IGVsc2UgaWYgKGVsZW1lbnQudGFnICE9PSB0YWcubmFtZSkge1xuICAgIGVycm9yID0gXCJDbG9zaW5nIHRhZyBcIiArIGZvcm1hdEVuZFRhZ0luZm8odGFnKSArIFwiIGRpZCBub3QgbWF0Y2ggbGFzdCBvcGVuIHRhZyBgXCIgKyBlbGVtZW50LnRhZyArIFwiYCAob24gbGluZSBcIiArXG4gICAgICAgICAgICBlbGVtZW50LmxvYy5zdGFydC5saW5lICsgXCIpLlwiO1xuICB9XG5cbiAgaWYgKGVycm9yKSB7IHRocm93IG5ldyBFcnJvcihlcnJvcik7IH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0RW5kVGFnSW5mbyh0YWcpIHtcbiAgcmV0dXJuIFwiYFwiICsgdGFnLm5hbWUgKyBcImAgKG9uIGxpbmUgXCIgKyB0YWcubG9jLmVuZC5saW5lICsgXCIpXCI7XG59XG4iXX0= -enifed("glimmer-syntax/lib/traversal/errors", ["exports"], function (exports) { - "use strict"; + var output = []; - exports.cannotRemoveNode = cannotRemoveNode; - exports.cannotReplaceNode = cannotReplaceNode; - exports.cannotReplaceOrRemoveInKeyHandlerYet = cannotReplaceOrRemoveInKeyHandlerYet; - function TraversalError(message, node, parent, key) { - this.name = "TraversalError"; - this.message = message; - this.node = node; - this.parent = parent; - this.key = key; - } - TraversalError.prototype = Object.create(Error.prototype); - TraversalError.prototype.constructor = TraversalError; - exports.default = TraversalError; - - function cannotRemoveNode(node, parent, key) { - return new TraversalError("Cannot remove a node unless it is part of an array", node, parent, key); - } - - function cannotReplaceNode(node, parent, key) { - return new TraversalError("Cannot replace a node with multiple nodes unless it is part of an array", node, parent, key); - } - - function cannotReplaceOrRemoveInKeyHandlerYet(node, key) { - return new TraversalError("Replacing and removing in key handlers is not yet supported.", node, null, key); - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItc3ludGF4L2xpYi90cmF2ZXJzYWwvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGFBQUEsY0FBQSxDQUF3QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUE7QUFDaEQsWUFBSSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztBQUM3QixZQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUN2QixZQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixZQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixZQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztLQUNoQjtBQUVELGtCQUFjLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFELGtCQUFjLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUM7c0JBRXZDLGNBQWM7O0FBRTdCLGFBQUEsZ0JBQUEsQ0FBaUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUE7QUFDaEQsZUFBTyxJQUFJLGNBQWMsQ0FDdkIsb0RBQW9ELEVBQ3BELElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUNsQixDQUFDO0tBQ0g7O0FBRUQsYUFBQSxpQkFBQSxDQUFrQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBQTtBQUNqRCxlQUFPLElBQUksY0FBYyxDQUN2Qix5RUFBeUUsRUFDekUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQ2xCLENBQUM7S0FDSDs7QUFFRCxhQUFBLG9DQUFBLENBQXFELElBQUksRUFBRSxHQUFHLEVBQUE7QUFDNUQsZUFBTyxJQUFJLGNBQWMsQ0FDdkIsOERBQThELEVBQzlELElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUNoQixDQUFDO0tBQ0giLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gVHJhdmVyc2FsRXJyb3IobWVzc2FnZSwgbm9kZSwgcGFyZW50LCBrZXkpIHtcbiAgdGhpcy5uYW1lID0gXCJUcmF2ZXJzYWxFcnJvclwiO1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5vZGUgPSBub2RlO1xuICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5rZXkgPSBrZXk7XG59XG5cblRyYXZlcnNhbEVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcblRyYXZlcnNhbEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRyYXZlcnNhbEVycm9yO1xuXG5leHBvcnQgZGVmYXVsdCBUcmF2ZXJzYWxFcnJvcjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbm5vdFJlbW92ZU5vZGUobm9kZSwgcGFyZW50LCBrZXkpIHtcbiAgcmV0dXJuIG5ldyBUcmF2ZXJzYWxFcnJvcihcbiAgICBcIkNhbm5vdCByZW1vdmUgYSBub2RlIHVubGVzcyBpdCBpcyBwYXJ0IG9mIGFuIGFycmF5XCIsXG4gICAgbm9kZSwgcGFyZW50LCBrZXlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbm5vdFJlcGxhY2VOb2RlKG5vZGUsIHBhcmVudCwga2V5KSB7XG4gIHJldHVybiBuZXcgVHJhdmVyc2FsRXJyb3IoXG4gICAgXCJDYW5ub3QgcmVwbGFjZSBhIG5vZGUgd2l0aCBtdWx0aXBsZSBub2RlcyB1bmxlc3MgaXQgaXMgcGFydCBvZiBhbiBhcnJheVwiLFxuICAgIG5vZGUsIHBhcmVudCwga2V5XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5ub3RSZXBsYWNlT3JSZW1vdmVJbktleUhhbmRsZXJZZXQobm9kZSwga2V5KSB7XG4gIHJldHVybiBuZXcgVHJhdmVyc2FsRXJyb3IoXG4gICAgXCJSZXBsYWNpbmcgYW5kIHJlbW92aW5nIGluIGtleSBoYW5kbGVycyBpcyBub3QgeWV0IHN1cHBvcnRlZC5cIixcbiAgICBub2RlLCBudWxsLCBrZXlcbiAgKTtcbn1cbiJdfQ== -enifed('glimmer-syntax/lib/traversal/traverse', ['exports', 'glimmer-syntax/lib/types/visitor-keys', 'glimmer-syntax/lib/traversal/errors'], function (exports, _glimmerSyntaxLibTypesVisitorKeys, _glimmerSyntaxLibTraversalErrors) { - 'use strict'; - - exports.default = traverse; - exports.normalizeVisitor = normalizeVisitor; - - function visitNode(visitor, node) { - var handler = visitor[node.type] || visitor.All; - var result = undefined; - if (handler && handler.enter) { - result = handler.enter.call(null, node); + switch (ast.type) { + case 'Program': + { + var chainBlock = ast.chained && ast.body[0]; + if (chainBlock) { + chainBlock.chained = true; + } + var body = buildEach(ast.body).join(''); + output.push(body); } - if (result !== undefined && result !== null) { - if (JSON.stringify(node) === JSON.stringify(result)) { - result = undefined; - } else if (Array.isArray(result)) { - return visitArray(visitor, result) || result; - } else { - return visitNode(visitor, result) || result; - } + break; + case 'ElementNode': + output.push('<', ast.tag); + if (ast.attributes.length) { + output.push(' ', buildEach(ast.attributes).join(' ')); } - if (result === undefined) { - var keys = _glimmerSyntaxLibTypesVisitorKeys.default[node.type]; - for (var i = 0; i < keys.length; i++) { - visitKey(visitor, handler, node, keys[i]); - } - if (handler && handler.exit) { - result = handler.exit.call(null, node); - } + if (ast.modifiers.length) { + output.push(' ', buildEach(ast.modifiers).join(' ')); } - return result; - } - function visitKey(visitor, handler, node, key) { - var value = node[key]; - if (!value) { - return; - } - var keyHandler = handler && (handler.keys[key] || handler.keys.All); - var result = undefined; - if (keyHandler && keyHandler.enter) { - result = keyHandler.enter.call(null, node, key); - if (result !== undefined) { - throw _glimmerSyntaxLibTraversalErrors.cannotReplaceOrRemoveInKeyHandlerYet(node, key); - } - } - if (Array.isArray(value)) { - visitArray(visitor, value); + output.push('>'); + output.push.apply(output, buildEach(ast.children)); + output.push('</', ast.tag, '>'); + break; + case 'AttrNode': + output.push(ast.name, '='); + var value = build(ast.value); + if (ast.value.type === 'TextNode') { + output.push('"', value, '"'); } else { - var _result = visitNode(visitor, value); - if (_result !== undefined) { - assignKey(node, key, _result); - } + output.push(value); } - if (keyHandler && keyHandler.exit) { - result = keyHandler.exit.call(null, node, key); - if (result !== undefined) { - throw _glimmerSyntaxLibTraversalErrors.cannotReplaceOrRemoveInKeyHandlerYet(node, key); - } + break; + case 'ConcatStatement': + output.push('"'); + ast.parts.forEach(function (node) { + if (node.type === 'StringLiteral') { + output.push(node.original); + } else { + output.push(build(node)); + } + }); + output.push('"'); + break; + case 'TextNode': + output.push(ast.chars); + break; + case 'MustacheStatement': + { + output.push(compactJoin(['{{', pathParams(ast), '}}'])); } - } - function visitArray(visitor, array) { - for (var i = 0; i < array.length; i++) { - var result = visitNode(visitor, array[i]); - if (result !== undefined) { - i += spliceArray(array, i, result) - 1; - } + break; + case 'ElementModifierStatement': + { + output.push(compactJoin(['{{', pathParams(ast), '}}'])); } - } - function assignKey(node, key, result) { - if (result === null) { - throw _glimmerSyntaxLibTraversalErrors.cannotRemoveNode(node[key], node, key); - } else if (Array.isArray(result)) { - if (result.length === 1) { - node[key] = result[0]; - } else { - if (result.length === 0) { - throw _glimmerSyntaxLibTraversalErrors.cannotRemoveNode(node[key], node, key); - } else { - throw _glimmerSyntaxLibTraversalErrors.cannotReplaceNode(node[key], node, key); - } - } - } else { - node[key] = result; + break; + case 'PathExpression': + output.push(ast.original); + break; + case 'SubExpression': + { + output.push('(', pathParams(ast), ')'); } - } - function spliceArray(array, index, result) { - if (result === null) { - array.splice(index, 1); - return 0; - } else if (Array.isArray(result)) { - array.splice.apply(array, [index, 1].concat(result)); - return result.length; - } else { - array.splice(index, 1, result); - return 1; - } - } + break; + case 'BooleanLiteral': + output.push(ast.value ? 'true' : false); + break; + case 'BlockStatement': + { + var lines = []; - function traverse(node, visitor) { - visitNode(normalizeVisitor(visitor), node); - } + if (ast.chained) { + lines.push(['{{else ', pathParams(ast), '}}'].join('')); + } else { + lines.push(openBlock(ast)); + } - function normalizeVisitor(visitor) { - var normalizedVisitor = {}; - for (var type in visitor) { - var handler = visitor[type] || visitor.All; - var normalizedKeys = {}; - if (typeof handler === 'object') { - var keys = handler.keys; - if (keys) { - for (var key in keys) { - var keyHandler = keys[key]; - if (typeof keyHandler === 'object') { - normalizedKeys[key] = { - enter: typeof keyHandler.enter === 'function' ? keyHandler.enter : null, - exit: typeof keyHandler.exit === 'function' ? keyHandler.exit : null - }; - } else if (typeof keyHandler === 'function') { - normalizedKeys[key] = { - enter: keyHandler, - exit: null - }; - } - } - } - normalizedVisitor[type] = { - enter: typeof handler.enter === 'function' ? handler.enter : null, - exit: typeof handler.exit === 'function' ? handler.exit : null, - keys: normalizedKeys - }; - } else if (typeof handler === 'function') { - normalizedVisitor[type] = { - enter: handler, - exit: null, - keys: normalizedKeys - }; + lines.push(build(ast.program)); + + if (ast.inverse) { + if (!ast.inverse.chained) { + lines.push('{{else}}'); } - } - return normalizedVisitor; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItc3ludGF4L2xpYi90cmF2ZXJzYWwvdHJhdmVyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O3NCQStHQSxRQUFBOzs7QUF4R0EsYUFBQSxTQUFBLENBQW1CLE9BQU8sRUFBRSxJQUFJLEVBQUE7QUFDOUIsWUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ2hELFlBQUksTUFBTSxZQUFBLENBQUM7QUFFWCxZQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQzVCLGtCQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3pDO0FBRUQsWUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDM0MsZ0JBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ25ELHNCQUFNLEdBQUcsU0FBUyxDQUFDO2FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ2hDLHVCQUFPLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDO2FBQzlDLE1BQU07QUFDTCx1QkFBTyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQzthQUM3QztTQUNGO0FBRUQsWUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO0FBQ3hCLGdCQUFJLElBQUksR0FBRywwQ0FBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFbEMsaUJBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BDLHdCQUFRLENBQUMsT0FB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QUMsSUFBSSxHQUFHLElBQUk7QUFDaEUsd0JBQUksRUFBRSxjQUFjO2lCQUNyQixDQUFDO2FBQ0gsTUFBTSxJQUFJLE9BQU8sT0FBTyxLQUFLLFVBQVUsRUFBRTtBQUN4QyxpQ0FBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRztBQUN4Qix5QkFBSyxFQUFFLE9BQU87QUFDZCx3QkFBSSxFQUFFLElBQUk7QUFDVix3QkFBSSxFQUFFLGNBQWM7aUJBQ3JCLENBQUM7YUFDSDtTQUNGO0FBRUQsZUFBTyxpQkFBaUIsQ0FBQztLQUMxQiIsImZpbGUiOiJ0cmF2ZXJzZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB2aXNpdG9yS2V5cyBmcm9tICcuLi90eXBlcy92aXNpdG9yLWtleXMnO1xuaW1wb3J0IHtcbiAgY2Fubm90UmVtb3ZlTm9kZSxcbiAgY2Fubm90UmVwbGFjZU5vZGUsXG4gIGNhbm5vdFJlcGxhY2VPclJlbW92ZUluS2V5SGFuZGxlcllldFxufSBmcm9tICcuL2Vycm9ycyc7XG5cbmZ1bmN0aW9uIHZpc2l0Tm9kZSh2aXNpdG9yLCBub2RlKSB7XG4gIGxldCBoYW5kbGVyID0gdmlzaXRvcltub2RlLnR5cGVdIHx8IHZpc2l0b3IuQWxsO1xuICBsZXQgcmVzdWx0O1xuXG4gIGlmIChoYW5kbGVyICYmIGhhbmRsZXIuZW50ZXIpIHtcbiAgICByZXN1bHQgPSBoYW5kbGVyLmVudGVyLmNhbGwobnVsbCwgbm9kZSk7XG4gIH1cblxuICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0ICE9PSBudWxsKSB7XG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KG5vZGUpID09PSBKU09OLnN0cmluZ2lmeShyZXN1bHQpKSB7XG4gICAgICByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgIHJldHVybiB2aXNpdEFycmF5KHZpc2l0b3IsIHJlc3VsdCkgfHwgcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmlzaXROb2RlKHZpc2l0b3IsIHJlc3VsdCkgfHwgcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgIGxldCBrZXlzID0gdmlzaXRvcktleXNbbm9kZS50eXBlXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmlzaXRLZXkodmlzaXRvciwgaGFuZGxlciwgbm9kZSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgaWYgKGhhbmRsZXIgJiYgaGFuZGxlci5leGl0KSB7XG4gICAgICByZXN1bHQgPSBoYW5kbGVyLmV4aXQuY2FsbChudWxsLCBub2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiB2aXNpdEtleSh2aXNpdG9yLCBoYW5kbGVyLCBub2RlLCBrZXkpIHtcbiAgbGV0IHZhbHVlID0gbm9kZVtrZXldO1xuICBpZiAoIXZhbHVlKSB7IHJldHVybjsgfVxuXG4gIGxldCBrZXlIYW5kbGVyID0gaGFuZGxlciAmJiAoaGFuZGxlci5rZXlzW2tleV0gfHwgaGFuZGxlci5rZXlzLkFsbCk7XG4gIGxldCByZXN1bHQ7XG5cbiAgaWYgKGtleUhhbmRsZXIgJiYga2V5SGFuZGxlci5lbnRlcikge1xuICAgIHJlc3VsdCA9IGtleUhhbmRsZXIuZW50ZXIuY2FsbChudWxsLCBub2RlLCBrZXkpO1xuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgY2Fubm90UmVwbGFjZU9yUmVtb3ZlSW5LZXlIYW5kbGVyWWV0KG5vZGUsIGtleSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgdmlzaXRBcnJheSh2aXNpdG9yLCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgbGV0IHJlc3VsdCA9IHZpc2l0Tm9kZSh2aXNpdG9yLCB2YWx1ZSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhc3NpZ25LZXkobm9kZSwga2V5LCByZXN1bHQpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChrZXlIYW5kbGVyICYmIGtleUhhbmRsZXIuZXhpdCkge1xuICAgIHJlc3VsdCA9IGtleUhhbmRsZXIuZXhpdC5jYWxsKG51bGwsIG5vZGUsIGtleSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBjYW5ub3RSZXBsYWNlT3JSZW1vdmVJbktleUhhbmRsZXJZZXQobm9kZSwga2V5KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmlzaXRBcnJheSh2aXNpdG9yLCBhcnJheSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IHJlc3VsdCA9IHZpc2l0Tm9kZSh2aXNpdG9yLCBhcnJheVtpXSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpICs9IHNwbGljZUFycmF5KGFycmF5LCBpLCByZXN1bHQpIC0gMTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzaWduS2V5KG5vZGUsIGtleSwgcmVzdWx0KSB7XG4gIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBjYW5ub3RSZW1vdmVOb2RlKG5vZGVba2V5XSwgbm9kZSwga2V5KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgbm9kZVtrZXldID0gcmVzdWx0WzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBjYW5ub3RSZW1vdmVOb2RlKG5vZGVba2V5XSwgbm9kZSwga2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGNhbm5vdFJlcGxhY2VOb2RlKG5vZGVba2V5XSwgbm9kZSwga2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbm9kZVtrZXldID0gcmVzdWx0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHNwbGljZUFycmF5KGFycmF5LCBpbmRleCwgcmVzdWx0KSB7XG4gIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAwO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgIGFycmF5LnNwbGljZShpbmRleCwgMSwgLi4ucmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICBhcnJheS5zcGxpY2UoaW5kZXgsIDEsIHJlc3VsdCk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhdmVyc2Uobm9kZSwgdmlzaXRvcikge1xuICB2aXNpdE5vZGUobm9ybWFsaXplVmlzaXRvcih2aXNpdG9yKSwgbm9kZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVWaXNpdG9yKHZpc2l0b3IpIHtcbiAgbGV0IG5vcm1hbGl6ZWRWaXNpdG9yID0ge307XG5cbiAgZm9yIChsZXQgdHlwZSBpbiB2aXNpdG9yKSB7XG4gICAgbGV0IGhhbmRsZXIgPSB2aXNpdG9yW3R5cGVdIHx8IHZpc2l0b3IuQWxsO1xuICAgIGxldCBub3JtYWxpemVkS2V5cyA9IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgbGV0IGtleXMgPSBoYW5kbGVyLmtleXM7XG4gICAgICBpZiAoa2V5cykge1xuICAgICAgICBmb3IgKGxldCBrZXkgaW4ga2V5cykge1xuICAgICAgICAgIGxldCBrZXlIYW5kbGVyID0ga2V5c1trZXldO1xuICAgICAgICAgIGlmICh0eXBlb2Yga2V5SGFuZGxlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRLZXlzW2tleV0gPSB7XG4gICAgICAgICAgICAgIGVudGVyOiAodHlwZW9mIGtleUhhbmRsZXIuZW50ZXIgPT09ICdmdW5jdGlvbicpID8ga2V5SGFuZGxlci5lbnRlciA6IG51bGwsXG4gICAgICAgICAgICAgIGV4aXQ6ICh0eXBlb2Yga2V5SGFuZGxlci5leGl0ID09PSAnZnVuY3Rpb24nKSA/IGtleUhhbmRsZXIuZXhpdCA6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Yga2V5SGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbm9ybWFsaXplZEtleXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgZW50ZXI6IGtleUhhbmRsZXIsXG4gICAgICAgICAgICAgIGV4aXQ6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5vcm1hbGl6ZWRWaXNpdG9yW3R5cGVdID0ge1xuICAgICAgICBlbnRlcjogKHR5cGVvZiBoYW5kbGVyLmVudGVyID09PSAnZnVuY3Rpb24nKSA/IGhhbmRsZXIuZW50ZXIgOiBudWxsLFxuICAgICAgICBleGl0OiAodHlwZW9mIGhhbmRsZXIuZXhpdCA9PT0gJ2Z1bmN0aW9uJykgPyBoYW5kbGVyLmV4aXQgOiBudWxsLFxuICAgICAgICBrZXlzOiBub3JtYWxpemVkS2V5c1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBub3JtYWxpemVkVmlzaXRvclt0eXBlXSA9IHtcbiAgICAgICAgZW50ZXI6IGhhbmRsZXIsXG4gICAgICAgIGV4aXQ6IG51bGwsXG4gICAgICAgIGtleXM6IG5vcm1hbGl6ZWRLZXlzXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkVmlzaXRvcjtcbn1cbiJdfQ== -enifed('glimmer-syntax/lib/traversal/walker', ['exports'], function (exports) { - 'use strict'; + lines.push(build(ast.inverse)); + } - function Walker() { - var order = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0]; + if (!ast.chained) { + lines.push(closeBlock(ast)); + } - this.order = order; - this.stack = []; - } - exports.default = Walker; - - Walker.prototype.visit = function (node, callback) { - if (!node) { - return; + output.push(lines.join('')); } - this.stack.push(node); - if (this.order === 'post') { - this.children(node, callback); - callback(node, this); - } else { - callback(node, this); - this.children(node, callback); + break; + case 'PartialStatement': + { + output.push(compactJoin(['{{>', pathParams(ast), '}}'])); } - this.stack.pop(); - }; - var visitors = { - Program: function (walker, node, callback) { - for (var i = 0; i < node.body.length; i++) { - walker.visit(node.body[i], callback); - } - }, - ElementNode: function (walker, node, callback) { - for (var i = 0; i < node.children.length; i++) { - walker.visit(node.children[i], callback); - } - }, - BlockStatement: function (walker, node, callback) { - walker.visit(node.program, callback); - walker.visit(node.inverse, callback); + break; + case 'CommentStatement': + { + output.push(compactJoin(['<!--', ast.value, '-->'])); } - }; - Walker.prototype.children = function (node, callback) { - var visitor = visitors[node.type]; - if (visitor) { - visitor(this, node, callback); + break; + case 'StringLiteral': + { + output.push('"' + ast.value + '"'); } - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItc3ludGF4L2xpYi90cmF2ZXJzYWwvd2Fsa2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGFBQUEsTUFBQSxHQUErQjtZQUFmLEtBQUsseURBQUMsU0FBUzs7QUFDN0IsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7S0FDakI7c0JBRWMsTUFBTTs7QUFFckIsVUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsVUFBUyxJQUFJLEVBQUUsUUFBUSxFQUFBO0FBQzlDLFlBQUksQ0FBQyxJQUFJLEVBQUU7QUFDVCxtQkFBTztTQUNSO0FBRUQsWUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFdEIsWUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sRUFBRTtBQUN6QixnQkFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDOUIsb0JBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdEIsTUFBTTtBQUNMLG9CQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3JCLGdCQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztTQUMvQjtBQUVELFlBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDbEIsQ0FBQztBQUVGLFFBQUksUUFBUSxHQUFHO0FBQ2IsZUFBTyxFQUFFLFVBQVMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUE7QUFDdEMsaUJBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxzQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQ3RDO1NBQ0Y7QUFFRCxtQkFBVyxFQUFFLFVBQVMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUE7QUFDMUMsaUJBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3QyxzQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzFDO1NBQ0Y7QUFFRCxzQkFBYyxFQUFFLFVBQVMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUE7QUFDN0Msa0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNyQyxrQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3RDO0tBQ0YsQ0FBQztBQUVGLFVBQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFLFFBQVEsRUFBQTtBQUNqRCxZQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFlBQUksT0FBTyxFQUFFO0FBQ1gsbUJBQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQy9CO0tBQ0YsQ0FBQyIsImZpbGUiOiJ3YWxrZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBXYWxrZXIob3JkZXI9dW5kZWZpbmVkKSB7XG4gIHRoaXMub3JkZXIgPSBvcmRlcjtcbiAgdGhpcy5zdGFjayA9IFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBXYWxrZXI7XG5cbldhbGtlci5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbihub2RlLCBjYWxsYmFjaykge1xuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLnN0YWNrLnB1c2gobm9kZSk7XG5cbiAgaWYgKHRoaXMub3JkZXIgPT09ICdwb3N0Jykge1xuICAgIHRoaXMuY2hpbGRyZW4obm9kZSwgY2FsbGJhY2spO1xuICAgIGNhbGxiYWNrKG5vZGUsIHRoaXMpO1xuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKG5vZGUsIHRoaXMpO1xuICAgIHRoaXMuY2hpbGRyZW4obm9kZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgdGhpcy5zdGFjay5wb3AoKTtcbn07XG5cbmxldCB2aXNpdG9ycyA9IHtcbiAgUHJvZ3JhbTogZnVuY3Rpb24od2Fsa2VyLCBub2RlLCBjYWxsYmFjaykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5ib2R5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB3YWxrZXIudmlzaXQobm9kZS5ib2R5W2ldLCBjYWxsYmFjayk7XG4gICAgfVxuICB9LFxuXG4gIEVsZW1lbnROb2RlOiBmdW5jdGlvbih3YWxrZXIsIG5vZGUsIGNhbGxiYWNrKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3YWxrZXIudmlzaXQobm9kZS5jaGlsZHJlbltpXSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfSxcblxuICBCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24od2Fsa2VyLCBub2RlLCBjYWxsYmFjaykge1xuICAgIHdhbGtlci52aXNpdChub2RlLnByb2dyYW0sIGNhbGxiYWNrKTtcbiAgICB3YWxrZXIudmlzaXQobm9kZS5pbnZlcnNlLCBjYWxsYmFjayk7XG4gIH1cbn07XG5cbldhbGtlci5wcm90b3R5cGUuY2hpbGRyZW4gPSBmdW5jdGlvbihub2RlLCBjYWxsYmFjaykge1xuICBsZXQgdmlzaXRvciA9IHZpc2l0b3JzW25vZGUudHlwZV07XG4gIGlmICh2aXNpdG9yKSB7XG4gICAgdmlzaXRvcih0aGlzLCBub2RlLCBjYWxsYmFjayk7XG4gIH1cbn07XG4iXX0= -enifed('glimmer-syntax/lib/types/visitor-keys', ['exports'], function (exports) { - 'use strict'; - - exports.default = { - Program: ['body'], - MustacheStatement: ['path', 'params', 'hash'], - BlockStatement: ['path', 'params', 'hash', 'program', 'inverse'], - ElementModifierStatement: ['path', 'params', 'hash'], - PartialStatement: ['name', 'params', 'hash'], - CommentStatement: [], - ElementNode: ['attributes', 'modifiers', 'children'], - AttrNode: ['value'], - TextNode: [], - ConcatStatement: ['parts'], - SubExpression: ['path', 'params', 'hash'], - PathExpression: [], - StringLiteral: [], - BooleanLiteral: [], - NumberLiteral: [], - NullLiteral: [], - UndefinedLiteral: [], - Hash: ['pairs'], - HashPair: ['value'] - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItc3ludGF4L2xpYi90eXBlcy92aXNpdG9yLWtleXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O3NCQUFlO0FBQ2IsZUFBTyxFQUFtQixDQUFDLE1BQU0sQ0FBQztBQUVsQyx5QkFBaUIsRUFBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO0FBQ3BELHNCQUFjLEVBQVksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDO0FBQzFFLGdDQUF3QixFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7QUFDcEQsd0JBQWdCLEVBQVUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztBQUNwRCx3QkFBZ0IsRUFBVSxFQUFFO0FBQzVCLG1CQUFXLEVBQWUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQztBQUNqRSxnQkFBUSxFQUFrQixDQUFDLE9BQU8sQ0FBQztBQUNuQyxnQkFBUSxFQUFrQixFQUFFO0FBRTVCLHVCQUFlLEVBQVcsQ0FBQyxPQUFPLENBQUM7QUFDbkMscUJBQWEsRUFBYSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO0FBQ3BELHNCQUFjLEVBQVksRUFBRTtBQUU1QixxQkFBYSxFQUFhLEVBQUU7QUFDNUIsc0JBQWMsRUFBWSxFQUFFO0FBQzVCLHFCQUFhLEVBQWEsRUFBRTtBQUM1QixtQkFBVyxFQUFlLEVBQUU7QUFDNUIsd0JBQWdCLEVBQVUsRUFBRTtBQUU1QixZQUFJLEVBQXNCLENBQUMsT0FBTyxDQUFDO0FBQ25DLGdCQUFRLEVBQWtCLENBQUMsT0FBTyxDQUFDO0tBQ3BDIiwiZmlsZSI6InZpc2l0b3Ita2V5cy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgUHJvZ3JhbTogICAgICAgICAgICAgICAgICBbJ2JvZHknXSxcblxuICBNdXN0YWNoZVN0YXRlbWVudDogICAgICAgIFsncGF0aCcsICdwYXJhbXMnLCAnaGFzaCddLFxuICBCbG9ja1N0YXRlbWVudDogICAgICAgICAgIFsncGF0aCcsICdwYXJhbXMnLCAnaGFzaCcsICdwcm9ncmFtJywgJ2ludmVyc2UnXSxcbiAgRWxlbWVudE1vZGlmaWVyU3RhdGVtZW50OiBbJ3BhdGgnLCAncGFyYW1zJywgJ2hhc2gnXSxcbiAgUGFydGlhbFN0YXRlbWVudDogICAgICAgICBbJ25hbWUnLCAncGFyYW1zJywgJ2hhc2gnXSxcbiAgQ29tbWVudFN0YXRlbWVudDogICAgICAgICBbXSxcbiAgRWxlbWVudE5vZGU6ICAgICAgICAgICAgICBbJ2F0dHJpYnV0ZXMnLCAnbW9kaWZpZXJzJywgJ2NoaWxkcmVuJ10sXG4gIEF0dHJOb2RlOiAgICAgICAgICAgICAgICAgWyd2YWx1ZSddLFxuICBUZXh0Tm9kZTogICAgICAgICAgICAgICAgIFtdLFxuXG4gIENvbmNhdFN0YXRlbWVudDogICAgICAgICAgWydwYXJ0cyddLFxuICBTdWJFeHByZXNzaW9uOiAgICAgICAgICAgIFsncGF0aCcsICdwYXJhbXMnLCAnaGFzaCddLFxuICBQYXRoRXhwcmVzc2lvbjogICAgICAgICAgIFtdLFxuXG4gIFN0cmluZ0xpdGVyYWw6ICAgICAgICAgICAgW10sXG4gIEJvb2xlYW5MaXRlcmFsOiAgICAgICAgICAgW10sXG4gIE51bWJlckxpdGVyYWw6ICAgICAgICAgICAgW10sXG4gIE51bGxMaXRlcmFsOiAgICAgICAgICAgICAgW10sXG4gIFVuZGVmaW5lZExpdGVyYWw6ICAgICAgICAgW10sXG5cbiAgSGFzaDogICAgICAgICAgICAgICAgICAgICBbJ3BhaXJzJ10sXG4gIEhhc2hQYWlyOiAgICAgICAgICAgICAgICAgWyd2YWx1ZSddXG59O1xuIl19 -enifed('glimmer-syntax/lib/utils', ['exports'], function (exports) { - // Regex to validate the identifier for block parameters. - // Based on the ID validation regex in Handlebars. - 'use strict'; - - exports.parseElementBlockParams = parseElementBlockParams; - exports.childrenFor = childrenFor; - exports.appendChild = appendChild; - var ID_INVERSE_PATTERN = /[!"#%-,\.\/;->@\[-\^`\{-~]/; - // Checks the element's attributes to see if it uses block params. - // If it does, registers the block params with the program and - // removes the corresponding attributes from the element. - - function parseElementBlockParams(element) { - var params = parseBlockParams(element); - if (params) element.blockParams = params; - } - - function parseBlockParams(element) { - var l = element.attributes.length; - var attrNames = []; - for (var i = 0; i < l; i++) { - attrNames.push(element.attributes[i].name); + break; + case 'NumberLiteral': + { + output.push(ast.value); } - var asIndex = attrNames.indexOf('as'); - if (asIndex !== -1 && l > asIndex && attrNames[asIndex + 1].charAt(0) === '|') { - // Some basic validation, since we're doing the parsing ourselves - var paramsString = attrNames.slice(asIndex).join(' '); - if (paramsString.charAt(paramsString.length - 1) !== '|' || paramsString.match(/\|/g).length !== 2) { - throw new Error('Invalid block parameters syntax: \'' + paramsString + '\''); - } - var params = []; - for (var i = asIndex + 1; i < l; i++) { - var param = attrNames[i].replace(/\|/g, ''); - if (param !== '') { - if (ID_INVERSE_PATTERN.test(param)) { - throw new Error('Invalid identifier for block parameters: \'' + param + '\' in \'' + paramsString + '\''); - } - params.push(param); - } - } - if (params.length === 0) { - throw new Error('Cannot use zero block parameters: \'' + paramsString + '\''); - } - element.attributes = element.attributes.slice(0, asIndex); - return params; + break; + case 'UndefinedLiteral': + { + output.push('undefined'); } - } - - function childrenFor(node) { - if (node.type === 'Program') { - return node.body; + break; + case 'NullLiteral': + { + output.push('null'); } - if (node.type === 'ElementNode') { - return node.children; + break; + case 'Hash': + { + output.push(ast.pairs.map(function (pair) { + return build(pair); + }).join(' ')); } - } - - function appendChild(parent, node) { - childrenFor(parent).push(node); - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItc3ludGF4L2xpYi91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUdBLFFBQUksa0JBQWtCLEdBQUcsNEJBQTRCLENBQUM7Ozs7O0FBTXRELGFBQUEsdUJBQUEsQ0FBd0MsT0FBTyxFQUFBO0FBQzdDLFlBQUksTUFBTSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZDLFlBQUksTUFBTSxFQUFFLE9BQU8sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0tBQzFDOztBQUVELGFBQUEsZ0JBQUEsQ0FBMEIsT0FBTyxFQUFBO0FBQy9CLFlBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0FBQ2xDLFlBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUVuQixhQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFCLHFCQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUM7QUFFRCxZQUFJLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRXRDLFlBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLElBQUksU0FBUyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFOztBQUU3RSxnQkFBSSxZQUFZLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsZ0JBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDbEcsc0JBQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQzlFO0FBRUQsZ0JBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNoQixpQkFBSyxJQUFJLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEMsb0JBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLG9CQUFJLEtBQUssS0FBSyxFQUFFLEVBQUU7QUFDaEIsd0JBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2xDLDhCQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxHQUFHLEtBQUssR0FBRyxVQUFVLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO3FCQUMzRztBQUNELDBCQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNwQjthQUNGO0FBRUQsZ0JBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDdkIsc0JBQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQy9FO0FBRUQsbUJBQU8sQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzFELG1CQUFPLE1BQU0sQ0FBQztTQUNmO0tBQ0Y7O0FBRUQsYUFBQSxXQUFBLENBQTRCLElBQUksRUFBQTtBQUM5QixZQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQzNCLG1CQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDbEI7QUFDRCxZQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO0FBQy9CLG1CQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDdEI7S0FDRjs7QUFFRCxhQUFBLFdBQUEsQ0FBNEIsTUFBTSxFQUFFLElBQUksRUFBQTtBQUN0QyxtQkFBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNoQyIsImZpbGUiOiJ1dGlscy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFJlZ2V4IHRvIHZhbGlkYXRlIHRoZSBpZGVudGlmaWVyIGZvciBibG9jayBwYXJhbWV0ZXJzLlxuLy8gQmFzZWQgb24gdGhlIElEIHZhbGlkYXRpb24gcmVnZXggaW4gSGFuZGxlYmFycy5cblxubGV0IElEX0lOVkVSU0VfUEFUVEVSTiA9IC9bIVwiIyUtLFxcLlxcLzstPkBcXFstXFxeYFxcey1+XS87XG5cbi8vIENoZWNrcyB0aGUgZWxlbWVudCdzIGF0dHJpYnV0ZXMgdG8gc2VlIGlmIGl0IHVzZXMgYmxvY2sgcGFyYW1zLlxuLy8gSWYgaXQgZG9lcywgcmVnaXN0ZXJzIHRoZSBibG9jayBwYXJhbXMgd2l0aCB0aGUgcHJvZ3JhbSBhbmRcbi8vIHJlbW92ZXMgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlcyBmcm9tIHRoZSBlbGVtZW50LlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFbGVtZW50QmxvY2tQYXJhbXMoZWxlbWVudCkge1xuICBsZXQgcGFyYW1zID0gcGFyc2VCbG9ja1BhcmFtcyhlbGVtZW50KTtcbiAgaWYgKHBhcmFtcykgZWxlbWVudC5ibG9ja1BhcmFtcyA9IHBhcmFtcztcbn1cblxuZnVuY3Rpb24gcGFyc2VCbG9ja1BhcmFtcyhlbGVtZW50KSB7XG4gIGxldCBsID0gZWxlbWVudC5hdHRyaWJ1dGVzLmxlbmd0aDtcbiAgbGV0IGF0dHJOYW1lcyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgYXR0ck5hbWVzLnB1c2goZWxlbWVudC5hdHRyaWJ1dGVzW2ldLm5hbWUpO1xuICB9XG5cbiAgbGV0IGFzSW5kZXggPSBhdHRyTmFtZXMuaW5kZXhPZignYXMnKTtcblxuICBpZiAoYXNJbmRleCAhPT0gLTEgJiYgbCA+IGFzSW5kZXggJiYgYXR0ck5hbWVzW2FzSW5kZXggKyAxXS5jaGFyQXQoMCkgPT09ICd8Jykge1xuICAgIC8vIFNvbWUgYmFzaWMgdmFsaWRhdGlvbiwgc2luY2Ugd2UncmUgZG9pbmcgdGhlIHBhcnNpbmcgb3Vyc2VsdmVzXG4gICAgbGV0IHBhcmFtc1N0cmluZyA9IGF0dHJOYW1lcy5zbGljZShhc0luZGV4KS5qb2luKCcgJyk7XG4gICAgaWYgKHBhcmFtc1N0cmluZy5jaGFyQXQocGFyYW1zU3RyaW5nLmxlbmd0aCAtIDEpICE9PSAnfCcgfHwgcGFyYW1zU3RyaW5nLm1hdGNoKC9cXHwvZykubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYmxvY2sgcGFyYW1ldGVycyBzeW50YXg6IFxcJycgKyBwYXJhbXNTdHJpbmcgKyAnXFwnJyk7XG4gICAgfVxuXG4gICAgbGV0IHBhcmFtcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBhc0luZGV4ICsgMTsgaSA8IGw7IGkrKykge1xuICAgICAgbGV0IHBhcmFtID0gYXR0ck5hbWVzW2ldLnJlcGxhY2UoL1xcfC9nLCAnJyk7XG4gICAgICBpZiAocGFyYW0gIT09ICcnKSB7XG4gICAgICAgIGlmIChJRF9JTlZFUlNFX1BBVFRFUk4udGVzdChwYXJhbSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaWRlbnRpZmllciBmb3IgYmxvY2sgcGFyYW1ldGVyczogXFwnJyArIHBhcmFtICsgJ1xcJyBpbiBcXCcnICsgcGFyYW1zU3RyaW5nICsgJ1xcJycpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXNlIHplcm8gYmxvY2sgcGFyYW1ldGVyczogXFwnJyArIHBhcmFtc1N0cmluZyArICdcXCcnKTtcbiAgICB9XG5cbiAgICBlbGVtZW50LmF0dHJpYnV0ZXMgPSBlbGVtZW50LmF0dHJpYnV0ZXMuc2xpY2UoMCwgYXNJbmRleCk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hpbGRyZW5Gb3Iobm9kZSkge1xuICBpZiAobm9kZS50eXBlID09PSAnUHJvZ3JhbScpIHtcbiAgICByZXR1cm4gbm9kZS5ib2R5O1xuICB9XG4gIGlmIChub2RlLnR5cGUgPT09ICdFbGVtZW50Tm9kZScpIHtcbiAgICByZXR1cm4gbm9kZS5jaGlsZHJlbjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kQ2hpbGQocGFyZW50LCBub2RlKSB7XG4gIGNoaWxkcmVuRm9yKHBhcmVudCkucHVzaChub2RlKTtcbn1cbiJdfQ== -enifed('glimmer-util/index', ['exports', 'glimmer-util/lib/namespaces', 'glimmer-util/lib/platform-utils', 'glimmer-util/lib/assert', 'glimmer-util/lib/logger', 'glimmer-util/lib/object-utils', 'glimmer-util/lib/guid', 'glimmer-util/lib/collections', 'glimmer-util/lib/list-utils'], function (exports, _glimmerUtilLibNamespaces, _glimmerUtilLibPlatformUtils, _glimmerUtilLibAssert, _glimmerUtilLibLogger, _glimmerUtilLibObjectUtils, _glimmerUtilLibGuid, _glimmerUtilLibCollections, _glimmerUtilLibListUtils) { - 'use strict'; - - exports.getAttrNamespace = _glimmerUtilLibNamespaces.getAttrNamespace; - exports.Option = _glimmerUtilLibPlatformUtils.Option; - exports.Maybe = _glimmerUtilLibPlatformUtils.Maybe; - exports.Opaque = _glimmerUtilLibPlatformUtils.Opaque; - exports.assert = _glimmerUtilLibAssert.default; - exports.LOGGER = _glimmerUtilLibLogger.default; - exports.Logger = _glimmerUtilLibLogger.Logger; - exports.LogLevel = _glimmerUtilLibLogger.LogLevel; - exports.assign = _glimmerUtilLibObjectUtils.assign; - exports.ensureGuid = _glimmerUtilLibGuid.ensureGuid; - exports.initializeGuid = _glimmerUtilLibGuid.initializeGuid; - exports.HasGuid = _glimmerUtilLibGuid.HasGuid; - exports.Stack = _glimmerUtilLibCollections.Stack; - exports.Dict = _glimmerUtilLibCollections.Dict; - exports.Set = _glimmerUtilLibCollections.Set; - exports.DictSet = _glimmerUtilLibCollections.DictSet; - exports.dict = _glimmerUtilLibCollections.dict; - exports.EMPTY_SLICE = _glimmerUtilLibListUtils.EMPTY_SLICE; - exports.LinkedList = _glimmerUtilLibListUtils.LinkedList; - exports.LinkedListNode = _glimmerUtilLibListUtils.LinkedListNode; - exports.ListNode = _glimmerUtilLibListUtils.ListNode; - exports.CloneableListNode = _glimmerUtilLibListUtils.CloneableListNode; - exports.ListSlice = _glimmerUtilLibListUtils.ListSlice; - exports.Slice = _glimmerUtilLibListUtils.Slice; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItdXRpbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7VUFJUyxnQkFBZ0IsNkJBQWhCLGdCQUFnQjtVQUNoQixNQUFNLGdDQUFOLE1BQU07VUFBRSxLQUFLLGdDQUFMLEtBQUs7VUFBRSxNQUFNLGdDQUFOLE1BQU07VUFDVixNQUFNLHlCQUFqQixPQUFPO1VBQ0ksTUFBTSx5QkFBakIsT0FBTztVQUFZLE1BQU0seUJBQU4sTUFBTTtVQUFFLFFBQVEseUJBQVIsUUFBUTtVQUVuQyxNQUFNLDhCQUFOLE1BQU07VUFDTixVQUFVLHVCQUFWLFVBQVU7VUFBRSxjQUFjLHVCQUFkLGNBQWM7VUFBRSxPQUFPLHVCQUFQLE9BQU87VUFFbkMsS0FBSyw4QkFBTCxLQUFLO1VBQUUsSUFBSSw4QkFBSixJQUFJO1VBQUUsR0FBRyw4QkFBSCxHQUFHO1VBQUUsT0FBTyw4QkFBUCxPQUFPO1VBQUUsSUFBSSw4QkFBSixJQUFJO1VBQy9CLFdBQVcsNEJBQVgsV0FBVztVQUFFLFVBQVUsNEJBQVYsVUFBVTtVQUFFLGNBQWMsNEJBQWQsY0FBYztVQUFFLFFBQVEsNEJBQVIsUUFBUTtVQUFFLGlCQUFpQiw0QkFBakIsaUJBQWlCO1VBQUUsU0FBUyw0QkFBVCxTQUFTO1VBQUUsS0FBSyw0QkFBTCxLQUFLIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBEZXN0cm95YWJsZSB7XG4gIGRlc3Ryb3koKTtcbn1cblxuZXhwb3J0IHsgZ2V0QXR0ck5hbWVzcGFjZSB9IGZyb20gJy4vbGliL25hbWVzcGFjZXMnO1xuZXhwb3J0IHsgT3B0aW9uLCBNYXliZSwgT3BhcXVlIH0gZnJvbSAnLi9saWIvcGxhdGZvcm0tdXRpbHMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhc3NlcnQgfSBmcm9tICcuL2xpYi9hc3NlcnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMT0dHRVIsIExvZ2dlciwgTG9nTGV2ZWwgfSBmcm9tICcuL2xpYi9sb2dnZXInO1xuXG5leHBvcnQgeyBhc3NpZ24gfSBmcm9tICcuL2xpYi9vYmplY3QtdXRpbHMnO1xuZXhwb3J0IHsgZW5zdXJlR3VpZCwgaW5pdGlhbGl6ZUd1aWQsIEhhc0d1aWQgfSBmcm9tICcuL2xpYi9ndWlkJztcblxuZXhwb3J0IHsgU3RhY2ssIERpY3QsIFNldCwgRGljdFNldCwgZGljdCB9IGZyb20gJy4vbGliL2NvbGxlY3Rpb25zJztcbmV4cG9ydCB7IEVNUFRZX1NMSUNFLCBMaW5rZWRMaXN0LCBMaW5rZWRMaXN0Tm9kZSwgTGlzdE5vZGUsIENsb25lYWJsZUxpc3ROb2RlLCBMaXN0U2xpY2UsIFNsaWNlIH0gZnJvbSAnLi9saWIvbGlzdC11dGlscyc7XG5cbmV4cG9ydCB0eXBlIEZJWE1FPFQsIHN0cmluZz4gPSBUO1xuIl19 -enifed("glimmer-util/lib/assert", ["exports"], function (exports) { - // import Logger from './logger'; - // let alreadyWarned = false; - "use strict"; - - exports.debugAssert = debugAssert; - exports.prodAssert = prodAssert; - - function debugAssert(test, msg) { - // if (!alreadyWarned) { - // alreadyWarned = true; - // Logger.warn("Don't leave debug assertions on in public builds"); - // } - if (!test) { - throw new Error(msg || "assertion failure"); + break; + case 'HashPair': + { + output.push(ast.key + '=' + build(ast.value)); } + break; } + return output.join(''); + } - function prodAssert() {} + function compact(array) { + var newArray = []; + array.forEach(function (a) { + if (typeof a !== 'undefined' && a !== null && a !== '') { + newArray.push(a); + } + }); + return newArray; + } - exports.default = debugAssert; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItdXRpbC9saWIvYXNzZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBSUEsYUFBQSxXQUFBLENBQTRCLElBQUksRUFBRSxHQUFHLEVBQUE7Ozs7O0FBTW5DLFlBQUksQ0FBQyxJQUFJLEVBQUU7QUFDVCxrQkFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksbUJBQW1CLENBQUMsQ0FBQztTQUM3QztLQUNGOztBQUVELGFBQUEsVUFBQSxHQUFBLEVBQStCOztzQkFFaEIsV0FBVyIsImZpbGUiOiJhc3NlcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgTG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcblxuLy8gbGV0IGFscmVhZHlXYXJuZWQgPSBmYWxzZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlYnVnQXNzZXJ0KHRlc3QsIG1zZykge1xuICAvLyBpZiAoIWFscmVhZHlXYXJuZWQpIHtcbiAgLy8gICBhbHJlYWR5V2FybmVkID0gdHJ1ZTtcbiAgLy8gICBMb2dnZXIud2FybihcIkRvbid0IGxlYXZlIGRlYnVnIGFzc2VydGlvbnMgb24gaW4gcHVibGljIGJ1aWxkc1wiKTtcbiAgLy8gfVxuXG4gIGlmICghdGVzdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihtc2cgfHwgXCJhc3NlcnRpb24gZmFpbHVyZVwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvZEFzc2VydCgpIHt9XG5cbmV4cG9ydCBkZWZhdWx0IGRlYnVnQXNzZXJ0O1xuIl19 -enifed('glimmer-util/lib/collections', ['exports', 'glimmer-util/lib/guid'], function (exports, _glimmerUtilLibGuid) { - 'use strict'; - - exports.dict = dict; - - 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 buildEach(asts) { + var output = []; + asts.forEach(function (node) { + output.push(build(node)); }); - function EmptyObject() {} - EmptyObject.prototype = proto; + return output; + } - function dict() { - // let d = Object.create(null); - // d.x = 1; - // delete d.x; - // return d; - return new EmptyObject(); - } + function pathParams(ast) { + var name = build(ast.name); + var path = build(ast.path); + var params = buildEach(ast.params).join(' '); + var hash = build(ast.hash); + return compactJoin([name, path, params, hash], ' '); + } - var DictSet = (function () { - function DictSet() { - this.dict = dict(); - } + function compactJoin(array, delimiter) { + return compact(array).join(delimiter || ''); + } - DictSet.prototype.add = function add(obj) { - if (typeof obj === 'string') this.dict[obj] = obj;else this.dict[_glimmerUtilLibGuid.ensureGuid(obj)] = obj; - return this; - }; - - DictSet.prototype.delete = function _delete(obj) { - if (typeof obj === 'string') delete this.dict[obj];else if (obj._guid) delete this.dict[obj._guid]; - }; - - DictSet.prototype.forEach = function forEach(callback) { - var dict = this.dict; - - Object.keys(dict).forEach(function (key) { - return callback(dict[key]); - }); - }; - - DictSet.prototype.toArray = function toArray() { - return Object.keys(this.dict); - }; - - return DictSet; - })(); - - exports.DictSet = DictSet; - - var Stack = (function () { - function Stack() { - this.stack = []; - this.current = null; - } - - Stack.prototype.push = function push(item) { - this.current = item; - this.stack.push(item); - }; - - Stack.prototype.pop = function pop() { - var item = this.stack.pop(); - var len = this.stack.length; - this.current = len === 0 ? null : this.stack[len - 1]; - return item; - }; - - Stack.prototype.isEmpty = function isEmpty() { - return this.stack.length === 0; - }; - - return Stack; - })(); - - exports.Stack = Stack; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItdXRpbC9saWIvY29sbGVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFZQSxRQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTs7O0FBRzlCLG1CQUFXLEVBQUU7QUFDWCxpQkFBSyxFQUFFLFNBQVM7QUFDaEIsc0JBQVUsRUFBRSxLQUFLO0FBQ2pCLG9CQUFRLEVBQUUsSUFBSTtTQUNmO0tBQ0YsQ0FBQyxDQUFDO0FBRUgsYUFBQSxXQUFBLEdBQUEsRUFBeUI7QUFDekIsZUFBVyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7O0FBRTlCLGFBQUEsSUFBQSxHQUFBOzs7OztBQUtFLGVBQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQztLQUMxQjs7UUFJRCxPQUFBO0FBR0UsaUJBSEYsT0FBQSxHQUdFO0FBQ0UsZ0JBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFLLENBQUM7U0FDdkI7O0FBTEgsZUFBQSxXQU9FLEdBQUcsR0FBQSxhQUFDLEdBQU0sRUFBQTtBQUNSLGdCQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFNLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQTVDRCxVQUFVLENBNENPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLG1CQUFPLElBQUksQ0FBQztTQUNiOztBQVhILGVBQUEsV0FhRSxNQUFNLEdBQUEsaUJBQUMsR0FBTSxFQUFBO0FBQ1gsZ0JBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLENBQUMsQ0FBQyxLQUNuRCxJQUFLLEdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFFLEdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuRTs7QUFoQkgsZUFBQSxXQWtCRSxPQUFPLEdBQUEsaUJBQUMsUUFBcUIsRUFBQTtnQkFDckIsSUFBSSxHQUFLLElBQUksQ0FBYixJQUFJOztBQUNWLGtCQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLEdBQUc7dUJBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUFBLENBQUMsQ0FBQztTQUN2RDs7QUFyQkgsZUFBQSxXQXVCRSxPQUFPLEdBQUEsbUJBQUE7QUFDTCxtQkFBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMvQjs7ZUF6QkgsT0FBQTs7Ozs7UUE0QkEsS0FBQTtBQUFBLGlCQUFBLEtBQUEsR0FBQTtBQUNVLGdCQUFBLENBQUEsS0FBSyxHQUFRLEVBQUUsQ0FBQztBQUNqQixnQkFBQSxDQUFBLE9BQU8sR0FBTSxJQUFJLENBQUM7U0FrQjFCOztBQXBCRCxhQUFBLFdBSUUsSUFBSSxHQUFBLGNBQUMsSUFBTyxFQUFBO0FBQ1YsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLGdCQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2Qjs7QUFQSCxhQUFBLFdBU0UsR0FBRyxHQUFBLGVBQUE7QUFDRCxnQkFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixnQkFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDNUIsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFdEQsbUJBQU8sSUFBSSxDQUFDO1NBQ2I7O0FBZkgsYUFBQSxXQWlCRSxPQUFPLEdBQUEsbUJBQUE7QUFDTCxtQkFBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7U0FDaEM7O2VBbkJILEtBQUEiLCJmaWxlIjoiY29sbGVjdGlvbnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIYXNHdWlkLCBlbnN1cmVHdWlkIH0gZnJvbSAnLi9ndWlkJztcblxuZXhwb3J0IGludGVyZmFjZSBEaWN0PFQ+IHtcbiAgW2luZGV4OiBzdHJpbmddOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldDxUPiB7XG4gIGFkZCh2YWx1ZTogVCk6IFNldDxUPjtcbiAgZGVsZXRlKHZhbHVlOiBUKTtcbiAgZm9yRWFjaChjYWxsYmFjazogKFQpID0+IHZvaWQpO1xufVxuXG5sZXQgcHJvdG8gPSBPYmplY3QuY3JlYXRlKG51bGwsIHtcbiAgLy8gd2l0aG91dCB0aGlzLCB3ZSB3aWxsIGFsd2F5cyBzdGlsbCBlbmQgdXAgd2l0aCAobmV3XG4gIC8vIEVtcHR5T2JqZWN0KCkpLmNvbnN0cnVjdG9yID09PSBPYmplY3RcbiAgY29uc3RydWN0b3I6IHtcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBFbXB0eU9iamVjdCgpIHt9XG5FbXB0eU9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcblxuZXhwb3J0IGZ1bmN0aW9uIGRpY3Q8VD4oKTogRGljdDxUPiB7XG4gIC8vIGxldCBkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gZC54ID0gMTtcbiAgLy8gZGVsZXRlIGQueDtcbiAgLy8gcmV0dXJuIGQ7XG4gIHJldHVybiBuZXcgRW1wdHlPYmplY3QoKTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0TWVtYmVyID0gSGFzR3VpZCB8IHN0cmluZztcblxuZXhwb3J0IGNsYXNzIERpY3RTZXQ8VCBleHRlbmRzIFNldE1lbWJlcj4gaW1wbGVtZW50cyBTZXQ8VD4ge1xuICBwcml2YXRlIGRpY3Q6IERpY3Q8VD47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kaWN0ID0gZGljdDxUPigpO1xuICB9XG5cbiAgYWRkKG9iajogVCk6IFNldDxUPiB7XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB0aGlzLmRpY3RbPGFueT5vYmpdID0gb2JqO1xuICAgIGVsc2UgdGhpcy5kaWN0W2Vuc3VyZUd1aWQoPGFueT5vYmopXSA9IG9iajtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRlbGV0ZShvYmo6IFQpIHtcbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIGRlbGV0ZSB0aGlzLmRpY3RbPGFueT5vYmpdO1xuICAgIGVsc2UgaWYgKChvYmogYXMgYW55KS5fZ3VpZCkgZGVsZXRlIHRoaXMuZGljdFsob2JqIGFzIGFueSkuX2d1aWRdO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjazogKFQpID0+IHZvaWQpIHtcbiAgICBsZXQgeyBkaWN0IH0gPSB0aGlzO1xuICAgIE9iamVjdC5rZXlzKGRpY3QpLmZvckVhY2goa2V5ID0+IGNhbGxiYWNrKGRpY3Rba2V5XSkpO1xuICB9XG5cbiAgdG9BcnJheSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZGljdCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0YWNrPFQ+IHtcbiAgcHJpdmF0ZSBzdGFjazogVFtdID0gW107XG4gIHB1YmxpYyBjdXJyZW50OiBUID0gbnVsbDtcblxuICBwdXNoKGl0ZW06IFQpIHtcbiAgICB0aGlzLmN1cnJlbnQgPSBpdGVtO1xuICAgIHRoaXMuc3RhY2sucHVzaChpdGVtKTtcbiAgfVxuXG4gIHBvcCgpOiBUIHtcbiAgICBsZXQgaXRlbSA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgbGV0IGxlbiA9IHRoaXMuc3RhY2subGVuZ3RoO1xuICAgIHRoaXMuY3VycmVudCA9IGxlbiA9PT0gMCA/IG51bGwgOiB0aGlzLnN0YWNrW2xlbiAtIDFdO1xuXG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMDtcbiAgfVxufVxuIl19 -enifed("glimmer-util/lib/guid", ["exports"], function (exports) { - "use strict"; - - exports.initializeGuid = initializeGuid; - exports.ensureGuid = ensureGuid; - var GUID = 0; - - function initializeGuid(object) { - return object._guid = ++GUID; + function blockParams(block) { + var params = block.program.blockParams; + if (params.length) { + return ' as |' + params.join(',') + '|'; } + } - function ensureGuid(object) { - return object._guid || initializeGuid(object); - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItdXRpbC9saWIvZ3VpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLFFBQUksSUFBSSxHQUFHLENBQUMsQ0FBQzs7QUFNYixhQUFBLGNBQUEsQ0FBK0IsTUFBZSxFQUFBO0FBQzVDLGVBQVEsTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFLElBQUksQ0FBRTtLQUNoQzs7QUFFRCxhQUFBLFVBQUEsQ0FBMkIsTUFBZSxFQUFBO0FBQ3hDLGVBQU8sTUFBTSxDQUFDLEtBQUssSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDL0MiLCJmaWxlIjoiZ3VpZC5qcyIsInNvdXJjZXNDb250ZW50IjpbImxldCBHVUlEID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBIYXNHdWlkIHtcbiAgX2d1aWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVHdWlkKG9iamVjdDogSGFzR3VpZCk6IG51bWJlciB7XG4gIHJldHVybiAob2JqZWN0Ll9ndWlkID0gKytHVUlEKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUd1aWQob2JqZWN0OiBIYXNHdWlkKTogbnVtYmVyIHtcbiAgcmV0dXJuIG9iamVjdC5fZ3VpZCB8fCBpbml0aWFsaXplR3VpZChvYmplY3QpO1xufSJdfQ== -enifed("glimmer-util/lib/list-utils", ["exports"], function (exports) { - "use strict"; + function openBlock(block) { + return ['{{#', pathParams(block), blockParams(block), '}}'].join(''); + } - var ListNode = function ListNode(value) { - this.next = null; - this.prev = null; - this.value = value; - }; - - exports.ListNode = ListNode; - - var LinkedList = (function () { - function LinkedList() { - this.clear(); - } - - LinkedList.fromSlice = function fromSlice(slice) { - var list = new LinkedList(); - slice.forEachNode(function (n) { - return list.append(n.clone()); - }); - return list; - }; - - LinkedList.prototype.head = function head() { - return this._head; - }; - - LinkedList.prototype.tail = function tail() { - return this._tail; - }; - - LinkedList.prototype.clear = function clear() { - this._head = this._tail = null; - }; - - LinkedList.prototype.isEmpty = function isEmpty() { - return this._head === null; - }; - - LinkedList.prototype.toArray = function toArray() { - var out = []; - this.forEachNode(function (n) { - return out.push(n); - }); - return out; - }; - - LinkedList.prototype.splice = function splice(start, end, reference) { - var before = undefined; - if (reference === null) { - before = this._tail; - this._tail = end; - } else { - before = reference.prev; - end.next = reference; - reference.prev = end; - } - if (before) { - before.next = start; - start.prev = before; - } - }; - - LinkedList.prototype.spliceList = function spliceList(list, reference) { - if (list.isEmpty()) return; - this.splice(list.head(), list.tail(), reference); - }; - - LinkedList.prototype.nextNode = function nextNode(node) { - return node.next; - }; - - LinkedList.prototype.prevNode = function prevNode(node) { - return node.prev; - }; - - LinkedList.prototype.forEachNode = function forEachNode(callback) { - var node = this._head; - while (node !== null) { - callback(node); - node = node.next; - } - }; - - LinkedList.prototype.contains = function contains(needle) { - var node = this._head; - while (node !== null) { - if (node === needle) return true; - node = node.next; - } - return false; - }; - - LinkedList.prototype.insertBefore = function insertBefore(node) { - var reference = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; - - if (reference === null) return this.append(node); - if (reference.prev) reference.prev.next = node;else this._head = node; - node.prev = reference.prev; - node.next = reference; - reference.prev = node; - return node; - }; - - LinkedList.prototype.append = function append(node) { - var tail = this._tail; - if (tail) { - tail.next = node; - node.prev = tail; - node.next = null; - } else { - this._head = node; - } - return this._tail = node; - }; - - LinkedList.prototype.pop = function pop() { - if (this._tail) return this.remove(this._tail); - return null; - }; - - LinkedList.prototype.prepend = function prepend(node) { - if (this._head) return this.insertBefore(node, this._head); - return this._head = this._tail = node; - }; - - LinkedList.prototype.remove = function remove(node) { - if (node.prev) node.prev.next = node.next;else this._head = node.next; - if (node.next) node.next.prev = node.prev;else this._tail = node.prev; - return node; - }; - - return LinkedList; - })(); - - exports.LinkedList = LinkedList; - - var LinkedListRemover = (function () { - function LinkedListRemover(node) { - this.node = node; - } - - LinkedListRemover.prototype.destroy = function destroy() { - var _node = this.node; - var prev = _node.prev; - var next = _node.next; - - prev.next = next; - next.prev = prev; - }; - - return LinkedListRemover; - })(); - - var ListSlice = (function () { - function ListSlice(head, tail) { - this._head = head; - this._tail = tail; - } - - ListSlice.toList = function toList(slice) { - var list = new LinkedList(); - slice.forEachNode(function (n) { - return list.append(n.clone()); - }); - return list; - }; - - ListSlice.prototype.forEachNode = function forEachNode(callback) { - var node = this._head; - while (node !== null) { - callback(node); - node = this.nextNode(node); - } - }; - - ListSlice.prototype.contains = function contains(needle) { - var node = this._head; - while (node !== null) { - if (node === needle) return true; - node = node.next; - } - return false; - }; - - ListSlice.prototype.head = function head() { - return this._head; - }; - - ListSlice.prototype.tail = function tail() { - return this._tail; - }; - - ListSlice.prototype.toArray = function toArray() { - var out = []; - this.forEachNode(function (n) { - return out.push(n); - }); - return out; - }; - - ListSlice.prototype.nextNode = function nextNode(node) { - if (node === this._tail) return null; - return node.next; - }; - - ListSlice.prototype.prevNode = function prevNode(node) { - if (node === this._head) return null; - return node.prev; - }; - - ListSlice.prototype.isEmpty = function isEmpty() { - return false; - }; - - return ListSlice; - })(); - - exports.ListSlice = ListSlice; - var EMPTY_SLICE = new ListSlice(null, null); - exports.EMPTY_SLICE = EMPTY_SLICE; + function closeBlock(block) { + return ['{{/', build(block.path), '}}'].join(''); + } }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItdXRpbC9saWIvbGlzdC11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7UUFTQSxRQUFBLEdBS0UsU0FMRixRQUFBLENBS2MsS0FBUSxFQUFBO0FBSmIsWUFBQSxDQUFBLElBQUksR0FBZ0IsSUFBSSxDQUFDO0FBQ3pCLFlBQUEsQ0FBQSxJQUFJLEdBQWdCLElBQUksQ0FBQztBQUk5QixZQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztLQUNwQjs7OztRQU9ILFVBQUE7QUFVRSxpQkFWRixVQUFBLEdBVUU7QUFDRSxnQkFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2Q7O0FBWkgsa0JBQUEsQ0FDUyxTQUFTLEdBQUEsbUJBQThCLEtBQWUsRUFBQTtBQUMzRCxnQkFBSSxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUssQ0FBQztBQUMvQixpQkFBSyxDQUFDLFdBQVcsQ0FBQyxVQUFBLENBQUM7dUJBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7YUFBQSxDQUFDLENBQUM7QUFDL0MsbUJBQU8sSUFBSSxDQUFDO1NBQ2I7O0FBTEgsa0JBQUEsV0FjRSxJQUFJLEdBQUEsZ0JBQUE7QUFDRixtQkFBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ25COztBQWhCSCxrQkFBQSxXQWtCRSxJQUFJLEdBQUEsZ0JBQUE7QUFDRixtQkFBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ25COztBQXBCSCxrQkFBQSxXQXNCRSxLQUFLLEdBQUEsaUJBQUE7QUFDSCxnQkFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNoQzs7QUF4Qkgsa0JBQUEsV0EwQkUsT0FBTyxHQUFBLG1CQUFBO0FBQ0wsbUJBQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUM7U0FDNUI7O0FBNUJILGtCQUFBLFdBOEJFLE9BQU8sR0FBQSxtQkFBQTtBQUNMLGdCQUFJLEdBQUcsR0FB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LFNBQUE7Ozs7QUFnRU8sUUFBTSxXQUFXLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDIiwiZmlsZSI6Imxpc3QtdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIERlc3Ryb3lhYmxlIHtcbiAgZGVzdHJveSgpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpbmtlZExpc3ROb2RlIHtcbiAgbmV4dDogTGlua2VkTGlzdE5vZGU7XG4gIHByZXY6IExpbmtlZExpc3ROb2RlO1xufVxuXG5leHBvcnQgY2xhc3MgTGlzdE5vZGU8VD4gaW1wbGVtZW50cyBMaW5rZWRMaXN0Tm9kZSB7XG4gIHB1YmxpYyBuZXh0OiBMaXN0Tm9kZTxUPiA9IG51bGw7XG4gIHB1YmxpYyBwcmV2OiBMaXN0Tm9kZTxUPiA9IG51bGw7XG4gIHB1YmxpYyB2YWx1ZTogVDtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vLyB3ZSBhcmUgdW5hYmxlIHRvIGV4cHJlc3MgdGhlIGNvbnN0cmFpbnQgdGhhdCBUJ3MgLnByZXYgYW5kIC5uZXh0IGFyZVxuLy8gdGhlbXNlbHZlcyBULiBIb3dldmVyLCBpdCB3aWxsIGFsd2F5cyBiZSB0cnVlLCBzbyB0cnVzdCB1cy5cbnR5cGUgdHJ1c3QgPSBhbnk7XG5cbmV4cG9ydCBjbGFzcyBMaW5rZWRMaXN0PFQgZXh0ZW5kcyBMaW5rZWRMaXN0Tm9kZT4gaW1wbGVtZW50cyBTbGljZTxUPiB7XG4gIHN0YXRpYyBmcm9tU2xpY2U8VSBleHRlbmRzIENsb25lYWJsZUxpc3ROb2RlPihzbGljZTogU2xpY2U8VT4pOiBMaW5rZWRMaXN0PFU+IHtcbiAgICBsZXQgbGlzdCA9IG5ldyBMaW5rZWRMaXN0PFU+KCk7XG4gICAgc2xpY2UuZm9yRWFjaE5vZGUobiA9PiBsaXN0LmFwcGVuZChuLmNsb25lKCkpKTtcbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIHByaXZhdGUgX2hlYWQ6IFQ7XG4gIHByaXZhdGUgX3RhaWw6IFQ7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jbGVhcigpO1xuICB9XG5cbiAgaGVhZCgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZDtcbiAgfVxuXG4gIHRhaWwoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3RhaWw7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLl9oZWFkID0gdGhpcy5fdGFpbCA9IG51bGw7XG4gIH1cblxuICBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9oZWFkID09PSBudWxsO1xuICB9XG5cbiAgdG9BcnJheSgpOiBUW10ge1xuICAgIGxldCBvdXQgPSBbXTtcbiAgICB0aGlzLmZvckVhY2hOb2RlKG4gPT4gb3V0LnB1c2gobikpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBzcGxpY2Uoc3RhcnQ6IFQsIGVuZDogVCwgcmVmZXJlbmNlOiBUKSB7XG4gICAgbGV0IGJlZm9yZTogVDtcblxuICAgIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICAgIGJlZm9yZSA9IHRoaXMuX3RhaWw7XG4gICAgICB0aGlzLl90YWlsID0gZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICBiZWZvcmUgPSA8VD5yZWZlcmVuY2UucHJldjtcbiAgICAgIGVuZC5uZXh0ID0gcmVmZXJlbmNlO1xuICAgICAgcmVmZXJlbmNlLnByZXYgPSBlbmQ7XG4gICAgfVxuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgYmVmb3JlLm5leHQgPSBzdGFydDtcbiAgICAgIHN0YXJ0LnByZXYgPSBiZWZvcmU7XG4gICAgfVxuICB9XG5cbiAgc3BsaWNlTGlzdChsaXN0OiBMaW5rZWRMaXN0PFQ+LCByZWZlcmVuY2U6IFQpIHtcbiAgICBpZiAobGlzdC5pc0VtcHR5KCkpIHJldHVybjtcbiAgICB0aGlzLnNwbGljZShsaXN0LmhlYWQoKSwgbGlzdC50YWlsKCksIHJlZmVyZW5jZSk7XG4gIH1cblxuICBuZXh0Tm9kZShub2RlOiBUKTogVCB7XG4gICAgcmV0dXJuIDx0cnVzdD5ub2RlLm5leHQ7XG4gIH1cblxuICBwcmV2Tm9kZShub2RlOiBUKTogVCB7XG4gICAgcmV0dXJuIDx0cnVzdD5ub2RlLnByZXY7XG4gIH1cblxuICBmb3JFYWNoTm9kZShjYWxsYmFjazogKG5vZGU6IFQpID0+IHZvaWQpIHtcbiAgICBsZXQgbm9kZSA9IHRoaXMuX2hlYWQ7XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgY2FsbGJhY2soPHRydXN0Pm5vZGUpO1xuICAgICAgbm9kZSA9IDx0cnVzdD5ub2RlLm5leHQ7XG4gICAgfVxuICB9XG5cbiAgY29udGFpbnMobmVlZGxlOiBUKTogYm9vbGVhbiB7XG4gICAgbGV0IG5vZGUgPSB0aGlzLl9oZWFkO1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlID09PSBuZWVkbGUpIHJldHVybiB0cnVlO1xuICAgICAgbm9kZSA9IDx0cnVzdD5ub2RlLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaW5zZXJ0QmVmb3JlKG5vZGU6IFQsIHJlZmVyZW5jZTogVCA9IG51bGwpOiBUIHtcbiAgICBpZiAocmVmZXJlbmNlID09PSBudWxsKSByZXR1cm4gdGhpcy5hcHBlbmQobm9kZSk7XG5cbiAgICBpZiAocmVmZXJlbmNlLnByZXYpIHJlZmVyZW5jZS5wcmV2Lm5leHQgPSBub2RlO1xuICAgIGVsc2UgdGhpcy5faGVhZCA9IG5vZGU7XG5cbiAgICBub2RlLnByZXYgPSByZWZlcmVuY2UucHJldjtcbiAgICBub2RlLm5leHQgPSByZWZlcmVuY2U7XG4gICAgcmVmZXJlbmNlLnByZXYgPSBub2RlO1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBhcHBlbmQobm9kZTogVCk6IFQge1xuICAgIGxldCB0YWlsID0gdGhpcy5fdGFpbDtcblxuICAgIGlmICh0YWlsKSB7XG4gICAgICB0YWlsLm5leHQgPSBub2RlO1xuICAgICAgbm9kZS5wcmV2ID0gdGFpbDtcbiAgICAgIG5vZGUubmV4dCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2hlYWQgPSBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiAodGhpcy5fdGFpbCA9IG5vZGUpO1xuICB9XG5cbiAgcG9wKCk6IFQge1xuICAgIGlmICh0aGlzLl90YWlsKSByZXR1cm4gdGhpcy5yZW1vdmUodGhpcy5fdGFpbCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcmVwZW5kKG5vZGU6IFQpOiBUIHtcbiAgICBpZiAodGhpcy5faGVhZCkgcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG5vZGUsIHRoaXMuX2hlYWQpO1xuICAgIHJldHVybiAodGhpcy5faGVhZCA9IHRoaXMuX3RhaWwgPSBub2RlKTtcbiAgfVxuXG4gIHJlbW92ZShub2RlOiBUKTogVCB7XG4gICAgaWYgKG5vZGUucHJldikgbm9kZS5wcmV2Lm5leHQgPSBub2RlLm5leHQ7XG4gICAgZWxzZSB0aGlzLl9oZWFkID0gPHRydXN0Pm5vZGUubmV4dDtcblxuICAgIGlmIChub2RlLm5leHQpIG5vZGUubmV4dC5wcmV2ID0gbm9kZS5wcmV2O1xuICAgIGVsc2UgdGhpcy5fdGFpbCA9IDx0cnVzdD5ub2RlLnByZXY7XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufVxuXG5jbGFzcyBMaW5rZWRMaXN0UmVtb3ZlciBpbXBsZW1lbnRzIERlc3Ryb3lhYmxlIHtcbiAgcHJpdmF0ZSBub2RlOiBMaW5rZWRMaXN0Tm9kZTtcblxuICBjb25zdHJ1Y3Rvcihub2RlOiBMaW5rZWRMaXN0Tm9kZSkge1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIGxldCB7IHByZXYsIG5leHQgfSA9IHRoaXMubm9kZTtcbiAgICBwcmV2Lm5leHQgPSBuZXh0O1xuICAgIG5leHQucHJldiA9IHByZXY7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbGljZTxUIGV4dGVuZHMgTGlua2VkTGlzdE5vZGU+IHtcbiAgaGVhZCgpOiBUO1xuICB0YWlsKCk6IFQ7XG4gIG5leHROb2RlKG5vZGU6IFQpOiBUO1xuICBwcmV2Tm9kZShub2RlOiBUKTogVDtcbiAgZm9yRWFjaE5vZGUoY2FsbGJhY2s6IChub2RlOiBUKSA9PiB2b2lkKTtcbiAgdG9BcnJheSgpOiBUW107XG4gIGlzRW1wdHkoKTogYm9vbGVhbjtcbiAgY29udGFpbnMobmVlZGxlOiBUKTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbG9uZWFibGVMaXN0Tm9kZSBleHRlbmRzIExpbmtlZExpc3ROb2RlIHtcbiAgY2xvbmUoKTogdGhpcztcbn1cblxuZXhwb3J0IGNsYXNzIExpc3RTbGljZTxUIGV4dGVuZHMgTGlua2VkTGlzdE5vZGU+IGltcGxlbWVudHMgU2xpY2U8VD4ge1xuICBzdGF0aWMgdG9MaXN0PFUgZXh0ZW5kcyBDbG9uZWFibGVMaXN0Tm9kZT4oc2xpY2U6IFNsaWNlPFU+KTogTGlua2VkTGlzdDxVPiB7XG4gICAgbGV0IGxpc3QgPSBuZXcgTGlua2VkTGlzdDxVPigpO1xuICAgIHNsaWNlLmZvckVhY2hOb2RlKG4gPT4gbGlzdC5hcHBlbmQobi5jbG9uZSgpKSk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBwcml2YXRlIF9oZWFkOiBUO1xuICBwcml2YXRlIF90YWlsOiBUO1xuXG4gIGNvbnN0cnVjdG9yKGhlYWQ6IFQsIHRhaWw6IFQpIHtcbiAgICB0aGlzLl9oZWFkID0gaGVhZDtcbiAgICB0aGlzLl90YWlsID0gdGFpbDtcbiAgfVxuXG4gIGZvckVhY2hOb2RlKGNhbGxiYWNrOiAobm9kZTogVCkgPT4gdm9pZCkge1xuICAgIGxldCBub2RlID0gdGhpcy5faGVhZDtcblxuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgIG5vZGUgPSB0aGlzLm5leHROb2RlKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnRhaW5zKG5lZWRsZTogVCk6IGJvb2xlYW4ge1xuICAgIGxldCBub2RlID0gdGhpcy5faGVhZDtcblxuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAobm9kZSA9PT0gbmVlZGxlKSByZXR1cm4gdHJ1ZTtcbiAgICAgIG5vZGUgPSA8dHJ1c3Q+bm9kZS5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGhlYWQoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX2hlYWQ7XG4gIH1cblxuICB0YWlsKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl90YWlsO1xuICB9XG5cbiAgdG9BcnJheSgpOiBUW10ge1xuICAgIGxldCBvdXQgPSBbXTtcbiAgICB0aGlzLmZvckVhY2hOb2RlKG4gPT4gb3V0LnB1c2gobikpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBuZXh0Tm9kZShub2RlOiBUKTogVCB7XG4gICAgaWYgKG5vZGUgPT09IHRoaXMuX3RhaWwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8VD5ub2RlLm5leHQ7XG4gIH1cblxuICBwcmV2Tm9kZShub2RlOiBUKTogVCB7XG4gICAgaWYgKG5vZGUgPT09IHRoaXMuX2hlYWQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8VD5ub2RlLnByZXY7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgRU1QVFlfU0xJQ0UgPSBuZXcgTGlzdFNsaWNlKG51bGwsIG51bGwpO1xuIl19 -enifed("glimmer-util/lib/logger", ["exports"], function (exports) { - "use strict"; - - var LogLevel; - exports.LogLevel = LogLevel; - (function (LogLevel) { - LogLevel[LogLevel["Trace"] = 0] = "Trace"; - LogLevel[LogLevel["Debug"] = 1] = "Debug"; - LogLevel[LogLevel["Warn"] = 2] = "Warn"; - LogLevel[LogLevel["Error"] = 3] = "Error"; - })(LogLevel || (exports.LogLevel = LogLevel = {})); - - var NullConsole = (function () { - function NullConsole() {} - - NullConsole.prototype.log = function log(message) {}; - - NullConsole.prototype.warn = function warn(message) {}; - - NullConsole.prototype.error = function error(message) {}; - - NullConsole.prototype.trace = function trace() {}; - - return NullConsole; - })(); - - var Logger = (function () { - function Logger(_ref) { - var console = _ref.console; - var level = _ref.level; - - this.f = ALWAYS; - this.force = ALWAYS; - this.console = console; - this.level = level; - } - - Logger.prototype.skipped = function skipped(level) { - return level < this.level; - }; - - Logger.prototype.trace = function trace(message) { - var _ref2 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var _ref2$stackTrace = _ref2.stackTrace; - var stackTrace = _ref2$stackTrace === undefined ? false : _ref2$stackTrace; - - if (this.skipped(LogLevel.Trace)) return; - this.console.log(message); - if (stackTrace) this.console.trace(); - }; - - Logger.prototype.debug = function debug(message) { - var _ref3 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var _ref3$stackTrace = _ref3.stackTrace; - var stackTrace = _ref3$stackTrace === undefined ? false : _ref3$stackTrace; - - if (this.skipped(LogLevel.Debug)) return; - this.console.log(message); - if (stackTrace) this.console.trace(); - }; - - Logger.prototype.warn = function warn(message) { - var _ref4 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var _ref4$stackTrace = _ref4.stackTrace; - var stackTrace = _ref4$stackTrace === undefined ? false : _ref4$stackTrace; - - if (this.skipped(LogLevel.Warn)) return; - this.console.warn(message); - if (stackTrace) this.console.trace(); - }; - - Logger.prototype.error = function error(message) { - if (this.skipped(LogLevel.Error)) return; - this.console.error(message); - }; - - return Logger; - })(); - - exports.Logger = Logger; - - var _console = typeof console === 'undefined' ? new NullConsole() : console; - var ALWAYS = new Logger({ console: _console, level: LogLevel.Trace }); - var LOG_LEVEL = LogLevel.Warn; - exports.default = new Logger({ console: _console, level: LOG_LEVEL }); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItdXRpbC9saWIvbG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFFBQVksUUFLWCxDQUFBOztBQUxELEtBQUEsVUFBWSxRQUFRLEVBQUE7QUFDbEIsZ0JBQUEsQ0FBQSxRQUFBLENBQUEsT0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsT0FBSyxDQUFBO0FBQ0wsZ0JBQUEsQ0FBQSxRQUFBLENBQUEsT0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsT0FBSyxDQUFBO0FBQ0wsZ0JBQUEsQ0FBQSxRQUFBLENBQUEsTUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsTUFBSSxDQUFBO0FBQ0osZ0JBQUEsQ0FBQSxRQUFBLENBQUEsT0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsT0FBSyxDQUFBO0tBQ04sQ0FBQSxDQUxXLFFBQVEsYUFBUixRQUtYLEdBTFcsUUFBUSxHQUFBLEVBQUEsQ0FBQSxDQUFBLENBS25COztRQVNELFdBQUE7aUJBQUEsV0FBQTs7QUFBQSxtQkFBQSxXQUNFLEdBQUcsR0FBQSxhQUFDLE9BQWUsRUFBQSxFQUFJOztBQUR6QixtQkFBQSxXQUVFLElBQUksR0FBQSxjQUFDLE9BQWUsRUFBQSxFQUFJOztBQUYxQixtQkFBQSxXQUdFLEtBQUssR0FBQSxlQUFDLE9BQWUsRUFBQSxFQUFJOztBQUgzQixtQkFBQSxXQUlFLEtBQUssR0FBQSxpQkFBQSxFQUFLOztlQUpaLFdBQUE7OztRQU9BLE1BQUE7QUFNRSxpQkFORixNQUFBLENBTWMsSUFBeUQsRUFBQTtnQkFBdkQsT0FBTyxHQUFULElBQXlELENBQXZELE9BQU87Z0JBQUUsS0FBSyxHQUFoQixJQUF5RCxDQUE5QyxLQUFLOztBQUhyQixnQkFBQSxDQUFBLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDWCxnQkFBQSxDQUFBLEtBQUssR0FBRyxNQUFNLENBQUM7QUFHcEIsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLGdCQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUNwQjs7QUFUSCxjQUFBLFdBV1UsT0FBTyxHQUFBLGlCQUFDLEtBQWUsRUFBQTtBQUM3QixtQkFBTyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUMzQjs7QUFiSCxjQUFBLFdBZUUsS0FBSyxHQUFBLGVBQUMsT0FBYSxFQUE2Qjs4RUFBRixFQUFFOzt5Q0FBekIsVUFBVTtnQkFBVixVQUFVLG9DQUFHLEtBQUs7O0FBQ3ZDLGdCQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU87QUFDekMsZ0JBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzFCLGdCQUFJLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3RDOztBQW5CSCxjQUFBLFdBcUJFLEtBQUssR0FBQSxlQUFDLE9BQVksRUFBNkI7OEVBQUYsRUFBRTs7eUNBQXpCLFVBQVU7Z0JBQVYsVUFBVSxvQ0FBRyxLQUFLOztBQUN0QyxnQkFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPO0FBQ3pDLGdCQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMxQixnQkFBSSxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN0Qzs7QUF6QkgsY0FBQSxXQTJCRSxJQUFJLEdBQUEsY0FBQyxPQUFZLEVBQTZCOzhFQUFGLEVBQUU7O3lDQUF6QixVQUFVO2dCQUFWLFVBQVUsb0NBQUcsS0FBSzs7QUFDckMsZ0JBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTztBQUN4QyxnQkFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0IsZ0JBQUksVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDdEM7O0FBL0JILGNBQUEsV0FpQ0UsS0FBSyxHQUFBLGVBQUMsT0FBb0IsRUFBQTtBQUN4QixnQkFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPO0FBQ3pDLGdCQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM3Qjs7ZUFwQ0gsTUFBQTs7Ozs7QUF1Q0EsUUFBSSxRQUFRLEdBQUcsQUFBQyxPQUFPLE9BQU8sS0FBSyxXQUFXLEdBQUksSUFBSSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUM7QUFFOUUsUUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUN4RSxRQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO3NCQUVqQixJQUFJLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDIiwiZmlsZSI6ImxvZ2dlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIExvZ0xldmVsIHtcbiAgVHJhY2UsXG4gIERlYnVnLFxuICBXYXJuLFxuICBFcnJvclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnNvbGUge1xuICBsb2cobWVzc2FnZTogc3RyaW5nKTtcbiAgd2FybihtZXNzYWdlOiBzdHJpbmcpO1xuICBlcnJvcihtZXNzYWdlOiBzdHJpbmcpO1xuICB0cmFjZSgpO1xufVxuXG5jbGFzcyBOdWxsQ29uc29sZSB7XG4gIGxvZyhtZXNzYWdlOiBzdHJpbmcpIHt9XG4gIHdhcm4obWVzc2FnZTogc3RyaW5nKSB7fVxuICBlcnJvcihtZXNzYWdlOiBzdHJpbmcpIHt9XG4gIHRyYWNlKCkge31cbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgY29uc29sZTogQ29uc29sZTtcbiAgcHVibGljIGxldmVsOiBMb2dMZXZlbDtcbiAgcHVibGljIGYgPSBBTFdBWVM7XG4gIHB1YmxpYyBmb3JjZSA9IEFMV0FZUztcblxuICBjb25zdHJ1Y3Rvcih7IGNvbnNvbGUsIGxldmVsIH06IHsgY29uc29sZTogQ29uc29sZSwgbGV2ZWw6IExvZ0xldmVsIH0pIHtcbiAgICB0aGlzLmNvbnNvbGUgPSBjb25zb2xlO1xuICAgIHRoaXMubGV2ZWwgPSBsZXZlbDtcbiAgfVxuXG4gIHByaXZhdGUgc2tpcHBlZChsZXZlbDogTG9nTGV2ZWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbGV2ZWwgPCB0aGlzLmxldmVsO1xuICB9XG5cbiAgdHJhY2UobWVzc2FnZT86IGFueSwgeyBzdGFja1RyYWNlID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgaWYgKHRoaXMuc2tpcHBlZChMb2dMZXZlbC5UcmFjZSkpIHJldHVybjtcbiAgICB0aGlzLmNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICAgIGlmIChzdGFja1RyYWNlKSB0aGlzLmNvbnNvbGUudHJhY2UoKTtcbiAgfVxuXG4gIGRlYnVnKG1lc3NhZ2U6IGFueSwgeyBzdGFja1RyYWNlID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgaWYgKHRoaXMuc2tpcHBlZChMb2dMZXZlbC5EZWJ1ZykpIHJldHVybjtcbiAgICB0aGlzLmNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICAgIGlmIChzdGFja1RyYWNlKSB0aGlzLmNvbnNvbGUudHJhY2UoKTtcbiAgfVxuXG4gIHdhcm4obWVzc2FnZTogYW55LCB7IHN0YWNrVHJhY2UgPSBmYWxzZSB9ID0ge30pIHtcbiAgICBpZiAodGhpcy5za2lwcGVkKExvZ0xldmVsLldhcm4pKSByZXR1cm47XG4gICAgdGhpcy5jb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgaWYgKHN0YWNrVHJhY2UpIHRoaXMuY29uc29sZS50cmFjZSgpO1xuICB9XG5cbiAgZXJyb3IobWVzc2FnZTogYW55IHwgYW55W10pIHtcbiAgICBpZiAodGhpcy5za2lwcGVkKExvZ0xldmVsLkVycm9yKSkgcmV0dXJuO1xuICAgIHRoaXMuY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgfVxufVxuXG5sZXQgX2NvbnNvbGUgPSAodHlwZW9mIGNvbnNvbGUgPT09ICd1bmRlZmluZWQnKSA/IG5ldyBOdWxsQ29uc29sZSgpIDogY29uc29sZTtcblxuY29uc3QgQUxXQVlTID0gbmV3IExvZ2dlcih7IGNvbnNvbGU6IF9jb25zb2xlLCBsZXZlbDogTG9nTGV2ZWwuVHJhY2UgfSk7XG5jb25zdCBMT0dfTEVWRUwgPSBMb2dMZXZlbC5XYXJuO1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgTG9nZ2VyKHsgY29uc29sZTogX2NvbnNvbGUsIGxldmVsOiBMT0dfTEVWRUwgfSk7XG4iXX0= -enifed('glimmer-util/lib/namespaces', ['exports'], function (exports) { - // There is a small whitelist of namespaced attributes specially - // enumerated in - // https://www.w3.org/TR/html/syntax.html#attributes-0 - // - // > When a foreign element has one of the namespaced attributes given by - // > the local name and namespace of the first and second cells of a row - // > from the following table, it must be written using the name given by - // > the third cell from the same row. - // - // In all other cases, colons are interpreted as a regular character - // with no special meaning: - // - // > No other namespaced attribute can be expressed in the HTML syntax. - 'use strict'; - - exports.getAttrNamespace = getAttrNamespace; - var XLINK = 'http://www.w3.org/1999/xlink'; - var XML = 'http://www.w3.org/XML/1998/namespace'; - var XMLNS = 'http://www.w3.org/2000/xmlns/'; - var WHITELIST = { - 'xlink:actuate': XLINK, - 'xlink:arcrole': XLINK, - 'xlink:href': XLINK, - 'xlink:role': XLINK, - 'xlink:show': XLINK, - 'xlink:title': XLINK, - 'xlink:type': XLINK, - 'xml:base': XML, - 'xml:lang': XML, - 'xml:space': XML, - 'xmlns': XMLNS, - 'xmlns:xlink': XMLNS - }; - - function getAttrNamespace(attrName) { - return WHITELIST[attrName] || null; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItdXRpbC9saWIvbmFtZXNwYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLFFBQU0sS0FBSyxHQUFHLDhCQUE4QixDQUFDO0FBQzdDLFFBQU0sR0FBRyxHQUFHLHNDQUFzQyxDQUFDO0FBQ25ELFFBQU0sS0FBSyxHQUFHLCtCQUErQixDQUFDO0FBRTlDLFFBQU0sU0FBUyxHQUFHO0FBQ2hCLHVCQUFlLEVBQUUsS0FBSztBQUN0Qix1QkFBZSxFQUFFLEtBQUs7QUFDdEIsb0JBQVksRUFBRSxLQUFLO0FBQ25CLG9CQUFZLEVBQUUsS0FBSztBQUNuQixvQkFBWSxFQUFFLEtBQUs7QUFDbkIscUJBQWEsRUFBRSxLQUFLO0FBQ3BCLG9CQUFZLEVBQUUsS0FBSztBQUNuQixrQkFBVSxFQUFFLEdBQUc7QUFDZixrQkFBVSxFQUFFLEdBQUc7QUFDZixtQkFBVyxFQUFFLEdBQUc7QUFDaEIsZUFBTyxFQUFFLEtBQUs7QUFDZCxxQkFBYSxFQUFFLEtBQUs7S0FDckIsQ0FBQzs7QUFFRixhQUFBLGdCQUFBLENBQWlDLFFBQVEsRUFBQTtBQUN2QyxlQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUM7S0FDcEMiLCJmaWxlIjoibmFtZXNwYWNlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZXJlIGlzIGEgc21hbGwgd2hpdGVsaXN0IG9mIG5hbWVzcGFjZWQgYXR0cmlidXRlcyBzcGVjaWFsbHlcbi8vIGVudW1lcmF0ZWQgaW5cbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sL3N5bnRheC5odG1sI2F0dHJpYnV0ZXMtMFxuLy9cbi8vID4gV2hlbiBhIGZvcmVpZ24gZWxlbWVudCBoYXMgb25lIG9mIHRoZSBuYW1lc3BhY2VkIGF0dHJpYnV0ZXMgZ2l2ZW4gYnlcbi8vID4gdGhlIGxvY2FsIG5hbWUgYW5kIG5hbWVzcGFjZSBvZiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjZWxscyBvZiBhIHJvd1xuLy8gPiBmcm9tIHRoZSBmb2xsb3dpbmcgdGFibGUsIGl0IG11c3QgYmUgd3JpdHRlbiB1c2luZyB0aGUgbmFtZSBnaXZlbiBieVxuLy8gPiB0aGUgdGhpcmQgY2VsbCBmcm9tIHRoZSBzYW1lIHJvdy5cbi8vXG4vLyBJbiBhbGwgb3RoZXIgY2FzZXMsIGNvbG9ucyBhcmUgaW50ZXJwcmV0ZWQgYXMgYSByZWd1bGFyIGNoYXJhY3RlclxuLy8gd2l0aCBubyBzcGVjaWFsIG1lYW5pbmc6XG4vL1xuLy8gPiBObyBvdGhlciBuYW1lc3BhY2VkIGF0dHJpYnV0ZSBjYW4gYmUgZXhwcmVzc2VkIGluIHRoZSBIVE1MIHN5bnRheC5cblxuY29uc3QgWExJTksgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayc7XG5jb25zdCBYTUwgPSAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJztcbmNvbnN0IFhNTE5TID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvJztcblxuY29uc3QgV0hJVEVMSVNUID0ge1xuICAneGxpbms6YWN0dWF0ZSc6IFhMSU5LLFxuICAneGxpbms6YXJjcm9sZSc6IFhMSU5LLFxuICAneGxpbms6aHJlZic6IFhMSU5LLFxuICAneGxpbms6cm9sZSc6IFhMSU5LLFxuICAneGxpbms6c2hvdyc6IFhMSU5LLFxuICAneGxpbms6dGl0bGUnOiBYTElOSyxcbiAgJ3hsaW5rOnR5cGUnOiBYTElOSyxcbiAgJ3htbDpiYXNlJzogWE1MLFxuICAneG1sOmxhbmcnOiBYTUwsXG4gICd4bWw6c3BhY2UnOiBYTUwsXG4gICd4bWxucyc6IFhNTE5TLFxuICAneG1sbnM6eGxpbmsnOiBYTUxOU1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEF0dHJOYW1lc3BhY2UoYXR0ck5hbWUpIHtcbiAgcmV0dXJuIFdISVRFTElTVFthdHRyTmFtZV0gfHwgbnVsbDtcbn0iXX0= -enifed('glimmer-util/lib/object-utils', ['exports'], function (exports) { - 'use strict'; - - exports.assign = assign; - var objKeys = Object.keys; - - function assign(obj) { - for (var i = 1; i < arguments.length; i++) { - var assignment = arguments[i]; - if (assignment === null || typeof assignment !== 'object') continue; - var keys = objKeys(assignment); - for (var j = 0; j < keys.length; j++) { - var key = keys[j]; - obj[key] = assignment[key]; - } - } - return obj; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItdXRpbC9saWIvb2JqZWN0LXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7UUFBYyxPQUFPLEdBQUssTUFBTSxDQUF4QixJQUFJOztBQVNaLGFBQUEsTUFBQSxDQUF1QixHQUFHLEVBQUE7QUFDeEIsYUFBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsZ0JBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixnQkFBSSxVQUFVLEtBQUssSUFBSSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxTQUFTO0FBQ3BFLGdCQUFJLElBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDL0IsaUJBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BDLG9CQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsbUJBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDNUI7U0FDRjtBQUNELGVBQU8sR0FBRyxDQUFDO0tBQ1oiLCJmaWxlIjoib2JqZWN0LXV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgeyBrZXlzOiBvYmpLZXlzIH0gPSBPYmplY3Q7XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ248VCwgVT4ob2JqOiBULCBhc3NpZ25tZW50czogVSk6IFQgJiBVO1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbjxULCBVLCBWPihvYmo6IFQsIGE6IFUsIGI6IFYpOiBUICYgVSAmIFY7XG5leHBvcnQgZnVuY3Rpb24gYXNzaWduPFQsIFUsIFYsIFc+KG9iajogVCwgYTogVSwgYjogViwgYzogVyk6IFQgJiBVICYgViAmIFc7XG5leHBvcnQgZnVuY3Rpb24gYXNzaWduPFQsIFUsIFYsIFcsIFg+KG9iajogVCwgYTogVSwgYjogViwgYzogVywgZDogWCk6IFQgJiBVICYgViAmIFcgJiBYO1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbjxULCBVLCBWLCBXLCBYLCBZPihvYmo6IFQsIGE6IFUsIGI6IFYsIGM6IFcsIGQ6IFgsIGU6IFkpOiBUICYgVSAmIFYgJiBXICYgWCAmIFk7XG5leHBvcnQgZnVuY3Rpb24gYXNzaWduPFQsIFUsIFYsIFcsIFgsIFksIFo+KG9iajogVCwgYTogVSwgYjogViwgYzogVywgZDogWCwgZTogWSwgZjogWik6IFQgJiBVICYgViAmIFcgJiBYICYgWSAmIFo7XG5leHBvcnQgZnVuY3Rpb24gYXNzaWduKHRhcmdldDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ24ob2JqKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGFzc2lnbm1lbnQgPSBhcmd1bWVudHNbaV07XG4gICAgaWYgKGFzc2lnbm1lbnQgPT09IG51bGwgfHwgdHlwZW9mIGFzc2lnbm1lbnQgIT09ICdvYmplY3QnKSBjb250aW51ZTtcbiAgICBsZXQga2V5cyA9IG9iaktleXMoYXNzaWdubWVudCk7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgaisrKSB7XG4gICAgICBsZXQga2V5ID0ga2V5c1tqXTtcbiAgICAgIG9ialtrZXldID0gYXNzaWdubWVudFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuIl19 -enifed("glimmer-util/lib/platform-utils", ["exports"], function (exports) { - "use strict"; - - exports.unwrap = unwrap; - - function unwrap(val) { - if (val === null || val === undefined) throw new Error("Expected value to be present"); - return val; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItdXRpbC9saWIvcGxhdGZvcm0tdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFJQSxhQUFBLE1BQUEsQ0FBMEIsR0FBYSxFQUFBO0FBQ3JDLFlBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLE1BQU0sSUFBSSxLQUFLLGdDQUFnQyxDQUFDO0FBQ3ZGLGVBQU8sR0FBRyxDQUFDO0tBQ1oiLCJmaWxlIjoicGxhdGZvcm0tdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBPcGFxdWUgPSB7fSB8IHZvaWQ7XG5leHBvcnQgdHlwZSBPcHRpb248VD4gPSBUIHwgbnVsbDsgLy8gdHNsaW50OmRpc2FibGUtbGluZVxuZXhwb3J0IHR5cGUgTWF5YmU8VD4gPSBPcHRpb248VD4gfCB1bmRlZmluZWQ7IC8vIHRzbGludDpkaXNhYmxlLWxpbmVcblxuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcDxUPih2YWw6IE1heWJlPFQ+KTogVCB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgdmFsdWUgdG8gYmUgcHJlc2VudGApO1xuICByZXR1cm4gdmFsO1xufVxuIl19 -enifed("glimmer-util/lib/quoting", ["exports"], function (exports) { - "use strict"; - - exports.hash = hash; - exports.repeat = repeat; - function escapeString(str) { - str = str.replace(/\\/g, "\\\\"); - str = str.replace(/"/g, '\\"'); - str = str.replace(/\n/g, "\\n"); - return str; - } - exports.escapeString = escapeString; - - function string(str) { - return '"' + escapeString(str) + '"'; - } - exports.string = string; - - function array(a) { - return "[" + a + "]"; - } - exports.array = array; - - function hash(pairs) { - return "{" + pairs.join(", ") + "}"; - } - - function repeat(chars, times) { - var str = ""; - while (times--) { - str += chars; - } - return str; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItdXRpbC9saWIvcXVvdGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGFBQUEsWUFBQSxDQUFzQixHQUFHLEVBQUE7QUFDdkIsV0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2pDLFdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQixXQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEMsZUFBTyxHQUFHLENBQUM7S0FDWjtZQUVRLFlBQVksR0FBWixZQUFZOztBQUVyQixhQUFBLE1BQUEsQ0FBZ0IsR0FBRyxFQUFBO0FBQ2pCLGVBQU8sR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDdEM7WUFFUSxNQUFNLEdBQU4sTUFBTTs7QUFFZixhQUFBLEtBQUEsQ0FBZSxDQUFDLEVBQUE7QUFDZCxlQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ3RCO1lBRVEsS0FBSyxHQUFMLEtBQUs7O0FBRWQsYUFBQSxJQUFBLENBQXFCLEtBQUssRUFBQTtBQUN4QixlQUFPLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyQzs7QUFFRCxhQUFBLE1BQUEsQ0FBdUIsS0FBSyxFQUFFLEtBQUssRUFBQTtBQUNqQyxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDYixlQUFPLEtBQUssRUFBRSxFQUFFO0FBQ2QsZUFBRyxJQUFJLEtBQUssQ0FBQztTQUNkO0FBQ0QsZUFBTyxHQUFHLENBQUM7S0FDWiIsImZpbGUiOiJxdW90aW5nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gZXNjYXBlU3RyaW5nKHN0cikge1xuICBzdHIgPSBzdHIucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpO1xuICBzdHIgPSBzdHIucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpO1xuICBzdHIgPSBzdHIucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIik7XG4gIHJldHVybiBzdHI7XG59XG5cbmV4cG9ydCB7IGVzY2FwZVN0cmluZyB9O1xuXG5mdW5jdGlvbiBzdHJpbmcoc3RyKSB7XG4gIHJldHVybiAnXCInICsgZXNjYXBlU3RyaW5nKHN0cikgKyAnXCInO1xufVxuXG5leHBvcnQgeyBzdHJpbmcgfTtcblxuZnVuY3Rpb24gYXJyYXkoYSkge1xuICByZXR1cm4gXCJbXCIgKyBhICsgXCJdXCI7XG59XG5cbmV4cG9ydCB7IGFycmF5IH07XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoKHBhaXJzKSB7XG4gIHJldHVybiBcIntcIiArIHBhaXJzLmpvaW4oXCIsIFwiKSArIFwifVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwZWF0KGNoYXJzLCB0aW1lcykge1xuICBsZXQgc3RyID0gXCJcIjtcbiAgd2hpbGUgKHRpbWVzLS0pIHtcbiAgICBzdHIgKz0gY2hhcnM7XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn1cbiJdfQ== -enifed('glimmer-wire-format/index', ['exports'], function (exports) { - 'use strict'; - - function is(variant) { - return function (value) { - return value[0] === variant; - }; - } - var Expressions; - exports.Expressions = Expressions; - (function (Expressions) { - Expressions.isUnknown = is('unknown'); - Expressions.isArg = is('arg'); - Expressions.isGet = is('get'); - Expressions.isConcat = is('concat'); - Expressions.isHelper = is('helper'); - Expressions.isHasBlock = is('has-block'); - Expressions.isHasBlockParams = is('has-block-params'); - Expressions.isUndefined = is('undefined'); - function isPrimitiveValue(value) { - if (value === null) { - return true; - } - return typeof value !== 'object'; - } - Expressions.isPrimitiveValue = isPrimitiveValue; - })(Expressions || (exports.Expressions = Expressions = {})); - var Statements; - exports.Statements = Statements; - (function (Statements) { - Statements.isText = is('text'); - Statements.isAppend = is('append'); - Statements.isComment = is('comment'); - Statements.isModifier = is('modifier'); - Statements.isBlock = is('block'); - Statements.isOpenElement = is('open-element'); - Statements.isFlushElement = is('flush-element'); - Statements.isCloseElement = is('close-element'); - Statements.isStaticAttr = is('static-attr'); - Statements.isDynamicAttr = is('dynamic-attr'); - Statements.isYield = is('yield'); - Statements.isPartial = is('partial'); - Statements.isDynamicArg = is('dynamic-arg'); - Statements.isStaticArg = is('static-arg'); - Statements.isTrustingAttr = is('trusting-attr'); - })(Statements || (exports.Statements = Statements = {})); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsaW1tZXItd2lyZS1mb3JtYXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBbUJBLGFBQUEsRUFBQSxDQUE2QixPQUFlLEVBQUE7QUFDMUMsZUFBTyxVQUFTLEtBQVksRUFBQTtBQUMxQixtQkFBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDO1NBQzdCLENBQUM7S0FDSDtBQVVELFFBQWlCLFdBQVcsQ0FvRDNCOztBQXBERCxLQUFBLFVBQWlCLFdBQVcsRUFBQztBQXFDZCxtQkFBQSxDQUFBLFNBQVMsR0FBVSxFQUFFLENBQVUsU0FBUyxDQUFDLENBQUM7QUFDMUMsbUJBQUEsQ0FBQSxLQUFLLEdBQWMsRUFBRSxDQUFNLEtBQUssQ0FBQyxDQUFDO0FBQ2xDLG1CQUFBLENBQUEsS0FBSyxHQUFjLEVBQUUsQ0FBTSxLQUFLLENBQUMsQ0FBQztBQUNsQyxtQkFBQSxDQUFBLFFBQVEsR0FBVyxFQUFFLENBQVMsUUFBUSxDQUFDLENBQUM7QUFDeEMsbUJBQUEsQ0FBQSxRQUFRLEdBQVcsRUFBRSxDQUFTLFFBQVEsQ0FBQyxDQUFDO0FBQ3hDLG1CQUFBLENBQUEsVUFBVSxHQUFTLEVBQUUsQ0FBVyxXQUFXLENBQUMsQ0FBQztBQUM3QyxtQkFBQSxDQUFBLGdCQUFnQixHQUFHLEVBQUUsQ0FBaUIsa0JBQWtCLENBQUMsQ0FBQztBQUMxRCxtQkFBQSxDQUFBLFdBQVcsR0FBUSxFQUFFLENBQVksV0FBVyxDQUFDLENBQUM7QUFFM0QsaUJBQUEsZ0JBQUEsQ0FBaUMsS0FBVSxFQUFBO0FBQ3pDLGdCQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7QUFDbEIsdUJBQU8sSUFBSSxDQUFDO2FBQ2I7QUFDRCxtQkFBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUM7U0FDbEM7QUFMZSxtQkFBQSxDQUFBLGdCQUFnQixHQUFBLGdCQUsvQixDQUFBO0tBQ0YsQ0FBQSxDQXBEZ0IsV0FBVyxhQUFYLFdBQVcsR0FBWCxXQUFXLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FvRDNCO0FBSUQsUUFBaUIsVUFBVSxDQXVEMUI7O0FBdkRELEtBQUEsVUFBaUIsVUFBVSxFQUFDO0FBc0JiLGtCQUFBLENBQUEsTUFBTSxHQUFXLEVBQUUsQ0FBTyxNQUFNLENBQUMsQ0FBQztBQUNsQyxrQkFBQSxDQUFBLFFBQVEsR0FBUyxFQUFFLENBQVMsUUFBUSxDQUFDLENBQUM7QUFDdEMsa0JBQUEsQ0FBQSxTQUFTLEdBQVEsRUFBRSxDQUFVLFNBQVMsQ0FBQyxDQUFDO0FBQ3hDLGtCQUFBLENBQUEsVUFBVSxHQUFPLEVBQUUsQ0FBVyxVQUFVLENBQUMsQ0FBQztBQUMxQyxrQkFBQSxDQUFBLE9BQU8sR0FBVSxFQUFFLENBQVEsT0FBTyxDQUFDLENBQUM7QUFDcEMsa0JBQUEsQ0FBQSxhQUFhLEdBQUksRUFBRSxDQUFjLGNBQWMsQ0FBQyxDQUFDO0FBQ2pELGtCQUFBLENBQUEsY0FBYyxHQUFHLEVBQUUsQ0FBZSxlQUFlLENBQUMsQ0FBQztBQUNuRCxrQkFBQSxDQUFBLGNBQWMsR0FBRyxFQUFFLENBQWUsZUFBZSxDQUFDLENBQUM7QUFDbkQsa0JBQUEsQ0FBQSxZQUFZLEdBQUssRUFBRSxDQUFhLGFBQWEsQ0FBQyxDQUFDO0FBQy9DLGtCQUFBLENBQUEsYUFBYSxHQUFJLEVBQUUsQ0FBYyxjQUFjLENBQUMsQ0FBQztBQUNqRCxrQkFBQSxDQUFBLE9BQU8sR0FBVSxFQUFFLENBQVEsT0FBTyxDQUFDLENBQUM7QUFDcEMsa0JBQUEsQ0FBQSxTQUFTLEdBQVEsRUFBRSxDQUFVLFNBQVMsQ0FBQyxDQUFDO0FBQ3hDLGtCQUFBLENBQUEsWUFBWSxHQUFLLEVBQUUsQ0FBYSxhQUFhLENBQUMsQ0FBQztBQUMvQyxrQkFBQSxDQUFBLFdBQVcsR0FBTSxFQUFFLENBQVksWUFBWSxDQUFDLENBQUM7QUFDN0Msa0JBQUEsQ0FBQSxjQUFjLEdBQUcsRUFBRSxDQUFlLGVBQWUsQ0FBQyxDQUFDO0tBbUJqRSxDQUFBLENBdkRnQixVQUFVLGFBQVYsVUFBVSxHQUFWLFVBQVUsR0FBQSxFQUFBLENBQUEsQ0FBQSxDQXVEMUIiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0IH0gZnJvbSAnZ2xpbW1lci11dGlsJztcblxudHlwZSBKc29uVmFsdWUgPVxuICAgIHN0cmluZ1xuICB8IG51bWJlclxuICB8IGJvb2xlYW5cbiAgfCBKc29uT2JqZWN0XG4gIHwgSnNvbkFycmF5XG4gIDtcblxuaW50ZXJmYWNlIEpzb25PYmplY3QgZXh0ZW5kcyBEaWN0PEpzb25WYWx1ZT4ge31cbmludGVyZmFjZSBKc29uQXJyYXkgZXh0ZW5kcyBBcnJheTxKc29uVmFsdWU+IHt9XG5cbi8vIFRoaXMgZW50aXJlIGZpbGUgaXMgc2VyaWFsaXplZCB0byBkaXNrLCBzbyBhbGwgc3RyaW5nc1xuLy8gZW5kIHVwIGJlaW5nIGludGVybmVkLlxuZXhwb3J0IHR5cGUgc3RyID0gc3RyaW5nO1xuZXhwb3J0IHR5cGUgVGVtcGxhdGVSZWZlcmVuY2UgPSBudW1iZXI7XG5leHBvcnQgdHlwZSBZaWVsZFRvID0gc3RyO1xuXG5mdW5jdGlvbiBpczxUIGV4dGVuZHMgYW55W10+KHZhcmlhbnQ6IHN0cmluZyk6ICh2YWx1ZTogYW55W10pID0+IHZhbHVlIGlzIFQge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWU6IGFueVtdKTogdmFsdWUgaXMgVCB7XG4gICAgcmV0dXJuIHZhbHVlWzBdID09PSB2YXJpYW50O1xuICB9O1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvcmUge1xuICBleHBvcnQgdHlwZSBFeHByZXNzaW9uID0gRXhwcmVzc2lvbnMuRXhwcmVzc2lvbjtcblxuICBleHBvcnQgdHlwZSBQYXRoICAgICAgICAgID0gc3RyW107XG4gIGV4cG9ydCB0eXBlIFBhcmFtcyAgICAgICAgPSBFeHByZXNzaW9uW107XG4gIGV4cG9ydCB0eXBlIEhhc2ggICAgICAgICAgPSBbc3RyW10sIEV4cHJlc3Npb25bXV07XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRXhwcmVzc2lvbnMge1xuICBleHBvcnQgdHlwZSBQYXRoID0gQ29yZS5QYXRoO1xuICBleHBvcnQgdHlwZSBQYXJhbXMgPSBDb3JlLlBhcmFtcztcbiAgZXhwb3J0IHR5cGUgSGFzaCA9IENvcmUuSGFzaDtcblxuICBleHBvcnQgdHlwZSBVbmtub3duICAgICAgICA9IFsndW5rbm93bicsIFBhdGhdO1xuICBleHBvcnQgdHlwZSBBcmcgICAgICAgICAgICA9IFsnYXJnJywgUGF0aF07XG4gIGV4cG9ydCB0eXBlIEdldCAgICAgICAgICAgID0gWydnZXQnLCBQYXRoXTtcbiAgZXhwb3J0IHR5cGUgVmFsdWUgICAgICAgICAgPSBzdHIgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbDsgLy8gdHNsaW50OmRpc2FibGUtbGluZVxuICBleHBvcnQgdHlwZSBIYXNCbG9jayAgICAgICA9IFsnaGFzLWJsb2NrJywgc3RyXTtcbiAgZXhwb3J0IHR5cGUgSGFzQmxvY2tQYXJhbXMgPSBbJ2hhcy1ibG9jay1wYXJhbXMnLCBzdHJdO1xuICBleHBvcnQgdHlwZSBVbmRlZmluZWQgICAgICA9IFsndW5kZWZpbmVkJ107XG5cbiAgZXhwb3J0IHR5cGUgRXhwcmVzc2lvbiA9XG4gICAgICBVbmtub3duXG4gICAgfCBBcmdcbiAgICB8IEdldFxuICAgIHwgQ29uY2F0XG4gICAgfCBIYXNCbG9ja1xuICAgIHwgSGFzQmxvY2tQYXJhbXNcbiAgICB8IEhlbHBlclxuICAgIHwgVW5kZWZpbmVkXG4gICAgfCBWYWx1ZVxuICAgIDtcblxuICBleHBvcnQgaW50ZXJmYWNlIENvbmNhdCBleHRlbmRzIEFycmF5PGFueT4ge1xuICAgIFswXTogJ2NvbmNhdCc7XG4gICAgWzFdOiBQYXJhbXM7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEhlbHBlciBleHRlbmRzIEFycmF5PGFueT4ge1xuICAgIFswXTogJ2hlbHBlcic7XG4gICAgWzFdOiBQYXRoO1xuICAgIFsyXTogUGFyYW1zO1xuICAgIFszXTogSGFzaDtcbiAgfVxuXG4gIGV4cG9ydCBjb25zdCBpc1Vua25vd24gICAgICAgID0gaXM8VW5rbm93bj4oJ3Vua25vd24nKTtcbiAgZXhwb3J0IGNvbnN0IGlzQXJnICAgICAgICAgICAgPSBpczxBcmc+KCdhcmcnKTtcbiAgZXhwb3J0IGNvbnN0IGlzR2V0ICAgICAgICAgICAgPSBpczxHZXQ+KCdnZXQnKTtcbiAgZXhwb3J0IGNvbnN0IGlzQ29uY2F0ICAgICAgICAgPSBpczxDb25jYXQ+KCdjb25jYXQnKTtcbiAgZXhwb3J0IGNvbnN0IGlzSGVscGVyICAgICAgICAgPSBpczxIZWxwZXI+KCdoZWxwZXInKTtcbiAgZXhwb3J0IGNvbnN0IGlzSGFzQmxvY2sgICAgICAgPSBpczxIYXNCbG9jaz4oJ2hhcy1ibG9jaycpO1xuICBleHBvcnQgY29uc3QgaXNIYXNCbG9ja1BhcmFtcyA9IGlzPEhhc0Jsb2NrUGFyYW1zPignaGFzLWJsb2NrLXBhcmFtcycpO1xuICBleHBvcnQgY29uc3QgaXNVbmRlZmluZWQgICAgICA9IGlzPFVuZGVmaW5lZD4oJ3VuZGVmaW5lZCcpO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1ByaW1pdGl2ZVZhbHVlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBWYWx1ZSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCc7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgRXhwcmVzc2lvbiA9IEV4cHJlc3Npb25zLkV4cHJlc3Npb247XG5cbmV4cG9ydCBuYW1lc3BhY2UgU3RhdGVtZW50cyB7XG4gIGV4cG9ydCB0eXBlIEV4cHJlc3Npb24gPSBFeHByZXNzaW9ucy5FeHByZXNzaW9uO1xuICBleHBvcnQgdHlwZSBQYXJhbXMgPSBDb3JlLlBhcmFtcztcbiAgZXhwb3J0IHR5cGUgSGFzaCA9IENvcmUuSGFzaDtcbiAgZXhwb3J0IHR5cGUgUGF0aCA9IENvcmUuUGF0aDtcblxuICBleHBvcnQgdHlwZSBUZXh0ICAgICAgICAgID0gWyd0ZXh0Jywgc3RyXTtcbiAgZXhwb3J0IHR5cGUgQXBwZW5kICAgICAgICA9IFsnYXBwZW5kJywgRXhwcmVzc2lvbiwgYm9vbGVhbl07XG4gIGV4cG9ydCB0eXBlIENvbW1lbnQgICAgICAgPSBbJ2NvbW1lbnQnLCBzdHJdO1xuICBleHBvcnQgdHlwZSBNb2RpZmllciAgICAgID0gWydtb2RpZmllcicsIFBhdGgsIFBhcmFtcywgSGFzaF07XG4gIGV4cG9ydCB0eXBlIEJsb2NrICAgICAgICAgPSBbJ2Jsb2NrJywgUGF0aCwgUGFyYW1zLCBIYXNoLCBUZW1wbGF0ZVJlZmVyZW5jZSwgVGVtcGxhdGVSZWZlcmVuY2VdO1xuICBleHBvcnQgdHlwZSBPcGVuRWxlbWVudCAgID0gWydvcGVuLWVsZW1lbnQnLCBzdHIsIHN0cltdXTtcbiAgZXhwb3J0IHR5cGUgRmx1c2hFbGVtZW50ICA9IFsnZmx1c2gtZWxlbWVudCddO1xuICBleHBvcnQgdHlwZSBDbG9zZUVsZW1lbnQgID0gWydjbG9zZS1lbGVtZW50J107XG4gIGV4cG9ydCB0eXBlIFN0YXRpY0F0dHIgICAgPSBbJ3N0YXRpYy1hdHRyJywgc3RyLCBFeHByZXNzaW9uLCBzdHJdO1xuICBleHBvcnQgdHlwZSBEeW5hbWljQXR0ciAgID0gWydkeW5hbWljLWF0dHInLCBzdHIsIEV4cHJlc3Npb24sIHN0cl07XG4gIGV4cG9ydCB0eXBlIFlpZWxkICAgICAgICAgPSBbJ3lpZWxkJywgWWllbGRUbywgUGFyYW1zXTtcbiAgZXhwb3J0IHR5cGUgUGFydGlhbCAgICAgICA9IFsncGFydGlhbCcsIEV4cHJlc3Npb25dO1xuICBleHBvcnQgdHlwZSBEeW5hbWljQXJnICAgID0gWydkeW5hbWljLWFyZycsIHN0ciwgRXhwcmVzc2lvbl07XG4gIGV4cG9ydCB0eXBlIFN0YXRpY0FyZyAgICAgPSBbJ3N0YXRpYy1hcmcnLCBzdHIsIEV4cHJlc3Npb25dO1xuICBleHBvcnQgdHlwZSBUcnVzdGluZ0F0dHIgID0gWyd0cnVzdGluZy1hdHRyJywgc3RyLCBFeHByZXNzaW9uLCBzdHJdO1xuXG4gIGV4cG9ydCBjb25zdCBpc1RleHQgICAgICAgICA9IGlzPFRleHQ+KCd0ZXh0Jyk7XG4gIGV4cG9ydCBjb25zdCBpc0FwcGVuZCAgICAgICA9IGlzPEFwcGVuZD4oJ2FwcGVuZCcpO1xuICBleHBvcnQgY29uc3QgaXNDb21tZW50ICAgICAgPSBpczxDb21tZW50PignY29tbWVudCcpO1xuICBleHBvcnQgY29uc3QgaXNNb2RpZmllciAgICAgPSBpczxNb2RpZmllcj4oJ21vZGlmaWVyJyk7XG4gIGV4cG9ydCBjb25zdCBpc0Jsb2NrICAgICAgICA9IGlzPEJsb2NrPignYmxvY2snKTtcbiAgZXhwb3J0IGNvbnN0IGlzT3BlbkVsZW1lbnQgID0gaXM8T3BlbkVsZW1lbnQ+KCdvcGVuLWVsZW1lbnQnKTtcbiAgZXhwb3J0IGNvbnN0IGlzRmx1c2hFbGVtZW50ID0gaXM8Rmx1c2hFbGVtZW50PignZmx1c2gtZWxlbWVudCcpO1xuICBleHBvcnQgY29uc3QgaXNDbG9zZUVsZW1lbnQgPSBpczxDbG9zZUVsZW1lbnQ+KCdjbG9zZS1lbGVtZW50Jyk7XG4gIGV4cG9ydCBjb25zdCBpc1N0YXRpY0F0dHIgICA9IGlzPFN0YXRpY0F0dHI+KCdzdGF0aWMtYXR0cicpO1xuICBleHBvcnQgY29uc3QgaXNEeW5hbWljQXR0ciAgPSBpczxEeW5hbWljQXR0cj4oJ2R5bmFtaWMtYXR0cicpO1xuICBleHBvcnQgY29uc3QgaXNZaWVsZCAgICAgICAgPSBpczxZaWVsZD4oJ3lpZWxkJyk7XG4gIGV4cG9ydCBjb25zdCBpc1BhcnRpYWwgICAgICA9IGlzPFBhcnRpYWw+KCdwYXJ0aWFsJyk7XG4gIGV4cG9ydCBjb25zdCBpc0R5bmFtaWNBcmcgICA9IGlzPER5bmFtaWNBcmc+KCdkeW5hbWljLWFyZycpO1xuICBleHBvcnQgY29uc3QgaXNTdGF0aWNBcmcgICAgPSBpczxTdGF0aWNBcmc+KCdzdGF0aWMtYXJnJyk7XG4gIGV4cG9ydCBjb25zdCBpc1RydXN0aW5nQXR0ciA9IGlzPFRydXN0aW5nQXR0cj4oJ3RydXN0aW5nLWF0dHInKTtcblxuICBleHBvcnQgdHlwZSBTdGF0ZW1lbnQgPVxuICAgICAgVGV4dFxuICAgIHwgQXBwZW5kXG4gICAgfCBDb21tZW50XG4gICAgfCBNb2RpZmllclxuICAgIHwgQmxvY2tcbiAgICB8IE9wZW5FbGVtZW50XG4gICAgfCBGbHVzaEVsZW1lbnRcbiAgICB8IENsb3NlRWxlbWVudFxuICAgIHwgU3RhdGljQXR0clxuICAgIHwgRHluYW1pY0F0dHJcbiAgICB8IFlpZWxkXG4gICAgfCBQYXJ0aWFsXG4gICAgfCBTdGF0aWNBcmdcbiAgICB8IER5bmFtaWNBcmdcbiAgICB8IFRydXN0aW5nQXR0clxuICAgIDtcbn1cblxuZXhwb3J0IHR5cGUgU3RhdGVtZW50ID0gU3RhdGVtZW50cy5TdGF0ZW1lbnQ7XG5cbi8qKlxuICogQSBKU09OIG9iamVjdCBvZiBzdGF0aWMgY29tcGlsZSB0aW1lIG1ldGEgZm9yIHRoZSB0ZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZU1ldGEge1xuICBtb2R1bGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgSlNPTiBvYmplY3QgdGhhdCB0aGUgQmxvY2sgd2FzIHNlcmlhbGl6ZWQgaW50by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVkQmxvY2sge1xuICBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRzLlN0YXRlbWVudFtdO1xuICBsb2NhbHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgSlNPTiBvYmplY3QgdGhhdCB0aGUgY29tcGlsZWQgVGVtcGxhdGVCbG9jayB3YXMgc2VyaWFsaXplZCBpbnRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrIGV4dGVuZHMgU2VyaWFsaXplZEJsb2NrIHtcbiAgbmFtZWQ6IHN0cmluZ1tdO1xuICB5aWVsZHM6IHN0cmluZ1tdO1xuICBibG9ja3M6IFNlcmlhbGl6ZWRCbG9ja1tdO1xuICBoYXNQYXJ0aWFsczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIEpTT04gb2JqZWN0IHRoYXQgdGhlIGNvbXBpbGVkIFRlbXBsYXRlIHdhcyBzZXJpYWxpemVkIGludG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFRlbXBsYXRlPFQgZXh0ZW5kcyBUZW1wbGF0ZU1ldGE+IHtcbiAgYmxvY2s6IFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrO1xuICBtZXRhOiBUO1xufVxuXG4vKipcbiAqIEEgc3RyaW5nIG9mIEpTT04gY29udGFpbmluZyBhIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrXG4gKiBAdHlwZWRlZiB7c3RyaW5nfSBTZXJpYWxpemVkVGVtcGxhdGVCbG9ja0pTT05cbiAqL1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZFRlbXBsYXRlQmxvY2tKU09OID0gc3RyaW5nO1xuXG4vKipcbiAqIEEgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUgU2VyaWFsaXplZFRlbXBsYXRlQmxvY2sgYXMgSlNPTiBhbmQgVGVtcGxhdGVNZXRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRUZW1wbGF0ZVdpdGhMYXp5QmxvY2s8VCBleHRlbmRzIFRlbXBsYXRlTWV0YT4ge1xuICBpZD86IHN0cmluZztcbiAgYmxvY2s6IFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrSlNPTjtcbiAgbWV0YTogVDtcbn1cblxuLyoqXG4gKiBBIHN0cmluZyBvZiBKYXZhc2NyaXB0IGNvbnRhaW5pbmcgYSBTZXJpYWxpemVkVGVtcGxhdGVXaXRoTGF6eUJsb2NrIHRvIGJlXG4gKiBjb25jYXRlbmF0ZWQgaW50byBhIEphdmFzY3JpcHQgbW9kdWxlLlxuICogQHR5cGVkZWYge3N0cmluZ30gVGVtcGxhdGVKYXZhc2NyaXB0XG4gKi9cbmV4cG9ydCB0eXBlIFRlbXBsYXRlSmF2YXNjcmlwdCA9IHN0cmluZztcbiJdfQ== -enifed('handlebars/compiler/ast', ['exports'], function (exports) { +enifed('htmlbars-syntax/handlebars/compiler/ast', ['exports'], function (exports) { 'use strict'; var AST = { Program: function (statements, blockParams, strip, locInfo) { this.loc = locInfo; @@ -24970,39 +15447,37 @@ // Must be exported as an object rather than the root of the module as the jison lexer // must modify the object to operate properly. exports.default = AST; }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhhbmRsZWJhcnMvY29tcGlsZXIvYXN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQUksR0FBRyxHQUFHO0FBQ1IsV0FBTyxFQUFFLFVBQVMsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFVBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDO0FBQ25CLFVBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQ3RCLFVBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDOztBQUV2QixVQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUMvQixVQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztLQUNwQjs7QUFFRCxxQkFBaUIsRUFBRSxVQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFVBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDO0FBQ25CLFVBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7O0FBRWhDLFVBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLFVBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUMzQixVQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixVQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQzs7QUFFdkIsVUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7S0FDcEI7O0FBRUQsa0JBQWMsRUFBRSxVQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFO0FBQzNHLFVBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDO0FBQ25CLFVBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7O0FBRTdCLFVBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLFVBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUMzQixVQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixVQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUN2QixVQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQzs7QUFFdkIsVUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDM0IsVUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDakMsVUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7S0FDOUI7O0FBRUQsb0JBQWdCLEVBQUUsVUFBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQzdELFVBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDO0FBQ25CLFVBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7O0FBRS9CLFVBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLFVBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUMzQixVQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzs7QUFFakIsVUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDakIsVUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7S0FDcEI7O0FBRUQsb0JBQWdCLEVBQUUsVUFBUyxNQUFNLEVBQUUsT0FBTyxFQUFFO0FBQzFDLFVBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDO0FBQ25CLFVBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7QUFDL0IsVUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztLQUNyQzs7QUFFRCxvQkFBZ0IsRUFBRSxVQUFTLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ2xELFVBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDO0FBQ25CLFVBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7QUFDL0IsVUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7O0FBRXJCLFVBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0tBQ3BCOztBQUVELGlCQUFhLEVBQUUsVUFBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDbkQsVUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUM7O0FBRW5CLFVBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO0FBQzVCLFVBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLFVBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUMzQixVQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztLQUNsQjs7QUFFRCxrQkFBYyxFQUFFLFVBQVMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtBQUM5RCxVQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQztBQUNuQixVQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDOztBQUU3QixVQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixVQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUN6QixVQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNuQixVQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztLQUNwQjs7QUFFRCxpQkFBYSxFQUFFLFVBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUN2QyxVQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQztBQUNuQixVQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztBQUM1QixVQUFJLENBQUMsUUFBUSxHQUNYLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0tBQ3ZCOztBQUVELGlCQUFhLEVBQUUsVUFBUyxNQUFNLEVBQUUsT0FBTyxFQUFFO0FBQ3ZDLFVBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDO0FBQ25CLFVBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO0FBQzVCLFVBQUksQ0FBQyxRQUFRLEdBQ1gsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDL0I7O0FBRUQsa0JBQWMsRUFBRSxVQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdEMsVUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUM7QUFDbkIsVUFBSSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztBQUM3QixVQUFJLENBQUMsUUFBUSxHQUNYLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLE1BQU0sQ0FBQztLQUNoQzs7QUFFRCxvQkFBZ0IsRUFBRSxVQUFTLE9BQU8sRUFBRTtBQUNsQyxVQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQztBQUNuQixVQUFJLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO0FBQy9CLFVBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7S0FDeEM7O0FBRUQsZUFBVyxFQUFFLFVBQVMsT0FBTyxFQUFFO0FBQzdCLFVBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDO0FBQ25CLFVBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO0FBQzFCLFVBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7S0FDbkM7O0FBRUQsUUFBSSxFQUFFLFVBQVMsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUM3QixVQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQztBQUNuQixVQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNuQixVQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztLQUNwQjtBQUNELFlBQVEsRUFBRSxVQUFTLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3RDLFVBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDO0FBQ25CLFVBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2YsVUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7S0FDcEI7OztBQUdELFdBQU8sRUFBRTs7OztBQUlQLHNCQUFnQixFQUFFLFVBQVMsSUFBSSxFQUFFO0FBQy9CLGVBQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUEsQUFBQyxDQUFDO09BQzdFOztBQUVELGNBQVEsRUFBRSxVQUFTLElBQUksRUFBRTtBQUN2QixlQUFPLEFBQUMsYUFBWSxDQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1VBQUM7T0FDM0M7Ozs7QUFJRCxjQUFRLEVBQUUsVUFBUyxJQUFJLEVBQUU7QUFDdkIsZUFBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7T0FDOUU7S0FDRjtHQUNGLENBQUM7Ozs7b0JBS2EsR0FBRyIsImZpbGUiOiJoYW5kbGViYXJzL2NvbXBpbGVyL2FzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImxldCBBU1QgPSB7XG4gIFByb2dyYW06IGZ1bmN0aW9uKHN0YXRlbWVudHMsIGJsb2NrUGFyYW1zLCBzdHJpcCwgbG9jSW5mbykge1xuICAgIHRoaXMubG9jID0gbG9jSW5mbztcbiAgICB0aGlzLnR5cGUgPSAnUHJvZ3JhbSc7XG4gICAgdGhpcy5ib2R5ID0gc3RhdGVtZW50cztcblxuICAgIHRoaXMuYmxvY2tQYXJhbXMgPSBibG9ja1BhcmFtcztcbiAgICB0aGlzLnN0cmlwID0gc3RyaXA7XG4gIH0sXG5cbiAgTXVzdGFjaGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHBhdGgsIHBhcmFtcywgaGFzaCwgZXNjYXBlZCwgc3RyaXAsIGxvY0luZm8pIHtcbiAgICB0aGlzLmxvYyA9IGxvY0luZm87XG4gICAgdGhpcy50eXBlID0gJ011c3RhY2hlU3RhdGVtZW50JztcblxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXMgfHwgW107XG4gICAgdGhpcy5oYXNoID0gaGFzaDtcbiAgICB0aGlzLmVzY2FwZWQgPSBlc2NhcGVkO1xuXG4gICAgdGhpcy5zdHJpcCA9IHN0cmlwO1xuICB9LFxuXG4gIEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbihwYXRoLCBwYXJhbXMsIGhhc2gsIHByb2dyYW0sIGludmVyc2UsIG9wZW5TdHJpcCwgaW52ZXJzZVN0cmlwLCBjbG9zZVN0cmlwLCBsb2NJbmZvKSB7XG4gICAgdGhpcy5sb2MgPSBsb2NJbmZvO1xuICAgIHRoaXMudHlwZSA9ICdCbG9ja1N0YXRlbWVudCc7XG5cbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zIHx8IFtdO1xuICAgIHRoaXMuaGFzaCA9IGhhc2g7XG4gICAgdGhpcy5wcm9ncmFtID0gcHJvZ3JhbTtcbiAgICB0aGlzLmludmVyc2UgPSBpbnZlcnNlO1xuXG4gICAgdGhpcy5vcGVuU3RyaXAgPSBvcGVuU3RyaXA7XG4gICAgdGhpcy5pbnZlcnNlU3RyaXAgPSBpbnZlcnNlU3RyaXA7XG4gICAgdGhpcy5jbG9zZVN0cmlwID0gY2xvc2VTdHJpcDtcbiAgfSxcblxuICBQYXJ0aWFsU3RhdGVtZW50OiBmdW5jdGlvbihuYW1lLCBwYXJhbXMsIGhhc2gsIHN0cmlwLCBsb2NJbmZvKSB7XG4gICAgdGhpcy5sb2MgPSBsb2NJbmZvO1xuICAgIHRoaXMudHlwZSA9ICdQYXJ0aWFsU3RhdGVtZW50JztcblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXMgfHwgW107XG4gICAgdGhpcy5oYXNoID0gaGFzaDtcblxuICAgIHRoaXMuaW5kZW50ID0gJyc7XG4gICAgdGhpcy5zdHJpcCA9IHN0cmlwO1xuICB9LFxuXG4gIENvbnRlbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHN0cmluZywgbG9jSW5mbykge1xuICAgIHRoaXMubG9jID0gbG9jSW5mbztcbiAgICB0aGlzLnR5cGUgPSAnQ29udGVudFN0YXRlbWVudCc7XG4gICAgdGhpcy5vcmlnaW5hbCA9IHRoaXMudmFsdWUgPSBzdHJpbmc7XG4gIH0sXG5cbiAgQ29tbWVudFN0YXRlbWVudDogZnVuY3Rpb24oY29tbWVudCwgc3RyaXAsIGxvY0luZm8pIHtcbiAgICB0aGlzLmxvYyA9IGxvY0luZm87XG4gICAgdGhpcy50eXBlID0gJ0NvbW1lbnRTdGF0ZW1lbnQnO1xuICAgIHRoaXMudmFsdWUgPSBjb21tZW50O1xuXG4gICAgdGhpcy5zdHJpcCA9IHN0cmlwO1xuICB9LFxuXG4gIFN1YkV4cHJlc3Npb246IGZ1bmN0aW9uKHBhdGgsIHBhcmFtcywgaGFzaCwgbG9jSW5mbykge1xuICAgIHRoaXMubG9jID0gbG9jSW5mbztcblxuICAgIHRoaXMudHlwZSA9ICdTdWJFeHByZXNzaW9uJztcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zIHx8IFtdO1xuICAgIHRoaXMuaGFzaCA9IGhhc2g7XG4gIH0sXG5cbiAgUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uKGRhdGEsIGRlcHRoLCBwYXJ0cywgb3JpZ2luYWwsIGxvY0luZm8pIHtcbiAgICB0aGlzLmxvYyA9IGxvY0luZm87XG4gICAgdGhpcy50eXBlID0gJ1BhdGhFeHByZXNzaW9uJztcblxuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5vcmlnaW5hbCA9IG9yaWdpbmFsO1xuICAgIHRoaXMucGFydHMgPSBwYXJ0cztcbiAgICB0aGlzLmRlcHRoID0gZGVwdGg7XG4gIH0sXG5cbiAgU3RyaW5nTGl0ZXJhbDogZnVuY3Rpb24oc3RyaW5nLCBsb2NJbmZvKSB7XG4gICAgdGhpcy5sb2MgPSBsb2NJbmZvO1xuICAgIHRoaXMudHlwZSA9ICdTdHJpbmdMaXRlcmFsJztcbiAgICB0aGlzLm9yaWdpbmFsID1cbiAgICAgIHRoaXMudmFsdWUgPSBzdHJpbmc7XG4gIH0sXG5cbiAgTnVtYmVyTGl0ZXJhbDogZnVuY3Rpb24obnVtYmVyLCBsb2NJbmZvKSB7XG4gICAgdGhpcy5sb2MgPSBsb2NJbmZvO1xuICAgIHRoaXMudHlwZSA9ICdOdW1iZXJMaXRlcmFsJztcbiAgICB0aGlzLm9yaWdpbmFsID1cbiAgICAgIHRoaXMudmFsdWUgPSBOdW1iZXIobnVtYmVyKTtcbiAgfSxcblxuICBCb29sZWFuTGl0ZXJhbDogZnVuY3Rpb24oYm9vbCwgbG9jSW5mbykge1xuICAgIHRoaXMubG9jID0gbG9jSW5mbztcbiAgICB0aGlzLnR5cGUgPSAnQm9vbGVhbkxpdGVyYWwnO1xuICAgIHRoaXMub3JpZ2luYWwgPVxuICAgICAgdGhpcy52YWx1ZSA9IGJvb2wgPT09ICd0cnVlJztcbiAgfSxcblxuICBVbmRlZmluZWRMaXRlcmFsOiBmdW5jdGlvbihsb2NJbmZvKSB7XG4gICAgdGhpcy5sb2MgPSBsb2NJbmZvO1xuICAgIHRoaXMudHlwZSA9ICdVbmRlZmluZWRMaXRlcmFsJztcbiAgICB0aGlzLm9yaWdpbmFsID0gdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgfSxcblxuICBOdWxsTGl0ZXJhbDogZnVuY3Rpb24obG9jSW5mbykge1xuICAgIHRoaXMubG9jID0gbG9jSW5mbztcbiAgICB0aGlzLnR5cGUgPSAnTnVsbExpdGVyYWwnO1xuICAgIHRoaXMub3JpZ2luYWwgPSB0aGlzLnZhbHVlID0gbnVsbDtcbiAgfSxcblxuICBIYXNoOiBmdW5jdGlvbihwYWlycywgbG9jSW5mbykge1xuICAgIHRoaXMubG9jID0gbG9jSW5mbztcbiAgICB0aGlzLnR5cGUgPSAnSGFzaCc7XG4gICAgdGhpcy5wYWlycyA9IHBhaXJzO1xuICB9LFxuICBIYXNoUGFpcjogZnVuY3Rpb24oa2V5LCB2YWx1ZSwgbG9jSW5mbykge1xuICAgIHRoaXMubG9jID0gbG9jSW5mbztcbiAgICB0aGlzLnR5cGUgPSAnSGFzaFBhaXInO1xuICAgIHRoaXMua2V5ID0ga2V5O1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfSxcblxuICAvLyBQdWJsaWMgQVBJIHVzZWQgdG8gZXZhbHVhdGUgZGVyaXZlZCBhdHRyaWJ1dGVzIHJlZ2FyZGluZyBBU1Qgbm9kZXNcbiAgaGVscGVyczoge1xuICAgIC8vIGEgbXVzdGFjaGUgaXMgZGVmaW5pdGVseSBhIGhlbHBlciBpZjpcbiAgICAvLyAqIGl0IGlzIGFuIGVsaWdpYmxlIGhlbHBlciwgYW5kXG4gICAgLy8gKiBpdCBoYXMgYXQgbGVhc3Qgb25lIHBhcmFtZXRlciBvciBoYXNoIHNlZ21lbnRcbiAgICBoZWxwZXJFeHByZXNzaW9uOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICByZXR1cm4gISEobm9kZS50eXBlID09PSAnU3ViRXhwcmVzc2lvbicgfHwgbm9kZS5wYXJhbXMubGVuZ3RoIHx8IG5vZGUuaGFzaCk7XG4gICAgfSxcblxuICAgIHNjb3BlZElkOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gKC9eXFwufHRoaXNcXGIvKS50ZXN0KHBhdGgub3JpZ2luYWwpO1xuICAgIH0sXG5cbiAgICAvLyBhbiBJRCBpcyBzaW1wbGUgaWYgaXQgb25seSBoYXMgb25lIHBhcnQsIGFuZCB0aGF0IHBhcnQgaXMgbm90XG4gICAgLy8gYC4uYCBvciBgdGhpc2AuXG4gICAgc2ltcGxlSWQ6IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgIHJldHVybiBwYXRoLnBhcnRzLmxlbmd0aCA9PT0gMSAmJiAhQVNULmhlbHBlcnMuc2NvcGVkSWQocGF0aCkgJiYgIXBhdGguZGVwdGg7XG4gICAgfVxuICB9XG59O1xuXG5cbi8vIE11c3QgYmUgZXhwb3J0ZWQgYXMgYW4gb2JqZWN0IHJhdGhlciB0aGFuIHRoZSByb290IG9mIHRoZSBtb2R1bGUgYXMgdGhlIGppc29uIGxleGVyXG4vLyBtdXN0IG1vZGlmeSB0aGUgb2JqZWN0IHRvIG9wZXJhdGUgcHJvcGVybHkuXG5leHBvcnQgZGVmYXVsdCBBU1Q7XG4iXX0= -enifed('handlebars/compiler/base', ['exports', 'handlebars/compiler/parser', 'handlebars/compiler/ast', 'handlebars/compiler/whitespace-control', 'handlebars/compiler/helpers', 'handlebars/utils'], function (exports, _handlebarsCompilerParser, _handlebarsCompilerAst, _handlebarsCompilerWhitespaceControl, _handlebarsCompilerHelpers, _handlebarsUtils) { +enifed('htmlbars-syntax/handlebars/compiler/base', ['exports', 'htmlbars-syntax/handlebars/compiler/parser', 'htmlbars-syntax/handlebars/compiler/ast', 'htmlbars-syntax/handlebars/compiler/whitespace-control', 'htmlbars-syntax/handlebars/compiler/helpers', 'htmlbars-syntax/handlebars/utils'], function (exports, _htmlbarsSyntaxHandlebarsCompilerParser, _htmlbarsSyntaxHandlebarsCompilerAst, _htmlbarsSyntaxHandlebarsCompilerWhitespaceControl, _htmlbarsSyntaxHandlebarsCompilerHelpers, _htmlbarsSyntaxHandlebarsUtils) { 'use strict'; exports.parse = parse; - exports.parser = _handlebarsCompilerParser.default; + exports.parser = _htmlbarsSyntaxHandlebarsCompilerParser.default; var yy = {}; - _handlebarsUtils.extend(yy, _handlebarsCompilerHelpers, _handlebarsCompilerAst.default); + _htmlbarsSyntaxHandlebarsUtils.extend(yy, _htmlbarsSyntaxHandlebarsCompilerHelpers, _htmlbarsSyntaxHandlebarsCompilerAst.default); function parse(input, options) { // Just return if an already-compiled AST was passed in. if (input.type === 'Program') { return input; } - _handlebarsCompilerParser.default.yy = yy; + _htmlbarsSyntaxHandlebarsCompilerParser.default.yy = yy; // Altering the shared object here, but this is ok as parser is a sync operation yy.locInfo = function (locInfo) { return new yy.SourceLocation(options && options.srcName, locInfo); }; - var strip = new _handlebarsCompilerWhitespaceControl.default(); - return strip.accept(_handlebarsCompilerParser.default.parse(input)); + var strip = new _htmlbarsSyntaxHandlebarsCompilerWhitespaceControl.default(); + return strip.accept(_htmlbarsSyntaxHandlebarsCompilerParser.default.parse(input)); } }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhhbmRsZWJhcnMvY29tcGlsZXIvYmFzZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O1VBTVMsTUFBTTs7QUFFZixNQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDWixtQkFMUyxNQUFNLENBS1IsRUFBRSw2REFBZSxDQUFDOztBQUVsQixXQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFOztBQUVwQyxRQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQUUsYUFBTyxLQUFLLENBQUM7S0FBRTs7QUFFL0Msc0NBQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQzs7O0FBR2YsTUFBRSxDQUFDLE9BQU8sR0FBRyxVQUFTLE9BQU8sRUFBRTtBQUM3QixhQUFPLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNuRSxDQUFDOztBQUVGLFFBQUksS0FBSyxHQUFHLGtEQUF1QixDQUFDO0FBQ3BDLFdBQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQ0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztHQUMxQyIsImZpbGUiOiJoYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGFyc2VyIGZyb20gJy4vcGFyc2VyJztcbmltcG9ydCBBU1QgZnJvbSAnLi9hc3QnO1xuaW1wb3J0IFdoaXRlc3BhY2VDb250cm9sIGZyb20gJy4vd2hpdGVzcGFjZS1jb250cm9sJztcbmltcG9ydCAqIGFzIEhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IHsgcGFyc2VyIH07XG5cbmxldCB5eSA9IHt9O1xuZXh0ZW5kKHl5LCBIZWxwZXJzLCBBU1QpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoaW5wdXQsIG9wdGlvbnMpIHtcbiAgLy8gSnVzdCByZXR1cm4gaWYgYW4gYWxyZWFkeS1jb21waWxlZCBBU1Qgd2FzIHBhc3NlZCBpbi5cbiAgaWYgKGlucHV0LnR5cGUgPT09ICdQcm9ncmFtJykgeyByZXR1cm4gaW5wdXQ7IH1cblxuICBwYXJzZXIueXkgPSB5eTtcblxuICAvLyBBbHRlcmluZyB0aGUgc2hhcmVkIG9iamVjdCBoZXJlLCBidXQgdGhpcyBpcyBvayBhcyBwYXJzZXIgaXMgYSBzeW5jIG9wZXJhdGlvblxuICB5eS5sb2NJbmZvID0gZnVuY3Rpb24obG9jSW5mbykge1xuICAgIHJldHVybiBuZXcgeXkuU291cmNlTG9jYXRpb24ob3B0aW9ucyAmJiBvcHRpb25zLnNyY05hbWUsIGxvY0luZm8pO1xuICB9O1xuXG4gIGxldCBzdHJpcCA9IG5ldyBXaGl0ZXNwYWNlQ29udHJvbCgpO1xuICByZXR1cm4gc3RyaXAuYWNjZXB0KHBhcnNlci5wYXJzZShpbnB1dCkpO1xufVxuIl19 -enifed('handlebars/compiler/helpers', ['exports', 'handlebars/exception'], function (exports, _handlebarsException) { +enifed('htmlbars-syntax/handlebars/compiler/helpers', ['exports', 'htmlbars-syntax/handlebars/exception'], function (exports, _htmlbarsSyntaxHandlebarsException) { 'use strict'; exports.SourceLocation = SourceLocation; exports.id = id; exports.stripFlags = stripFlags; @@ -25059,11 +15534,11 @@ isLiteral = parts[i].original !== part; original += (parts[i].separator || '') + part; if (!isLiteral && (part === '..' || part === '.' || part === 'this')) { if (dig.length > 0) { - throw new _handlebarsException.default('Invalid path: ' + original, { loc: locInfo }); + throw new _htmlbarsSyntaxHandlebarsException.default('Invalid path: ' + original, { loc: locInfo }); } else if (part === '..') { depth++; depthString += '../'; } } else { @@ -25084,11 +15559,11 @@ function prepareRawBlock(openRawBlock, content, close, locInfo) { if (openRawBlock.path.original !== close) { var errorNode = { loc: openRawBlock.path.loc }; - throw new _handlebarsException.default(openRawBlock.path.original + " doesn't match " + close, errorNode); + throw new _htmlbarsSyntaxHandlebarsException.default(openRawBlock.path.original + " doesn't match " + close, errorNode); } locInfo = this.locInfo(locInfo); var program = new this.Program([content], null, {}, locInfo); @@ -25098,11 +15573,11 @@ function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) { // When we are chaining inverse calls, we will not have a close path if (close && close.path && openBlock.path.original !== close.path.original) { var errorNode = { loc: openBlock.path.loc }; - throw new _handlebarsException.default(openBlock.path.original + ' doesn\'t match ' + close.path.original, errorNode); + throw new _htmlbarsSyntaxHandlebarsException.default(openBlock.path.original + ' doesn\'t match ' + close.path.original, errorNode); } program.blockParams = openBlock.blockParams; var inverse = undefined, @@ -25124,12 +15599,11 @@ } return new this.BlockStatement(openBlock.path, openBlock.params, openBlock.hash, program, inverse, openBlock.strip, inverseStrip, close && close.strip, this.locInfo(locInfo)); } }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhhbmRsZWJhcnMvY29tcGlsZXIvaGVscGVycy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFFTyxXQUFTLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFO0FBQzlDLFFBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLFFBQUksQ0FBQyxLQUFLLEdBQUc7QUFDWCxVQUFJLEVBQUUsT0FBTyxDQUFDLFVBQVU7QUFDeEIsWUFBTSxFQUFFLE9BQU8sQ0FBQyxZQUFZO0tBQzdCLENBQUM7QUFDRixRQUFJLENBQUMsR0FBRyxHQUFHO0FBQ1QsVUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTO0FBQ3ZCLFlBQU0sRUFBRSxPQUFPLENBQUMsV0FBVztLQUM1QixDQUFDO0dBQ0g7O0FBRU0sV0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFO0FBQ3hCLFFBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMxQixhQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDMUMsTUFBTTtBQUNMLGFBQU8sS0FBSyxDQUFDO0tBQ2Q7R0FDRjs7QUFFTSxXQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ3RDLFdBQU87QUFDTCxVQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO0FBQzVCLFdBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRztLQUM5QyxDQUFDO0dBQ0g7O0FBRU0sV0FBUyxZQUFZLENBQUMsT0FBTyxFQUFFO0FBQ3BDLFdBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQzVCLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDM0M7O0FBRU0sV0FB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O0tBQ3BCOztBQUVELFdBQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUMxQixTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksRUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFDaEIsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztHQUM1QiIsImZpbGUiOiJoYW5kbGViYXJzL2NvbXBpbGVyL2hlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBTb3VyY2VMb2NhdGlvbihzb3VyY2UsIGxvY0luZm8pIHtcbiAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gIHRoaXMuc3RhcnQgPSB7XG4gICAgbGluZTogbG9jSW5mby5maXJzdF9saW5lLFxuICAgIGNvbHVtbjogbG9jSW5mby5maXJzdF9jb2x1bW5cbiAgfTtcbiAgdGhpcy5lbmQgPSB7XG4gICAgbGluZTogbG9jSW5mby5sYXN0X2xpbmUsXG4gICAgY29sdW1uOiBsb2NJbmZvLmxhc3RfY29sdW1uXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZCh0b2tlbikge1xuICBpZiAoL15cXFsuKlxcXSQvLnRlc3QodG9rZW4pKSB7XG4gICAgcmV0dXJuIHRva2VuLnN1YnN0cigxLCB0b2tlbi5sZW5ndGggLSAyKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwRmxhZ3Mob3BlbiwgY2xvc2UpIHtcbiAgcmV0dXJuIHtcbiAgICBvcGVuOiBvcGVuLmNoYXJBdCgyKSA9PT0gJ34nLFxuICAgIGNsb3NlOiBjbG9zZS5jaGFyQXQoY2xvc2UubGVuZ3RoIC0gMykgPT09ICd+J1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBDb21tZW50KGNvbW1lbnQpIHtcbiAgcmV0dXJuIGNvbW1lbnQucmVwbGFjZSgvXlxce1xce34/XFwhLT8tPy8sICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8tPy0/fj9cXH1cXH0kLywgJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVBhdGgoZGF0YSwgcGFydHMsIGxvY0luZm8pIHtcbiAgbG9jSW5mbyA9IHRoaXMubG9jSW5mbyhsb2NJbmZvKTtcblxuICBsZXQgb3JpZ2luYWwgPSBkYXRhID8gJ0AnIDogJycsXG4gICAgICBkaWcgPSBbXSxcbiAgICAgIGRlcHRoID0gMCxcbiAgICAgIGRlcHRoU3RyaW5nID0gJyc7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgcGFydCA9IHBhcnRzW2ldLnBhcnQsXG4gICAgICAgIC8vIElmIHdlIGhhdmUgW10gc3ludGF4IHRoZW4gd2UgZG8gbm90IHRyZWF0IHBhdGggcmVmZXJlbmNlcyBhcyBvcGVyYXRvcnMsXG4gICAgICAgIC8vIGkuZS4gZm9vLlt0aGlzXSByZXNvbHZlcyB0byBhcHByb3hpbWF0ZWx5IGNvbnRleHQuZm9vWyd0aGlzJ11cbiAgICAgICAgaXNMaXRlcmFsID0gcGFydHNbaV0ub3JpZ2luYWwgIT09IHBhcnQ7XG4gICAgb3JpZ2luYWwgKz0gKHBhcnRzW2ldLnNlcGFyYXRvciB8fCAnJykgKyBwYXJ0O1xuXG4gICAgaWYgKCFpc0xpdGVyYWwgJiYgKHBhcnQgPT09ICcuLicgfHwgcGFydCA9PT0gJy4nIHx8IHBhcnQgPT09ICd0aGlzJykpIHtcbiAgICAgIGlmIChkaWcubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHBhdGg6ICcgKyBvcmlnaW5hbCwge2xvYzogbG9jSW5mb30pO1xuICAgICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICAgIGRlcHRoU3RyaW5nICs9ICcuLi8nO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkaWcucHVzaChwYXJ0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IHRoaXMuUGF0aEV4cHJlc3Npb24oZGF0YSwgZGVwdGgsIGRpZywgb3JpZ2luYWwsIGxvY0luZm8pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZU11c3RhY2hlKHBhdGgsIHBhcmFtcywgaGFzaCwgb3Blbiwgc3RyaXAsIGxvY0luZm8pIHtcbiAgLy8gTXVzdCB1c2UgY2hhckF0IHRvIHN1cHBvcnQgSUUgcHJlLTEwXG4gIGxldCBlc2NhcGVGbGFnID0gb3Blbi5jaGFyQXQoMykgfHwgb3Blbi5jaGFyQXQoMiksXG4gICAgICBlc2NhcGVkID0gZXNjYXBlRmxhZyAhPT0gJ3snICYmIGVzY2FwZUZsYWcgIT09ICcmJztcblxuICByZXR1cm4gbmV3IHRoaXMuTXVzdGFjaGVTdGF0ZW1lbnQocGF0aCwgcGFyYW1zLCBoYXNoLCBlc2NhcGVkLCBzdHJpcCwgdGhpcy5sb2NJbmZvKGxvY0luZm8pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVSYXdCbG9jayhvcGVuUmF3QmxvY2ssIGNvbnRlbnQsIGNsb3NlLCBsb2NJbmZvKSB7XG4gIGlmIChvcGVuUmF3QmxvY2sucGF0aC5vcmlnaW5hbCAhPT0gY2xvc2UpIHtcbiAgICBsZXQgZXJyb3JOb2RlID0ge2xvYzogb3BlblJhd0Jsb2NrLnBhdGgubG9jfTtcblxuICAgIHRocm93IG5ldyBFeGNlcHRpb24ob3BlblJhd0Jsb2NrLnBhdGgub3JpZ2luYWwgKyBcIiBkb2Vzbid0IG1hdGNoIFwiICsgY2xvc2UsIGVycm9yTm9kZSk7XG4gIH1cblxuICBsb2NJbmZvID0gdGhpcy5sb2NJbmZvKGxvY0luZm8pO1xuICBsZXQgcHJvZ3JhbSA9IG5ldyB0aGlzLlByb2dyYW0oW2NvbnRlbnRdLCBudWxsLCB7fSwgbG9jSW5mbyk7XG5cbiAgcmV0dXJuIG5ldyB0aGlzLkJsb2NrU3RhdGVtZW50KFxuICAgICAgb3BlblJhd0Jsb2NrLnBhdGgsIG9wZW5SYXdCbG9jay5wYXJhbXMsIG9wZW5SYXdCbG9jay5oYXNoLFxuICAgICAgcHJvZ3JhbSwgdW5kZWZpbmVkLFxuICAgICAge30sIHt9LCB7fSxcbiAgICAgIGxvY0luZm8pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUJsb2NrKG9wZW5CbG9jaywgcHJvZ3JhbSwgaW52ZXJzZUFuZFByb2dyYW0sIGNsb3NlLCBpbnZlcnRlZCwgbG9jSW5mbykge1xuICAvLyBXaGVuIHdlIGFyZSBjaGFpbmluZyBpbnZlcnNlIGNhbGxzLCB3ZSB3aWxsIG5vdCBoYXZlIGEgY2xvc2UgcGF0aFxuICBpZiAoY2xvc2UgJiYgY2xvc2UucGF0aCAmJiBvcGVuQmxvY2sucGF0aC5vcmlnaW5hbCAhPT0gY2xvc2UucGF0aC5vcmlnaW5hbCkge1xuICAgIGxldCBlcnJvck5vZGUgPSB7bG9jOiBvcGVuQmxvY2sucGF0aC5sb2N9O1xuXG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihvcGVuQmxvY2sucGF0aC5vcmlnaW5hbCArICcgZG9lc25cXCd0IG1hdGNoICcgKyBjbG9zZS5wYXRoLm9yaWdpbmFsLCBlcnJvck5vZGUpO1xuICB9XG5cbiAgcHJvZ3JhbS5ibG9ja1BhcmFtcyA9IG9wZW5CbG9jay5ibG9ja1BhcmFtcztcblxuICBsZXQgaW52ZXJzZSxcbiAgICAgIGludmVyc2VTdHJpcDtcblxuICBpZiAoaW52ZXJzZUFuZFByb2dyYW0pIHtcbiAgICBpZiAoaW52ZXJzZUFuZFByb2dyYW0uY2hhaW4pIHtcbiAgICAgIGludmVyc2VBbmRQcm9ncmFtLnByb2dyYW0uYm9keVswXS5jbG9zZVN0cmlwID0gY2xvc2Uuc3RyaXA7XG4gICAgfVxuXG4gICAgaW52ZXJzZVN0cmlwID0gaW52ZXJzZUFuZFByb2dyYW0uc3RyaXA7XG4gICAgaW52ZXJzZSA9IGludmVyc2VBbmRQcm9ncmFtLnByb2dyYW07XG4gIH1cblxuICBpZiAoaW52ZXJ0ZWQpIHtcbiAgICBpbnZlcnRlZCA9IGludmVyc2U7XG4gICAgaW52ZXJzZSA9IHByb2dyYW07XG4gICAgcHJvZ3JhbSA9IGludmVydGVkO1xuICB9XG5cbiAgcmV0dXJuIG5ldyB0aGlzLkJsb2NrU3RhdGVtZW50KFxuICAgICAgb3BlbkJsb2NrLnBhdGgsIG9wZW5CbG9jay5wYXJhbXMsIG9wZW5CbG9jay5oYXNoLFxuICAgICAgcHJvZ3JhbSwgaW52ZXJzZSxcbiAgICAgIG9wZW5CbG9jay5zdHJpcCwgaW52ZXJzZVN0cmlwLCBjbG9zZSAmJiBjbG9zZS5zdHJpcCxcbiAgICAgIHRoaXMubG9jSW5mbyhsb2NJbmZvKSk7XG59XG4iXX0= -enifed("handlebars/compiler/parser", ["exports"], function (exports) { +enifed("htmlbars-syntax/handlebars/compiler/parser", ["exports"], function (exports) { /* istanbul ignore next */ /* Jison generated parser */ "use strict"; var handlebars = (function () { @@ -25799,12 +16273,11 @@ this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser; return new Parser(); })();exports.default = handlebars; }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhhbmRsZWJhcnMvY29tcGlsZXIvcGFyc2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsUUFBSSxVQUFVLEdBQUcsQ0FBQyxZQUFVO0FBQzVCLFlBQUksTUFBTSxHQUFHLEVBQUMsS0FBSyxFQUFFLFNBQVMsS0FBSyxHQUFHLEVBQUc7QUFDekMsY0FBRSxFQUFFLEVBQUU7QUFDTixvQkFBUSxFQUFFLEVBQUMsT0FBTyxFQUFDLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsRUFBQyxxQkFBcUIsRUFBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsVUFBVSxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsZUFBZSxFQUFDLEVBQUUsRUFBQyxnQkFBZ0IsRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQywwQkFBMEIsRUFBQyxFQUFFLEVBQUMsc0JBQXNCLEVBQUMsRUFBRSxFQUFDLGlCQUFpQixFQUFDLEVBQUUsRUFBQyxXQUFXLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQyxhQUFhLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQyx1QkFBdUIsRUFBQyxFQUFFLEVBQUMsbUJBQW1CLEVBQUMsRUFBRSxFQUFDLG1CQUFtQixFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMseUJBQXlCLEVBQUMsRUFBRSxFQUFDLHFCQUFxQixFQUFDLEVBQUUsRUFBQyxxQkFBcUIs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QUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZvQix5QkFBYSxFQUFFLFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBRTs7QUFFM0Usb0JBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLHdCQUFRLE9BQU87QUFDZix5QkFBSyxDQUFDO0FBQUUsK0JBQU8sRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssQ0FBQztBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxDQUFDO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxDQUFDO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxDQUFDO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxDQUFDO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxDQUFDO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxDQUFDO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JILDhCQUFNO0FBQUEsQUFDTix5QkFBSyxDQUFDO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckUsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3RFLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2Riw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEYsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNySSw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxV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Q04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RILDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0gsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLEVB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QyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RCw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEQsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBRSwwQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxBQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4Ryw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUMzRCw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQywwQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsaUJBQ0w7YUFDQTtBQUNELGlCQUFLLEVBQUUsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDN3VULDBCQUFjLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxD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QUFDLEtBQUssRUFBQyxFQUFDLFNBQVMsRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsV0FBVyxFQUFDLElBQUksRUFBQyxFQUFDLENBQUM7QUFDclUsbUJBQU8sS0FBSyxDQUFDO1NBQUMsQ0FBQSxFQUFHLENBQUE7QUFDakIsY0FBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDckIsaUJBQVMsTUFBTSxHQUFJO0FBQUUsZ0JBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckYsZUFBTyxJQUFJLE1BQU0sRUFBQSxDQUFDO0tBQ2pCLENBQUEsRUFBRyxDQUFDLGtCQUFlLFVBQVUiLCJmaWxlIjoiaGFuZGxlYmFycy9jb21waWxlci9wYXJzZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuLyogSmlzb24gZ2VuZXJhdGVkIHBhcnNlciAqL1xudmFyIGhhbmRsZWJhcnMgPSAoZnVuY3Rpb24oKXtcbnZhciBwYXJzZXIgPSB7dHJhY2U6IGZ1bmN0aW9uIHRyYWNlKCkgeyB9LFxueXk6IHt9LFxuc3ltYm9sc186IHtcImVycm9yXCI6MixcInJvb3RcIjozLFwicHJvZ3JhbVwiOjQsXCJFT0ZcIjo1LFwicHJvZ3JhbV9yZXBldGl0aW9uMFwiOjYsXCJzdGF0ZW1lbnRcIjo3LFwibXVzdGFjaGVcIjo4LFwiYmxvY2tcIjo5LFwicmF3QmxvY2tcIjoxMCxcInBhcnRpYWxcIjoxMSxcImNvbnRlbnRcIjoxMixcIkNPTU1FTlRcIjoxMyxcIkNPTlRFTlRcIjoxNCxcIm9wZW5SYXdCbG9ja1wiOjE1LFwiRU5EX1JBV19CTE9DS1wiOjE2LFwiT1BFTl9SQVdfQkxPQ0tcIjoxNyxcImhlbHBlck5hbWVcIjoxOCxcIm9wZW5SYXdCbG9ja19yZXBldGl0aW9uMFwiOjE5LFwib3BlblJhd0Jsb2NrX29wdGlvbjBcIjoyMCxcIkNMT1NFX1JBV19CTE9DS1wiOjIxLFwib3BlbkJsb2NrXCI6MjIsXCJibG9ja19vcHRpb24wXCI6MjMsXCJjbG9zZUJsb2NrXCI6MjQsXCJvcGVuSW52ZXJzZVwiOjI1LFwiYmxvY2tfb3B0aW9uMVwiOjI2LFwiT1BFTl9CTE9DS1wiOjI3LFwib3BlbkJsb2NrX3JlcGV0aXRpb24wXCI6MjgsXCJvcGVuQmxvY2tfb3B0aW9uMFwiOjI5LFwib3BlbkJsb2NrX29wdGlvbjFcIjozMCxcIkNMT1NFXCI6MzEsXCJPUEVOX0lOVkVSU0VcIjozMixcIm9wZW5JbnZlcnNlX3JlcGV0aXRpb24wXCI6MzMsXCJvcGVuSW52ZXJzZV9vcHRpb24wXCI6MzQsXCJvcGVuSW52ZXJzZV9vcHRpb24xXCI6MzUsXCJvcGVuSW52ZXJzZUNoYWluXCI6MzYsXCJPUEVOX0lOVkVSU0VfQ0hBSU5cIjozNyxcIm9wZW5JbnZlcnNlQ2hhaW5fcmVwZXRpdGlvbjBcIjozOCxcIm9wZW5JbnZlcnNlQ2hhaW5fb3B0aW9uMFwiOjM5LFwib3BlbkludmVyc2VDaGFpbl9vcHRpb24xXCI6NDAsXCJpbnZlcnNlQW5kUHJvZ3JhbVwiOjQxLFwiSU5WRVJTRVwiOjQyLFwiaW52ZXJzZUNoYWluXCI6NDMsXCJpbnZlcnNlQ2hhaW5fb3B0aW9uMFwiOjQ0LFwiT1BFTl9FTkRCTE9DS1wiOjQ1LFwiT1BFTlwiOjQ2LFwibXVzdGFjaGVfcmVwZXRpdGlvbjBcIjo0NyxcIm11c3RhY2hlX29wdGlvbjBcIjo0OCxcIk9QRU5fVU5FU0NBUEVEXCI6NDksXCJtdXN0YWNoZV9yZXBldGl0aW9uMVwiOjUwLFwibXVzdGFjaGVfb3B0aW9uMVwiOjUxLFwiQ0xPU0VfVU5FU0NBUEVEXCI6NTIsXCJPUEVOX1BBUlRJQUxcIjo1MyxcInBhcnRpYWxOYW1lXCI6NTQsXCJwYXJ0aWFsX3JlcGV0aXRpb24wXCI6NTUsXCJwYXJ0aWFsX29wdGlvbjBcIjo1NixcInBhcmFtXCI6NTcsXCJzZXhwclwiOjU4LFwiT1BFTl9TRVhQUlwiOjU5LFwic2V4cHJfcmVwZXRpdGlvbjBcIjo2MCxcInNleHByX29wdGlvbjBcIjo2MSxcIkNMT1NFX1NFWFBSXCI6NjIsXCJoYXNoXCI6NjMsXCJoYXNoX3JlcGV0aXRpb25fcGx1czBcIjo2NCxcImhhc2hTZWdtZW50XCI6NjUsXCJJRFwiOjY2LFwiRVFVQUxTXCI6NjcsXCJibG9ja1BhcmFtc1wiOjY4LFwiT1BFTl9CTE9DS19QQVJBTVNcIjo2OSxcImJsb2NrUGFyYW1zX3JlcGV0aXRpb25fcGx1czBcIjo3MCxcIkNMT1NFX0JMT0NLX1BBUkFNU1wiOjcxLFwicGF0aFwiOjcyLFwiZGF0YU5hbWVcIjo3MyxcIlNUUklOR1wiOjc0LFwiTlVNQkVSXCI6NzUsXCJCT09MRUFOXCI6NzYsXCJVTkRFRklORURcIjo3NyxcIk5VTExcIjo3OCxcIkRBVEFcIjo3OSxcInBhdGhTZWdtZW50c1wiOjgwLFwiU0VQXCI6ODEsXCIkYWNjZXB0XCI6MCxcIiRlbmRcIjoxfSxcbnRlcm1pbmFsc186IHsyOlwiZXJyb3JcIiw1OlwiRU9GXCIsMTM6XCJDT01NRU5UXCIsMTQ6XCJDT05URU5UXCIsMTY6XCJFTkRfUkFXX0JMT0NLXCIsMTc6XCJPUEVOX1JBV19CTE9DS1wiLDIxOlwiQ0xPU0VfUkFXX0JMT0NLXCIsMjc6XCJPUEVOX0JMT0NLXCIsMzE6XCJDTE9TRVwiLDMyOlwiT1BFTl9JTlZFUlNFXCIsMzc6XCJPUEVOX0lOVkVSU0VfQ0hBSU5cIiw0MjpcIklOVkVSU0VcIiw0NTpcIk9QRU5fRU5EQkxPQ0tcIiw0NjpcIk9QRU5cIiw0OTpcIk9QRU5fVU5FU0NBUEVEXCIsNTI6XCJDTE9TRV9VTkVTQ0FQRURcIiw1MzpcIk9QRU5fUEFSVElBTFwiLDU5OlwiT1BFTl9TRVhQUlwiLDYyOlwiQ0xPU0VfU0VYUFJcIiw2NjpcIklEXCIsNjc6XCJFUVVBTFNcIiw2OTpcIk9QRU5fQkxPQ0tfUEFSQU1TXCIsNzE6XCJDTE9TRV9CTE9DS19QQVJBTVNcIiw3NDpcIlNUUklOR1wiLDc1OlwiTlVNQkVSXCIsNzY6XCJCT09MRUFOXCIsNzc6XCJVTkRFRklORURcIiw3ODpcIk5VTExcIiw3OTpcIkRBVEFcIiw4MTpcIlNFUFwifSxcbnByb2R1Y3Rpb25zXzogWzAsWzMsMl0sWzQsMV0sWzcsMV0sWzcsMV0sWzcsMV0sWzcsMV0sWzcsMV0sWzcsMV0sWzEyLDFdLFsxMCwzXSxbMTUsNV0sWzksNF0sWzksNF0sWzIyLDZdLFsyNSw2XSxbMzYsNl0sWzQxLDJdLFs0MywzXSxbNDMsMV0sWzI0LDNdLFs4LDVdLFs4LDVdLFsxMSw1XSxbNTcsMV0sWzU3LDFdLFs1OCw1XSxbNjMsMV0sWzY1LDNdLFs2OCwzXSxbMTgsMV0sWzE4LDFdLFsxOCwxXSxbMTgsMV0sWzE4LDFdLFsxOCwxXSxbMTgsMV0sWzU0LDFdLFs1NCwxXSxbNzMsMl0sWzcyLDFdLFs4MCwzXSxbODAsMV0sWzYsMF0sWzYsMl0sWzE5LDBdLFsxOSwyXSxbMjAsMF0sWzIwLDFdLFsyMywwXSxbMjMsMV0sWzI2LDBdLFsyNiwxXSxbMjgsMF0sWzI4LDJdLFsyOSwwXSxbMjksMV0sWzMwLDBdLFszMCwxXSxbMzMsMF0sWzMzLDJdLFszNCwwXSxbMzQsMV0sWzM1LDBdLFszNSwxXSxbMzgsMF0sWzM4LDJdLFszOSwwXSxbMzksMV0sWzQwLDBdLFs0MCwxXSxbNDQsMF0sWzQ0LDFdLFs0NywwXSxbNDcsMl0sWzQ4LDBdLFs0OCwxXSxbNTAsMF0sWzUwLDJdLFs1MSwwXSxbNTEsMV0sWzU1LDBdLFs1NSwyXSxbNTYsMF0sWzU2LDFdLFs2MCwwXSxbNjAsMl0sWzYxLDBdLFs2MSwxXSxbNjQsMV0sWzY0LDJdLFs3MCwxXSxbNzAsMl1dLFxucGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCx5eWxlbmcseXlsaW5lbm8seXkseXlzdGF0ZSwkJCxfJCkge1xuXG52YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuc3dpdGNoICh5eXN0YXRlKSB7XG5jYXNlIDE6IHJldHVybiAkJFskMC0xXTsgXG5icmVhaztcbmNhc2UgMjp0aGlzLiQgPSBuZXcgeXkuUHJvZ3JhbSgkJFskMF0sIG51bGwsIHt9LCB5eS5sb2NJbmZvKHRoaXMuXyQpKTtcbmJyZWFrO1xuY2FzZSAzOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA0OnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA1OnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA2OnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA3OnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA4OnRoaXMuJCA9IG5ldyB5eS5Db21tZW50U3RhdGVtZW50KHl5LnN0cmlwQ29tbWVudCgkJFskMF0pLCB5eS5zdHJpcEZsYWdzKCQkWyQwXSwgJCRbJDBdKSwgeXkubG9jSW5mbyh0aGlzLl8kKSk7XG5icmVhaztcbmNhc2UgOTp0aGlzLiQgPSBuZXcgeXkuQ29udGVudFN0YXRlbWVudCgkJFskMF0sIHl5LmxvY0luZm8odGhpcy5fJCkpO1xuYnJlYWs7XG5jYXNlIDEwOnRoaXMuJCA9IHl5LnByZXBhcmVSYXdCbG9jaygkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMTE6dGhpcy4kID0geyBwYXRoOiAkJFskMC0zXSwgcGFyYW1zOiAkJFskMC0yXSwgaGFzaDogJCRbJDAtMV0gfTtcbmJyZWFrO1xuY2FzZSAxMjp0aGlzLiQgPSB5eS5wcmVwYXJlQmxvY2soJCRbJDAtM10sICQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCBmYWxzZSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMTM6dGhpcy4kID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTNdLCAkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgdHJ1ZSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMTQ6dGhpcy4kID0geyBwYXRoOiAkJFskMC00XSwgcGFyYW1zOiAkJFskMC0zXSwgaGFzaDogJCRbJDAtMl0sIGJsb2NrUGFyYW1zOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNV0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAxNTp0aGlzLiQgPSB7IHBhdGg6ICQkWyQwLTRdLCBwYXJhbXM6ICQkWyQwLTNdLCBoYXNoOiAkJFskMC0yXSwgYmxvY2tQYXJhbXM6ICQkWyQwLTFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMC01XSwgJCRbJDBdKSB9O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtNF0sIHBhcmFtczogJCRbJDAtM10sIGhhc2g6ICQkWyQwLTJdLCBibG9ja1BhcmFtczogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTVdLCAkJFskMF0pIH07XG5icmVhaztcbmNhc2UgMTc6dGhpcy4kID0geyBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMC0xXSwgJCRbJDAtMV0pLCBwcm9ncmFtOiAkJFskMF0gfTtcbmJyZWFrO1xuY2FzZSAxODpcbiAgICB2YXIgaW52ZXJzZSA9IHl5LnByZXBhcmVCbG9jaygkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgJCRbJDBdLCBmYWxzZSwgdGhpcy5fJCksXG4gICAgICAgIHByb2dyYW0gPSBuZXcgeXkuUHJvZ3JhbShbaW52ZXJzZV0sIG51bGwsIHt9LCB5eS5sb2NJbmZvKHRoaXMuXyQpKTtcbiAgICBwcm9ncmFtLmNoYWluZWQgPSB0cnVlO1xuXG4gICAgdGhpcy4kID0geyBzdHJpcDogJCRbJDAtMl0uc3RyaXAsIHByb2dyYW06IHByb2dyYW0sIGNoYWluOiB0cnVlIH07XG4gIFxuYnJlYWs7XG5jYXNlIDE5OnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAyMDp0aGlzLiQgPSB7cGF0aDogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTJdLCAkJFskMF0pfTtcbmJyZWFrO1xuY2FzZSAyMTp0aGlzLiQgPSB5eS5wcmVwYXJlTXVzdGFjaGUoJCRbJDAtM10sICQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDAtNF0sIHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDIyOnRoaXMuJCA9IHl5LnByZXBhcmVNdXN0YWNoZSgkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMC00XSwgeXkuc3RyaXBGbGFncygkJFskMC00XSwgJCRbJDBdKSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMjM6dGhpcy4kID0gbmV3IHl5LlBhcnRpYWxTdGF0ZW1lbnQoJCRbJDAtM10sICQkWyQwLTJdLCAkJFskMC0xXSwgeXkuc3RyaXBGbGFncygkJFskMC00XSwgJCRbJDBdKSwgeXkubG9jSW5mbyh0aGlzLl8kKSk7XG5icmVhaztcbmNhc2UgMjQ6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDI1OnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAyNjp0aGlzLiQgPSBuZXcgeXkuU3ViRXhwcmVzc2lvbigkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCB5eS5sb2NJbmZvKHRoaXMuXyQpKTtcbmJyZWFrO1xuY2FzZSAyNzp0aGlzLiQgPSBuZXcgeXkuSGFzaCgkJFskMF0sIHl5LmxvY0luZm8odGhpcy5fJCkpO1xuYnJlYWs7XG5jYXNlIDI4OnRoaXMuJCA9IG5ldyB5eS5IYXNoUGFpcih5eS5pZCgkJFskMC0yXSksICQkWyQwXSwgeXkubG9jSW5mbyh0aGlzLl8kKSk7XG5icmVhaztcbmNhc2UgMjk6dGhpcy4kID0geXkuaWQoJCRbJDAtMV0pO1xuYnJlYWs7XG5jYXNlIDMwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAzMTp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMzI6dGhpcy4kID0gbmV3IHl5LlN0cmluZ0xpdGVyYWwoJCRbJDBdLCB5eS5sb2NJbmZvKHRoaXMuXyQpKTtcbmJyZWFrO1xuY2FzZSAzMzp0aGlzLiQgPSBuZXcgeXkuTnVtYmVyTGl0ZXJhbCgkJFskMF0sIHl5LmxvY0luZm8odGhpcy5fJCkpO1xuYnJlYWs7XG5jYXNlIDM0OnRoaXMuJCA9IG5ldyB5eS5Cb29sZWFuTGl0ZXJhbCgkJFskMF0sIHl5LmxvY0luZm8odGhpcy5fJCkpO1xuYnJlYWs7XG5jYXNlIDM1OnRoaXMuJCA9IG5ldyB5eS5VbmRlZmluZWRMaXRlcmFsKHl5LmxvY0luZm8odGhpcy5fJCkpO1xuYnJlYWs7XG5jYXNlIDM2OnRoaXMuJCA9IG5ldyB5eS5OdWxsTGl0ZXJhbCh5eS5sb2NJbmZvKHRoaXMuXyQpKTtcbmJyZWFrO1xuY2FzZSAzNzp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMzg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDM5OnRoaXMuJCA9IHl5LnByZXBhcmVQYXRoKHRydWUsICQkWyQwXSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgNDA6dGhpcy4kID0geXkucHJlcGFyZVBhdGgoZmFsc2UsICQkWyQwXSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgNDE6ICQkWyQwLTJdLnB1c2goe3BhcnQ6IHl5LmlkKCQkWyQwXSksIG9yaWdpbmFsOiAkJFskMF0sIHNlcGFyYXRvcjogJCRbJDAtMV19KTsgdGhpcy4kID0gJCRbJDAtMl07IFxuYnJlYWs7XG5jYXNlIDQyOnRoaXMuJCA9IFt7cGFydDogeXkuaWQoJCRbJDBdKSwgb3JpZ2luYWw6ICQkWyQwXX1dO1xuYnJlYWs7XG5jYXNlIDQzOnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDQ0OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA0NTp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA0NjokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNTM6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNTQ6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDU5OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDYwOiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA2NTp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA2NjokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNzM6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNzQ6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDc3OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDc4OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA4MTp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA4MjokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgODU6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgODY6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDg5OnRoaXMuJCA9IFskJFskMF1dO1xuYnJlYWs7XG5jYXNlIDkwOiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA5MTp0aGlzLiQgPSBbJCRbJDBdXTtcbmJyZWFrO1xuY2FzZSA5MjokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbn1cbn0sXG50YWJsZTogW3szOjEsNDoyLDU6WzIsNDNdLDY6MywxMzpbMiw0M10sMTQ6WzIsNDNdLDE3OlsyLDQzXSwyNzpbMiw0M10sMzI6WzIsNDNdLDQ2OlsyLDQzXSw0OTpbMiw0M10sNTM6WzIsNDNdfSx7MTpbM119LHs1OlsxLDRdfSx7NTpbMiwyXSw3OjUsODo2LDk6NywxMDo4LDExOjksMTI6MTAsMTM6WzEsMTFdLDE0OlsxLDE4XSwxNToxNiwxNzpbMSwyMV0sMjI6MTQsMjU6MTUsMjc6WzEsMTldLDMyOlsxLDIwXSwzNzpbMiwyXSw0MjpbMiwyXSw0NTpbMiwyXSw0NjpbMSwxMl0sNDk6WzEsMTNdLDUzOlsxLDE3XX0sezE6WzIsMV19LHs1OlsyLDQ0XSwxMzpbMiw0NF0sMTQ6WzIsNDRdLDE3OlsyLDQ0XSwyNzpbMiw0NF0sMzI6WzIsNDRdLDM3OlsyLDQ0XSw0MjpbMiw0NF0sNDU6WzIsNDRdLDQ2OlsyLDQ0XSw0OTpbMiw0NF0sNTM6WzIsNDRdfSx7NTpbMiwzXSwxMzpbMiwzXSwxNDpbMiwzXSwxNzpbMiwzXSwyNzpbMiwzXSwzMjpbMiwzXSwzNzpbMiwzXSw0MjpbMiwzXSw0NTpbMiwzXSw0NjpbMiwzXSw0OTpbMiwzXSw1MzpbMiwzXX0sezU6WzIsNF0sMTM6WzIsNF0sMTQ6WzIsNF0sMTc6WzIsNF0sMjc6WzIsNF0sMzI6WzIsNF0sMzc6WzIsNF0sNDI6WzIsNF0sNDU6WzIsNF0sNDY6WzIsNF0sNDk6WzIsNF0sNTM6WzIsNF19LHs1OlsyLDVdLDEzOlsyLDVdLDE0OlsyLDVdLDE3OlsyLDVdLDI3OlsyLDVdLDMyOlsyLDVdLDM3OlsyLDVdLDQyOlsyLDVdLDQ1OlsyLDVdLDQ2OlsyLDVdLDQ5OlsyLDVdLDUzOlsyLDVdfSx7NTpbMiw2XSwxMzpbMiw2XSwxNDpbMiw2XSwxNzpbMiw2XSwyNzpbMiw2XSwzMjpbMiw2XSwzNzpbMiw2XSw0MjpbMiw2XSw0NTpbMiw2XSw0NjpbMiw2XSw0OTpbMiw2XSw1MzpbMiw2XX0sezU6WzIsN10sMTM6WzIsN10sMTQ6WzIsN10sMTc6WzIsN10sMjc6WzIsN10sMzI6WzIsN10sMzc6WzIsN10sNDI6WzIsN10sNDU6WzIsN10sNDY6WzIsN10sNDk6WzIsN10sNTM6WzIsN119LHs1OlsyLDhdLDEzOlsyLDhdLDE0OlsyLDhdLDE3OlsyLDhdLDI3OlsyLDhdLDMyOlsyLDhdLDM3OlsyLDhdLDQyOlsyLDhdLDQ1OlsyLDhdLDQ2OlsyLDhdLDQ5OlsyLDhdLDUzOlsyLDhdfSx7MTg6MjIsNjY6WzEsMzJdLDcyOjIzLDczOjI0LDc0OlsxLDI1XSw3NTpbMSwyNl0sNzY6WzEsMjddLDc3OlsxLDI4XSw3ODpbMSwyOV0sNzk6WzEsMzFdLDgwOjMwfSx7MTg6MzMsNjY6WzEsMzJdLDcyOjIzLDczOjI0LDc0OlsxLDI1XSw3NTpbMSwyNl0sNzY6WzEsMjddLDc3OlsxLDI4XSw3ODpbMSwyOV0sNzk6WzEsMzFdLDgwOjMwfSx7NDozNCw2OjMsMTM6WzIsNDNdLDE0OlsyLDQzXSwxNzpbMiw0M10sMjc6WzIsNDNdLDMyOlsyLDQzXSwzNzpbMiw0M10sNDI6WzIsNDNdLDQ1OlsyLDQzXSw0NjpbMiw0M10sNDk6WzIsNDNdLDUzOlsyLDQzXX0sezQ6MzUsNjozLDEzOlsyLDQzXSwxNDpbMiw0M10sMTc6WzIsNDNdLDI3OlsyLDQzXSwzMjpbMiw0M10sNDI6WzIsNDNdLDQ1OlsyLDQzXSw0NjpbMiw0M10sNDk6WzIsNDNdLDUzOlsyLDQzXX0sezEyOjM2LDE0OlsxLDE4XX0sezE4OjM4LDU0OjM3LDU4OjM5LDU5OlsxLDQwXSw2NjpbMSwzMl0sNzI6MjMsNzM6MjQsNzQ6WzEsMjVdLDc1OlsxLDI2XSw3NjpbMSwyN10sNzc6WzEsMjhdLDc4OlsxLDI5XSw3OTpbMSwzMV0sODA6MzB9LHs1OlsyLDldLDEzOlsyLDldLDE0OlsyLDldLDE2OlsyLDldLDE3OlsyLDldLDI3OlsyLDldLDMyOlsyLDldLDM3OlsyLDldLDQyOlsyLDldLDQ1OlsyLDldLDQ2OlsyLDldLDQ5OlsyLDldLDUzOlsyLDldfSx7MTg6NDEsNjY6WzEsMzJdLDcyOjIzLDczOjI0LDc0OlsxLDI1XSw3NTpbMSwyNl0sNzY6WzEsMjddLDc3OlsxLDI4XSw3ODpbMSwyOV0sNzk6WzEsMzFdLDgwOjMwfSx7MTg6NDIsNjY6WzEsMzJdLDcyOjIzLDczOjI0LDc0OlsxLDI1XSw3NTpbMSwyNl0sNzY6WzEsMjddLDc3OlsxLDI4XSw3ODpbMSwyOV0sNzk6WzEsMzFdLDgwOjMwfSx7MTg6NDMsNjY6WzEsMzJdLDcyOjIzLDczOjI0LDc0OlsxLDI1XSw3NTpbMSwyNl0sNzY6WzEsMjddLDc3OlsxLDI4XSw3ODpbMSwyOV0sNzk6WzEsMzFdLDgwOjMwfSx7MzE6WzIsNzNdLDQ3OjQ0LDU5OlsyLDczXSw2NjpbMiw3M10sNzQ6WzIsNzNdLDc1OlsyLDczXSw3NjpbMiw3M10sNzc6WzIsNzNdLDc4OlsyLDczXSw3OTpbMiw3M119LHsyMTpbMiwzMF0sMzE6WzIsMzBdLDUyOlsyLDMwXSw1OTpbMiwzMF0sNjI6WzIsMzBdLDY2OlsyLDMwXSw2OTpbMiwzMF0sNzQ6WzIsMzBdLDc1OlsyLDMwXSw3NjpbMiwzMF0sNzc6WzIsMzBdLDc4OlsyLDMwXSw3OTpbMiwzMF19LHsyMTpbMiwzMV0sMzE6WzIsMzFdLDUyOlsyLDMxXSw1OTpbMiwzMV0sNjI6WzIsMzFdLDY2OlsyLDMxXSw2OTpbMiwzMV0sNzQ6WzIsMzFdLDc1OlsyLDMxXSw3NjpbMiwzMV0sNzc6WzIsMzFdLDc4OlsyLDMxXSw3OTpbMiwzMV19LHsyMTpbMiwzMl0sMzE6WzIsMzJdLDUyOlsyLDMyXSw1OTpbMiwzMl0sNjI6WzIsMzJdLDY2OlsyLDMyXSw2OTpbMiwzMl0sNzQ6WzIsMzJdLDc1OlsyLDMyXSw3NjpbMiwzMl0sNzc6WzIsMzJdLDc4OlsyLDMyXSw3OTpbMiwzMl19LHsyMTpbMiwzM10sMzE6WzIsMzNdLDUyOlsyLDMzXSw1OTpbMiwzM10sNjI6WzIsMzNdLDY2OlsyLDMzXSw2OTpbMiwzM10sNzQ6WzIsMzNdLDc1OlsyLDMzXSw3NjpbMiwzM10sNzc6WzIsMzNdLDc4OlsyLDMzXSw3OTpbMiwzM119LHsyMTpbMiwzNF0sMzE6WzIsMzRdLDUyOlsyLDM0XSw1OTpbMiwzNF0sNjI6WzIsMzRdLDY2OlsyLDM0XSw2OTpbMiwzNF0sNzQ6WzIsMzRdLDc1OlsyLDM0XSw3NjpbMiwzNF0sNzc6WzIsMzRdLDc4OlsyLDM0XSw3OTpbMiwzNF19LHsyMTpbMiwzNV0sMzE6WzIsMzVdLDUyOlsyLDM1XSw1OTpbMiwzNV0sNjI6WzIsMzVdLDY2OlsyLDM1XSw2OTpbMiwzNV0sNzQ6WzIsMzVdLDc1OlsyLDM1XSw3NjpbMiwzNV0sNzc6WzIsMzVdLDc4OlsyLDM1XSw3OTpbMiwzNV19LHsyMTpbMiwzNl0sMzE6WzIsMzZdLDUyOlsyLDM2XSw1OTpbMiwzNl0sNjI6WzIsMzZdLDY2OlsyLDM2XSw2OTpbMiwzNl0sNzQ6WzIsMzZdLDc1OlsyLDM2XSw3NjpbMiwzNl0sNzc6WzIsMzZdLDc4OlsyLDM2XSw3OTpbMiwzNl19LHsyMTpbMiw0MF0sMzE6WzIsNDBdLDUyOlsyLDQwXSw1OTpbMiw0MF0sNjI6WzIsNDBdLDY2OlsyLDQwXSw2OTpbMiw0MF0sNzQ6WzIsNDBdLDc1OlsyLDQwXSw3NjpbMiw0MF0sNzc6WzIsNDBdLDc4OlsyLDQwXSw3OTpbMiw0MF0sODE6WzEsNDVdfSx7NjY6WzEsMzJdLDgwOjQ2fSx7MjE6WzIsNDJdLDMxOlsyLDQyXSw1MjpbMiw0Ml0sNTk6WzIsNDJdLDYyOlsyLDQyXSw2NjpbMiw0Ml0sNjk6WzIsNDJdLDc0OlsyLDQyXSw3NTpbMiw0Ml0sNzY6WzIsNDJdLDc3OlsyLDQyXSw3ODpbMiw0Ml0sNzk6WzIsNDJdLDgxOlsyLDQyXX0sezUwOjQ3LDUyOlsyLDc3XSw1OTpbMiw3N10sNjY6WzIsNzddLDc0OlsyLDc3XSw3NTpbMiw3N10sNzY6WzIsNzddLDc3OlsyLDc3XSw3ODpbMiw3N10sNzk6WzIsNzddfSx7MjM6NDgsMzY6NTAsMzc6WzEsNTJdLDQxOjUxLDQyOlsxLDUzXSw0Mzo0OSw0NTpbMiw0OV19LHsyNjo1NCw0MTo1NSw0MjpbMSw1M10sNDU6WzIsNTFdfSx7MTY6WzEsNTZdfSx7MzE6WzIsODFdLDU1OjU3LDU5OlsyLDgxXSw2NjpbMiw4MV0sNzQ6WzIsODFdLDc1OlsyLDgxXSw3NjpbMiw4MV0sNzc6WzIsODFdLDc4OlsyLDgxXSw3OTpbMiw4MV19LHszMTpbMiwzN10sNTk6WzIsMzddLDY2OlsyLDM3XSw3NDpbMiwzN10sNzU6WzIsMzddLDc2OlsyLDM3XSw3NzpbMiwzN10sNzg6WzIsMzddLDc5OlsyLDM3XX0sezMxOlsyLDM4XSw1OTpbMiwzOF0sNjY6WzIsMzhdLDc0OlsyLDM4XSw3NTpbMiwzOF0sNzY6WzIsMzhdLDc3OlsyLDM4XSw3ODpbMiwzOF0sNzk6WzIsMzhdfSx7MTg6NTgsNjY6WzEsMzJdLDcyOjIzLDczOjI0LDc0OlsxLDI1XSw3NTpbMSwyNl0sNzY6WzEsMjddLDc3OlsxLDI4XSw3ODpbMSwyOV0sNzk6WzEsMzFdLDgwOjMwfSx7Mjg6NTksMzE6WzIsNTNdLDU5OlsyLDUzXSw2NjpbMiw1M10sNjk6WzIsNTNdLDc0OlsyLDUzXSw3NTpbMiw1M10sNzY6WzIsNTNdLDc3OlsyLDUzXSw3ODpbMiw1M10sNzk6WzIsNTNdfSx7MzE6WzIsNTldLDMzOjYwLDU5OlsyLDU5XSw2NjpbMiw1OV0sNjk6WzIsNTldLDc0OlsyLDU5XSw3NTpbMiw1OV0sNzY6WzIsNTldLDc3OlsyLDU5XSw3ODpbMiw1OV0sNzk6WzIsNTldfSx7MTk6NjEsMjE6WzIsNDVdLDU5OlsyLDQ1XSw2NjpbMiw0NV0sNzQ6WzIsNDVdLDc1OlsyLDQ1XSw3NjpbMiw0NV0sNzc6WzIsNDVdLDc4OlsyLDQ1XSw3OTpbMiw0NV19LHsxODo2NSwzMTpbMiw3NV0sNDg6NjIsNTc6NjMsNTg6NjYsNTk6WzEsNDBdLDYzOjY0LDY0OjY3LDY1OjY4LDY2OlsxLDY5XSw3MjoyMyw3MzoyNCw3NDpbMSwyNV0sNzU6WzEsMjZdLDc2OlsxLDI3XSw3NzpbMSwyOF0sNzg6WzEsMjldLDc5OlsxLDMxXSw4MDozMH0sezY2OlsxLDcwXX0sezIxOlsyLDM5XSwzMTpbMiwzOV0sNTI6WzIsMzldLDU5OlsyLDM5XSw2MjpbMiwzOV0sNjY6WzIsMzldLDY5OlsyLDM5XSw3NDpbMiwzOV0sNzU6WzIsMzldLDc2OlsyLDM5XSw3NzpbMiwzOV0sNzg6WzIsMzldLDc5OlsyLDM5XSw4MTpbMSw0NV19LHsxODo2NSw1MTo3MSw1MjpbMiw3OV0sNTc6NzIsNTg6NjYsNTk6WzEsNDBdLDYzOjczLDY0OjY3LDY1OjY4LDY2OlsxLDY5XSw3MjoyMyw3MzoyNCw3NDpbMSwyNV0sNzU6WzEsMjZdLDc2OlsxLDI3XSw3NzpbMSwyOF0sNzg6WzEsMjldLDc5OlsxLDMxXSw4MDozMH0sezI0Ojc0LDQ1OlsxLDc1XX0sezQ1OlsyLDUwXX0sezQ6NzYsNjozLDEzOlsyLDQzXSwxNDpbMiw0M10sMTc6WzIsNDNdLDI3OlsyLDQzXSwzMjpbMiw0M10sMzc6WzIsNDNdLDQyOlsyLDQzXSw0NTpbMiw0M10sNDY6WzIsNDNdLDQ5OlsyLDQzXSw1MzpbMiw0M119LHs0NTpbMiwxOV19LHsxODo3Nyw2NjpbMSwzMl0sNzI6MjMsNzM6MjQsNzQ6WzEsMjVdLDc1OlsxLDI2XSw3NjpbMSwyN10sNzc6WzEsMjhdLDc4OlsxLDI5XSw3OTpbMSwzMV0sODA6MzB9LHs0Ojc4LDY6MywxMzpbMiw0M10sMTQ6WzIsNDNdLDE3OlsyLDQzXSwyNzpbMiw0M10sMzI6WzIsNDNdLDQ1OlsyLDQzXSw0NjpbMiw0M10sNDk6WzIsNDNdLDUzOlsyLDQzXX0sezI0Ojc5LDQ1OlsxLDc1XX0sezQ1OlsyLDUyXX0sezU6WzIsMTBdLDEzOlsyLDEwXSwxNDpbMiwxMF0sMTc6WzIsMTBdLDI3OlsyLDEwXSwzMjpbMiwxMF0sMzc6WzIsMTBdLDQyOlsyLDEwXSw0NTpbMiwxMF0sNDY6WzIsMTBdLDQ5OlsyLDEwXSw1MzpbMiwxMF19LHsxODo2NSwzMTpbMiw4M10sNTY6ODAsNTc6ODEsNTg6NjYsNTk6WzEsNDBdLDYzOjgyLDY0OjY3LDY1OjY4LDY2OlsxLDY5XSw3MjoyMyw3MzoyNCw3NDpbMSwyNV0sNzU6WzEsMjZdLDc2OlsxLDI3XSw3NzpbMSwyOF0sNzg6WzEsMjldLDc5OlsxLDMxXSw4MDozMH0sezU5OlsyLDg1XSw2MDo4Myw2MjpbMiw4NV0sNjY6WzIsODVdLDc0OlsyLDg1XSw3NTpbMiw4NV0sNzY6WzIsODVdLDc3OlsyLDg1XSw3ODpbMiw4NV0sNzk6WzIsODVdfSx7MTg6NjUsMjk6ODQsMzE6WzIsNTVdLDU3Ojg1LDU4OjY2LDU5OlsxLDQwXSw2Mzo4Niw2NDo2Nyw2NTo2OCw2NjpbMSw2OV0sNjk6WzIsNTVdLDcyOjIzLDczOjI0LDc0OlsxLDI1XSw3NTpbMSwyNl0sNzY6WzEsMjddLDc3OlsxLDI4XSw3ODpbMSwyOV0sNzk6WzEsMzFdLDgwOjMwfSx7MTg6NjUsMzE6WzIsNjFdLDM0Ojg3LDU3Ojg4LDU4OjY2LDU5OlsxLDQwXSw2Mzo4OSw2NDo2Nyw2NTo2OCw2NjpbMSw2OV0sNjk6WzIsNjFdLDcyOjIzLDczOjI0LDc0OlsxLDI1XSw3NTpbMSwyNl0sNzY6WzEsMjddLDc3OlsxLDI4XSw3ODpbMSwyOV0sNzk6WzEsMzFdLDgwOjMwfSx7MTg6NjUsMjA6OTAsMjE6WzIsNDddLDU3OjkxLDU4OjY2LDU5OlsxLDQwXSw2Mzo5Miw2NDo2Nyw2NTo2OCw2NjpbMSw2OV0sNzI6MjMsNzM6MjQsNzQ6WzEsMjVdLDc1OlsxLDI2XSw3NjpbMSwyN10sNzc6WzEsMjhdLDc4OlsxLDI5XSw3OTpbMSwzMV0sODA6MzB9LHszMTpbMSw5M119LHszMTpbMiw3NF0sNTk6WzIsNzRdLDY2OlsyLDc0XSw3NDpbMiw3NF0sNzU6WzIsNzRdLDc2OlsyLDc0XSw3NzpbMiw3NF0sNzg6WzIsNzRdLDc5OlsyLDc0XX0sezMxOlsyLDc2XX0sezIxOlsyLDI0XSwzMTpbMiwyNF0sNTI6WzIsMjRdLDU5OlsyLDI0XSw2MjpbMiwyNF0sNjY6WzIsMjRdLDY5OlsyLDI0XSw3NDpbMiwyNF0sNzU6WzIsMjRdLDc2OlsyLDI0XSw3NzpbMiwyNF0sNzg6WzIsMjRdLDc5OlsyLDI0XX0sezIxOlsyLDI1XSwzMTpbMiwyNV0sNTI6WzIsMjVdLDU5OlsyLDI1XSw2MjpbMiwyNV0sNjY6WzIsMjVdLDY5OlsyLDI1XSw3NDpbMiwyNV0sNzU6WzIsMjVdLDc2OlsyLDI1XSw3NzpbMiwyNV0sNzg6WzIsMjVdLDc5OlsyLDI1XX0sezIxOlsyLDI3XSwzMTpbMiwyN10sNTI6WzIsMjddLDYyOlsyLDI3XSw2NTo5NCw2NjpbMSw5NV0sNjk6WzIsMjddfSx7MjE6WzIsODldLDMxOlsyLDg5XSw1MjpbMiw4OV0sNjI6WzIsODldLDY2OlsyLDg5XSw2OTpbMiw4OV19LHsyMTpbMiw0Ml0sMzE6WzIsNDJdLDUyOlsyLDQyXSw1OTpbMiw0Ml0sNjI6WzIsNDJdLDY2OlsyLDQyXSw2NzpbMSw5Nl0sNjk6WzIsNDJdLDc0OlsyLDQyXSw3NTpbMiw0Ml0sNzY6WzIsNDJdLDc3OlsyLDQyXSw3ODpbMiw0Ml0sNzk6WzIsNDJdLDgxOlsyLDQyXX0sezIxOlsyLDQxXSwzMTpbMiw0MV0sNTI6WzIsNDFdLDU5OlsyLDQxXSw2MjpbMiw0MV0sNjY6WzIsNDFdLDY5OlsyLDQxXSw3NDpbMiw0MV0sNzU6WzIsNDFdLDc2OlsyLDQxXSw3NzpbMiw0MV0sNzg6WzIsNDFdLDc5OlsyLDQxXSw4MTpbMiw0MV19LHs1MjpbMSw5N119LHs1MjpbMiw3OF0sNTk6WzIsNzhdLDY2OlsyLDc4XSw3NDpbMiw3OF0sNzU6WzIsNzhdLDc2OlsyLDc4XSw3NzpbMiw3OF0sNzg6WzIsNzhdLDc5OlsyLDc4XX0sezUyOlsyLDgwXX0sezU6WzIsMTJdLDEzOlsyLDEyXSwxNDpbMiwxMl0sMTc6WzIsMTJdLDI3OlsyLDEyXSwzMjpbMiwxMl0sMzc6WzIsMTJdLDQyOlsyLDEyXSw0NTpbMiwxMl0sNDY6WzIsMTJdLDQ5OlsyLDEyXSw1MzpbMiwxMl19LHsxODo5OCw2NjpbMSwzMl0sNzI6MjMsNzM6MjQsNzQ6WzEsMjVdLDc1OlsxLDI2XSw3NjpbMSwyN10sNzc6WzEsMjhdLDc4OlsxLDI5XSw3OTpbMSwzMV0sODA6MzB9LHszNjo1MCwzNzpbMSw1Ml0sNDE6NTEsNDI6WzEsNTNdLDQzOjEwMCw0NDo5OSw0NTpbMiw3MV19LHszMTpbMiw2NV0sMzg6MTAxLDU5OlsyLDY1XSw2NjpbMiw2NV0sNjk6WzIsNjVdLDc0OlsyLDY1XSw3NTpbMiw2NV0sNzY6WzIsNjVdLDc3OlsyLDY1XSw3ODpbMiw2NV0sNzk6WzIsNjVdfSx7NDU6WzIsMTddfSx7NTpbMiwxM10sMTM6WzIsMTNdLDE0OlsyLDEzXSwxNzpbMiwxM10sMjc6WzIsMTNdLDMyOlsyLDEzXSwzNzpbMiwxM10sNDI6WzIsMTNdLDQ1OlsyLDEzXSw0NjpbMiwxM10sNDk6WzIsMTNdLDUzOlsyLDEzXX0sezMxOlsxLDEwMl19LHszMTpbMiw4Ml0sNTk6WzIsODJdLDY2OlsyLDgyXSw3NDpbMiw4Ml0sNzU6WzIsODJdLDc2OlsyLDgyXSw3NzpbMiw4Ml0sNzg6WzIsODJdLDc5OlsyLDgyXX0sezMxOlsyLDg0XX0sezE4OjY1LDU3OjEwNCw1ODo2Niw1OTpbMSw0MF0sNjE6MTAzLDYyOlsyLDg3XSw2MzoxMDUsNjQ6NjcsNjU6NjgsNjY6WzEsNjldLDcyOjIzLDczOjI0LDc0OlsxLDI1XSw3NTpbMSwyNl0sNzY6WzEsMjddLDc3OlsxLDI4XSw3ODpbMSwyOV0sNzk6WzEsMzFdLDgwOjMwfSx7MzA6MTA2LDMxOlsyLDU3XSw2ODoxMDcsNjk6WzEsMTA4XX0sezMxOlsyLDU0XSw1OTpbMiw1NF0sNjY6WzIsNTRdLDY5OlsyLDU0XSw3NDpbMiw1NF0sNzU6WzIsNTRdLDc2OlsyLDU0XSw3NzpbMiw1NF0sNzg6WzIsNTRdLDc5OlsyLDU0XX0sezMxOlsyLDU2XSw2OTpbMiw1Nl19LHszMTpbMiw2M10sMzU6MTA5LDY4OjExMCw2OTpbMSwxMDhdfSx7MzE6WzIsNjBdLDU5OlsyLDYwXSw2NjpbMiw2MF0sNjk6WzIsNjBdLDc0OlsyLDYwXSw3NTpbMiw2MF0sNzY6WzIsNjBdLDc3OlsyLDYwXSw3ODpbMiw2MF0sNzk6WzIsNjBdfSx7MzE6WzIsNjJdLDY5OlsyLDYyXX0sezIxOlsxLDExMV19LHsyMTpbMiw0Nl0sNTk6WzIsNDZdLDY2OlsyLDQ2XSw3NDpbMiw0Nl0sNzU6WzIsNDZdLDc2OlsyLDQ2XSw3NzpbMiw0Nl0sNzg6WzIsNDZdLDc5OlsyLDQ2XX0sezIxOlsyLDQ4XX0sezU6WzIsMjFdLDEzOlsyLDIxXSwxNDpbMiwyMV0sMTc6WzIsMjFdLDI3OlsyLDIxXSwzMjpbMiwyMV0sMzc6WzIsMjFdLDQyOlsyLDIxXSw0NTpbMiwyMV0sNDY6WzIsMjFdLDQ5OlsyLDIxXSw1MzpbMiwyMV19LHsyMTpbMiw5MF0sMzE6WzIsOTBdLDUyOlsyLDkwXSw2MjpbMiw5MF0sNjY6WzIsOTBdLDY5OlsyLDkwXX0sezY3OlsxLDk2XX0sezE4OjY1LDU3OjExMiw1ODo2Niw1OTpbMSw0MF0sNjY6WzEsMzJdLDcyOjIzLDczOjI0LDc0OlsxLDI1XSw3NTpbMSwyNl0sNzY6WzEsMjddLDc3OlsxLDI4XSw3ODpbMSwyOV0sNzk6WzEsMzFdLDgwOjMwfSx7NTpbMiwyMl0sMTM6WzIsMjJdLDE0OlsyLDIyXSwxNzpbMiwyMl0sMjc6WzIsMjJdLDMyOlsyLDIyXSwzNzpbMiwyMl0sNDI6WzIsMjJdLDQ1OlsyLDIyXSw0NjpbMiwyMl0sNDk6WzIsMjJdLDUzOlsyLDIyXX0sezMxOlsxLDExM119LHs0NTpbMiwxOF19LHs0NTpbMiw3Ml19LHsxODo2NSwzMTpbMiw2N10sMzk6MTE0LDU3OjExNSw1ODo2Niw1OTpbMSw0MF0sNjM6MTE2LDY0OjY3LDY1OjY4LDY2OlsxLDY5XSw2OTpbMiw2N10sNzI6MjMsNzM6MjQsNzQ6WzEsMjVdLDc1OlsxLDI2XSw3NjpbMSwyN10sNzc6WzEsMjhdLDc4OlsxLDI5XSw3OTpbMSwzMV0sODA6MzB9LHs1OlsyLDIzXSwxMzpbMiwyM10sMTQ6WzIsMjNdLDE3OlsyLDIzXSwyNzpbMiwyM10sMzI6WzIsMjNdLDM3OlsyLDIzXSw0MjpbMiwyM10sNDU6WzIsMjNdLDQ2OlsyLDIzXSw0OTpbMiwyM10sNTM6WzIsMjNdfSx7NjI6WzEsMTE3XX0sezU5OlsyLDg2XSw2MjpbMiw4Nl0sNjY6WzIsODZdLDc0OlsyLDg2XSw3NTpbMiw4Nl0sNzY6WzIsODZdLDc3OlsyLDg2XSw3ODpbMiw4Nl0sNzk6WzIsODZdfSx7NjI6WzIsODhdfSx7MzE6WzEsMTE4XX0sezMxOlsyLDU4XX0sezY2OlsxLDEyMF0sNzA6MTE5fSx7MzE6WzEsMTIxXX0sezMxOlsyLDY0XX0sezE0OlsyLDExXX0sezIxOlsyLDI4XSwzMTpbMiwyOF0sNTI6WzIsMjhdLDYyOlsyLDI4XSw2NjpbMiwyOF0sNjk6WzIsMjhdfSx7NTpbMiwyMF0sMTM6WzIsMjBdLDE0OlsyLDIwXSwxNzpbMiwyMF0sMjc6WzIsMjBdLDMyOlsyLDIwXSwzNzpbMiwyMF0sNDI6WzIsMjBdLDQ1OlsyLDIwXSw0NjpbMiwyMF0sNDk6WzIsMjBdLDUzOlsyLDIwXX0sezMxOlsyLDY5XSw0MDoxMjIsNjg6MTIzLDY5OlsxLDEwOF19LHszMTpbMiw2Nl0sNTk6WzIsNjZdLDY2OlsyLDY2XSw2OTpbMiw2Nl0sNzQ6WzIsNjZdLDc1OlsyLDY2XSw3NjpbMiw2Nl0sNzc6WzIsNjZdLDc4OlsyLDY2XSw3OTpbMiw2Nl19LHszMTpbMiw2OF0sNjk6WzIsNjhdfSx7MjE6WzIsMjZdLDMxOlsyLDI2XSw1MjpbMiwyNl0sNTk6WzIsMjZdLDYyOlsyLDI2XSw2NjpbMiwyNl0sNjk6WzIsMjZdLDc0OlsyLDI2XSw3NTpbMiwyNl0sNzY6WzIsMjZdLDc3OlsyLDI2XSw3ODpbMiwyNl0sNzk6WzIsMjZdfSx7MTM6WzIsMTRdLDE0OlsyLDE0XSwxNzpbMiwxNF0sMjc6WzIsMTRdLDMyOlsyLDE0XSwzNzpbMiwxNF0sNDI6WzIsMTRdLDQ1OlsyLDE0XSw0NjpbMiwxNF0sNDk6WzIsMTRdLDUzOlsyLDE0XX0sezY2OlsxLDEyNV0sNzE6WzEsMTI0XX0sezY2OlsyLDkxXSw3MTpbMiw5MV19LHsxMzpbMiwxNV0sMTQ6WzIsMTVdLDE3OlsyLDE1XSwyNzpbMiwxNV0sMzI6WzIsMTVdLDQyOlsyLDE1XSw0NTpbMiwxNV0sNDY6WzIsMTVdLDQ5OlsyLDE1XSw1MzpbMiwxNV19LHszMTpbMSwxMjZdfSx7MzE6WzIsNzBdfSx7MzE6WzIsMjldfSx7NjY6WzIsOTJdLDcxOlsyLDkyXX0sezEzOlsyLDE2XSwxNDpbMiwxNl0sMTc6WzIsMTZdLDI3OlsyLDE2XSwzMjpbMiwxNl0sMzc6WzIsMTZdLDQyOlsyLDE2XSw0NTpbMiwxNl0sNDY6WzIsMTZdLDQ5OlsyLDE2XSw1MzpbMiwxNl19XSxcbmRlZmF1bHRBY3Rpb25zOiB7NDpbMiwxXSw0OTpbMiw1MF0sNTE6WzIsMTldLDU1OlsyLDUyXSw2NDpbMiw3Nl0sNzM6WzIsODBdLDc4OlsyLDE3XSw4MjpbMiw4NF0sOTI6WzIsNDhdLDk5OlsyLDE4XSwxMDA6WzIsNzJdLDEwNTpbMiw4OF0sMTA3OlsyLDU4XSwxMTA6WzIsNjRdLDExMTpbMiwxMV0sMTIzOlsyLDcwXSwxMjQ6WzIsMjldfSxcbnBhcnNlRXJyb3I6IGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG59LFxucGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sgPSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSBcIlwiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIHJlY292ZXJpbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgIHRoaXMubGV4ZXIuc2V0SW5wdXQoaW5wdXQpO1xuICAgIHRoaXMubGV4ZXIueXkgPSB0aGlzLnl5O1xuICAgIHRoaXMueXkubGV4ZXIgPSB0aGlzLmxleGVyO1xuICAgIHRoaXMueXkucGFyc2VyID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRoaXMubGV4ZXIueXlsbG9jID09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgIHRoaXMubGV4ZXIueXlsbG9jID0ge307XG4gICAgdmFyIHl5bG9jID0gdGhpcy5sZXhlci55eWxsb2M7XG4gICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgIHZhciByYW5nZXMgPSB0aGlzLmxleGVyLm9wdGlvbnMgJiYgdGhpcy5sZXhlci5vcHRpb25zLnJhbmdlcztcbiAgICBpZiAodHlwZW9mIHRoaXMueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0aGlzLnl5LnBhcnNlRXJyb3I7XG4gICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjtcbiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuO1xuICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB0b2tlbiA9IHNlbGYubGV4ZXIubGV4KCkgfHwgMTtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgfVxuICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhYWN0aW9uLmxlbmd0aCB8fCAhYWN0aW9uWzBdKSB7XG4gICAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICAgIGlmICghcmVjb3ZlcmluZykge1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxleGVyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgdGhpcy5sZXhlci5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IDE/XCJlbmQgb2YgaW5wdXRcIjpcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7dGV4dDogdGhpcy5sZXhlci5tYXRjaCwgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCwgbGluZTogdGhpcy5sZXhlci55eWxpbmVubywgbG9jOiB5eWxvYywgZXhwZWN0ZWQ6IGV4cGVjdGVkfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZSArIFwiLCB0b2tlbjogXCIgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHRoaXMubGV4ZXIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHRoaXMubGV4ZXIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoIXByZUVycm9yU3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgeXlsZW5nID0gdGhpcy5sZXhlci55eWxlbmc7XG4gICAgICAgICAgICAgICAgeXl0ZXh0ID0gdGhpcy5sZXhlci55eXRleHQ7XG4gICAgICAgICAgICAgICAgeXlsaW5lbm8gPSB0aGlzLmxleGVyLnl5bGluZW5vO1xuICAgICAgICAgICAgICAgIHl5bG9jID0gdGhpcy5sZXhlci55eWxsb2M7XG4gICAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKVxuICAgICAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICAgIHByZUVycm9yU3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge2ZpcnN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfbGluZSwgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfbGluZSwgZmlyc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2NvbHVtbiwgbGFzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9jb2x1bW59O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICAgIHl5dmFsLl8kLnJhbmdlID0gW2xzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0ucmFuZ2VbMF0sIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHl5dmFsLCB5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHRoaXMueXksIGFjdGlvblsxXSwgdnN0YWNrLCBsc3RhY2spO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVswXSk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gdGFibGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxufTtcbi8qIEppc29uIGdlbmVyYXRlZCBsZXhlciAqL1xudmFyIGxleGVyID0gKGZ1bmN0aW9uKCl7XG52YXIgbGV4ZXIgPSAoe0VPRjoxLFxucGFyc2VFcnJvcjpmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICAgIHRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3Ioc3RyLCBoYXNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgfSxcbnNldElucHV0OmZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fbGVzcyA9IHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwO1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSAnJztcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFsnSU5JVElBTCddO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLDBdO1xuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5pbnB1dDpmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDtcbiAgICAgICAgdGhpcy55eWxlbmcrKztcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5tYXRjaCArPSBjaDtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuXG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICB9LFxudW5wdXQ6ZnVuY3Rpb24gKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGgtbGVuLTEpO1xuICAgICAgICAvL3RoaXMueXlsZW5nIC09IGxlbjtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aC0xKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoLTEpO1xuXG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGgtMSkgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGgtMTtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcblxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubysxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/XG4gICAgICAgICAgICAgIChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGg6XG4gICAgICAgICAgICAgIHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbm1vcmU6ZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9tb3JlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbmxlc3M6ZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICB9LFxucGFzdElucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/ICcuLi4nOicnKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgIH0sXG51cGNvbWluZ0lucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAtbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwyMCkrKG5leHQubGVuZ3RoID4gMjAgPyAnLi4uJzonJykpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICB9LFxuc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMrXCJeXCI7XG4gICAgfSxcbm5leHQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgICB2YXIgdG9rZW4sXG4gICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgIHRlbXBNYXRjaCxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgbGluZXM7XG4gICAgICAgIGlmICghdGhpcy5fbW9yZSkge1xuICAgICAgICAgICAgdGhpcy55eXRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMubWF0Y2ggPSAnJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaT0wO2kgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgbGluZXMgPSBtYXRjaFswXS5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgICAgICBpZiAobGluZXMpIHRoaXMueXlsaW5lbm8gKz0gbGluZXMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy55eWxsb2MgPSB7Zmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vKzEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gbGluZXNbbGluZXMubGVuZ3RoLTFdLmxlbmd0aC1saW5lc1tsaW5lcy5sZW5ndGgtMV0ubWF0Y2goL1xccj9cXG4/LylbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4gKyBtYXRjaFswXS5sZW5ndGh9O1xuICAgICAgICAgICAgdGhpcy55eXRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21vcmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgcnVsZXNbaW5kZXhdLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuZG9uZSAmJiB0aGlzLl9pbnB1dCkgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodG9rZW4pIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcignTGV4aWNhbCBlcnJvciBvbiBsaW5lICcrKHRoaXMueXlsaW5lbm8rMSkrJy4gVW5yZWNvZ25pemVkIHRleHQuXFxuJyt0aGlzLnNob3dQb3NpdGlvbigpLFxuICAgICAgICAgICAgICAgICAgICB7dGV4dDogXCJcIiwgdG9rZW46IG51bGwsIGxpbmU6IHRoaXMueXlsaW5lbm99KTtcbiAgICAgICAgfVxuICAgIH0sXG5sZXg6ZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgfSxcbmJlZ2luOmZ1bmN0aW9uIGJlZ2luKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goY29uZGl0aW9uKTtcbiAgICB9LFxucG9wU3RhdGU6ZnVuY3Rpb24gcG9wU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgIH0sXG5fY3VycmVudFJ1bGVzOmZ1bmN0aW9uIF9jdXJyZW50UnVsZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM7XG4gICAgfSxcbnRvcFN0YXRlOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMl07XG4gICAgfSxcbnB1c2hTdGF0ZTpmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5iZWdpbihjb25kaXRpb24pO1xuICAgIH19KTtcbmxleGVyLm9wdGlvbnMgPSB7fTtcbmxleGVyLnBlcmZvcm1BY3Rpb24gPSBmdW5jdGlvbiBhbm9ueW1vdXMoeXkseXlfLCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsWVlfU1RBUlQpIHtcblxuXG5mdW5jdGlvbiBzdHJpcChzdGFydCwgZW5kKSB7XG4gIHJldHVybiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHIoc3RhcnQsIHl5Xy55eWxlbmctZW5kKTtcbn1cblxuXG52YXIgWVlTVEFURT1ZWV9TVEFSVFxuc3dpdGNoKCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMpIHtcbmNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoeXlfLnl5dGV4dC5zbGljZSgtMikgPT09IFwiXFxcXFxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDAsMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbihcIm11XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYoeXlfLnl5dGV4dC5zbGljZSgtMSkgPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXAoMCwxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwiZW11XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih5eV8ueXl0ZXh0KSByZXR1cm4gMTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSAxOnJldHVybiAxNDtcbmJyZWFrO1xuY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYnJlYWs7XG5jYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQuc3Vic3RyKDUsIHl5Xy55eWxlbmctOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYnJlYWs7XG5jYXNlIDQ6IHJldHVybiAxNDsgXG5icmVhaztcbmNhc2UgNTpcbiAgdGhpcy5wb3BTdGF0ZSgpO1xuICByZXR1cm4gMTM7XG5cbmJyZWFrO1xuY2FzZSA2OnJldHVybiA1OTtcbmJyZWFrO1xuY2FzZSA3OnJldHVybiA2MjtcbmJyZWFrO1xuY2FzZSA4OiByZXR1cm4gMTc7IFxuYnJlYWs7XG5jYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oJ3JhdycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAyMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYnJlYWs7XG5jYXNlIDEwOnJldHVybiA1MztcbmJyZWFrO1xuY2FzZSAxMTpyZXR1cm4gMjc7XG5icmVhaztcbmNhc2UgMTI6cmV0dXJuIDQ1O1xuYnJlYWs7XG5jYXNlIDEzOnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQyO1xuYnJlYWs7XG5jYXNlIDE0OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQyO1xuYnJlYWs7XG5jYXNlIDE1OnJldHVybiAzMjtcbmJyZWFrO1xuY2FzZSAxNjpyZXR1cm4gMzc7XG5icmVhaztcbmNhc2UgMTc6cmV0dXJuIDQ5O1xuYnJlYWs7XG5jYXNlIDE4OnJldHVybiA0NjtcbmJyZWFrO1xuY2FzZSAxOTpcbiAgdGhpcy51bnB1dCh5eV8ueXl0ZXh0KTtcbiAgdGhpcy5wb3BTdGF0ZSgpO1xuICB0aGlzLmJlZ2luKCdjb20nKTtcblxuYnJlYWs7XG5jYXNlIDIwOlxuICB0aGlzLnBvcFN0YXRlKCk7XG4gIHJldHVybiAxMztcblxuYnJlYWs7XG5jYXNlIDIxOnJldHVybiA0NjtcbmJyZWFrO1xuY2FzZSAyMjpyZXR1cm4gNjc7XG5icmVhaztcbmNhc2UgMjM6cmV0dXJuIDY2O1xuYnJlYWs7XG5jYXNlIDI0OnJldHVybiA2NjtcbmJyZWFrO1xuY2FzZSAyNTpyZXR1cm4gODE7XG5icmVhaztcbmNhc2UgMjY6Ly8gaWdub3JlIHdoaXRlc3BhY2VcbmJyZWFrO1xuY2FzZSAyNzp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiA1MjtcbmJyZWFrO1xuY2FzZSAyODp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiAzMTtcbmJyZWFrO1xuY2FzZSAyOTp5eV8ueXl0ZXh0ID0gc3RyaXAoMSwyKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKTsgcmV0dXJuIDc0O1xuYnJlYWs7XG5jYXNlIDMwOnl5Xy55eXRleHQgPSBzdHJpcCgxLDIpLnJlcGxhY2UoL1xcXFwnL2csXCInXCIpOyByZXR1cm4gNzQ7XG5icmVhaztcbmNhc2UgMzE6cmV0dXJuIDc5O1xuYnJlYWs7XG5jYXNlIDMyOnJldHVybiA3NjtcbmJyZWFrO1xuY2FzZSAzMzpyZXR1cm4gNzY7XG5icmVhaztcbmNhc2UgMzQ6cmV0dXJuIDc3O1xuYnJlYWs7XG5jYXNlIDM1OnJldHVybiA3ODtcbmJyZWFrO1xuY2FzZSAzNjpyZXR1cm4gNzU7XG5icmVhaztcbmNhc2UgMzc6cmV0dXJuIDY5O1xuYnJlYWs7XG5jYXNlIDM4OnJldHVybiA3MTtcbmJyZWFrO1xuY2FzZSAzOTpyZXR1cm4gNjY7XG5icmVhaztcbmNhc2UgNDA6cmV0dXJuIDY2O1xuYnJlYWs7XG5jYXNlIDQxOnJldHVybiAnSU5WQUxJRCc7XG5icmVhaztcbmNhc2UgNDI6cmV0dXJuIDU7XG5icmVhaztcbn1cbn07XG5sZXhlci5ydWxlcyA9IFsvXig/OlteXFx4MDBdKj8oPz0oXFx7XFx7KSkpLywvXig/OlteXFx4MDBdKykvLC9eKD86W15cXHgwMF17Mix9Pyg/PShcXHtcXHt8XFxcXFxce1xce3xcXFxcXFxcXFxce1xce3wkKSkpLywvXig/Olxce1xce1xce1xce1xcL1teXFxzIVwiIyUtLFxcLlxcLzstPkBcXFstXFxeYFxcey1+XSsoPz1bPX1cXHNcXC8uXSlcXH1cXH1cXH1cXH0pLywvXig/OlteXFx4MDBdKj8oPz0oXFx7XFx7XFx7XFx7XFwvKSkpLywvXig/OltcXHNcXFNdKj8tLSh+KT9cXH1cXH0pLywvXig/OlxcKCkvLC9eKD86XFwpKS8sL14oPzpcXHtcXHtcXHtcXHspLywvXig/OlxcfVxcfVxcfVxcfSkvLC9eKD86XFx7XFx7KH4pPz4pLywvXig/Olxce1xceyh+KT8jKS8sL14oPzpcXHtcXHsofik/XFwvKS8sL14oPzpcXHtcXHsofik/XFxeXFxzKih+KT9cXH1cXH0pLywvXig/Olxce1xceyh+KT9cXHMqZWxzZVxccyoofik/XFx9XFx9KS8sL14oPzpcXHtcXHsofik/XFxeKS8sL14oPzpcXHtcXHsofik/XFxzKmVsc2VcXGIpLywvXig/Olxce1xceyh+KT9cXHspLywvXig/Olxce1xceyh+KT8mKS8sL14oPzpcXHtcXHsofik/IS0tKS8sL14oPzpcXHtcXHsofik/IVtcXHNcXFNdKj9cXH1cXH0pLywvXig/Olxce1xceyh+KT8pLywvXig/Oj0pLywvXig/OlxcLlxcLikvLC9eKD86XFwuKD89KFs9fn1cXHNcXC8uKXxdKSkpLywvXig/OltcXC8uXSkvLC9eKD86XFxzKykvLC9eKD86XFx9KH4pP1xcfVxcfSkvLC9eKD86KH4pP1xcfVxcfSkvLC9eKD86XCIoXFxcXFtcIl18W15cIl0pKlwiKS8sL14oPzonKFxcXFxbJ118W14nXSkqJykvLC9eKD86QCkvLC9eKD86dHJ1ZSg/PShbfn1cXHMpXSkpKS8sL14oPzpmYWxzZSg/PShbfn1cXHMpXSkpKS8sL14oPzp1bmRlZmluZWQoPz0oW359XFxzKV0pKSkvLC9eKD86bnVsbCg/PShbfn1cXHMpXSkpKS8sL14oPzotP1swLTldKyg/OlxcLlswLTldKyk/KD89KFt+fVxccyldKSkpLywvXig/OmFzXFxzK1xcfCkvLC9eKD86XFx8KS8sL14oPzooW15cXHMhXCIjJS0sXFwuXFwvOy0+QFxcWy1cXF5gXFx7LX5dKyg/PShbPX59XFxzXFwvLil8XSkpKSkvLC9eKD86XFxbW15cXF1dKlxcXSkvLC9eKD86LikvLC9eKD86JCkvXTtcbmxleGVyLmNvbmRpdGlvbnMgPSB7XCJtdVwiOntcInJ1bGVzXCI6WzYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDJdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwiZW11XCI6e1wicnVsZXNcIjpbMl0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJjb21cIjp7XCJydWxlc1wiOls1XSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcInJhd1wiOntcInJ1bGVzXCI6WzMsNF0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJJTklUSUFMXCI6e1wicnVsZXNcIjpbMCwxLDQyXSxcImluY2x1c2l2ZVwiOnRydWV9fTtcbnJldHVybiBsZXhlcjt9KSgpXG5wYXJzZXIubGV4ZXIgPSBsZXhlcjtcbmZ1bmN0aW9uIFBhcnNlciAoKSB7IHRoaXMueXkgPSB7fTsgfVBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXI7cGFyc2VyLlBhcnNlciA9IFBhcnNlcjtcbnJldHVybiBuZXcgUGFyc2VyO1xufSkoKTtleHBvcnQgZGVmYXVsdCBoYW5kbGViYXJzO1xuIl19 -enifed('handlebars/compiler/visitor', ['exports', 'handlebars/exception', 'handlebars/compiler/ast'], function (exports, _handlebarsException, _handlebarsCompilerAst) { +enifed('htmlbars-syntax/handlebars/compiler/visitor', ['exports', 'htmlbars-syntax/handlebars/exception', 'htmlbars-syntax/handlebars/compiler/ast'], function (exports, _htmlbarsSyntaxHandlebarsException, _htmlbarsSyntaxHandlebarsCompilerAst) { 'use strict'; function Visitor() { this.parents = []; } @@ -25816,12 +16289,12 @@ // Visits a given value. If mutating, will replace the value if necessary. acceptKey: function (node, name) { var value = this.accept(node[name]); if (this.mutating) { // Hacky sanity check: - if (value && (!value.type || !_handlebarsCompilerAst.default[value.type])) { - throw new _handlebarsException.default('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type); + if (value && (!value.type || !_htmlbarsSyntaxHandlebarsCompilerAst.default[value.type])) { + throw new _htmlbarsSyntaxHandlebarsException.default('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type); } node[name] = value; } }, @@ -25829,11 +16302,11 @@ // required keys are not removed. acceptRequired: function (node, name) { this.acceptKey(node, name); if (!node[name]) { - throw new _handlebarsException.default(node.type + ' requires ' + name); + throw new _htmlbarsSyntaxHandlebarsException.default(node.type + ' requires ' + name); } }, // Traverses a given array. If mutating, empty respnses will be removed // for child elements. @@ -25920,16 +16393,15 @@ } }; exports.default = Visitor; }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhhbmRsZWJhcnMvY29tcGlsZXIvdmlzaXRvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSxXQUFTLE9BQU8sR0FBRztBQUNqQixRQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztHQUNuQjs7QUFFRCxTQUFPLENBQUMsU0FBUyxHQUFHO0FBQ2xCLGVBQVcsRUFBRSxPQUFPO0FBQ3BCLFlBQVEsRUFBRSxLQUFLOzs7QUFHZixhQUFTLEVBQUUsVUFBUyxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQzlCLFVBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEMsVUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFOztBQUVqQixZQUFJLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQywrQkFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUEsQUFBQyxFQUFFO0FBQzlDLGdCQUFNLGlDQUFjLHdCQUF3QixHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcseUJBQXlCLEdBQUcsSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEg7QUFDRCxZQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO09BQ3BCO0tBQ0Y7Ozs7QUFJRCxrQkFBYyxFQUFFLFVBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNuQyxVQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFM0IsVUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNmLGNBQU0saUNBQWMsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUM7T0FDdEQ7S0FDRjs7OztBQUlELGVBQVcsRUFBRSxVQUFTLEtBQUssRUFBRTtBQUMzQixXQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdB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QixFQUFFO0FBQ3hDLGlCQUFhLEVBQUUsd0JBQXVCLEVBQUU7QUFDeEMsa0JBQWMsRUFBRSxzQkFBcUIsRUFBRTtBQUN2QyxvQkFBZ0IsRUFBRSx5QkFBd0IsRUFBRTtBQUM1QyxlQUFXLEVBQUUseUJBQXdCLEVBQUU7O0FBRXZDLFFBQUksRUFBRSxVQUFTLElBQUksRUFBRTtBQUNuQixVQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM5QjtBQUNELFlBQVEsRUFBRSxVQUFTLElBQUksRUFBRTtBQUN2QixVQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNwQztHQUNGLENBQUM7O29CQUVhLE9BQU8iLCJmaWxlIjoiaGFuZGxlYmFycy9jb21waWxlci92aXNpdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuaW1wb3J0IEFTVCBmcm9tICcuL2FzdCc7XG5cbmZ1bmN0aW9uIFZpc2l0b3IoKSB7XG4gIHRoaXMucGFyZW50cyA9IFtdO1xufVxuXG5WaXNpdG9yLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFZpc2l0b3IsXG4gIG11dGF0aW5nOiBmYWxzZSxcblxuICAvLyBWaXNpdHMgYSBnaXZlbiB2YWx1ZS4gSWYgbXV0YXRpbmcsIHdpbGwgcmVwbGFjZSB0aGUgdmFsdWUgaWYgbmVjZXNzYXJ5LlxuICBhY2NlcHRLZXk6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmFjY2VwdChub2RlW25hbWVdKTtcbiAgICBpZiAodGhpcy5tdXRhdGluZykge1xuICAgICAgLy8gSGFja3kgc2FuaXR5IGNoZWNrOlxuICAgICAgaWYgKHZhbHVlICYmICghdmFsdWUudHlwZSB8fCAhQVNUW3ZhbHVlLnR5cGVdKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmV4cGVjdGVkIG5vZGUgdHlwZSBcIicgKyB2YWx1ZS50eXBlICsgJ1wiIGZvdW5kIHdoZW4gYWNjZXB0aW5nICcgKyBuYW1lICsgJyBvbiAnICsgbm9kZS50eXBlKTtcbiAgICAgIH1cbiAgICAgIG5vZGVbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gUGVyZm9ybXMgYW4gYWNjZXB0IG9wZXJhdGlvbiB3aXRoIGFkZGVkIHNhbml0eSBjaGVjayB0byBlbnN1cmVcbiAgLy8gcmVxdWlyZWQga2V5cyBhcmUgbm90IHJlbW92ZWQuXG4gIGFjY2VwdFJlcXVpcmVkOiBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gICAgdGhpcy5hY2NlcHRLZXkobm9kZSwgbmFtZSk7XG5cbiAgICBpZiAoIW5vZGVbbmFtZV0pIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24obm9kZS50eXBlICsgJyByZXF1aXJlcyAnICsgbmFtZSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRyYXZlcnNlcyBhIGdpdmVuIGFycmF5LiBJZiBtdXRhdGluZywgZW1wdHkgcmVzcG5zZXMgd2lsbCBiZSByZW1vdmVkXG4gIC8vIGZvciBjaGlsZCBlbGVtZW50cy5cbiAgYWNjZXB0QXJyYXk6IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMuYWNjZXB0S2V5KGFycmF5LCBpKTtcblxuICAgICAgaWYgKCFhcnJheVtpXSkge1xuICAgICAgICBhcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGktLTtcbiAgICAgICAgbC0tO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhY2NlcHQ6IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VycmVudCkge1xuICAgICAgdGhpcy5wYXJlbnRzLnVuc2hpZnQodGhpcy5jdXJyZW50KTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50ID0gb2JqZWN0O1xuXG4gICAgbGV0IHJldCA9IHRoaXNbb2JqZWN0LnR5cGVdKG9iamVjdCk7XG5cbiAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnBhcmVudHMuc2hpZnQoKTtcblxuICAgIGlmICghdGhpcy5tdXRhdGluZyB8fCByZXQpIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBlbHNlIGlmIChyZXQgIT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cbiAgfSxcblxuICBQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgdGhpcy5hY2NlcHRBcnJheShwcm9ncmFtLmJvZHkpO1xuICB9LFxuXG4gIE11c3RhY2hlU3RhdGVtZW50OiBmdW5jdGlvbihtdXN0YWNoZSkge1xuICAgIHRoaXMuYWNjZXB0UmVxdWlyZWQobXVzdGFjaGUsICdwYXRoJyk7XG4gICAgdGhpcy5hY2NlcHRBcnJheShtdXN0YWNoZS5wYXJhbXMpO1xuICAgIHRoaXMuYWNjZXB0S2V5KG11c3RhY2hlLCAnaGFzaCcpO1xuICB9LFxuXG4gIEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbihibG9jaykge1xuICAgIHRoaXMuYWNjZXB0UmVxdWlyZWQoYmxvY2ssICdwYXRoJyk7XG4gICAgdGhpcy5hY2NlcHRBcnJheShibG9jay5wYXJhbXMpO1xuICAgIHRoaXMuYWNjZXB0S2V5KGJsb2NrLCAnaGFzaCcpO1xuXG4gICAgdGhpcy5hY2NlcHRLZXkoYmxvY2ssICdwcm9ncmFtJyk7XG4gICAgdGhpcy5hY2NlcHRLZXkoYmxvY2ssICdpbnZlcnNlJyk7XG4gIH0sXG5cbiAgUGFydGlhbFN0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbCkge1xuICAgIHRoaXMuYWNjZXB0UmVxdWlyZWQocGFydGlhbCwgJ25hbWUnKTtcbiAgICB0aGlzLmFjY2VwdEFycmF5KHBhcnRpYWwucGFyYW1zKTtcbiAgICB0aGlzLmFjY2VwdEtleShwYXJ0aWFsLCAnaGFzaCcpO1xuICB9LFxuXG4gIENvbnRlbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uKC8qIGNvbnRlbnQgKi8pIHt9LFxuICBDb21tZW50U3RhdGVtZW50OiBmdW5jdGlvbigvKiBjb21tZW50ICovKSB7fSxcblxuICBTdWJFeHByZXNzaW9uOiBmdW5jdGlvbihzZXhwcikge1xuICAgIHRoaXMuYWNjZXB0UmVxdWlyZWQoc2V4cHIsICdwYXRoJyk7XG4gICAgdGhpcy5hY2NlcHRBcnJheShzZXhwci5wYXJhbXMpO1xuICAgIHRoaXMuYWNjZXB0S2V5KHNleHByLCAnaGFzaCcpO1xuICB9LFxuXG4gIFBhdGhFeHByZXNzaW9uOiBmdW5jdGlvbigvKiBwYXRoICovKSB7fSxcblxuICBTdHJpbmdMaXRlcmFsOiBmdW5jdGlvbigvKiBzdHJpbmcgKi8pIHt9LFxuICBOdW1iZXJMaXRlcmFsOiBmdW5jdGlvbigvKiBudW1iZXIgKi8pIHt9LFxuICBCb29sZWFuTGl0ZXJhbDogZnVuY3Rpb24oLyogYm9vbCAqLykge30sXG4gIFVuZGVmaW5lZExpdGVyYWw6IGZ1bmN0aW9uKC8qIGxpdGVyYWwgKi8pIHt9LFxuICBOdWxsTGl0ZXJhbDogZnVuY3Rpb24oLyogbGl0ZXJhbCAqLykge30sXG5cbiAgSGFzaDogZnVuY3Rpb24oaGFzaCkge1xuICAgIHRoaXMuYWNjZXB0QXJyYXkoaGFzaC5wYWlycyk7XG4gIH0sXG4gIEhhc2hQYWlyOiBmdW5jdGlvbihwYWlyKSB7XG4gICAgdGhpcy5hY2NlcHRSZXF1aXJlZChwYWlyLCAndmFsdWUnKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVmlzaXRvcjtcbiJdfQ== -enifed('handlebars/compiler/whitespace-control', ['exports', 'handlebars/compiler/visitor'], function (exports, _handlebarsCompilerVisitor) { +enifed('htmlbars-syntax/handlebars/compiler/whitespace-control', ['exports', 'htmlbars-syntax/handlebars/compiler/visitor'], function (exports, _htmlbarsSyntaxHandlebarsCompilerVisitor) { 'use strict'; function WhitespaceControl() {} - WhitespaceControl.prototype = new _handlebarsCompilerVisitor.default(); + WhitespaceControl.prototype = new _htmlbarsSyntaxHandlebarsCompilerVisitor.default(); WhitespaceControl.prototype.Program = function (program) { var isRoot = !this.isRootSeen; this.isRootSeen = true; @@ -26126,12 +16598,11 @@ return current.leftStripped; } exports.default = WhitespaceControl; }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhhbmRsZWJhcnMvY29tcGlsZXIvd2hpdGVzcGFjZS1jb250cm9sLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLFdBQVMsaUJBQWlCLEdBQUcsRUFDNUI7QUFDRCxtQkFBaUIsQ0FBQyxTQUFTLEdBQUcsd0NBQWEsQ0FBQzs7QUFFNUMsbUJBQWlCLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFTLE9BQU8sRUFBRTtBQUN0RCxRQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDOUIsUUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7O0FBRXZCLFFBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxVQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1VBQ2pCLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztBQUVqQyxVQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1YsaUJBQVM7T0FDVjs7QUFFRCxVQUFJLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDO1VBQ3JELGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDO1VBRXJELGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxJQUFJLGlCQUFpQjtVQUMxRCxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsSUFBSSxpQkFBaUI7VUFDNUQsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixJQUFJLGlCQUFpQixJQUFJLGlCQUFpQixDQUFDOztBQUV4RixVQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7QUFDZixpQkFBUyxDQUFDLElB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QVEsQ0FBQztBQUNsRCxXQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUM7R0FDN0I7O29CQUVjLGlCQUFpQiIsImZpbGUiOiJoYW5kbGViYXJzL2NvbXBpbGVyL3doaXRlc3BhY2UtY29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBWaXNpdG9yIGZyb20gJy4vdmlzaXRvcic7XG5cbmZ1bmN0aW9uIFdoaXRlc3BhY2VDb250cm9sKCkge1xufVxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlID0gbmV3IFZpc2l0b3IoKTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLlByb2dyYW0gPSBmdW5jdGlvbihwcm9ncmFtKSB7XG4gIGxldCBpc1Jvb3QgPSAhdGhpcy5pc1Jvb3RTZWVuO1xuICB0aGlzLmlzUm9vdFNlZW4gPSB0cnVlO1xuXG4gIGxldCBib2R5ID0gcHJvZ3JhbS5ib2R5O1xuICBmb3IgKGxldCBpID0gMCwgbCA9IGJvZHkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IGN1cnJlbnQgPSBib2R5W2ldLFxuICAgICAgICBzdHJpcCA9IHRoaXMuYWNjZXB0KGN1cnJlbnQpO1xuXG4gICAgaWYgKCFzdHJpcCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IF9pc1ByZXZXaGl0ZXNwYWNlID0gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpLFxuICAgICAgICBfaXNOZXh0V2hpdGVzcGFjZSA9IGlzTmV4dFdoaXRlc3BhY2UoYm9keSwgaSwgaXNSb290KSxcblxuICAgICAgICBvcGVuU3RhbmRhbG9uZSA9IHN0cmlwLm9wZW5TdGFuZGFsb25lICYmIF9pc1ByZXZXaGl0ZXNwYWNlLFxuICAgICAgICBjbG9zZVN0YW5kYWxvbmUgPSBzdHJpcC5jbG9zZVN0YW5kYWxvbmUgJiYgX2lzTmV4dFdoaXRlc3BhY2UsXG4gICAgICAgIGlubGluZVN0YW5kYWxvbmUgPSBzdHJpcC5pbmxpbmVTdGFuZGFsb25lICYmIF9pc1ByZXZXaGl0ZXNwYWNlICYmIF9pc05leHRXaGl0ZXNwYWNlO1xuXG4gICAgaWYgKHN0cmlwLmNsb3NlKSB7XG4gICAgICBvbWl0UmlnaHQoYm9keSwgaSwgdHJ1ZSk7XG4gICAgfVxuICAgIGlmIChzdHJpcC5vcGVuKSB7XG4gICAgICBvbWl0TGVmdChib2R5LCBpLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoaW5saW5lU3RhbmRhbG9uZSkge1xuICAgICAgb21pdFJpZ2h0KGJvZHksIGkpO1xuXG4gICAgICBpZiAob21pdExlZnQoYm9keSwgaSkpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlIG9uIGEgc3RhbmRhbG9uZSBub2RlLCBzYXZlIHRoZSBpbmRlbnQgaW5mbyBmb3IgcGFydGlhbHNcbiAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PT0gJ1BhcnRpYWxTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgLy8gUHVsbCBvdXQgdGhlIHdoaXRlc3BhY2UgZnJvbSB0aGUgZmluYWwgbGluZVxuICAgICAgICAgIGN1cnJlbnQuaW5kZW50ID0gKC8oWyBcXHRdKyQpLykuZXhlYyhib2R5W2kgLSAxXS5vcmlnaW5hbClbMV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wZW5TdGFuZGFsb25lKSB7XG4gICAgICBvbWl0UmlnaHQoKGN1cnJlbnQucHJvZ3JhbSB8fCBjdXJyZW50LmludmVyc2UpLmJvZHkpO1xuXG4gICAgICAvLyBTdHJpcCBvdXQgdGhlIHByZXZpb3VzIGNvbnRlbnQgbm9kZSBpZiBpdCdzIHdoaXRlc3BhY2Ugb25seVxuICAgICAgb21pdExlZnQoYm9keSwgaSk7XG4gICAgfVxuICAgIGlmIChjbG9zZVN0YW5kYWxvbmUpIHtcbiAgICAgIC8vIEFsd2F5cyBzdHJpcCB0aGUgbmV4dCBub2RlXG4gICAgICBvbWl0UmlnaHQoYm9keSwgaSk7XG5cbiAgICAgIG9taXRMZWZ0KChjdXJyZW50LmludmVyc2UgfHwgY3VycmVudC5wcm9ncmFtKS5ib2R5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvZ3JhbTtcbn07XG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuQmxvY2tTdGF0ZW1lbnQgPSBmdW5jdGlvbihibG9jaykge1xuICB0aGlzLmFjY2VwdChibG9jay5wcm9ncmFtKTtcbiAgdGhpcy5hY2NlcHQoYmxvY2suaW52ZXJzZSk7XG5cbiAgLy8gRmluZCB0aGUgaW52ZXJzZSBwcm9ncmFtIHRoYXQgaXMgaW52b2xlZCB3aXRoIHdoaXRlc3BhY2Ugc3RyaXBwaW5nLlxuICBsZXQgcHJvZ3JhbSA9IGJsb2NrLnByb2dyYW0gfHwgYmxvY2suaW52ZXJzZSxcbiAgICAgIGludmVyc2UgPSBibG9jay5wcm9ncmFtICYmIGJsb2NrLmludmVyc2UsXG4gICAgICBmaXJzdEludmVyc2UgPSBpbnZlcnNlLFxuICAgICAgbGFzdEludmVyc2UgPSBpbnZlcnNlO1xuXG4gIGlmIChpbnZlcnNlICYmIGludmVyc2UuY2hhaW5lZCkge1xuICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UuYm9keVswXS5wcm9ncmFtO1xuXG4gICAgLy8gV2FsayB0aGUgaW52ZXJzZSBjaGFpbiB0byBmaW5kIHRoZSBsYXN0IGludmVyc2UgdGhhdCBpcyBhY3R1YWxseSBpbiB0aGUgY2hhaW4uXG4gICAgd2hpbGUgKGxhc3RJbnZlcnNlLmNoYWluZWQpIHtcbiAgICAgIGxhc3RJbnZlcnNlID0gbGFzdEludmVyc2UuYm9keVtsYXN0SW52ZXJzZS5ib2R5Lmxlbmd0aCAtIDFdLnByb2dyYW07XG4gICAgfVxuICB9XG5cbiAgbGV0IHN0cmlwID0ge1xuICAgIG9wZW46IGJsb2NrLm9wZW5TdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBibG9jay5jbG9zZVN0cmlwLmNsb3NlLFxuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBzdGFuZGFsb25lIGNhbmRpYWN5LiBCYXNpY2FsbHkgZmxhZyBvdXIgY29udGVudCBhcyBiZWluZyBwb3NzaWJseSBzdGFuZGFsb25lXG4gICAgLy8gc28gb3VyIHBhcmVudCBjYW4gZGV0ZXJtaW5lIGlmIHdlIGFjdHVhbGx5IGFyZSBzdGFuZGFsb25lXG4gICAgb3BlblN0YW5kYWxvbmU6IGlzTmV4dFdoaXRlc3BhY2UocHJvZ3JhbS5ib2R5KSxcbiAgICBjbG9zZVN0YW5kYWxvbmU6IGlzUHJldldoaXRlc3BhY2UoKGZpcnN0SW52ZXJzZSB8fCBwcm9ncmFtKS5ib2R5KVxuICB9O1xuXG4gIGlmIChibG9jay5vcGVuU3RyaXAuY2xvc2UpIHtcbiAgICBvbWl0UmlnaHQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChpbnZlcnNlKSB7XG4gICAgbGV0IGludmVyc2VTdHJpcCA9IGJsb2NrLmludmVyc2VTdHJpcDtcblxuICAgIGlmIChpbnZlcnNlU3RyaXAub3Blbikge1xuICAgICAgb21pdExlZnQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoaW52ZXJzZVN0cmlwLmNsb3NlKSB7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHksIG51bGwsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoYmxvY2suY2xvc2VTdHJpcC5vcGVuKSB7XG4gICAgICBvbWl0TGVmdChsYXN0SW52ZXJzZS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHN0YW5kYWxvbmUgZWxzZSBzdGF0bWVudHNcbiAgICBpZiAoaXNQcmV2V2hpdGVzcGFjZShwcm9ncmFtLmJvZHkpXG4gICAgICAgICYmIGlzTmV4dFdoaXRlc3BhY2UoZmlyc3RJbnZlcnNlLmJvZHkpKSB7XG4gICAgICBvbWl0TGVmdChwcm9ncmFtLmJvZHkpO1xuICAgICAgb21pdFJpZ2h0KGZpcnN0SW52ZXJzZS5ib2R5KTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYmxvY2suY2xvc2VTdHJpcC5vcGVuKSB7XG4gICAgb21pdExlZnQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiBzdHJpcDtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudCA9IGZ1bmN0aW9uKG11c3RhY2hlKSB7XG4gIHJldHVybiBtdXN0YWNoZS5zdHJpcDtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5QYXJ0aWFsU3RhdGVtZW50ID1cbiAgICBXaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuQ29tbWVudFN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgbGV0IHN0cmlwID0gbm9kZS5zdHJpcCB8fCB7fTtcbiAgcmV0dXJuIHtcbiAgICBpbmxpbmVTdGFuZGFsb25lOiB0cnVlLFxuICAgIG9wZW46IHN0cmlwLm9wZW4sXG4gICAgY2xvc2U6IHN0cmlwLmNsb3NlXG4gIH07XG59O1xuXG5cbmZ1bmN0aW9uIGlzUHJldldoaXRlc3BhY2UoYm9keSwgaSwgaXNSb290KSB7XG4gIGlmIChpID09PSB1bmRlZmluZWQpIHtcbiAgICBpID0gYm9keS5sZW5ndGg7XG4gIH1cblxuICAvLyBOb2RlcyB0aGF0IGVuZCB3aXRoIG5ld2xpbmVzIGFyZSBjb25zaWRlcmVkIHdoaXRlc3BhY2UgKGJ1dCBhcmUgc3BlY2lhbFxuICAvLyBjYXNlZCBmb3Igc3RyaXAgb3BlcmF0aW9ucylcbiAgbGV0IHByZXYgPSBib2R5W2kgLSAxXSxcbiAgICAgIHNpYmxpbmcgPSBib2R5W2kgLSAyXTtcbiAgaWYgKCFwcmV2KSB7XG4gICAgcmV0dXJuIGlzUm9vdDtcbiAgfVxuXG4gIGlmIChwcmV2LnR5cGUgPT09ICdDb250ZW50U3RhdGVtZW50Jykge1xuICAgIHJldHVybiAoc2libGluZyB8fCAhaXNSb290ID8gKC9cXHI/XFxuXFxzKj8kLykgOiAoLyhefFxccj9cXG4pXFxzKj8kLykpLnRlc3QocHJldi5vcmlnaW5hbCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzTmV4dFdoaXRlc3BhY2UoYm9keSwgaSwgaXNSb290KSB7XG4gIGlmIChpID09PSB1bmRlZmluZWQpIHtcbiAgICBpID0gLTE7XG4gIH1cblxuICBsZXQgbmV4dCA9IGJvZHlbaSArIDFdLFxuICAgICAgc2libGluZyA9IGJvZHlbaSArIDJdO1xuICBpZiAoIW5leHQpIHtcbiAgICByZXR1cm4gaXNSb290O1xuICB9XG5cbiAgaWYgKG5leHQudHlwZSA9PT0gJ0NvbnRlbnRTdGF0ZW1lbnQnKSB7XG4gICAgcmV0dXJuIChzaWJsaW5nIHx8ICFpc1Jvb3QgPyAoL15cXHMqP1xccj9cXG4vKSA6ICgvXlxccyo/KFxccj9cXG58JCkvKSkudGVzdChuZXh0Lm9yaWdpbmFsKTtcbiAgfVxufVxuXG4vLyBNYXJrcyB0aGUgbm9kZSB0byB0aGUgcmlnaHQgb2YgdGhlIHBvc2l0aW9uIGFzIG9taXR0ZWQuXG4vLyBJLmUuIHt7Zm9vfX0nICcgd2lsbCBtYXJrIHRoZSAnICcgbm9kZSBhcyBvbWl0dGVkLlxuLy9cbi8vIElmIGkgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSBmaXJzdCBjaGlsZCB3aWxsIGJlIG1hcmtlZCBhcyBzdWNoLlxuLy9cbi8vIElmIG11bGl0cGxlIGlzIHRydXRoeSB0aGVuIGFsbCB3aGl0ZXNwYWNlIHdpbGwgYmUgc3RyaXBwZWQgb3V0IHVudGlsIG5vbi13aGl0ZXNwYWNlXG4vLyBjb250ZW50IGlzIG1ldC5cbmZ1bmN0aW9uIG9taXRSaWdodChib2R5LCBpLCBtdWx0aXBsZSkge1xuICBsZXQgY3VycmVudCA9IGJvZHlbaSA9PSBudWxsID8gMCA6IGkgKyAxXTtcbiAgaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQudHlwZSAhPT0gJ0NvbnRlbnRTdGF0ZW1lbnQnIHx8ICghbXVsdGlwbGUgJiYgY3VycmVudC5yaWdodFN0cmlwcGVkKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBvcmlnaW5hbCA9IGN1cnJlbnQudmFsdWU7XG4gIGN1cnJlbnQudmFsdWUgPSBjdXJyZW50LnZhbHVlLnJlcGxhY2UobXVsdGlwbGUgPyAoL15cXHMrLykgOiAoL15bIFxcdF0qXFxyP1xcbj8vKSwgJycpO1xuICBjdXJyZW50LnJpZ2h0U3RyaXBwZWQgPSBjdXJyZW50LnZhbHVlICE9PSBvcmlnaW5hbDtcbn1cblxuLy8gTWFya3MgdGhlIG5vZGUgdG8gdGhlIGxlZnQgb2YgdGhlIHBvc2l0aW9uIGFzIG9taXR0ZWQuXG4vLyBJLmUuICcgJ3t7Zm9vfX0gd2lsbCBtYXJrIHRoZSAnICcgbm9kZSBhcyBvbWl0dGVkLlxuLy9cbi8vIElmIGkgaXMgdW5kZWZpbmVkIHRoZW4gdGhlIGxhc3QgY2hpbGQgd2lsbCBiZSBtYXJrZWQgYXMgc3VjaC5cbi8vXG4vLyBJZiBtdWxpdHBsZSBpcyB0cnV0aHkgdGhlbiBhbGwgd2hpdGVzcGFjZSB3aWxsIGJlIHN0cmlwcGVkIG91dCB1bnRpbCBub24td2hpdGVzcGFjZVxuLy8gY29udGVudCBpcyBtZXQuXG5mdW5jdGlvbiBvbWl0TGVmdChib2R5LCBpLCBtdWx0aXBsZSkge1xuICBsZXQgY3VycmVudCA9IGJvZHlbaSA9PSBudWxsID8gYm9keS5sZW5ndGggLSAxIDogaSAtIDFdO1xuICBpZiAoIWN1cnJlbnQgfHwgY3VycmVudC50eXBlICE9PSAnQ29udGVudFN0YXRlbWVudCcgfHwgKCFtdWx0aXBsZSAmJiBjdXJyZW50LmxlZnRTdHJpcHBlZCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBXZSBvbWl0IHRoZSBsYXN0IG5vZGUgaWYgaXQncyB3aGl0ZXNwYWNlIG9ubHkgYW5kIG5vdCBwcmVjZWVkZWQgYnkgYSBub24tY29udGVudCBub2RlLlxuICBsZXQgb3JpZ2luYWwgPSBjdXJyZW50LnZhbHVlO1xuICBjdXJyZW50LnZhbHVlID0gY3VycmVudC52YWx1ZS5yZXBsYWNlKG11bHRpcGxlID8gKC9cXHMrJC8pIDogKC9bIFxcdF0rJC8pLCAnJyk7XG4gIGN1cnJlbnQubGVmdFN0cmlwcGVkID0gY3VycmVudC52YWx1ZSAhPT0gb3JpZ2luYWw7XG4gIHJldHVybiBjdXJyZW50LmxlZnRTdHJpcHBlZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgV2hpdGVzcGFjZUNvbnRyb2w7XG4iXX0= -enifed('handlebars/exception', ['exports'], function (exports) { +enifed('htmlbars-syntax/handlebars/exception', ['exports'], function (exports) { 'use strict'; var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack']; function Exception(message, node) { @@ -26164,12 +16635,11 @@ Exception.prototype = new Error(); exports.default = Exception; }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhhbmRsZWJhcnMvZXhjZXB0aW9uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLE1BQU0sVUFBVSxHQUFHLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7O0FBRW5HLFdBQVMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7QUFDaEMsUUFBSSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHO1FBQ3RCLElBQUksWUFBQTtRQUNKLE1BQU0sWUFBQSxDQUFDO0FBQ1gsUUFBSSxHQUFHLEVBQUU7QUFDUCxVQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsWUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDOztBQUUxQixhQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0tBQ3hDOztBQUVELFFBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxTQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxVQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzlDOztBQUVELFFBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQzNCLFdBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDMUM7O0FBRUQsUUFBSSxHQUFHLEVBQUU7QUFDUCxVQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztLQUN0QjtHQUNGOztBQUVELFdBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQzs7b0JBRW5CLFNBQVMiLCJmaWxlIjoiaGFuZGxlYmFycy9leGNlcHRpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmNvbnN0IGVycm9yUHJvcHMgPSBbJ2Rlc2NyaXB0aW9uJywgJ2ZpbGVOYW1lJywgJ2xpbmVOdW1iZXInLCAnbWVzc2FnZScsICduYW1lJywgJ251bWJlcicsICdzdGFjayddO1xuXG5mdW5jdGlvbiBFeGNlcHRpb24obWVzc2FnZSwgbm9kZSkge1xuICBsZXQgbG9jID0gbm9kZSAmJiBub2RlLmxvYyxcbiAgICAgIGxpbmUsXG4gICAgICBjb2x1bW47XG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgY29sdW1uID0gbG9jLnN0YXJ0LmNvbHVtbjtcblxuICAgIG1lc3NhZ2UgKz0gJyAtICcgKyBsaW5lICsgJzonICsgY29sdW1uO1xuICB9XG5cbiAgbGV0IHRtcCA9IEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuXG4gIC8vIFVuZm9ydHVuYXRlbHkgZXJyb3JzIGFyZSBub3QgZW51bWVyYWJsZSBpbiBDaHJvbWUgKGF0IGxlYXN0KSwgc28gYGZvciBwcm9wIGluIHRtcGAgZG9lc24ndCB3b3JrLlxuICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBlcnJvclByb3BzLmxlbmd0aDsgaWR4KyspIHtcbiAgICB0aGlzW2Vycm9yUHJvcHNbaWR4XV0gPSB0bXBbZXJyb3JQcm9wc1tpZHhdXTtcbiAgfVxuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEV4Y2VwdGlvbik7XG4gIH1cblxuICBpZiAobG9jKSB7XG4gICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgfVxufVxuXG5FeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG5cbmV4cG9ydCBkZWZhdWx0IEV4Y2VwdGlvbjtcbiJdfQ== -enifed('handlebars/safe-string', ['exports'], function (exports) { +enifed('htmlbars-syntax/handlebars/safe-string', ['exports'], function (exports) { // Build out our basic SafeString type 'use strict'; function SafeString(string) { this.string = string; @@ -26179,12 +16649,11 @@ return '' + this.string; }; exports.default = SafeString; }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhhbmRsZWJhcnMvc2FmZS1zdHJpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLFdBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRTtBQUMxQixRQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxZQUFVLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxZQUFXO0FBQ3ZFLFdBQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7R0FDekIsQ0FBQzs7b0JBRWEsVUFBVSIsImZpbGUiOiJoYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQnVpbGQgb3V0IG91ciBiYXNpYyBTYWZlU3RyaW5nIHR5cGVcbmZ1bmN0aW9uIFNhZmVTdHJpbmcoc3RyaW5nKSB7XG4gIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xufVxuXG5TYWZlU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyA9IFNhZmVTdHJpbmcucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gJycgKyB0aGlzLnN0cmluZztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNhZmVTdHJpbmc7XG4iXX0= -enifed('handlebars/utils', ['exports'], function (exports) { +enifed('htmlbars-syntax/handlebars/utils', ['exports'], function (exports) { 'use strict'; exports.extend = extend; exports.indexOf = indexOf; exports.escapeExpression = escapeExpression; @@ -26296,10 +16765,2129 @@ function appendContextPath(contextPath, id) { return (contextPath ? contextPath + '.' : '') + id; } }); -//# sourceMappingURL=data:application/json;base64,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LENBQUM7S0FDdEI7O0FBRUQsUUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFBRSxhQUFPLE1BQU0sQ0FBQztLQUFFO0FBQzlDLFdBQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7R0FDN0M7O0FBRU0sV0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQzdCLFFBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUN6QixhQUFPLElBQUksQ0FBQztLQUNiLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0MsYUFBTyxJQUFJLENBQUM7S0FDYixNQUFNO0FBQ0wsYUFBTyxLQUFLLENBQUM7S0FDZDtHQUNGOztBQUVNLFdBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7QUFDdkMsVUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDbEIsV0FBTyxNQUFNLENBQUM7R0FDZjs7QUFFTSxXQUFTLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUU7QUFDakQsV0FBTyxDQUFDLFdBQVcsR0FBRyxXQUFXLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQSxHQUFJLEVBQUUsQ0FBQztHQUNwRCIsImZpbGUiOiJoYW5kbGViYXJzL3V0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZXNjYXBlID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgJ2AnOiAnJiN4NjA7J1xufTtcblxuY29uc3QgYmFkQ2hhcnMgPSAvWyY8PlwiJ2BdL2csXG4gICAgICBwb3NzaWJsZSA9IC9bJjw+XCInYF0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyplc2xpbnQtZGlzYWJsZSBmdW5jLXN0eWxlLCBuby12YXIgKi9cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn07XG4vLyBmYWxsYmFjayBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgQ2hyb21lIGFuZCBTYWZhcmlcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pZiAoaXNGdW5jdGlvbigveC8pKSB7XG4gIGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG4gIH07XG59XG5leHBvcnQgdmFyIGlzRnVuY3Rpb247XG4vKmVzbGludC1lbmFibGUgZnVuYy1zdHlsZSwgbm8tdmFyICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSA/IHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nIDogZmFsc2U7XG59O1xuXG4vLyBPbGRlciBJRSB2ZXJzaW9ucyBkbyBub3QgZGlyZWN0bHkgc3VwcG9ydCBpbmRleE9mIHNvIHdlIG11c3QgaW1wbGVtZW50IG91ciBvd24sIHNhZGx5LlxuZXhwb3J0IGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlKSB7XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChhcnJheVtpXSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUV4cHJlc3Npb24oc3RyaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGVzY2FwZSBTYWZlU3RyaW5ncywgc2luY2UgdGhleSdyZSBhbHJlYWR5IHNhZmVcbiAgICBpZiAoc3RyaW5nICYmIHN0cmluZy50b0hUTUwpIHtcbiAgICAgIHJldHVybiBzdHJpbmcudG9IVE1MKCk7XG4gICAgfSBlbHNlIGlmIChzdHJpbmcgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSBpZiAoIXN0cmluZykge1xuICAgICAgcmV0dXJuIHN0cmluZyArICcnO1xuICAgIH1cblxuICAgIC8vIEZvcmNlIGEgc3RyaW5nIGNvbnZlcnNpb24gYXMgdGhpcyB3aWxsIGJlIGRvbmUgYnkgdGhlIGFwcGVuZCByZWdhcmRsZXNzIGFuZFxuICAgIC8vIHRoZSByZWdleCB0ZXN0IHdpbGwgZG8gdGhpcyB0cmFuc3BhcmVudGx5IGJlaGluZCB0aGUgc2NlbmVzLCBjYXVzaW5nIGlzc3VlcyBpZlxuICAgIC8vIGFuIG9iamVjdCdzIHRvIHN0cmluZyBoYXMgZXNjYXBlZCBjaGFyYWN0ZXJzIGluIGl0LlxuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nO1xuICB9XG5cbiAgaWYgKCFwb3NzaWJsZS50ZXN0KHN0cmluZykpIHsgcmV0dXJuIHN0cmluZzsgfVxuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoYmFkQ2hhcnMsIGVzY2FwZUNoYXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBibG9ja1BhcmFtcyhwYXJhbXMsIGlkcykge1xuICBwYXJhbXMucGF0aCA9IGlkcztcbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZENvbnRleHRQYXRoKGNvbnRleHRQYXRoLCBpZCkge1xuICByZXR1cm4gKGNvbnRleHRQYXRoID8gY29udGV4dFBhdGggKyAnLicgOiAnJykgKyBpZDtcbn1cbiJdfQ== +enifed("htmlbars-syntax/parser", ["exports", "htmlbars-syntax/handlebars/compiler/base", "htmlbars-syntax", "simple-html-tokenizer/evented-tokenizer", "simple-html-tokenizer/entity-parser", "simple-html-tokenizer/html5-named-char-refs", "htmlbars-syntax/parser/handlebars-node-visitors", "htmlbars-syntax/parser/tokenizer-event-handlers"], function (exports, _htmlbarsSyntaxHandlebarsCompilerBase, _htmlbarsSyntax, _simpleHtmlTokenizerEventedTokenizer, _simpleHtmlTokenizerEntityParser, _simpleHtmlTokenizerHtml5NamedCharRefs, _htmlbarsSyntaxParserHandlebarsNodeVisitors, _htmlbarsSyntaxParserTokenizerEventHandlers) { + "use strict"; + + exports.preprocess = preprocess; + exports.Parser = Parser; + + function preprocess(html, options) { + var ast = typeof html === 'object' ? html : _htmlbarsSyntaxHandlebarsCompilerBase.parse(html); + var combined = new Parser(html, options).acceptNode(ast); + + if (options && options.plugins && options.plugins.ast) { + for (var i = 0, l = options.plugins.ast.length; i < l; i++) { + var plugin = new options.plugins.ast[i](options); + + plugin.syntax = _htmlbarsSyntax; + + combined = plugin.transform(combined); + } + } + + return combined; + } + + exports.default = preprocess; + + var entityParser = new _simpleHtmlTokenizerEntityParser.default(_simpleHtmlTokenizerHtml5NamedCharRefs.default); + + function Parser(source, options) { + this.options = options || {}; + this.elementStack = []; + this.tokenizer = new _simpleHtmlTokenizerEventedTokenizer.default(this, entityParser); + + this.currentNode = null; + this.currentAttribute = null; + + if (typeof source === 'string') { + this.source = source.split(/(?:\r\n?|\n)/g); + } + } + + for (var key in _htmlbarsSyntaxParserHandlebarsNodeVisitors.default) { + Parser.prototype[key] = _htmlbarsSyntaxParserHandlebarsNodeVisitors.default[key]; + } + + for (var key in _htmlbarsSyntaxParserTokenizerEventHandlers.default) { + Parser.prototype[key] = _htmlbarsSyntaxParserTokenizerEventHandlers.default[key]; + } + + Parser.prototype.acceptNode = function (node) { + return this[node.type](node); + }; + + Parser.prototype.currentElement = function () { + return this.elementStack[this.elementStack.length - 1]; + }; + + Parser.prototype.sourceForMustache = function (mustache) { + var firstLine = mustache.loc.start.line - 1; + var lastLine = mustache.loc.end.line - 1; + var currentLine = firstLine - 1; + var firstColumn = mustache.loc.start.column + 2; + var lastColumn = mustache.loc.end.column - 2; + var string = []; + var line; + + if (!this.source) { + return '{{' + mustache.path.id.original + '}}'; + } + + while (currentLine < lastLine) { + currentLine++; + line = this.source[currentLine]; + + if (currentLine === firstLine) { + if (firstLine === lastLine) { + string.push(line.slice(firstColumn, lastColumn)); + } else { + string.push(line.slice(firstColumn)); + } + } else if (currentLine === lastLine) { + string.push(line.slice(0, lastColumn)); + } else { + string.push(line); + } + } + + return string.join('\n'); + }; +}); +enifed("htmlbars-syntax/parser/handlebars-node-visitors", ["exports", "htmlbars-syntax/builders", "htmlbars-syntax/utils"], function (exports, _htmlbarsSyntaxBuilders, _htmlbarsSyntaxUtils) { + "use strict"; + + exports.default = { + + Program: function (program) { + var body = []; + var node = _htmlbarsSyntaxBuilders.default.program(body, program.blockParams, program.loc); + var i, + l = program.body.length; + + this.elementStack.push(node); + + if (l === 0) { + return this.elementStack.pop(); + } + + for (i = 0; i < l; i++) { + this.acceptNode(program.body[i]); + } + + // Ensure that that the element stack is balanced properly. + var poppedNode = this.elementStack.pop(); + if (poppedNode !== node) { + throw new Error("Unclosed element `" + poppedNode.tag + "` (on line " + poppedNode.loc.start.line + ")."); + } + + return node; + }, + + BlockStatement: function (block) { + delete block.inverseStrip; + delete block.openString; + delete block.closeStrip; + + if (this.tokenizer.state === 'comment') { + this.appendToCommentData('{{' + this.sourceForMustache(block) + '}}'); + return; + } + + if (this.tokenizer.state !== 'comment' && this.tokenizer.state !== 'data' && this.tokenizer.state !== 'beforeData') { + throw new Error("A block may only be used inside an HTML element or another block."); + } + + block = acceptCommonNodes(this, block); + var program = block.program ? this.acceptNode(block.program) : null; + var inverse = block.inverse ? this.acceptNode(block.inverse) : null; + + var node = _htmlbarsSyntaxBuilders.default.block(block.path, block.params, block.hash, program, inverse, block.loc); + var parentProgram = this.currentElement(); + _htmlbarsSyntaxUtils.appendChild(parentProgram, node); + }, + + MustacheStatement: function (rawMustache) { + var tokenizer = this.tokenizer; + var path = rawMustache.path; + var params = rawMustache.params; + var hash = rawMustache.hash; + var escaped = rawMustache.escaped; + var loc = rawMustache.loc; + + var mustache = _htmlbarsSyntaxBuilders.default.mustache(path, params, hash, !escaped, loc); + + if (tokenizer.state === 'comment') { + this.appendToCommentData('{{' + this.sourceForMustache(mustache) + '}}'); + return; + } + + acceptCommonNodes(this, mustache); + + switch (tokenizer.state) { + // Tag helpers + case "tagName": + addElementModifier(this.currentNode, mustache); + tokenizer.state = "beforeAttributeName"; + break; + case "beforeAttributeName": + addElementModifier(this.currentNode, mustache); + break; + case "attributeName": + case "afterAttributeName": + this.beginAttributeValue(false); + this.finishAttributeValue(); + addElementModifier(this.currentNode, mustache); + tokenizer.state = "beforeAttributeName"; + break; + case "afterAttributeValueQuoted": + addElementModifier(this.currentNode, mustache); + tokenizer.state = "beforeAttributeName"; + break; + + // Attribute values + case "beforeAttributeValue": + appendDynamicAttributeValuePart(this.currentAttribute, mustache); + tokenizer.state = 'attributeValueUnquoted'; + break; + case "attributeValueDoubleQuoted": + case "attributeValueSingleQuoted": + case "attributeValueUnquoted": + appendDynamicAttributeValuePart(this.currentAttribute, mustache); + break; + + // TODO: Only append child when the tokenizer state makes + // sense to do so, otherwise throw an error. + default: + _htmlbarsSyntaxUtils.appendChild(this.currentElement(), mustache); + } + + return mustache; + }, + + ContentStatement: function (content) { + updateTokenizerLocation(this.tokenizer, content); + + this.tokenizer.tokenizePart(content.value); + this.tokenizer.flushData(); + }, + + CommentStatement: function (comment) { + return comment; + }, + + PartialStatement: function (partial) { + _htmlbarsSyntaxUtils.appendChild(this.currentElement(), partial); + return partial; + }, + + SubExpression: function (sexpr) { + return acceptCommonNodes(this, sexpr); + }, + + PathExpression: function (path) { + delete path.data; + delete path.depth; + + return path; + }, + + Hash: function (hash) { + for (var i = 0; i < hash.pairs.length; i++) { + this.acceptNode(hash.pairs[i].value); + } + + return hash; + }, + + StringLiteral: function () {}, + BooleanLiteral: function () {}, + NumberLiteral: function () {}, + UndefinedLiteral: function () {}, + NullLiteral: function () {} + }; + + function calculateRightStrippedOffsets(original, value) { + if (value === '') { + // if it is empty, just return the count of newlines + // in original + return { + lines: original.split("\n").length - 1, + columns: 0 + }; + } + + // otherwise, return the number of newlines prior to + // `value` + var difference = original.split(value)[0]; + var lines = difference.split(/\n/); + var lineCount = lines.length - 1; + + return { + lines: lineCount, + columns: lines[lineCount].length + }; + } + + function updateTokenizerLocation(tokenizer, content) { + var line = content.loc.start.line; + var column = content.loc.start.column; + + if (content.rightStripped) { + var offsets = calculateRightStrippedOffsets(content.original, content.value); + + line = line + offsets.lines; + if (offsets.lines) { + column = offsets.columns; + } else { + column = column + offsets.columns; + } + } + + tokenizer.line = line; + tokenizer.column = column; + } + + function acceptCommonNodes(compiler, node) { + compiler.acceptNode(node.path); + + if (node.params) { + for (var i = 0; i < node.params.length; i++) { + compiler.acceptNode(node.params[i]); + } + } else { + node.params = []; + } + + if (node.hash) { + compiler.acceptNode(node.hash); + } else { + node.hash = _htmlbarsSyntaxBuilders.default.hash(); + } + + return node; + } + + function addElementModifier(element, mustache) { + var path = mustache.path; + var params = mustache.params; + var hash = mustache.hash; + var loc = mustache.loc; + + var modifier = _htmlbarsSyntaxBuilders.default.elementModifier(path, params, hash, loc); + element.modifiers.push(modifier); + } + + function appendDynamicAttributeValuePart(attribute, part) { + attribute.isDynamic = true; + attribute.parts.push(part); + } +}); +enifed("htmlbars-syntax/parser/tokenizer-event-handlers", ["exports", "htmlbars-util/void-tag-names", "htmlbars-syntax/builders", "htmlbars-syntax/utils"], function (exports, _htmlbarsUtilVoidTagNames, _htmlbarsSyntaxBuilders, _htmlbarsSyntaxUtils) { + "use strict"; + + exports.default = { + reset: function () { + this.currentNode = null; + }, + + // Comment + + beginComment: function () { + this.currentNode = _htmlbarsSyntaxBuilders.default.comment(""); + this.currentNode.loc = { + source: null, + start: _htmlbarsSyntaxBuilders.default.pos(this.tagOpenLine, this.tagOpenColumn), + end: null + }; + }, + + appendToCommentData: function (char) { + this.currentNode.value += char; + }, + + finishComment: function () { + this.currentNode.loc.end = _htmlbarsSyntaxBuilders.default.pos(this.tokenizer.line, this.tokenizer.column); + + _htmlbarsSyntaxUtils.appendChild(this.currentElement(), this.currentNode); + }, + + // Data + + beginData: function () { + this.currentNode = _htmlbarsSyntaxBuilders.default.text(); + this.currentNode.loc = { + source: null, + start: _htmlbarsSyntaxBuilders.default.pos(this.tokenizer.line, this.tokenizer.column), + end: null + }; + }, + + appendToData: function (char) { + this.currentNode.chars += char; + }, + + finishData: function () { + this.currentNode.loc.end = _htmlbarsSyntaxBuilders.default.pos(this.tokenizer.line, this.tokenizer.column); + + _htmlbarsSyntaxUtils.appendChild(this.currentElement(), this.currentNode); + }, + + // Tags - basic + + tagOpen: function () { + this.tagOpenLine = this.tokenizer.line; + this.tagOpenColumn = this.tokenizer.column; + }, + + beginStartTag: function () { + this.currentNode = { + type: 'StartTag', + name: "", + attributes: [], + modifiers: [], + selfClosing: false, + loc: null + }; + }, + + beginEndTag: function () { + this.currentNode = { + type: 'EndTag', + name: "", + attributes: [], + modifiers: [], + selfClosing: false, + loc: null + }; + }, + + finishTag: function () { + var _tokenizer = this.tokenizer; + var line = _tokenizer.line; + var column = _tokenizer.column; + + var tag = this.currentNode; + tag.loc = _htmlbarsSyntaxBuilders.default.loc(this.tagOpenLine, this.tagOpenColumn, line, column); + + if (tag.type === 'StartTag') { + this.finishStartTag(); + + if (_htmlbarsUtilVoidTagNames.default.hasOwnProperty(tag.name) || tag.selfClosing) { + this.finishEndTag(true); + } + } else if (tag.type === 'EndTag') { + this.finishEndTag(false); + } + }, + + finishStartTag: function () { + var _currentNode = this.currentNode; + var name = _currentNode.name; + var attributes = _currentNode.attributes; + var modifiers = _currentNode.modifiers; + + validateStartTag(this.currentNode, this.tokenizer); + + var loc = _htmlbarsSyntaxBuilders.default.loc(this.tagOpenLine, this.tagOpenColumn); + var element = _htmlbarsSyntaxBuilders.default.element(name, attributes, modifiers, [], loc); + this.elementStack.push(element); + }, + + finishEndTag: function (isVoid) { + var tag = this.currentNode; + + var element = this.elementStack.pop(); + var parent = this.currentElement(); + var disableComponentGeneration = this.options.disableComponentGeneration === true; + + validateEndTag(tag, element, isVoid); + + element.loc.end.line = this.tokenizer.line; + element.loc.end.column = this.tokenizer.column; + + if (disableComponentGeneration || cannotBeComponent(element.tag)) { + _htmlbarsSyntaxUtils.appendChild(parent, element); + } else { + var program = _htmlbarsSyntaxBuilders.default.program(element.children); + _htmlbarsSyntaxUtils.parseComponentBlockParams(element, program); + var component = _htmlbarsSyntaxBuilders.default.component(element.tag, element.attributes, program, element.loc); + _htmlbarsSyntaxUtils.appendChild(parent, component); + } + }, + + markTagAsSelfClosing: function () { + this.currentNode.selfClosing = true; + }, + + // Tags - name + + appendToTagName: function (char) { + this.currentNode.name += char; + }, + + // Tags - attributes + + beginAttribute: function () { + var tag = this.currentNode; + if (tag.type === 'EndTag') { + throw new Error("Invalid end tag: closing tag must not have attributes, " + ("in `" + tag.name + "` (on line " + this.tokenizer.line + ").")); + } + + this.currentAttribute = { + name: "", + parts: [], + isQuoted: false, + isDynamic: false, + // beginAttribute isn't called until after the first char is consumed + start: _htmlbarsSyntaxBuilders.default.pos(this.tokenizer.line, this.tokenizer.column), + valueStartLine: null, + valueStartColumn: null + }; + }, + + appendToAttributeName: function (char) { + this.currentAttribute.name += char; + }, + + beginAttributeValue: function (isQuoted) { + this.currentAttribute.isQuoted = isQuoted; + this.currentAttribute.valueStartLine = this.tokenizer.line; + this.currentAttribute.valueStartColumn = this.tokenizer.column; + }, + + appendToAttributeValue: function (char) { + var parts = this.currentAttribute.parts; + + if (typeof parts[parts.length - 1] === 'string') { + parts[parts.length - 1] += char; + } else { + parts.push(char); + } + }, + + finishAttributeValue: function () { + var _currentAttribute = this.currentAttribute; + var name = _currentAttribute.name; + var parts = _currentAttribute.parts; + var isQuoted = _currentAttribute.isQuoted; + var isDynamic = _currentAttribute.isDynamic; + var valueStartLine = _currentAttribute.valueStartLine; + var valueStartColumn = _currentAttribute.valueStartColumn; + + var value = assembleAttributeValue(parts, isQuoted, isDynamic, this.tokenizer.line); + value.loc = _htmlbarsSyntaxBuilders.default.loc(valueStartLine, valueStartColumn, this.tokenizer.line, this.tokenizer.column); + + var loc = _htmlbarsSyntaxBuilders.default.loc(this.currentAttribute.start.line, this.currentAttribute.start.column, this.tokenizer.line, this.tokenizer.column); + + var attribute = _htmlbarsSyntaxBuilders.default.attr(name, value, loc); + + this.currentNode.attributes.push(attribute); + } + }; + + function assembleAttributeValue(parts, isQuoted, isDynamic, line) { + if (isDynamic) { + if (isQuoted) { + return assembleConcatenatedValue(parts); + } else { + if (parts.length === 1 || parts.length === 2 && parts[1] === '/') { + return parts[0]; + } else { + throw new Error("An unquoted attribute value must be a string or a mustache, " + "preceeded by whitespace or a '=' character, and " + ("followed by whitespace, a '>' character or a '/>' (on line " + line + ")")); + } + } + } else { + return _htmlbarsSyntaxBuilders.default.text(parts.length > 0 ? parts[0] : ""); + } + } + + function assembleConcatenatedValue(parts) { + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + + if (typeof part === 'string') { + parts[i] = _htmlbarsSyntaxBuilders.default.string(parts[i]); + } else { + if (part.type === 'MustacheStatement') { + parts[i] = _htmlbarsSyntaxUtils.unwrapMustache(part); + } else { + throw new Error("Unsupported node in quoted attribute value: " + part.type); + } + } + } + + return _htmlbarsSyntaxBuilders.default.concat(parts); + } + + function cannotBeComponent(tagName) { + return tagName.indexOf("-") === -1 && tagName.indexOf(".") === -1; + } + + function validateStartTag(tag, tokenizer) { + // No support for <script> tags + if (tag.name === "script") { + throw new Error("`SCRIPT` tags are not allowed in HTMLBars templates (on line " + tokenizer.tagLine + ")"); + } + } + + function validateEndTag(tag, element, selfClosing) { + if (_htmlbarsUtilVoidTagNames.default[tag.name] && !selfClosing) { + // EngTag is also called by StartTag for void and self-closing tags (i.e. + // <input> or <br />, so we need to check for that here. Otherwise, we would + // throw an error for those cases. + throw new Error("Invalid end tag " + formatEndTagInfo(tag) + " (void elements cannot have end tags)."); + } else if (element.tag === undefined) { + throw new Error("Closing tag " + formatEndTagInfo(tag) + " without an open tag."); + } else if (element.tag !== tag.name) { + throw new Error("Closing tag " + formatEndTagInfo(tag) + " did not match last open tag `" + element.tag + "` (on line " + element.loc.start.line + ")."); + } + } + + function formatEndTagInfo(tag) { + return "`" + tag.name + "` (on line " + tag.loc.end.line + ")"; + } +}); +enifed("htmlbars-syntax/traversal/errors", ["exports"], function (exports) { + "use strict"; + + exports.cannotRemoveNode = cannotRemoveNode; + exports.cannotReplaceNode = cannotReplaceNode; + exports.cannotReplaceOrRemoveInKeyHandlerYet = cannotReplaceOrRemoveInKeyHandlerYet; + function TraversalError(message, node, parent, key) { + this.name = "TraversalError"; + this.message = message; + this.node = node; + this.parent = parent; + this.key = key; + } + + TraversalError.prototype = Object.create(Error.prototype); + TraversalError.prototype.constructor = TraversalError; + + exports.default = TraversalError; + + function cannotRemoveNode(node, parent, key) { + return new TraversalError("Cannot remove a node unless it is part of an array", node, parent, key); + } + + function cannotReplaceNode(node, parent, key) { + return new TraversalError("Cannot replace a node with multiple nodes unless it is part of an array", node, parent, key); + } + + function cannotReplaceOrRemoveInKeyHandlerYet(node, key) { + return new TraversalError("Replacing and removing in key handlers is not yet supported.", node, null, key); + } +}); +enifed('htmlbars-syntax/traversal/traverse', ['exports', 'htmlbars-syntax/types/visitor-keys', 'htmlbars-syntax/traversal/errors'], function (exports, _htmlbarsSyntaxTypesVisitorKeys, _htmlbarsSyntaxTraversalErrors) { + 'use strict'; + + exports.default = traverse; + exports.normalizeVisitor = normalizeVisitor; + + function visitNode(visitor, node) { + var handler = visitor[node.type] || visitor.All; + var result = undefined; + + if (handler && handler.enter) { + result = handler.enter.call(null, node); + } + + if (result === undefined) { + var keys = _htmlbarsSyntaxTypesVisitorKeys.default[node.type]; + + for (var i = 0; i < keys.length; i++) { + visitKey(visitor, handler, node, keys[i]); + } + + if (handler && handler.exit) { + result = handler.exit.call(null, node); + } + } + + return result; + } + + function visitKey(visitor, handler, node, key) { + var value = node[key]; + if (!value) { + return; + } + + var keyHandler = handler && (handler.keys[key] || handler.keys.All); + var result = undefined; + + if (keyHandler && keyHandler.enter) { + result = keyHandler.enter.call(null, node, key); + if (result !== undefined) { + throw _htmlbarsSyntaxTraversalErrors.cannotReplaceOrRemoveInKeyHandlerYet(node, key); + } + } + + if (Array.isArray(value)) { + visitArray(visitor, value); + } else { + var _result = visitNode(visitor, value); + if (_result !== undefined) { + assignKey(node, key, _result); + } + } + + if (keyHandler && keyHandler.exit) { + result = keyHandler.exit.call(null, node, key); + if (result !== undefined) { + throw _htmlbarsSyntaxTraversalErrors.cannotReplaceOrRemoveInKeyHandlerYet(node, key); + } + } + } + + function visitArray(visitor, array) { + for (var i = 0; i < array.length; i++) { + var result = visitNode(visitor, array[i]); + if (result !== undefined) { + i += spliceArray(array, i, result) - 1; + } + } + } + + function assignKey(node, key, result) { + if (result === null) { + throw _htmlbarsSyntaxTraversalErrors.cannotRemoveNode(node[key], node, key); + } else if (Array.isArray(result)) { + if (result.length === 1) { + node[key] = result[0]; + } else { + if (result.length === 0) { + throw _htmlbarsSyntaxTraversalErrors.cannotRemoveNode(node[key], node, key); + } else { + throw _htmlbarsSyntaxTraversalErrors.cannotReplaceNode(node[key], node, key); + } + } + } else { + node[key] = result; + } + } + + function spliceArray(array, index, result) { + if (result === null) { + array.splice(index, 1); + return 0; + } else if (Array.isArray(result)) { + array.splice.apply(array, [index, 1].concat(result)); + return result.length; + } else { + array.splice(index, 1, result); + return 1; + } + } + + function traverse(node, visitor) { + visitNode(normalizeVisitor(visitor), node); + } + + function normalizeVisitor(visitor) { + var normalizedVisitor = {}; + + for (var type in visitor) { + var handler = visitor[type] || visitor.All; + var normalizedKeys = {}; + + if (typeof handler === 'object') { + var keys = handler.keys; + if (keys) { + for (var key in keys) { + var keyHandler = keys[key]; + if (typeof keyHandler === 'object') { + normalizedKeys[key] = { + enter: typeof keyHandler.enter === 'function' ? keyHandler.enter : null, + exit: typeof keyHandler.exit === 'function' ? keyHandler.exit : null + }; + } else if (typeof keyHandler === 'function') { + normalizedKeys[key] = { + enter: keyHandler, + exit: null + }; + } + } + } + + normalizedVisitor[type] = { + enter: typeof handler.enter === 'function' ? handler.enter : null, + exit: typeof handler.exit === 'function' ? handler.exit : null, + keys: normalizedKeys + }; + } else if (typeof handler === 'function') { + normalizedVisitor[type] = { + enter: handler, + exit: null, + keys: normalizedKeys + }; + } + } + + return normalizedVisitor; + } +}); +enifed('htmlbars-syntax/traversal/walker', ['exports'], function (exports) { + 'use strict'; + + function Walker(order) { + this.order = order; + this.stack = []; + } + + exports.default = Walker; + + Walker.prototype.visit = function (node, callback) { + if (!node) { + return; + } + + this.stack.push(node); + + if (this.order === 'post') { + this.children(node, callback); + callback(node, this); + } else { + callback(node, this); + this.children(node, callback); + } + + this.stack.pop(); + }; + + var visitors = { + Program: function (walker, node, callback) { + for (var i = 0; i < node.body.length; i++) { + walker.visit(node.body[i], callback); + } + }, + + ElementNode: function (walker, node, callback) { + for (var i = 0; i < node.children.length; i++) { + walker.visit(node.children[i], callback); + } + }, + + BlockStatement: function (walker, node, callback) { + walker.visit(node.program, callback); + walker.visit(node.inverse, callback); + }, + + ComponentNode: function (walker, node, callback) { + walker.visit(node.program, callback); + } + }; + + Walker.prototype.children = function (node, callback) { + var visitor = visitors[node.type]; + if (visitor) { + visitor(this, node, callback); + } + }; +}); +enifed('htmlbars-syntax/types/visitor-keys', ['exports'], function (exports) { + 'use strict'; + + exports.default = { + Program: ['body'], + + MustacheStatement: ['path', 'params', 'hash'], + BlockStatement: ['path', 'params', 'hash', 'program', 'inverse'], + ElementModifierStatement: ['path', 'params', 'hash'], + PartialStatement: ['name', 'params', 'hash'], + CommentStatement: [], + ElementNode: ['attributes', 'modifiers', 'children'], + ComponentNode: ['attributes', 'program'], + AttrNode: ['value'], + TextNode: [], + + ConcatStatement: ['parts'], + SubExpression: ['path', 'params', 'hash'], + PathExpression: [], + + StringLiteral: [], + BooleanLiteral: [], + NumberLiteral: [], + NullLiteral: [], + UndefinedLiteral: [], + + Hash: ['pairs'], + HashPair: ['value'] + }; +}); +enifed('htmlbars-syntax/utils', ['exports', 'htmlbars-util/array-utils'], function (exports, _htmlbarsUtilArrayUtils) { + 'use strict'; + + exports.parseComponentBlockParams = parseComponentBlockParams; + exports.childrenFor = childrenFor; + exports.appendChild = appendChild; + exports.isHelper = isHelper; + exports.unwrapMustache = unwrapMustache; + + // Regex to validate the identifier for block parameters. + // Based on the ID validation regex in Handlebars. + + var ID_INVERSE_PATTERN = /[!"#%-,\.\/;->@\[-\^`\{-~]/; + + // Checks the component's attributes to see if it uses block params. + // If it does, registers the block params with the program and + // removes the corresponding attributes from the element. + + function parseComponentBlockParams(element, program) { + var l = element.attributes.length; + var attrNames = []; + + for (var i = 0; i < l; i++) { + attrNames.push(element.attributes[i].name); + } + + var asIndex = _htmlbarsUtilArrayUtils.indexOfArray(attrNames, 'as'); + + if (asIndex !== -1 && l > asIndex && attrNames[asIndex + 1].charAt(0) === '|') { + // Some basic validation, since we're doing the parsing ourselves + var paramsString = attrNames.slice(asIndex).join(' '); + if (paramsString.charAt(paramsString.length - 1) !== '|' || paramsString.match(/\|/g).length !== 2) { + throw new Error('Invalid block parameters syntax: \'' + paramsString + '\''); + } + + var params = []; + for (i = asIndex + 1; i < l; i++) { + var param = attrNames[i].replace(/\|/g, ''); + if (param !== '') { + if (ID_INVERSE_PATTERN.test(param)) { + throw new Error('Invalid identifier for block parameters: \'' + param + '\' in \'' + paramsString + '\''); + } + params.push(param); + } + } + + if (params.length === 0) { + throw new Error('Cannot use zero block parameters: \'' + paramsString + '\''); + } + + element.attributes = element.attributes.slice(0, asIndex); + program.blockParams = params; + } + } + + function childrenFor(node) { + if (node.type === 'Program') { + return node.body; + } + if (node.type === 'ElementNode') { + return node.children; + } + } + + function appendChild(parent, node) { + childrenFor(parent).push(node); + } + + function isHelper(mustache) { + return mustache.params && mustache.params.length > 0 || mustache.hash && mustache.hash.pairs.length > 0; + } + + function unwrapMustache(mustache) { + if (isHelper(mustache)) { + return mustache; + } else { + return mustache.path; + } + } +}); +enifed("htmlbars-test-helpers", ["exports", "simple-html-tokenizer/index", "htmlbars-util/array-utils"], function (exports, _simpleHtmlTokenizerIndex, _htmlbarsUtilArrayUtils) { + "use strict"; + + exports.equalInnerHTML = equalInnerHTML; + exports.equalHTML = equalHTML; + exports.equalTokens = equalTokens; + exports.normalizeInnerHTML = normalizeInnerHTML; + exports.isCheckedInputHTML = isCheckedInputHTML; + exports.getTextContent = getTextContent; + + function equalInnerHTML(fragment, html) { + var actualHTML = normalizeInnerHTML(fragment.innerHTML); + QUnit.push(actualHTML === html, actualHTML, html); + } + + function equalHTML(node, html) { + var fragment; + if (!node.nodeType && node.length) { + fragment = document.createDocumentFragment(); + while (node[0]) { + fragment.appendChild(node[0]); + } + } else { + fragment = node; + } + + var div = document.createElement("div"); + div.appendChild(fragment.cloneNode(true)); + + equalInnerHTML(div, html); + } + + function generateTokens(fragmentOrHtml) { + var div = document.createElement("div"); + if (typeof fragmentOrHtml === 'string') { + div.innerHTML = fragmentOrHtml; + } else { + div.appendChild(fragmentOrHtml.cloneNode(true)); + } + + return { tokens: _simpleHtmlTokenizerIndex.tokenize(div.innerHTML), html: div.innerHTML }; + } + + function equalTokens(fragment, html, message) { + if (fragment.fragment) { + fragment = fragment.fragment; + } + if (html.fragment) { + html = html.fragment; + } + + var fragTokens = generateTokens(fragment); + var htmlTokens = generateTokens(html); + + function normalizeTokens(token) { + if (token.type === 'StartTag') { + token.attributes = token.attributes.sort(function (a, b) { + if (a[0] > b[0]) { + return 1; + } + if (a[0] < b[0]) { + return -1; + } + return 0; + }); + } + } + + _htmlbarsUtilArrayUtils.forEach(fragTokens.tokens, normalizeTokens); + _htmlbarsUtilArrayUtils.forEach(htmlTokens.tokens, normalizeTokens); + + var msg = "Expected: " + html + "; Actual: " + fragTokens.html; + + if (message) { + msg += " (" + message + ")"; + } + + deepEqual(fragTokens.tokens, htmlTokens.tokens, msg); + } + + // detect side-effects of cloning svg elements in IE9-11 + var ieSVGInnerHTML = (function () { + if (!document.createElementNS) { + return false; + } + var div = document.createElement('div'); + var node = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); + div.appendChild(node); + var clone = div.cloneNode(true); + return clone.innerHTML === '<svg xmlns="http://www.w3.org/2000/svg" />'; + })(); + + function normalizeInnerHTML(actualHTML) { + if (ieSVGInnerHTML) { + // Replace `<svg xmlns="http://www.w3.org/2000/svg" height="50%" />` with `<svg height="50%"></svg>`, etc. + // drop namespace attribute + actualHTML = actualHTML.replace(/ xmlns="[^"]+"/, ''); + // replace self-closing elements + actualHTML = actualHTML.replace(/<([^ >]+) [^\/>]*\/>/gi, function (tag, tagName) { + return tag.slice(0, tag.length - 3) + '></' + tagName + '>'; + }); + } + + return actualHTML; + } + + // detect weird IE8 checked element string + var checkedInput = document.createElement('input'); + checkedInput.setAttribute('checked', 'checked'); + var checkedInputString = checkedInput.outerHTML; + + function isCheckedInputHTML(element) { + equal(element.outerHTML, checkedInputString); + } + + // check which property has the node's text content + var textProperty = document.createElement('div').textContent === undefined ? 'innerText' : 'textContent'; + + function getTextContent(el) { + // textNode + if (el.nodeType === 3) { + return el.nodeValue; + } else { + return el[textProperty]; + } + } +}); +enifed('htmlbars-util', ['exports', 'htmlbars-util/safe-string', 'htmlbars-util/handlebars/utils', 'htmlbars-util/namespaces', 'htmlbars-util/morph-utils'], function (exports, _htmlbarsUtilSafeString, _htmlbarsUtilHandlebarsUtils, _htmlbarsUtilNamespaces, _htmlbarsUtilMorphUtils) { + 'use strict'; + + exports.SafeString = _htmlbarsUtilSafeString.default; + exports.escapeExpression = _htmlbarsUtilHandlebarsUtils.escapeExpression; + exports.getAttrNamespace = _htmlbarsUtilNamespaces.getAttrNamespace; + exports.validateChildMorphs = _htmlbarsUtilMorphUtils.validateChildMorphs; + exports.linkParams = _htmlbarsUtilMorphUtils.linkParams; + exports.dump = _htmlbarsUtilMorphUtils.dump; +}); +enifed('htmlbars-util/array-utils', ['exports'], function (exports) { + 'use strict'; + + exports.forEach = forEach; + exports.map = map; + + function forEach(array, callback, binding) { + var i, l; + if (binding === undefined) { + for (i = 0, l = array.length; i < l; i++) { + callback(array[i], i, array); + } + } else { + for (i = 0, l = array.length; i < l; i++) { + callback.call(binding, array[i], i, array); + } + } + } + + function map(array, callback) { + var output = []; + var i, l; + + for (i = 0, l = array.length; i < l; i++) { + output.push(callback(array[i], i, array)); + } + + return output; + } + + var getIdx; + if (Array.prototype.indexOf) { + getIdx = function (array, obj, from) { + return array.indexOf(obj, from); + }; + } else { + getIdx = function (array, obj, from) { + if (from === undefined || from === null) { + from = 0; + } else if (from < 0) { + from = Math.max(0, array.length + from); + } + for (var i = from, l = array.length; i < l; i++) { + if (array[i] === obj) { + return i; + } + } + return -1; + }; + } + + var isArray = Array.isArray || function (array) { + return Object.prototype.toString.call(array) === '[object Array]'; + }; + + exports.isArray = isArray; + var indexOfArray = getIdx; + exports.indexOfArray = indexOfArray; +}); +enifed('htmlbars-util/handlebars/safe-string', ['exports'], function (exports) { + // Build out our basic SafeString type + 'use strict'; + + function SafeString(string) { + this.string = string; + } + + SafeString.prototype.toString = SafeString.prototype.toHTML = function () { + return '' + this.string; + }; + + exports.default = SafeString; +}); +enifed('htmlbars-util/handlebars/utils', ['exports'], function (exports) { + 'use strict'; + + exports.extend = extend; + exports.indexOf = indexOf; + exports.escapeExpression = escapeExpression; + exports.isEmpty = isEmpty; + exports.blockParams = blockParams; + exports.appendContextPath = appendContextPath; + var escape = { + '&': '&amp;', + '<': '&lt;', + '>': '&gt;', + '"': '&quot;', + "'": '&#x27;', + '`': '&#x60;' + }; + + var badChars = /[&<>"'`]/g, + possible = /[&<>"'`]/; + + function escapeChar(chr) { + return escape[chr]; + } + + function extend(obj /* , ...source */) { + for (var i = 1; i < arguments.length; i++) { + for (var key in arguments[i]) { + if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { + obj[key] = arguments[i][key]; + } + } + } + + return obj; + } + + var toString = Object.prototype.toString; + + exports.toString = toString; + // Sourced from lodash + // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt + /*eslint-disable func-style, no-var */ + var isFunction = function (value) { + return typeof value === 'function'; + }; + // fallback for older versions of Chrome and Safari + /* istanbul ignore next */ + if (isFunction(/x/)) { + exports.isFunction = isFunction = function (value) { + return typeof value === 'function' && toString.call(value) === '[object Function]'; + }; + } + var isFunction; + exports.isFunction = isFunction; + /*eslint-enable func-style, no-var */ + + /* istanbul ignore next */ + var isArray = Array.isArray || function (value) { + return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; + }; + + exports.isArray = isArray; + // Older IE versions do not directly support indexOf so we must implement our own, sadly. + + function indexOf(array, value) { + for (var i = 0, len = array.length; i < len; i++) { + if (array[i] === value) { + return i; + } + } + return -1; + } + + function escapeExpression(string) { + if (typeof string !== 'string') { + // don't escape SafeStrings, since they're already safe + if (string && string.toHTML) { + return string.toHTML(); + } else if (string == null) { + return ''; + } else if (!string) { + return string + ''; + } + + // Force a string conversion as this will be done by the append regardless and + // the regex test will do this transparently behind the scenes, causing issues if + // an object's to string has escaped characters in it. + string = '' + string; + } + + if (!possible.test(string)) { + return string; + } + return string.replace(badChars, escapeChar); + } + + function isEmpty(value) { + if (!value && value !== 0) { + return true; + } else if (isArray(value) && value.length === 0) { + return true; + } else { + return false; + } + } + + function blockParams(params, ids) { + params.path = ids; + return params; + } + + function appendContextPath(contextPath, id) { + return (contextPath ? contextPath + '.' : '') + id; + } +}); +enifed("htmlbars-util/morph-utils", ["exports"], function (exports) { + /*globals console*/ + + "use strict"; + + exports.visitChildren = visitChildren; + exports.validateChildMorphs = validateChildMorphs; + exports.linkParams = linkParams; + exports.dump = dump; + + function visitChildren(nodes, callback) { + if (!nodes || nodes.length === 0) { + return; + } + + nodes = nodes.slice(); + + while (nodes.length) { + var node = nodes.pop(); + callback(node); + + if (node.childNodes) { + nodes.push.apply(nodes, node.childNodes); + } else if (node.firstChildMorph) { + var current = node.firstChildMorph; + + while (current) { + nodes.push(current); + current = current.nextMorph; + } + } else if (node.morphList) { + var current = node.morphList.firstChildMorph; + + while (current) { + nodes.push(current); + current = current.nextMorph; + } + } + } + } + + function validateChildMorphs(env, morph, visitor) { + var morphList = morph.morphList; + if (morph.morphList) { + var current = morphList.firstChildMorph; + + while (current) { + var next = current.nextMorph; + validateChildMorphs(env, current, visitor); + current = next; + } + } else if (morph.lastResult) { + morph.lastResult.revalidateWith(env, undefined, undefined, undefined, visitor); + } else if (morph.childNodes) { + // This means that the childNodes were wired up manually + for (var i = 0, l = morph.childNodes.length; i < l; i++) { + validateChildMorphs(env, morph.childNodes[i], visitor); + } + } + } + + function linkParams(env, scope, morph, path, params, hash) { + if (morph.linkedParams) { + return; + } + + if (env.hooks.linkRenderNode(morph, env, scope, path, params, hash)) { + morph.linkedParams = { params: params, hash: hash }; + } + } + + function dump(node) { + console.group(node, node.isDirty); + + if (node.childNodes) { + map(node.childNodes, dump); + } else if (node.firstChildMorph) { + var current = node.firstChildMorph; + + while (current) { + dump(current); + current = current.nextMorph; + } + } else if (node.morphList) { + dump(node.morphList); + } + + console.groupEnd(); + } + + function map(nodes, cb) { + for (var i = 0, l = nodes.length; i < l; i++) { + cb(nodes[i]); + } + } +}); +enifed('htmlbars-util/namespaces', ['exports'], function (exports) { + // ref http://dev.w3.org/html5/spec-LC/namespaces.html + 'use strict'; + + exports.getAttrNamespace = getAttrNamespace; + var defaultNamespaces = { + html: 'http://www.w3.org/1999/xhtml', + mathml: 'http://www.w3.org/1998/Math/MathML', + svg: 'http://www.w3.org/2000/svg', + xlink: 'http://www.w3.org/1999/xlink', + xml: 'http://www.w3.org/XML/1998/namespace' + }; + + function getAttrNamespace(attrName, detectedNamespace) { + if (detectedNamespace) { + return detectedNamespace; + } + + var namespace; + + var colonIndex = attrName.indexOf(':'); + if (colonIndex !== -1) { + var prefix = attrName.slice(0, colonIndex); + namespace = defaultNamespaces[prefix]; + } + + return namespace || null; + } +}); +enifed("htmlbars-util/object-utils", ["exports"], function (exports) { + "use strict"; + + exports.merge = merge; + exports.shallowCopy = shallowCopy; + exports.keySet = keySet; + exports.keyLength = keyLength; + + function merge(options, defaults) { + for (var prop in defaults) { + if (options.hasOwnProperty(prop)) { + continue; + } + options[prop] = defaults[prop]; + } + return options; + } + + function shallowCopy(obj) { + return merge({}, obj); + } + + function keySet(obj) { + var set = {}; + + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + set[prop] = true; + } + } + + return set; + } + + function keyLength(obj) { + var count = 0; + + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + count++; + } + } + + return count; + } +}); +enifed("htmlbars-util/quoting", ["exports"], function (exports) { + "use strict"; + + exports.hash = hash; + exports.repeat = repeat; + function escapeString(str) { + str = str.replace(/\\/g, "\\\\"); + str = str.replace(/"/g, '\\"'); + str = str.replace(/\n/g, "\\n"); + return str; + } + + exports.escapeString = escapeString; + + function string(str) { + return '"' + escapeString(str) + '"'; + } + + exports.string = string; + + function array(a) { + return "[" + a + "]"; + } + + exports.array = array; + + function hash(pairs) { + return "{" + pairs.join(", ") + "}"; + } + + function repeat(chars, times) { + var str = ""; + while (times--) { + str += chars; + } + return str; + } +}); +enifed('htmlbars-util/safe-string', ['exports', 'htmlbars-util/handlebars/safe-string'], function (exports, _htmlbarsUtilHandlebarsSafeString) { + 'use strict'; + + exports.default = _htmlbarsUtilHandlebarsSafeString.default; +}); +enifed("htmlbars-util/template-utils", ["exports", "htmlbars-util/morph-utils", "htmlbars-runtime/render"], function (exports, _htmlbarsUtilMorphUtils, _htmlbarsRuntimeRender) { + "use strict"; + + var _slice = Array.prototype.slice; + exports.RenderState = RenderState; + exports.blockFor = blockFor; + exports.renderAndCleanup = renderAndCleanup; + exports.clearMorph = clearMorph; + exports.clearMorphList = clearMorphList; + exports.buildStatement = buildStatement; + + function RenderState(renderNode, morphList) { + // The morph list that is no longer needed and can be + // destroyed. + this.morphListToClear = morphList; + + // The morph list that needs to be pruned of any items + // that were not yielded on a subsequent render. + this.morphListToPrune = null; + + // A map of morphs for each item yielded in during this + // rendering pass. Any morphs in the DOM but not in this map + // will be pruned during cleanup. + this.handledMorphs = {}; + this.collisions = undefined; + + // The morph to clear once rendering is complete. By + // default, we set this to the previous morph (to catch + // the case where nothing is yielded; in that case, we + // should just clear the morph). Otherwise this gets set + // to null if anything is rendered. + this.morphToClear = renderNode; + + this.shadowOptions = null; + } + + function Block(render, template, blockOptions) { + this.render = render; + this.template = template; + this.blockOptions = blockOptions; + this.arity = template.arity; + } + + Block.prototype.invoke = function (env, blockArguments, _self, renderNode, parentScope, visitor) { + if (renderNode.lastResult) { + renderNode.lastResult.revalidateWith(env, undefined, _self, blockArguments, visitor); + } else { + this._firstRender(env, blockArguments, _self, renderNode, parentScope); + } + }; + + Block.prototype._firstRender = function (env, blockArguments, _self, renderNode, parentScope) { + var options = { renderState: new RenderState(renderNode) }; + var render = this.render; + var template = this.template; + var scope = this.blockOptions.scope; + + var shadowScope = scope ? env.hooks.createChildScope(scope) : env.hooks.createFreshScope(); + + env.hooks.bindShadowScope(env, parentScope, shadowScope, this.blockOptions.options); + + if (_self !== undefined) { + env.hooks.bindSelf(env, shadowScope, _self); + } else if (this.blockOptions.self !== undefined) { + env.hooks.bindSelf(env, shadowScope, this.blockOptions.self); + } + + bindBlocks(env, shadowScope, this.blockOptions.yieldTo); + + renderAndCleanup(renderNode, env, options, null, function () { + options.renderState.morphToClear = null; + var renderOptions = new _htmlbarsRuntimeRender.RenderOptions(renderNode, undefined, blockArguments); + render(template, env, shadowScope, renderOptions); + }); + }; + + function blockFor(render, template, blockOptions) { + return new Block(render, template, blockOptions); + } + + function bindBlocks(env, shadowScope, blocks) { + if (!blocks) { + return; + } + if (blocks instanceof Block) { + env.hooks.bindBlock(env, shadowScope, blocks); + } else { + for (var name in blocks) { + if (blocks.hasOwnProperty(name)) { + env.hooks.bindBlock(env, shadowScope, blocks[name], name); + } + } + } + } + + function renderAndCleanup(morph, env, options, shadowOptions, callback) { + // The RenderState object is used to collect information about what the + // helper or hook being invoked has yielded. Once it has finished either + // yielding multiple items (via yieldItem) or a single template (via + // yieldTemplate), we detect what was rendered and how it differs from + // the previous render, cleaning up old state in DOM as appropriate. + var renderState = options.renderState; + renderState.collisions = undefined; + renderState.shadowOptions = shadowOptions; + + // Invoke the callback, instructing it to save information about what it + // renders into RenderState. + var result = callback(options); + + // The hook can opt-out of cleanup if it handled cleanup itself. + if (result && result.handled) { + return; + } + + var morphMap = morph.morphMap; + + // Walk the morph list, clearing any items that were yielded in a previous + // render but were not yielded during this render. + var morphList = renderState.morphListToPrune; + if (morphList) { + var handledMorphs = renderState.handledMorphs; + var item = morphList.firstChildMorph; + + while (item) { + var next = item.nextMorph; + + // If we don't see the key in handledMorphs, it wasn't + // yielded in and we can safely remove it from DOM. + if (!(item.key in handledMorphs)) { + morphMap[item.key] = undefined; + clearMorph(item, env, true); + item.destroy(); + } + + item = next; + } + } + + morphList = renderState.morphListToClear; + if (morphList) { + clearMorphList(morphList, morph, env); + } + + var toClear = renderState.morphToClear; + if (toClear) { + clearMorph(toClear, env); + } + } + + function clearMorph(morph, env, destroySelf) { + var cleanup = env.hooks.cleanupRenderNode; + var destroy = env.hooks.destroyRenderNode; + var willCleanup = env.hooks.willCleanupTree; + var didCleanup = env.hooks.didCleanupTree; + + function destroyNode(node) { + if (cleanup) { + cleanup(node); + } + if (destroy) { + destroy(node); + } + } + + if (willCleanup) { + willCleanup(env, morph, destroySelf); + } + if (cleanup) { + cleanup(morph); + } + if (destroySelf && destroy) { + destroy(morph); + } + + _htmlbarsUtilMorphUtils.visitChildren(morph.childNodes, destroyNode); + + // TODO: Deal with logical children that are not in the DOM tree + morph.clear(); + if (didCleanup) { + didCleanup(env, morph, destroySelf); + } + + morph.lastResult = null; + morph.lastYielded = null; + morph.childNodes = null; + } + + function clearMorphList(morphList, morph, env) { + var item = morphList.firstChildMorph; + + while (item) { + var next = item.nextMorph; + morph.morphMap[item.key] = undefined; + clearMorph(item, env, true); + item.destroy(); + + item = next; + } + + // Remove the MorphList from the morph. + morphList.clear(); + morph.morphList = null; + } + + function buildStatement() { + var statement = [].concat(_slice.call(arguments)); + + // ensure array length is 7 by padding with 0 + for (var i = arguments.length; i < 7; i++) { + statement[i] = 0; + } + + return statement; + } +}); +enifed("htmlbars-util/void-tag-names", ["exports", "htmlbars-util/array-utils"], function (exports, _htmlbarsUtilArrayUtils) { + "use strict"; + + // The HTML elements in this list are speced by + // http://www.w3.org/TR/html-markup/syntax.html#syntax-elements, + // and will be forced to close regardless of if they have a + // self-closing /> at the end. + var voidTagNames = "area base br col command embed hr img input keygen link meta param source track wbr"; + var voidMap = {}; + + _htmlbarsUtilArrayUtils.forEach(voidTagNames.split(" "), function (tagName) { + voidMap[tagName] = true; + }); + + exports.default = voidMap; +}); +enifed('morph-range', ['exports', 'morph-range/utils'], function (exports, _morphRangeUtils) { + 'use strict'; + + // constructor just initializes the fields + // use one of the static initializers to create a valid morph. + function Morph(domHelper, contextualElement) { + this.domHelper = domHelper; + // context if content if current content is detached + this.contextualElement = contextualElement; + // inclusive range of morph + // these should be nodeType 1, 3, or 8 + this.firstNode = null; + this.lastNode = null; + + // flag to force text to setContent to be treated as html + this.parseTextAsHTML = false; + + // morph list graph + this.parentMorphList = null; + this.previousMorph = null; + this.nextMorph = null; + } + + Morph.empty = function (domHelper, contextualElement) { + var morph = new Morph(domHelper, contextualElement); + morph.clear(); + return morph; + }; + + Morph.create = function (domHelper, contextualElement, node) { + var morph = new Morph(domHelper, contextualElement); + morph.setNode(node); + return morph; + }; + + Morph.attach = function (domHelper, contextualElement, firstNode, lastNode) { + var morph = new Morph(domHelper, contextualElement); + morph.setRange(firstNode, lastNode); + return morph; + }; + + Morph.prototype.setContent = function Morph$setContent(content) { + if (content === null || content === undefined) { + return this.clear(); + } + + var type = typeof content; + switch (type) { + case 'string': + if (this.parseTextAsHTML) { + return this.domHelper.setMorphHTML(this, content); + } + return this.setText(content); + case 'object': + if (typeof content.nodeType === 'number') { + return this.setNode(content); + } + /* Handlebars.SafeString */ + if (typeof content.toHTML === 'function') { + return this.setHTML(content.toHTML()); + } + if (this.parseTextAsHTML) { + return this.setHTML(content.toString()); + } + /* falls through */ + case 'boolean': + case 'number': + return this.setText(content.toString()); + case 'function': + raiseCannotBindToFunction(content); + default: + throw new TypeError('unsupported content'); + } + }; + + function raiseCannotBindToFunction(content) { + var functionName = content.name; + var message; + + if (functionName) { + message = 'Unsupported Content: Cannot bind to function `' + functionName + '`'; + } else { + message = 'Unsupported Content: Cannot bind to function'; + } + + throw new TypeError(message); + } + + Morph.prototype.clear = function Morph$clear() { + var node = this.setNode(this.domHelper.createComment('')); + return node; + }; + + Morph.prototype.setText = function Morph$setText(text) { + var firstNode = this.firstNode; + var lastNode = this.lastNode; + + if (firstNode && lastNode === firstNode && firstNode.nodeType === 3) { + firstNode.nodeValue = text; + return firstNode; + } + + return this.setNode(text ? this.domHelper.createTextNode(text) : this.domHelper.createComment('')); + }; + + Morph.prototype.setNode = function Morph$setNode(newNode) { + var firstNode, lastNode; + switch (newNode.nodeType) { + case 3: + firstNode = newNode; + lastNode = newNode; + break; + case 11: + firstNode = newNode.firstChild; + lastNode = newNode.lastChild; + if (firstNode === null) { + firstNode = this.domHelper.createComment(''); + newNode.appendChild(firstNode); + lastNode = firstNode; + } + break; + default: + firstNode = newNode; + lastNode = newNode; + break; + } + + this.setRange(firstNode, lastNode); + + return newNode; + }; + + Morph.prototype.setRange = function (firstNode, lastNode) { + var previousFirstNode = this.firstNode; + if (previousFirstNode !== null) { + + var parentNode = previousFirstNode.parentNode; + if (parentNode !== null) { + _morphRangeUtils.insertBefore(parentNode, firstNode, lastNode, previousFirstNode); + _morphRangeUtils.clear(parentNode, previousFirstNode, this.lastNode); + } + } + + this.firstNode = firstNode; + this.lastNode = lastNode; + + if (this.parentMorphList) { + this._syncFirstNode(); + this._syncLastNode(); + } + }; + + Morph.prototype.destroy = function Morph$destroy() { + this.unlink(); + + var firstNode = this.firstNode; + var lastNode = this.lastNode; + var parentNode = firstNode && firstNode.parentNode; + + this.firstNode = null; + this.lastNode = null; + + _morphRangeUtils.clear(parentNode, firstNode, lastNode); + }; + + Morph.prototype.unlink = function Morph$unlink() { + var parentMorphList = this.parentMorphList; + var previousMorph = this.previousMorph; + var nextMorph = this.nextMorph; + + if (previousMorph) { + if (nextMorph) { + previousMorph.nextMorph = nextMorph; + nextMorph.previousMorph = previousMorph; + } else { + previousMorph.nextMorph = null; + parentMorphList.lastChildMorph = previousMorph; + } + } else { + if (nextMorph) { + nextMorph.previousMorph = null; + parentMorphList.firstChildMorph = nextMorph; + } else if (parentMorphList) { + parentMorphList.lastChildMorph = parentMorphList.firstChildMorph = null; + } + } + + this.parentMorphList = null; + this.nextMorph = null; + this.previousMorph = null; + + if (parentMorphList && parentMorphList.mountedMorph) { + if (!parentMorphList.firstChildMorph) { + // list is empty + parentMorphList.mountedMorph.clear(); + return; + } else { + parentMorphList.firstChildMorph._syncFirstNode(); + parentMorphList.lastChildMorph._syncLastNode(); + } + } + }; + + Morph.prototype.setHTML = function (text) { + var fragment = this.domHelper.parseHTML(text, this.contextualElement); + return this.setNode(fragment); + }; + + Morph.prototype.setMorphList = function Morph$appendMorphList(morphList) { + morphList.mountedMorph = this; + this.clear(); + + var originalFirstNode = this.firstNode; + + if (morphList.firstChildMorph) { + this.firstNode = morphList.firstChildMorph.firstNode; + this.lastNode = morphList.lastChildMorph.lastNode; + + var current = morphList.firstChildMorph; + + while (current) { + var next = current.nextMorph; + current.insertBeforeNode(originalFirstNode, null); + current = next; + } + originalFirstNode.parentNode.removeChild(originalFirstNode); + } + }; + + Morph.prototype._syncFirstNode = function Morph$syncFirstNode() { + var morph = this; + var parentMorphList; + while (parentMorphList = morph.parentMorphList) { + if (parentMorphList.mountedMorph === null) { + break; + } + if (morph !== parentMorphList.firstChildMorph) { + break; + } + if (morph.firstNode === parentMorphList.mountedMorph.firstNode) { + break; + } + + parentMorphList.mountedMorph.firstNode = morph.firstNode; + + morph = parentMorphList.mountedMorph; + } + }; + + Morph.prototype._syncLastNode = function Morph$syncLastNode() { + var morph = this; + var parentMorphList; + while (parentMorphList = morph.parentMorphList) { + if (parentMorphList.mountedMorph === null) { + break; + } + if (morph !== parentMorphList.lastChildMorph) { + break; + } + if (morph.lastNode === parentMorphList.mountedMorph.lastNode) { + break; + } + + parentMorphList.mountedMorph.lastNode = morph.lastNode; + + morph = parentMorphList.mountedMorph; + } + }; + + Morph.prototype.insertBeforeNode = function Morph$insertBeforeNode(parentNode, refNode) { + _morphRangeUtils.insertBefore(parentNode, this.firstNode, this.lastNode, refNode); + }; + + Morph.prototype.appendToNode = function Morph$appendToNode(parentNode) { + _morphRangeUtils.insertBefore(parentNode, this.firstNode, this.lastNode, null); + }; + + exports.default = Morph; +}); +enifed('morph-range/morph-list', ['exports', 'morph-range/utils'], function (exports, _morphRangeUtils) { + 'use strict'; + + function MorphList() { + // morph graph + this.firstChildMorph = null; + this.lastChildMorph = null; + + this.mountedMorph = null; + } + + var prototype = MorphList.prototype; + + prototype.clear = function MorphList$clear() { + var current = this.firstChildMorph; + + while (current) { + var next = current.nextMorph; + current.previousMorph = null; + current.nextMorph = null; + current.parentMorphList = null; + current = next; + } + + this.firstChildMorph = this.lastChildMorph = null; + }; + + prototype.destroy = function MorphList$destroy() {}; + + prototype.appendMorph = function MorphList$appendMorph(morph) { + this.insertBeforeMorph(morph, null); + }; + + prototype.insertBeforeMorph = function MorphList$insertBeforeMorph(morph, referenceMorph) { + if (morph.parentMorphList !== null) { + morph.unlink(); + } + if (referenceMorph && referenceMorph.parentMorphList !== this) { + throw new Error('The morph before which the new morph is to be inserted is not a child of this morph.'); + } + + var mountedMorph = this.mountedMorph; + + if (mountedMorph) { + + var parentNode = mountedMorph.firstNode.parentNode; + var referenceNode = referenceMorph ? referenceMorph.firstNode : mountedMorph.lastNode.nextSibling; + + _morphRangeUtils.insertBefore(parentNode, morph.firstNode, morph.lastNode, referenceNode); + + // was not in list mode replace current content + if (!this.firstChildMorph) { + _morphRangeUtils.clear(this.mountedMorph.firstNode.parentNode, this.mountedMorph.firstNode, this.mountedMorph.lastNode); + } + } + + morph.parentMorphList = this; + + var previousMorph = referenceMorph ? referenceMorph.previousMorph : this.lastChildMorph; + if (previousMorph) { + previousMorph.nextMorph = morph; + morph.previousMorph = previousMorph; + } else { + this.firstChildMorph = morph; + } + + if (referenceMorph) { + referenceMorph.previousMorph = morph; + morph.nextMorph = referenceMorph; + } else { + this.lastChildMorph = morph; + } + + this.firstChildMorph._syncFirstNode(); + this.lastChildMorph._syncLastNode(); + }; + + prototype.removeChildMorph = function MorphList$removeChildMorph(morph) { + if (morph.parentMorphList !== this) { + throw new Error("Cannot remove a morph from a parent it is not inside of"); + } + + morph.destroy(); + }; + + exports.default = MorphList; +}); +enifed('morph-range/morph-list.umd', ['exports', 'morph-range/morph-list'], function (exports, _morphRangeMorphList) { + 'use strict'; + + (function (root, factory) { + if (typeof define === 'function' && define.amd) { + define([], factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + root.MorphList = factory(); + } + })(undefined, function () { + return _morphRangeMorphList.default; + }); +}); +enifed("morph-range/utils", ["exports"], function (exports) { + // inclusive of both nodes + "use strict"; + + exports.clear = clear; + exports.insertBefore = insertBefore; + + function clear(parentNode, firstNode, lastNode) { + if (!parentNode) { + return; + } + + var node = firstNode; + var nextNode; + do { + nextNode = node.nextSibling; + parentNode.removeChild(node); + if (node === lastNode) { + break; + } + node = nextNode; + } while (node); + } + + function insertBefore(parentNode, firstNode, lastNode, refNode) { + var node = firstNode; + var nextNode; + do { + nextNode = node.nextSibling; + parentNode.insertBefore(node, refNode); + if (node === lastNode) { + break; + } + node = nextNode; + } while (node); + } +}); enifed("simple-html-tokenizer/entity-parser", ["exports"], function (exports) { "use strict"; function EntityParser(named) { this.named = named;