1 {"version":3,"file":"polymer.js","sources":["../polymer-gestures/src/scope.js","
../polymer-gestures/src/targetfind.js","../polymer-gestures/src/touch-action.js"
,"../polymer-gestures/src/eventFactory.js","../polymer-gestures/src/pointermap.j
s","../polymer-gestures/src/dispatcher.js","../polymer-gestures/src/mouse.js",".
./polymer-gestures/src/touch.js","../polymer-gestures/src/ms.js","../polymer-ges
tures/src/pointer.js","../polymer-gestures/src/platform-events.js","../polymer-g
estures/src/track.js","../polymer-gestures/src/hold.js","../polymer-gestures/src
/tap.js","../polymer-expressions/third_party/esprima/esprima.js","../polymer-exp
ressions/src/polymer-expressions.js","build/polymer-versioned.js","src/boot.js",
"src/lib/lang.js","src/lib/job.js","src/lib/dom.js","src/lib/super.js","src/lib/
deserialize.js","src/api.js","src/instance/utils.js","src/instance/events.js","s
rc/instance/attributes.js","src/instance/properties.js","src/instance/mdv.js","s
rc/instance/base.js","src/instance/styles.js","src/declaration/polymer.js","src/
declaration/path.js","src/declaration/styles.js","src/declaration/events.js","sr
c/declaration/properties.js","src/declaration/attributes.js","src/declaration/md
v.js","src/declaration/prototype.js","src/declaration/queue.js","src/declaration
/import.js","src/declaration/polymer-element.js","src/lib/auto-binding.js"],"nam
es":[],"mappings":"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","sourcesContent":["/**\n * @lic
ense\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n
* This code may only be used under the BSD style license found at http://polymer
.github.io/LICENSE.txt\n * The complete set of authors may be found at http://po
lymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at
http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as par
t of the polymer project is also\n * subject to an additional IP rights grant fo
und at http://polymer.github.io/PATENTS.txt\n */\nwindow.PolymerGestures = {};\n
","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n
* This code may only be used under the BSD style license found at http://polyme
r.github.io/LICENSE.txt\n * The complete set of authors may be found at http://p
olymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found a
t http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as pa
rt of the polymer project is also\n * subject to an additional IP rights grant f
ound at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var H
AS_FULL_PATH = false;\n\n // test for full event path support\n var pathTest =
document.createElement('meta');\n if (pathTest.createShadowRoot) {\n var sr
= pathTest.createShadowRoot();\n var s = document.createElement('span');\n
sr.appendChild(s);\n pathTest.addEventListener('testpath', function(ev) {\n
if (ev.path) {\n // if the span is in the event path, then path[0]
is the real source for all events\n HAS_FULL_PATH = ev.path[0] === s;\n
}\n ev.stopPropagation();\n });\n var ev = new CustomEvent('testp
ath', {bubbles: true});\n // must add node to DOM to trigger event listener\n
document.head.appendChild(pathTest);\n s.dispatchEvent(ev);\n pathTest
.parentNode.removeChild(pathTest);\n sr = s = null;\n }\n pathTest = null;\
n\n var target = {\n shadow: function(inEl) {\n if (inEl) {\n re
turn inEl.shadowRoot || inEl.webkitShadowRoot;\n }\n },\n canTarget:
function(shadow) {\n return shadow && Boolean(shadow.elementFromPoint);\n
},\n targetingShadow: function(inEl) {\n var s = this.shadow(inEl);\n
if (this.canTarget(s)) {\n return s;\n }\n },\n olderShad
ow: function(shadow) {\n var os = shadow.olderShadowRoot;\n if (!os) {
\n var se = shadow.querySelector('shadow');\n if (se) {\n
os = se.olderShadowRoot;\n }\n }\n return os;\n },\n all
Shadows: function(element) {\n var shadows = [], s = this.shadow(element);\
n while(s) {\n shadows.push(s);\n s = this.olderShadow(s);\n
}\n return shadows;\n },\n searchRoot: function(inRoot, x, y) {\
n var t, st, sr, os;\n if (inRoot) {\n t = inRoot.elementFromPo
int(x, y);\n if (t) {\n // found element, check if it has a Shad
owRoot\n sr = this.targetingShadow(t);\n } else if (inRoot !== d
ocument) {\n // check for sibling roots\n sr = this.olderShado
w(inRoot);\n }\n // search other roots, fall back to light dom ele
ment\n return this.searchRoot(sr, x, y) || t;\n }\n },\n owner
: function(element) {\n if (!element) {\n return document;\n }\
n var s = element;\n // walk up until you hit the shadow root or docum
ent\n while (s.parentNode) {\n s = s.parentNode;\n }\n //
the owner element is expected to be a Document or ShadowRoot\n if (s.nodeTy
pe != Node.DOCUMENT_NODE && s.nodeType != Node.DOCUMENT_FRAGMENT_NODE) {\n
s = document;\n }\n return s;\n },\n findTarget: function(inEv
ent) {\n if (HAS_FULL_PATH && inEvent.path) {\n return inEvent.path[
0];\n }\n var x = inEvent.clientX, y = inEvent.clientY;\n // if t
he listener is in the shadow root, it is much faster to start there\n var s
= this.owner(inEvent.target);\n // if x, y is not in this root, fall back
to document search\n if (!s.elementFromPoint(x, y)) {\n s = document
;\n }\n return this.searchRoot(s, x, y);\n },\n findTouchAction:
function(inEvent) {\n var n;\n if (HAS_FULL_PATH && inEvent.path) {\n
var path = inEvent.path;\n for (var i = 0; i < path.length; i++)
{\n n = path[i];\n if (n.nodeType === Node.ELEMENT_NODE && n.h
asAttribute('touch-action')) {\n return n.getAttribute('touch-action'
);\n }\n }\n } else {\n n = inEvent.target;\n
while(n) {\n if (n.hasAttribute('touch-action')) {\n return
n.getAttribute('touch-action');\n }\n n = n.parentNode || n.h
ost;\n }\n }\n // auto is default\n return \"auto\";\n
},\n LCA: function(a, b) {\n if (a === b) {\n return a;\n }\
n if (a && !b) {\n return a;\n }\n if (b && !a) {\n
return b;\n }\n if (!b && !a) {\n return document;\n }\n
// fast case, a is a direct descendant of b or vice versa\n if (a.cont
ains && a.contains(b)) {\n return a;\n }\n if (b.contains && b.
contains(a)) {\n return b;\n }\n var adepth = this.depth(a);\n
var bdepth = this.depth(b);\n var d = adepth - bdepth;\n if (d >=
0) {\n a = this.walk(a, d);\n } else {\n b = this.walk(b, -d
);\n }\n while (a && b && a !== b) {\n a = a.parentNode || a.ho
st;\n b = b.parentNode || b.host;\n }\n return a;\n },\n
walk: function(n, u) {\n for (var i = 0; n && (i < u); i++) {\n n =
n.parentNode || n.host;\n }\n return n;\n },\n depth: function(n
) {\n var d = 0;\n while(n) {\n d++;\n n = n.parentNode
|| n.host;\n }\n return d;\n },\n deepContains: function(a, b) {
\n var common = this.LCA(a, b);\n // if a is the common ancestor, it m
ust \"deeply\" contain b\n return common === a;\n },\n insideNode: fu
nction(node, x, y) {\n var rect = node.getBoundingClientRect();\n retu
rn (rect.left <= x) && (x <= rect.right) && (rect.top <= y) && (y <= rect.bottom
);\n }\n };\n scope.targetFinding = target;\n /**\n * Given an event, fi
nds the \"deepest\" node that could have been the original target before ShadowD
OM retargetting\n *\n * @param {Event} Event An event object with clientX an
d clientY properties\n * @return {Element} The probable event origninator\n
*/\n scope.findTarget = target.findTarget.bind(target);\n /**\n * Determines
if the \"container\" node deeply contains the \"containee\" node, including sit
uations where the \"containee\" is contained by one or more ShadowDOM\n * root
s.\n *\n * @param {Node} container\n * @param {Node} containee\n * @retu
rn {Boolean}\n */\n scope.deepContains = target.deepContains.bind(target);\n\
n /**\n * Determines if the x/y position is inside the given node.\n *\n
* Example:\n *\n * function upHandler(event) {\n * var innode =
PolymerGestures.insideNode(event.target, event.clientX, event.clientY);\n *
if (innode) {\n * // wait for tap?\n * } else {\n *
// tap will never happen\n * }\n * }\n *\n * @param {Node}
node\n * @param {Number} x Screen X position\n * @param {Number} y screen Y
position\n * @return {Boolean}\n */\n scope.insideNode = target.insideNode
;\n\n})(window.PolymerGestures);\n","/*\n *\n * Copyright (c) 2014 The Polymer P
roject Authors. All rights reserved.\n * This code may only be used under the BS
D style license found at http://polymer.github.io/LICENSE.txt\n * The complete s
et of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The compl
ete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.tx
t\n * Code distributed by Google as part of the polymer project is also\n * subj
ect to an additional IP rights grant found at http://polymer.github.io/PATENTS.t
xt\n */\n\n(function() {\n function shadowSelector(v) {\n return 'html /deep
/ ' + selector(v);\n }\n function selector(v) {\n return '[touch-action=\"'
+ v + '\"]';\n }\n function rule(v) {\n return '{ -ms-touch-action: ' + v
+ '; touch-action: ' + v + ';}';\n }\n var attrib2css = [\n 'none',\n 'a
uto',\n 'pan-x',\n 'pan-y',\n {\n rule: 'pan-x pan-y',\n sele
ctors: [\n 'pan-x pan-y',\n 'pan-y pan-x'\n ]\n },\n 'm
anipulation'\n ];\n var styles = '';\n // only install stylesheet if the brow
ser has touch action support\n var hasTouchAction = typeof document.head.style.
touchAction === 'string';\n // only add shadow selectors if shadowdom is suppor
ted\n var hasShadowRoot = !window.ShadowDOMPolyfill && document.head.createShad
owRoot;\n\n if (hasTouchAction) {\n attrib2css.forEach(function(r) {\n
if (String(r) === r) {\n styles += selector(r) + rule(r) + '\\n';\n
if (hasShadowRoot) {\n styles += shadowSelector(r) + rule(r) + '\\n';
\n }\n } else {\n styles += r.selectors.map(selector) + rule(
r.rule) + '\\n';\n if (hasShadowRoot) {\n styles += r.selectors.
map(shadowSelector) + rule(r.rule) + '\\n';\n }\n }\n });\n\n
var el = document.createElement('style');\n el.textContent = styles;\n doc
ument.head.appendChild(el);\n }\n})();\n","/*\n * Copyright (c) 2014 The Polyme
r Project Authors. All rights reserved.\n * This code may only be used under the
BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complet
e set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The co
mplete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
.txt\n * Code distributed by Google as part of the polymer project is also\n * s
ubject to an additional IP rights grant found at http://polymer.github.io/PATENT
S.txt\n */\n\n/**\n * This is the constructor for new PointerEvents.\n *\n * New
Pointer Events must be given a type, and an optional dictionary of\n * initiali
zation properties.\n *\n * Due to certain platform requirements, events returned
from the constructor\n * identify as MouseEvents.\n *\n * @constructor\n * @par
am {String} inType The type of the event to create.\n * @param {Object} [inDict]
An optional dictionary of initial event properties.\n * @return {Event} A new P
ointerEvent of type `inType` and initialized with properties from `inDict`.\n */
\n(function(scope) {\n\n var MOUSE_PROPS = [\n 'bubbles',\n 'cancelable',
\n 'view',\n 'detail',\n 'screenX',\n 'screenY',\n 'clientX',\n
'clientY',\n 'ctrlKey',\n 'altKey',\n 'shiftKey',\n 'metaKey',\n
'button',\n 'relatedTarget',\n 'pageX',\n 'pageY'\n ];\n\n var MOUS
E_DEFAULTS = [\n false,\n false,\n null,\n null,\n 0,\n 0,\n
0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null,\
n 0,\n 0\n ];\n\n var NOP_FACTORY = function(){ return function(){}; };\
n\n var eventFactory = {\n // TODO(dfreedm): this is overridden by tap recog
nizer, needs review\n preventTap: NOP_FACTORY,\n makeBaseEvent: function(i
nType, inDict) {\n var e = document.createEvent('Event');\n e.initEven
t(inType, inDict.bubbles || false, inDict.cancelable || false);\n e.prevent
Tap = eventFactory.preventTap(e);\n return e;\n },\n makeGestureEvent
: function(inType, inDict) {\n inDict = inDict || Object.create(null);\n\n
var e = this.makeBaseEvent(inType, inDict);\n for (var i = 0, keys = O
bject.keys(inDict), k; i < keys.length; i++) {\n k = keys[i];\n e[
k] = inDict[k];\n }\n return e;\n },\n makePointerEvent: functio
n(inType, inDict) {\n inDict = inDict || Object.create(null);\n\n var
e = this.makeBaseEvent(inType, inDict);\n // define inherited MouseEvent pr
operties\n for(var i = 0, p; i < MOUSE_PROPS.length; i++) {\n p = MO
USE_PROPS[i];\n e[p] = inDict[p] || MOUSE_DEFAULTS[i];\n }\n e.
buttons = inDict.buttons || 0;\n\n // Spec requires that pointers without p
ressure specified use 0.5 for down\n // state and 0 for up state.\n va
r pressure = 0;\n if (inDict.pressure) {\n pressure = inDict.pressur
e;\n } else {\n pressure = e.buttons ? 0.5 : 0;\n }\n\n //
add x/y properties aliased to clientX/Y\n e.x = e.clientX;\n e.y = e.
clientY;\n\n // define the properties of the PointerEvent interface\n
e.pointerId = inDict.pointerId || 0;\n e.width = inDict.width || 0;\n
e.height = inDict.height || 0;\n e.pressure = pressure;\n e.tiltX = in
Dict.tiltX || 0;\n e.tiltY = inDict.tiltY || 0;\n e.pointerType = inDi
ct.pointerType || '';\n e.hwTimestamp = inDict.hwTimestamp || 0;\n e.i
sPrimary = inDict.isPrimary || false;\n e._source = inDict._source || '';\n
return e;\n }\n };\n\n scope.eventFactory = eventFactory;\n})(window.
PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All
rights reserved.\n * This code may only be used under the BSD style license fou
nd at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may b
e found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contribu
tors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distribu
ted by Google as part of the polymer project is also\n * subject to an additiona
l IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n *
This module implements an map of pointer states\n */\n(function(scope) {\n var
USE_MAP = window.Map && window.Map.prototype.forEach;\n var POINTERS_FN = funct
ion(){ return this.size; };\n function PointerMap() {\n if (USE_MAP) {\n
var m = new Map();\n m.pointers = POINTERS_FN;\n return m;\n } el
se {\n this.keys = [];\n this.values = [];\n }\n }\n\n PointerMap
.prototype = {\n set: function(inId, inEvent) {\n var i = this.keys.inde
xOf(inId);\n if (i > -1) {\n this.values[i] = inEvent;\n } else
{\n this.keys.push(inId);\n this.values.push(inEvent);\n }\n
},\n has: function(inId) {\n return this.keys.indexOf(inId) > -1;\n
},\n 'delete': function(inId) {\n var i = this.keys.indexOf(inId);\n
if (i > -1) {\n this.keys.splice(i, 1);\n this.values.splice(
i, 1);\n }\n },\n get: function(inId) {\n var i = this.keys.inde
xOf(inId);\n return this.values[i];\n },\n clear: function() {\n
this.keys.length = 0;\n this.values.length = 0;\n },\n // return val
ue, key, map\n forEach: function(callback, thisArg) {\n this.values.forE
ach(function(v, i) {\n callback.call(thisArg, v, this.keys[i], this);\n
}, this);\n },\n pointers: function() {\n return this.keys.length
;\n }\n };\n\n scope.PointerMap = PointerMap;\n})(window.PolymerGestures);\
n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\
n * This code may only be used under the BSD style license found at http://polym
er.github.io/LICENSE.txt\n * The complete set of authors may be found at http://
polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as p
art of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var
CLONE_PROPS = [\n // MouseEvent\n 'bubbles',\n 'cancelable',\n 'view
',\n 'detail',\n 'screenX',\n 'screenY',\n 'clientX',\n 'clientY'
,\n 'ctrlKey',\n 'altKey',\n 'shiftKey',\n 'metaKey',\n 'button',
\n 'relatedTarget',\n // DOM Level 3\n 'buttons',\n // PointerEvent\
n 'pointerId',\n 'width',\n 'height',\n 'pressure',\n 'tiltX',\n
'tiltY',\n 'pointerType',\n 'hwTimestamp',\n 'isPrimary',\n // ev
ent instance\n 'type',\n 'target',\n 'currentTarget',\n 'which',\n
'pageX',\n 'pageY',\n 'timeStamp',\n // gesture addons\n 'preventT
ap',\n 'tapPrevented',\n '_source'\n ];\n\n var CLONE_DEFAULTS = [\n
// MouseEvent\n false,\n false,\n null,\n null,\n 0,\n 0,\n
0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null,\n
// DOM Level 3\n 0,\n // PointerEvent\n 0,\n 0,\n 0,\n 0,\
n 0,\n 0,\n '',\n 0,\n false,\n // event instance\n '',\n
null,\n null,\n 0,\n 0,\n 0,\n 0,\n function(){},\n false
\n ];\n\n var HAS_SVG_INSTANCE = (typeof SVGElementInstance !== 'undefined');\
n\n var eventFactory = scope.eventFactory;\n\n /**\n * This module is for no
rmalizing events. Mouse and Touch events will be\n * collected here, and fire
PointerEvents that have the same semantics, no\n * matter the source.\n * Ev
ents fired:\n * - pointerdown: a pointing is added\n * - pointerup: a po
inter is removed\n * - pointermove: a pointer is moved\n * - pointerover
: a pointer crosses into an element\n * - pointerout: a pointer leaves an el
ement\n * - pointercancel: a pointer will no longer generate events\n */\n
var dispatcher = {\n pointermap: new scope.PointerMap(),\n eventMap: Obj
ect.create(null),\n // Scope objects for native events.\n // This exists f
or ease of testing.\n eventSources: Object.create(null),\n eventSourceList
: [],\n gestures: [],\n // map gesture event -> {listeners: int, index: ge
stures[int]}\n dependencyMap: {\n // make sure down and up are in the ma
p to trigger \"register\"\n down: {listeners: 0, index: -1},\n up: {li
steners: 0, index: -1}\n },\n gestureQueue: [],\n /**\n * Add a new
event source that will generate pointer events.\n *\n * `inSource` must
contain an array of event names named `events`, and\n * functions with the
names specified in the `events` array.\n * @param {string} name A name for t
he event source\n * @param {Object} source A new source of platform events.\
n */\n registerSource: function(name, source) {\n var s = source;\n
var newEvents = s.events;\n if (newEvents) {\n newEvents.forEac
h(function(e) {\n if (s[e]) {\n this.eventMap[e] = s[e].bind
(s);\n }\n }, this);\n this.eventSources[name] = s;\n
this.eventSourceList.push(s);\n }\n },\n registerGesture: functio
n(name, source) {\n var obj = Object.create(null);\n obj.listeners = 0
;\n obj.index = this.gestures.length;\n for (var i = 0, g; i < source.
exposes.length; i++) {\n g = source.exposes[i].toLowerCase();\n th
is.dependencyMap[g] = obj;\n }\n this.gestures.push(source);\n },\n
register: function(element, initial) {\n var l = this.eventSourceList.l
ength;\n for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++
) {\n // call eventsource register\n es.register.call(es, element,
initial);\n }\n },\n unregister: function(element) {\n var l =
this.eventSourceList.length;\n for (var i = 0, es; (i < l) && (es = this.ev
entSourceList[i]); i++) {\n // call eventsource register\n es.unre
gister.call(es, element);\n }\n },\n // EVENTS\n down: function(in
Event) {\n this.fireEvent('down', inEvent);\n },\n move: function(inE
vent) {\n // pipe move events into gesture queue directly\n inEvent.ty
pe = 'move';\n this.fillGestureQueue(inEvent);\n },\n up: function(in
Event) {\n this.fireEvent('up', inEvent);\n },\n cancel: function(inE
vent) {\n inEvent.tapPrevented = true;\n this.fireEvent('up', inEvent)
;\n },\n // LISTENER LOGIC\n eventHandler: function(inEvent) {\n /
/ This is used to prevent multiple dispatch of events from\n // platform ev
ents. This can happen when two elements in different scopes\n // are set up
to create pointer events, which is relevant to Shadow DOM.\n\n // TODO(dfr
eedm): make this check more granular, allow for minimal event generation\n
// e.g inEvent._handledByPG['tap'] and inEvent._handledByPG['track'], etc\n
if (inEvent._handledByPG) {\n return;\n }\n var type = inEvent
.type;\n var fn = this.eventMap && this.eventMap[type];\n if (fn) {\n
fn(inEvent);\n }\n inEvent._handledByPG = true;\n },\n //
set up event listeners\n listen: function(target, events) {\n for (var
i = 0, l = events.length, e; (i < l) && (e = events[i]); i++) {\n this.ad
dEvent(target, e);\n }\n },\n // remove event listeners\n unlisten
: function(target, events) {\n for (var i = 0, l = events.length, e; (i < l
) && (e = events[i]); i++) {\n this.removeEvent(target, e);\n }\n
},\n addEvent: function(target, eventName) {\n target.addEventListener(
eventName, this.boundHandler);\n },\n removeEvent: function(target, eventN
ame) {\n target.removeEventListener(eventName, this.boundHandler);\n },\
n // EVENT CREATION AND TRACKING\n /**\n * Creates a new Event of type
`inType`, based on the information in\n * `inEvent`.\n *\n * @param
{string} inType A string representing the type of event to create\n * @para
m {Event} inEvent A platform event with a target\n * @return {Event} A Point
erEvent of type `inType`\n */\n makeEvent: function(inType, inEvent) {\n
var e = eventFactory.makePointerEvent(inType, inEvent);\n e.preventDef
ault = inEvent.preventDefault;\n e.tapPrevented = inEvent.tapPrevented;\n
e._target = e._target || inEvent.target;\n return e;\n },\n // ma
ke and dispatch an event in one call\n fireEvent: function(inType, inEvent) {
\n var e = this.makeEvent(inType, inEvent);\n return this.dispatchEven
t(e);\n },\n /**\n * Returns a snapshot of inEvent, with writable prop
erties.\n *\n * @param {Event} inEvent An event that contains properties
to copy.\n * @return {Object} An object containing shallow copies of `inEve
nt`'s\n * properties.\n */\n cloneEvent: function(inEvent) {\n
var eventCopy = Object.create(null), p;\n for (var i = 0; i < CLONE_PROPS
.length; i++) {\n p = CLONE_PROPS[i];\n eventCopy[p] = inEvent[p]
|| CLONE_DEFAULTS[i];\n // Work around SVGInstanceElement shadow tree\n
// Return the <use> element that is represented by the instance for Safari
, Chrome, IE.\n // This is the behavior implemented by Firefox.\n
if (p === 'target' || p === 'relatedTarget') {\n if (HAS_SVG_INSTANCE &
& eventCopy[p] instanceof SVGElementInstance) {\n eventCopy[p] = even
tCopy[p].correspondingUseElement;\n }\n }\n }\n // kee
p the semantics of preventDefault\n eventCopy.preventDefault = function() {
\n inEvent.preventDefault();\n };\n return eventCopy;\n },\n
/**\n * Dispatches the event to its target.\n *\n * @param {Even
t} inEvent The event to be dispatched.\n * @return {Boolean} True if an even
t handler returns true, false otherwise.\n */\n dispatchEvent: function(i
nEvent) {\n var t = inEvent._target;\n if (t) {\n t.dispatchEve
nt(inEvent);\n // clone the event for the gesture system to process\n
// clone after dispatch to pick up gesture prevention code\n var clon
e = this.cloneEvent(inEvent);\n clone.target = t;\n this.fillGestu
reQueue(clone);\n }\n },\n gestureTrigger: function() {\n // pro
cess the gesture queue\n for (var i = 0, e; i < this.gestureQueue.length; i
++) {\n e = this.gestureQueue[i];\n for (var j = 0, g, fn; j < thi
s.gestures.length; j++) {\n g = this.gestures[j];\n fn = g[e.t
ype];\n if (g.enabled && fn) {\n fn.call(g, e);\n }
\n }\n }\n this.gestureQueue.length = 0;\n },\n fillGestu
reQueue: function(ev) {\n // only trigger the gesture queue once\n if
(!this.gestureQueue.length) {\n requestAnimationFrame(this.boundGestureTr
igger);\n }\n this.gestureQueue.push(ev);\n }\n };\n dispatcher.b
oundHandler = dispatcher.eventHandler.bind(dispatcher);\n dispatcher.boundGestu
reTrigger = dispatcher.gestureTrigger.bind(dispatcher);\n scope.dispatcher = di
spatcher;\n\n /**\n * Listen for `gesture` on `node` with the `handler` funct
ion\n *\n * If `handler` is the first listener for `gesture`, the underlying
gesture recognizer is then enabled.\n *\n * @param {Element} node\n * @pa
ram {string} gesture\n * @return Boolean `gesture` is a valid gesture\n */\n
scope.activateGesture = function(node, gesture) {\n var g = gesture.toLower
Case();\n var dep = dispatcher.dependencyMap[g];\n if (dep) {\n var r
ecognizer = dispatcher.gestures[dep.index];\n if (dep.listeners === 0) {\n
if (recognizer) {\n recognizer.enabled = true;\n }\n
}\n dep.listeners++;\n if (!node._pgListeners) {\n dispatcher.
register(node);\n node._pgListeners = 0;\n }\n // TODO(dfreedm)
: re-evaluate bookkeeping to avoid using attributes\n if (recognizer) {\n
var touchAction = recognizer.defaultActions && recognizer.defaultActions[g
];\n var actionNode;\n switch(node.nodeType) {\n case Nod
e.ELEMENT_NODE:\n actionNode = node;\n break;\n cas
e Node.DOCUMENT_FRAGMENT_NODE:\n actionNode = node.host;\n b
reak;\n default:\n actionNode = null;\n break;\n
}\n if (touchAction && actionNode && !actionNode.hasAttribute('touch
-action')) {\n actionNode.setAttribute('touch-action', touchAction);\n
}\n }\n node._pgListeners++;\n }\n return Boolean(dep);\n
};\n\n /**\n *\n * Listen for `gesture` from `node` with `handler` functi
on.\n *\n * @param {Element} node\n * @param {string} gesture\n * @param
{Function} handler\n * @param {Boolean} capture\n */\n scope.addEventListe
ner = function(node, gesture, handler, capture) {\n if (handler) {\n sco
pe.activateGesture(node, gesture);\n node.addEventListener(gesture, handler
, capture);\n }\n };\n\n /**\n * Tears down the gesture configuration for
`node`\n *\n * If `handler` is the last listener for `gesture`, the underly
ing gesture recognizer is disabled.\n *\n * @param {Element} node\n * @par
am {string} gesture\n * @return Boolean `gesture` is a valid gesture\n */\n
scope.deactivateGesture = function(node, gesture) {\n var g = gesture.toLowe
rCase();\n var dep = dispatcher.dependencyMap[g];\n if (dep) {\n if (
dep.listeners > 0) {\n dep.listeners--;\n }\n if (dep.listeners
=== 0) {\n var recognizer = dispatcher.gestures[dep.index];\n if
(recognizer) {\n recognizer.enabled = false;\n }\n }\n
if (node._pgListeners > 0) {\n node._pgListeners--;\n }\n if (
node._pgListeners === 0) {\n dispatcher.unregister(node);\n }\n }
\n return Boolean(dep);\n };\n\n /**\n * Stop listening for `gesture` fro
m `node` with `handler` function.\n *\n * @param {Element} node\n * @param
{string} gesture\n * @param {Function} handler\n * @param {Boolean} capture
\n */\n scope.removeEventListener = function(node, gesture, handler, capture)
{\n if (handler) {\n scope.deactivateGesture(node, gesture);\n nod
e.removeEventListener(gesture, handler, capture);\n }\n };\n})(window.Polyme
rGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All right
s reserved.\n * This code may only be used under the BSD style license found at
http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be foun
d at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors m
ay be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by
Google as part of the polymer project is also\n * subject to an additional IP r
ights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function (sco
pe) {\n var dispatcher = scope.dispatcher;\n var pointermap = dispatcher.point
ermap;\n // radius around touchend that swallows mouse events\n var DEDUP_DIST
= 25;\n\n var WHICH_TO_BUTTONS = [0, 1, 4, 2];\n\n var HAS_BUTTONS = false;\n
try {\n HAS_BUTTONS = new MouseEvent('test', {buttons: 1}).buttons === 1;\n
} catch (e) {}\n\n // handler block for native mouse events\n var mouseEvent
s = {\n POINTER_ID: 1,\n POINTER_TYPE: 'mouse',\n events: [\n 'mou
sedown',\n 'mousemove',\n 'mouseup'\n ],\n exposes: [\n 'do
wn',\n 'up',\n 'move'\n ],\n register: function(target) {\n
dispatcher.listen(target, this.events);\n },\n unregister: function(targe
t) {\n dispatcher.unlisten(target, this.events);\n },\n lastTouches:
[],\n // collide with the global mouse listener\n isEventSimulatedFromTouc
h: function(inEvent) {\n var lts = this.lastTouches;\n var x = inEvent
.clientX, y = inEvent.clientY;\n for (var i = 0, l = lts.length, t; i < l &
& (t = lts[i]); i++) {\n // simulated mouse events will be swallowed near
a primary touchend\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);
\n if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) {\n return true;\n
}\n }\n },\n prepareEvent: function(inEvent) {\n var e =
dispatcher.cloneEvent(inEvent);\n e.pointerId = this.POINTER_ID;\n e.i
sPrimary = true;\n e.pointerType = this.POINTER_TYPE;\n e._source = 'm
ouse';\n if (!HAS_BUTTONS) {\n e.buttons = WHICH_TO_BUTTONS[e.which]
|| 0;\n }\n return e;\n },\n mousedown: function(inEvent) {\n
if (!this.isEventSimulatedFromTouch(inEvent)) {\n var p = pointermap.
has(this.POINTER_ID);\n // TODO(dfreedman) workaround for some elements n
ot sending mouseup\n // http://crbug/149091\n if (p) {\n
this.mouseup(inEvent);\n }\n var e = this.prepareEvent(inEvent);\n
e.target = scope.findTarget(inEvent);\n pointermap.set(this.POINT
ER_ID, e.target);\n dispatcher.down(e);\n }\n },\n mousemove:
function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n
var target = pointermap.get(this.POINTER_ID);\n if (target) {\n
var e = this.prepareEvent(inEvent);\n e.target = target;\n
// handle case where we missed a mouseup\n if (e.buttons === 0) {\n
dispatcher.cancel(e);\n this.cleanupMouse();\n } el
se {\n dispatcher.move(e);\n }\n }\n }\n },\n
mouseup: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEv
ent)) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget =
scope.findTarget(inEvent);\n e.target = pointermap.get(this.POINTER_ID);\
n dispatcher.up(e);\n this.cleanupMouse();\n }\n },\n c
leanupMouse: function() {\n pointermap['delete'](this.POINTER_ID);\n }\n
};\n\n scope.mouseEvents = mouseEvents;\n})(window.PolymerGestures);\n","/*\n
* Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This
code may only be used under the BSD style license found at http://polymer.githu
b.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.
github.io/AUTHORS.txt\n * The complete set of contributors may be found at http:
//polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of t
he polymer project is also\n * subject to an additional IP rights grant found at
http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatch
er = scope.dispatcher;\n var allShadows = scope.targetFinding.allShadows.bind(s
cope.targetFinding);\n var pointermap = dispatcher.pointermap;\n var touchMap
= Array.prototype.map.call.bind(Array.prototype.map);\n // This should be long
enough to ignore compat mouse events made by touch\n var DEDUP_TIMEOUT = 2500;\
n var CLICK_COUNT_TIMEOUT = 200;\n var HYSTERESIS = 20;\n var ATTRIB = 'touch
-action';\n // TODO(dfreedm): disable until http://crbug.com/399765 is resolved
\n // var HAS_TOUCH_ACTION = ATTRIB in document.head.style;\n var HAS_TOUCH_AC
TION = false;\n\n // handler block for native touch events\n var touchEvents =
{\n events: [\n 'touchstart',\n 'touchmove',\n 'touchend',\n
'touchcancel'\n ],\n exposes: [\n 'down',\n 'up',\n 'm
ove'\n ],\n register: function(target, initial) {\n if (initial) {\n
return;\n }\n dispatcher.listen(target, this.events);\n },\n
unregister: function(target) {\n dispatcher.unlisten(target, this.event
s);\n },\n scrollTypes: {\n EMITTER: 'none',\n XSCROLLER: 'pan-x
',\n YSCROLLER: 'pan-y',\n },\n touchActionToScrollType: function(tou
chAction) {\n var t = touchAction;\n var st = this.scrollTypes;\n
if (t === st.EMITTER) {\n return 'none';\n } else if (t === st.XSCR
OLLER) {\n return 'X';\n } else if (t === st.YSCROLLER) {\n r
eturn 'Y';\n } else {\n return 'XY';\n }\n },\n POINTER_T
YPE: 'touch',\n firstTouch: null,\n isPrimaryTouch: function(inTouch) {\n
return this.firstTouch === inTouch.identifier;\n },\n setPrimaryTouch
: function(inTouch) {\n // set primary touch if there no pointers, or the o
nly pointer is the mouse\n if (pointermap.pointers() === 0 || (pointermap.p
ointers() === 1 && pointermap.has(1))) {\n this.firstTouch = inTouch.iden
tifier;\n this.firstXY = {X: inTouch.clientX, Y: inTouch.clientY};\n
this.scrolling = null;\n this.cancelResetClickCount();\n }\n }
,\n removePrimaryPointer: function(inPointer) {\n if (inPointer.isPrimar
y) {\n this.firstTouch = null;\n this.firstXY = null;\n thi
s.resetClickCount();\n }\n },\n clickCount: 0,\n resetId: null,\n
resetClickCount: function() {\n var fn = function() {\n this.clic
kCount = 0;\n this.resetId = null;\n }.bind(this);\n this.reset
Id = setTimeout(fn, CLICK_COUNT_TIMEOUT);\n },\n cancelResetClickCount: fu
nction() {\n if (this.resetId) {\n clearTimeout(this.resetId);\n
}\n },\n typeToButtons: function(type) {\n var ret = 0;\n if (
type === 'touchstart' || type === 'touchmove') {\n ret = 1;\n }\n
return ret;\n },\n findTarget: function(touch, id) {\n if (this.cu
rrentTouchEvent.type === 'touchstart') {\n if (this.isPrimaryTouch(touch)
) {\n var fastPath = {\n clientX: touch.clientX,\n
clientY: touch.clientY,\n path: this.currentTouchEvent.path,\n
target: this.currentTouchEvent.target\n };\n return sco
pe.findTarget(fastPath);\n } else {\n return scope.findTarget(to
uch);\n }\n }\n // reuse target we found in touchstart\n r
eturn pointermap.get(id);\n },\n touchToPointer: function(inTouch) {\n
var cte = this.currentTouchEvent;\n var e = dispatcher.cloneEvent(inTouch
);\n // Spec specifies that pointerId 1 is reserved for Mouse.\n // To
uch identifiers can start at 0.\n // Add 2 to the touch identifier for comp
atibility.\n var id = e.pointerId = inTouch.identifier + 2;\n e.target
= this.findTarget(inTouch, id);\n e.bubbles = true;\n e.cancelable =
true;\n e.detail = this.clickCount;\n e.buttons = this.typeToButtons(c
te.type);\n e.width = inTouch.webkitRadiusX || inTouch.radiusX || 0;\n
e.height = inTouch.webkitRadiusY || inTouch.radiusY || 0;\n e.pressure = i
nTouch.webkitForce || inTouch.force || 0.5;\n e.isPrimary = this.isPrimaryT
ouch(inTouch);\n e.pointerType = this.POINTER_TYPE;\n e._source = 'tou
ch';\n // forward touch preventDefaults\n var self = this;\n e.pr
eventDefault = function() {\n self.scrolling = false;\n self.first
XY = null;\n cte.preventDefault();\n };\n return e;\n },\n
processTouches: function(inEvent, inFunction) {\n var tl = inEvent.change
dTouches;\n this.currentTouchEvent = inEvent;\n for (var i = 0, t, p;
i < tl.length; i++) {\n t = tl[i];\n p = this.touchToPointer(t);\n
if (inEvent.type === 'touchstart') {\n pointermap.set(p.pointer
Id, p.target);\n }\n if (pointermap.has(p.pointerId)) {\n
inFunction.call(this, p);\n }\n if (inEvent.type === 'touchend' |
| inEvent._cancel) {\n this.cleanUpPointer(p);\n }\n }\n
},\n // For single axis scrollers, determines whether the element should emi
t\n // pointer events or behave as a scroller\n shouldScroll: function(inE
vent) {\n if (this.firstXY) {\n var ret;\n var touchAction =
scope.targetFinding.findTouchAction(inEvent);\n var scrollAxis = this.tou
chActionToScrollType(touchAction);\n if (scrollAxis === 'none') {\n
// this element is a touch-action: none, should never scroll\n ret
= false;\n } else if (scrollAxis === 'XY') {\n // this element s
hould always scroll\n ret = true;\n } else {\n var t =
inEvent.changedTouches[0];\n // check the intended scroll axis, and oth
er axis\n var a = scrollAxis;\n var oa = scrollAxis === 'Y' ?
'X' : 'Y';\n var da = Math.abs(t['client' + a] - this.firstXY[a]);\n
var doa = Math.abs(t['client' + oa] - this.firstXY[oa]);\n // if
delta in the scroll axis > delta other axis, scroll instead of\n // ma
king events\n ret = da >= doa;\n }\n return ret;\n }
\n },\n findTouch: function(inTL, inId) {\n for (var i = 0, l = inTL.
length, t; i < l && (t = inTL[i]); i++) {\n if (t.identifier === inId) {\
n return true;\n }\n }\n },\n // In some instances, a
touchstart can happen without a touchend. This\n // leaves the pointermap in
a broken state.\n // Therefore, on every touchstart, we remove the touches t
hat did not fire a\n // touchend event.\n // To keep state globally consis
tent, we fire a\n // pointercancel for this \"abandoned\" touch\n vacuumTo
uches: function(inEvent) {\n var tl = inEvent.touches;\n // pointermap
.pointers() should be < tl.length here, as the touchstart has not\n // been
processed yet.\n if (pointermap.pointers() >= tl.length) {\n var d
= [];\n pointermap.forEach(function(value, key) {\n // Never rem
ove pointerId == 1, which is mouse.\n // Touch identifiers are 2 smalle
r than their pointerId, which is the\n // index in pointermap.\n
if (key !== 1 && !this.findTouch(tl, key - 2)) {\n var p = value;\
n d.push(p);\n }\n }, this);\n d.forEach(funct
ion(p) {\n this.cancel(p);\n pointermap.delete(p.pointerId);\n
});\n }\n },\n touchstart: function(inEvent) {\n this.va
cuumTouches(inEvent);\n this.setPrimaryTouch(inEvent.changedTouches[0]);\n
this.dedupSynthMouse(inEvent);\n if (!this.scrolling) {\n this.
clickCount++;\n this.processTouches(inEvent, this.down);\n }\n },
\n down: function(inPointer) {\n dispatcher.down(inPointer);\n },\n
touchmove: function(inEvent) {\n if (HAS_TOUCH_ACTION) {\n // touc
hevent.cancelable == false is sent when the page is scrolling under native Touch
Action in Chrome 36\n // https://groups.google.com/a/chromium.org/d/msg/
input-dev/wHnyukcYBcA/b9kmtwM1jJQJ\n if (inEvent.cancelable) {\n
this.processTouches(inEvent, this.move);\n }\n } else {\n if
(!this.scrolling) {\n if (this.scrolling === null && this.shouldScroll
(inEvent)) {\n this.scrolling = true;\n } else {\n
this.scrolling = false;\n inEvent.preventDefault();\n th
is.processTouches(inEvent, this.move);\n }\n } else if (this.fir
stXY) {\n var t = inEvent.changedTouches[0];\n var dx = t.clie
ntX - this.firstXY.X;\n var dy = t.clientY - this.firstXY.Y;\n
var dd = Math.sqrt(dx * dx + dy * dy);\n if (dd >= HYSTERESIS) {\n
this.touchcancel(inEvent);\n this.scrolling = true;\n
this.firstXY = null;\n }\n }\n }\n },\n move: fun
ction(inPointer) {\n dispatcher.move(inPointer);\n },\n touchend: fun
ction(inEvent) {\n this.dedupSynthMouse(inEvent);\n this.processTouche
s(inEvent, this.up);\n },\n up: function(inPointer) {\n inPointer.rel
atedTarget = scope.findTarget(inPointer);\n dispatcher.up(inPointer);\n
},\n cancel: function(inPointer) {\n dispatcher.cancel(inPointer);\n
},\n touchcancel: function(inEvent) {\n inEvent._cancel = true;\n t
his.processTouches(inEvent, this.cancel);\n },\n cleanUpPointer: function(
inPointer) {\n pointermap['delete'](inPointer.pointerId);\n this.remov
ePrimaryPointer(inPointer);\n },\n // prevent synth mouse events from crea
ting pointer events\n dedupSynthMouse: function(inEvent) {\n var lts = s
cope.mouseEvents.lastTouches;\n var t = inEvent.changedTouches[0];\n /
/ only the primary finger will synth mouse events\n if (this.isPrimaryTouch
(t)) {\n // remember x/y of last touch\n var lt = {x: t.clientX, y
: t.clientY};\n lts.push(lt);\n var fn = (function(lts, lt){\n
var i = lts.indexOf(lt);\n if (i > -1) {\n lts.splice(
i, 1);\n }\n }).bind(null, lts, lt);\n setTimeout(fn, DED
UP_TIMEOUT);\n }\n }\n };\n\n scope.touchEvents = touchEvents;\n})(win
dow.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors.
All rights reserved.\n * This code may only be used under the BSD style license
found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors m
ay be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of cont
ributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dist
ributed by Google as part of the polymer project is also\n * subject to an addit
ional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(fun
ction(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = dispatc
her.pointermap;\n var HAS_BITMAP_TYPE = window.MSPointerEvent && typeof window.
MSPointerEvent.MSPOINTER_TYPE_MOUSE === 'number';\n var msEvents = {\n event
s: [\n 'MSPointerDown',\n 'MSPointerMove',\n 'MSPointerUp',\n
'MSPointerCancel',\n ],\n register: function(target) {\n if (target
!== document) {\n return;\n }\n dispatcher.listen(target, this
.events);\n },\n unregister: function(target) {\n dispatcher.unlisten
(target, this.events);\n },\n POINTER_TYPES: [\n '',\n 'unavaila
ble',\n 'touch',\n 'pen',\n 'mouse'\n ],\n prepareEvent: fu
nction(inEvent) {\n var e = inEvent;\n e = dispatcher.cloneEvent(inEve
nt);\n if (HAS_BITMAP_TYPE) {\n e.pointerType = this.POINTER_TYPES[i
nEvent.pointerType];\n }\n e._source = 'ms';\n return e;\n },\
n cleanup: function(id) {\n pointermap['delete'](id);\n },\n MSPoi
nterDown: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n
e.target = scope.findTarget(inEvent);\n pointermap.set(inEvent.pointerId, e
.target);\n dispatcher.down(e);\n },\n MSPointerMove: function(inEven
t) {\n var e = this.prepareEvent(inEvent);\n e.target = pointermap.get
(e.pointerId);\n dispatcher.move(e);\n },\n MSPointerUp: function(inE
vent) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = scop
e.findTarget(inEvent);\n e.target = pointermap.get(e.pointerId);\n dis
patcher.up(e);\n this.cleanup(inEvent.pointerId);\n },\n MSPointerCan
cel: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.rel
atedTarget = scope.findTarget(inEvent);\n e.target = pointermap.get(e.point
erId);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerId);\n
}\n };\n\n scope.msEvents = msEvents;\n})(window.PolymerGestures);\n","/*\n *
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This c
ode may only be used under the BSD style license found at http://polymer.github.
io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.gi
thub.io/AUTHORS.txt\n * The complete set of contributors may be found at http://
polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the
polymer project is also\n * subject to an additional IP rights grant found at h
ttp://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatcher
= scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n var pointerEv
ents = {\n events: [\n 'pointerdown',\n 'pointermove',\n 'poin
terup',\n 'pointercancel'\n ],\n prepareEvent: function(inEvent) {\n
var e = dispatcher.cloneEvent(inEvent);\n e._source = 'pointer';\n
return e;\n },\n register: function(target) {\n if (target !== docu
ment) {\n return;\n }\n dispatcher.listen(target, this.events);
\n },\n unregister: function(target) {\n dispatcher.unlisten(target,
this.events);\n },\n cleanup: function(id) {\n pointermap['delete'](i
d);\n },\n pointerdown: function(inEvent) {\n var e = this.prepareEve
nt(inEvent);\n e.target = scope.findTarget(inEvent);\n pointermap.set(
e.pointerId, e.target);\n dispatcher.down(e);\n },\n pointermove: fun
ction(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.target = po
intermap.get(e.pointerId);\n dispatcher.move(e);\n },\n pointerup: fu
nction(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.relatedTar
get = scope.findTarget(inEvent);\n e.target = pointermap.get(e.pointerId);\
n dispatcher.up(e);\n this.cleanup(inEvent.pointerId);\n },\n po
intercancel: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n
e.relatedTarget = scope.findTarget(inEvent);\n e.target = pointermap.get
(e.pointerId);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerI
d);\n }\n };\n\n scope.pointerEvents = pointerEvents;\n})(window.PolymerGes
tures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights re
served.\n * This code may only be used under the BSD style license found at http
://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at
http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may b
e found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Goo
gle as part of the polymer project is also\n * subject to an additional IP right
s grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This modul
e contains the handlers for native platform events.\n * From here, the dispatche
r is called to create unified pointer events.\n * Included are touch events (v1)
, mouse events, and MSPointerEvents.\n */\n(function(scope) {\n var dispatcher
= scope.dispatcher;\n var nav = window.navigator;\n\n if (window.PointerEvent)
{\n dispatcher.registerSource('pointer', scope.pointerEvents);\n } else if
(nav.msPointerEnabled) {\n dispatcher.registerSource('ms', scope.msEvents);\n
} else {\n dispatcher.registerSource('mouse', scope.mouseEvents);\n if (
window.ontouchstart !== undefined) {\n dispatcher.registerSource('touch', s
cope.touchEvents);\n /*\n * NOTE: an empty touch listener on body wil
l reactivate nodes imported from templates with touch listeners\n * Removi
ng it will re-break the nodes\n *\n * Work around for https://bugs.w
ebkit.org/show_bug.cgi?id=135628\n */\n var isSafari = nav.userAgent.
match('Safari') && !nav.userAgent.match('Chrome');\n if (isSafari) {\n
document.body.addEventListener('touchstart', function(){});\n }\n }\n
}\n dispatcher.register(document, true);\n})(window.PolymerGestures);\n","/*\
n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * Thi
s code may only be used under the BSD style license found at http://polymer.gith
ub.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer
.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http
://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of
the polymer project is also\n * subject to an additional IP rights grant found a
t http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This event denotes the be
ginning of a series of tracking events.\n *\n * @module PointerGestures\n * @sub
module Events\n * @class trackstart\n */\n/**\n * Pixels moved in the x directio
n since trackstart.\n * @type Number\n * @property dx\n */\n/**\n * Pixes moved
in the y direction since trackstart.\n * @type Number\n * @property dy\n */\n/**
\n * Pixels moved in the x direction since the last track.\n * @type Number\n *
@property ddx\n */\n/**\n * Pixles moved in the y direction since the last track
.\n * @type Number\n * @property ddy\n */\n/**\n * The clientX position of the t
rack gesture.\n * @type Number\n * @property clientX\n */\n/**\n * The clientY p
osition of the track gesture.\n * @type Number\n * @property clientY\n */\n/**\n
* The pageX position of the track gesture.\n * @type Number\n * @property pageX
\n */\n/**\n * The pageY position of the track gesture.\n * @type Number\n * @pr
operty pageY\n */\n/**\n * The screenX position of the track gesture.\n * @type
Number\n * @property screenX\n */\n/**\n * The screenY position of the track ges
ture.\n * @type Number\n * @property screenY\n */\n/**\n * The last x axis direc
tion of the pointer.\n * @type Number\n * @property xDirection\n */\n/**\n * The
last y axis direction of the pointer.\n * @type Number\n * @property yDirection
\n */\n/**\n * A shared object between all tracking events.\n * @type Object\n *
@property trackInfo\n */\n/**\n * The element currently under the pointer.\n *
@type Element\n * @property relatedTarget\n */\n/**\n * The type of pointer that
make the track gesture.\n * @type String\n * @property pointerType\n */\n/**\n
*\n * This event fires for all pointer movement being tracked.\n *\n * @class tr
ack\n * @extends trackstart\n */\n/**\n * This event fires when the pointer is n
o longer being tracked.\n *\n * @class trackend\n * @extends trackstart\n */\n\n
(function(scope) {\n var dispatcher = scope.dispatcher;\n var eventFactory
= scope.eventFactory;\n var pointermap = new scope.PointerMap();\n var track
= {\n events: [\n 'down',\n 'move',\n 'up',\n ],\n
exposes: [\n 'trackstart',\n 'track',\n 'trackx',\n 'track
y',\n 'trackend'\n ],\n defaultActions: {\n 'track': 'none',\
n 'trackx': 'pan-y',\n 'tracky': 'pan-x'\n },\n WIGGLE_THRES
HOLD: 4,\n clampDir: function(inDelta) {\n return inDelta > 0 ? 1 : -1
;\n },\n calcPositionDelta: function(inA, inB) {\n var x = 0, y =
0;\n if (inA && inB) {\n x = inB.pageX - inA.pageX;\n y =
inB.pageY - inA.pageY;\n }\n return {x: x, y: y};\n },\n fir
eTrack: function(inType, inEvent, inTrackingData) {\n var t = inTrackingDa
ta;\n var d = this.calcPositionDelta(t.downEvent, inEvent);\n var dd
= this.calcPositionDelta(t.lastMoveEvent, inEvent);\n if (dd.x) {\n
t.xDirection = this.clampDir(dd.x);\n } else if (inType === 'trackx') {
\n return;\n }\n if (dd.y) {\n t.yDirection = this.c
lampDir(dd.y);\n } else if (inType === 'tracky') {\n return;\n
}\n var gestureProto = {\n bubbles: true,\n cancelable:
true,\n trackInfo: t.trackInfo,\n relatedTarget: inEvent.relate
dTarget,\n pointerType: inEvent.pointerType,\n pointerId: inEven
t.pointerId,\n _source: 'track'\n };\n if (inType !== 'track
y') {\n gestureProto.x = inEvent.x;\n gestureProto.dx = d.x;\n
gestureProto.ddx = dd.x;\n gestureProto.clientX = inEvent.clientX
;\n gestureProto.pageX = inEvent.pageX;\n gestureProto.screenX =
inEvent.screenX;\n gestureProto.xDirection = t.xDirection;\n }\n
if (inType !== 'trackx') {\n gestureProto.dy = d.y;\n gest
ureProto.ddy = dd.y;\n gestureProto.y = inEvent.y;\n gestureProt
o.clientY = inEvent.clientY;\n gestureProto.pageY = inEvent.pageY;\n
gestureProto.screenY = inEvent.screenY;\n gestureProto.yDirection =
t.yDirection;\n }\n var e = eventFactory.makeGestureEvent(inType, g
estureProto);\n t.downTarget.dispatchEvent(e);\n },\n down: functi
on(inEvent) {\n if (inEvent.isPrimary && (inEvent.pointerType === 'mouse'
? inEvent.buttons === 1 : true)) {\n var p = {\n downEvent: in
Event,\n downTarget: inEvent.target,\n trackInfo: {},\n
lastMoveEvent: null,\n xDirection: 0,\n yDirection: 0,
\n tracking: false\n };\n pointermap.set(inEvent.point
erId, p);\n }\n },\n move: function(inEvent) {\n var p = poi
ntermap.get(inEvent.pointerId);\n if (p) {\n if (!p.tracking) {\n
var d = this.calcPositionDelta(p.downEvent, inEvent);\n var
move = d.x * d.x + d.y * d.y;\n // start tracking only if finger moves
more than WIGGLE_THRESHOLD\n if (move > this.WIGGLE_THRESHOLD) {\n
p.tracking = true;\n p.lastMoveEvent = p.downEvent;\n
this.fireTrack('trackstart', inEvent, p);\n }\n }\n
if (p.tracking) {\n this.fireTrack('track', inEvent, p);\n
this.fireTrack('trackx', inEvent, p);\n this.fireTrack('tracky',
inEvent, p);\n }\n p.lastMoveEvent = inEvent;\n }\n },
\n up: function(inEvent) {\n var p = pointermap.get(inEvent.pointerId)
;\n if (p) {\n if (p.tracking) {\n this.fireTrack('track
end', inEvent, p);\n }\n pointermap.delete(inEvent.pointerId);\n
}\n }\n };\n dispatcher.registerGesture('track', track);\n })(win
dow.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors.
All rights reserved.\n * This code may only be used under the BSD style license
found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors m
ay be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of cont
ributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dist
ributed by Google as part of the polymer project is also\n * subject to an addit
ional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\
n * This event is fired when a pointer is held down for 200ms.\n *\n * @module P
ointerGestures\n * @submodule Events\n * @class hold\n */\n/**\n * Type of point
er that made the holding event.\n * @type String\n * @property pointerType\n */\
n/**\n * Screen X axis position of the held pointer\n * @type Number\n * @proper
ty clientX\n */\n/**\n * Screen Y axis position of the held pointer\n * @type Nu
mber\n * @property clientY\n */\n/**\n * Type of pointer that made the holding e
vent.\n * @type String\n * @property pointerType\n */\n/**\n * This event is fir
ed every 200ms while a pointer is held down.\n *\n * @class holdpulse\n * @exten
ds hold\n */\n/**\n * Milliseconds pointer has been held down.\n * @type Number\
n * @property holdTime\n */\n/**\n * This event is fired when a held pointer is
released or moved.\n *\n * @class release\n */\n\n(function(scope) {\n var disp
atcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var hold
= {\n // wait at least HOLD_DELAY ms between hold and pulse events\n HOLD
_DELAY: 200,\n // pointer can move WIGGLE_THRESHOLD pixels before not countin
g as a hold\n WIGGLE_THRESHOLD: 16,\n events: [\n 'down',\n 'mov
e',\n 'up',\n ],\n exposes: [\n 'hold',\n 'holdpulse',\n
'release'\n ],\n heldPointer: null,\n holdJob: null,\n pulse: fun
ction() {\n var hold = Date.now() - this.heldPointer.timeStamp;\n var
type = this.held ? 'holdpulse' : 'hold';\n this.fireHold(type, hold);\n
this.held = true;\n },\n cancel: function() {\n clearInterval(this.
holdJob);\n if (this.held) {\n this.fireHold('release');\n }\n
this.held = false;\n this.heldPointer = null;\n this.target = nul
l;\n this.holdJob = null;\n },\n down: function(inEvent) {\n if
(inEvent.isPrimary && !this.heldPointer) {\n this.heldPointer = inEvent;\
n this.target = inEvent.target;\n this.holdJob = setInterval(this.
pulse.bind(this), this.HOLD_DELAY);\n }\n },\n up: function(inEvent)
{\n if (this.heldPointer && this.heldPointer.pointerId === inEvent.pointerI
d) {\n this.cancel();\n }\n },\n move: function(inEvent) {\n
if (this.heldPointer && this.heldPointer.pointerId === inEvent.pointerId) {\
n var x = inEvent.clientX - this.heldPointer.clientX;\n var y = in
Event.clientY - this.heldPointer.clientY;\n if ((x * x + y * y) > this.WI
GGLE_THRESHOLD) {\n this.cancel();\n }\n }\n },\n fir
eHold: function(inType, inHoldTime) {\n var p = {\n bubbles: true,\n
cancelable: true,\n pointerType: this.heldPointer.pointerType,\n
pointerId: this.heldPointer.pointerId,\n x: this.heldPointer.clien
tX,\n y: this.heldPointer.clientY,\n _source: 'hold'\n };\n
if (inHoldTime) {\n p.holdTime = inHoldTime;\n }\n var e =
eventFactory.makeGestureEvent(inType, p);\n this.target.dispatchEvent(e);\n
}\n };\n dispatcher.registerGesture('hold', hold);\n})(window.PolymerGestu
res);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights rese
rved.\n * This code may only be used under the BSD style license found at http:/
/polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at h
ttp://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be
found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Googl
e as part of the polymer project is also\n * subject to an additional IP rights
grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This event i
s fired when a pointer quickly goes down and up, and is used to\n * denote activ
ation.\n *\n * Any gesture event can prevent the tap event from being created by
calling\n * `event.preventTap`.\n *\n * Any pointer event can prevent the tap b
y setting the `tapPrevented` property\n * on itself.\n *\n * @module PointerGest
ures\n * @submodule Events\n * @class tap\n */\n/**\n * X axis position of the t
ap.\n * @property x\n * @type Number\n */\n/**\n * Y axis position of the tap.\n
* @property y\n * @type Number\n */\n/**\n * Type of the pointer that made the
tap.\n * @property pointerType\n * @type String\n */\n(function(scope) {\n var
dispatcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var
pointermap = new scope.PointerMap();\n var tap = {\n events: [\n 'down'
,\n 'up'\n ],\n exposes: [\n 'tap'\n ],\n down: function(i
nEvent) {\n if (inEvent.isPrimary && !inEvent.tapPrevented) {\n poin
termap.set(inEvent.pointerId, {\n target: inEvent.target,\n bu
ttons: inEvent.buttons,\n x: inEvent.clientX,\n y: inEvent.cli
entY\n });\n }\n },\n shouldTap: function(e, downState) {\n
if (e.pointerType === 'mouse') {\n // only allow left click to tap for
mouse\n return downState.buttons === 1;\n }\n return !e.tapPre
vented;\n },\n up: function(inEvent) {\n var start = pointermap.get(i
nEvent.pointerId);\n if (start && this.shouldTap(inEvent, start)) {\n
// up.relatedTarget is target currently under finger\n var t = scope.ta
rgetFinding.LCA(start.target, inEvent.relatedTarget);\n if (t) {\n
var e = eventFactory.makeGestureEvent('tap', {\n bubbles: true,\n
cancelable: true,\n x: inEvent.clientX,\n y: in
Event.clientY,\n detail: inEvent.detail,\n pointerType: in
Event.pointerType,\n pointerId: inEvent.pointerId,\n altKe
y: inEvent.altKey,\n ctrlKey: inEvent.ctrlKey,\n metaKey:
inEvent.metaKey,\n shiftKey: inEvent.shiftKey,\n _source:
'tap'\n });\n t.dispatchEvent(e);\n }\n }\n p
ointermap.delete(inEvent.pointerId);\n }\n };\n // patch eventFactory to re
move id from tap's pointermap for preventTap calls\n eventFactory.preventTap =
function(e) {\n return function() {\n e.tapPrevented = true;\n poin
termap.delete(e.pointerId);\n };\n };\n dispatcher.registerGesture('tap', t
ap);\n})(window.PolymerGestures);\n","/*\n Copyright (C) 2013 Ariya Hidayat <ar
iya.hidayat@gmail.com>\n Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>
\n Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyright (C)
2012 Mathias Bynens <mathias@qiwi.be>\n Copyright (C) 2012 Joost-Wim Boekesteij
n <joost-wim@boekesteijn.nl>\n Copyright (C) 2012 Kris Kowal <kris.kowal@cixar.
com>\n Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n Copyright (C
) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n Copyright (C) 2011 Ariya Hi
dayat <ariya.hidayat@gmail.com>\n\n Redistribution and use in source and binary
forms, with or without\n modification, are permitted provided that the followi
ng conditions are met:\n\n * Redistributions of source code must retain the a
bove copyright\n notice, this list of conditions and the following disclaim
er.\n * Redistributions in binary form must reproduce the above copyright\n
notice, this list of conditions and the following disclaimer in the\n d
ocumentation and/or other materials provided with the distribution.\n\n THIS SO
FTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND AN
Y EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED W
ARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAI
MED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA,
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIA
BILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADV
ISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function (global) {\n 'use st
rict';\n\n var Token,\n TokenName,\n Syntax,\n Messages,
\n source,\n index,\n length,\n delegate,\n l
ookahead,\n state;\n\n Token = {\n BooleanLiteral: 1,\n
EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLiteral: 5,\n
NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral: 8\n
};\n\n TokenName = {};\n TokenName[Token.BooleanLiteral] = 'Boolean';\n
TokenName[Token.EOF] = '<end>';\n TokenName[Token.Identifier] = 'Identifier
';\n TokenName[Token.Keyword] = 'Keyword';\n TokenName[Token.NullLiteral]
= 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric';\n TokenName[Token
.Punctuator] = 'Punctuator';\n TokenName[Token.StringLiteral] = 'String';\n\n
Syntax = {\n ArrayExpression: 'ArrayExpression',\n BinaryExpre
ssion: 'BinaryExpression',\n CallExpression: 'CallExpression',\n C
onditionalExpression: 'ConditionalExpression',\n EmptyStatement: 'EmptySt
atement',\n ExpressionStatement: 'ExpressionStatement',\n Identifi
er: 'Identifier',\n Literal: 'Literal',\n LabeledStatement: 'Label
edStatement',\n LogicalExpression: 'LogicalExpression',\n MemberEx
pression: 'MemberExpression',\n ObjectExpression: 'ObjectExpression',\n
Program: 'Program',\n Property: 'Property',\n ThisExpression
: 'ThisExpression',\n UnaryExpression: 'UnaryExpression'\n };\n\n /
/ Error messages should be identical to V8.\n Messages = {\n Unexpecte
dToken: 'Unexpected token %0',\n UnknownLabel: 'Undefined label \\'%0\\'
',\n Redeclaration: '%0 \\'%1\\' has already been declared'\n };\n\n
// Ensure the condition is true, otherwise throw an error.\n // This is onl
y to have a better contract semantic, i.e. another safety net\n // to catch a
logic error. The condition shall be fulfilled in normal case.\n // Do NOT us
e this to enforce a certain condition on any user input.\n\n function assert(
condition, message) {\n if (!condition) {\n throw new Error('A
SSERT: ' + message);\n }\n }\n\n function isDecimalDigit(ch) {\n
return (ch >= 48 && ch <= 57); // 0..9\n }\n\n\n // 7.2 White Space
\n\n function isWhiteSpace(ch) {\n return (ch === 32) || // space\n
(ch === 9) || // tab\n (ch === 0xB) ||\n (c
h === 0xC) ||\n (ch === 0xA0) ||\n (ch >= 0x1680 && '\\u16
80\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\
\u200A\\u202F\\u205F\\u3000\\uFEFF'.indexOf(String.fromCharCode(ch)) > 0);\n
}\n\n // 7.3 Line Terminators\n\n function isLineTerminator(ch) {\n
return (ch === 10) || (ch === 13) || (ch === 0x2028) || (ch === 0x2029);\n }
\n\n // 7.6 Identifier Names and Identifiers\n\n function isIdentifierStar
t(ch) {\n return (ch === 36) || (ch === 95) || // $ (dollar) and _ (unde
rscore)\n (ch >= 65 && ch <= 90) || // A..Z\n (ch
>= 97 && ch <= 122); // a..z\n }\n\n function isIdentifierPart(ch
) {\n return (ch === 36) || (ch === 95) || // $ (dollar) and _ (undersco
re)\n (ch >= 65 && ch <= 90) || // A..Z\n (ch >= 9
7 && ch <= 122) || // a..z\n (ch >= 48 && ch <= 57);
// 0..9\n }\n\n // 7.6.1.1 Keywords\n\n function isKeyword(id) {\n
return (id === 'this')\n }\n\n // 7.4 Comments\n\n function skipWhi
tespace() {\n while (index < length && isWhiteSpace(source.charCodeAt(ind
ex))) {\n ++index;\n }\n }\n\n function getIdentifier() {
\n var start, ch;\n\n start = index++;\n while (index < len
gth) {\n ch = source.charCodeAt(index);\n if (isIdentifier
Part(ch)) {\n ++index;\n } else {\n bre
ak;\n }\n }\n\n return source.slice(start, index);\n
}\n\n function scanIdentifier() {\n var start, id, type;\n\n s
tart = index;\n\n id = getIdentifier();\n\n // There is no keyword
or literal with only one character.\n // Thus, it must be an identifier.
\n if (id.length === 1) {\n type = Token.Identifier;\n
} else if (isKeyword(id)) {\n type = Token.Keyword;\n } else i
f (id === 'null') {\n type = Token.NullLiteral;\n } else if (i
d === 'true' || id === 'false') {\n type = Token.BooleanLiteral;\n
} else {\n type = Token.Identifier;\n }\n\n return
{\n type: type,\n value: id,\n range: [start,
index]\n };\n }\n\n\n // 7.7 Punctuators\n\n function scanPunctu
ator() {\n var start = index,\n code = source.charCodeAt(index
),\n code2,\n ch1 = source[index],\n ch2;\n\n
switch (code) {\n\n // Check for most common single-character punct
uators.\n case 46: // . dot\n case 40: // ( open bracket\n
case 41: // ) close bracket\n case 59: // ; semicolon\n ca
se 44: // , comma\n case 123: // { open curly brace\n case 125:
// } close curly brace\n case 91: // [\n case 93: // ]\n
case 58: // :\n case 63: // ?\n ++index;\n
return {\n type: Token.Punctuator,\n value: String
.fromCharCode(code),\n range: [start, index]\n };\n\n
default:\n code2 = source.charCodeAt(index + 1);\n\n
// '=' (char #61) marks an assignment or comparison operator.\n if
(code2 === 61) {\n switch (code) {\n case 37: //
%\n case 38: // &\n case 42: // *:\n
case 43: // +\n case 45: // -\n case 47: //
/\n case 60: // <\n case 62: // >\n
case 124: // |\n index += 2;\n return
{\n type: Token.Punctuator,\n valu
e: String.fromCharCode(code) + String.fromCharCode(code2),\n
range: [start, index]\n };\n\n case 33: //
!\n case 61: // =\n index += 2;\n\n
// !== and ===\n if (source.charCodeAt(index) === 6
1) {\n ++index;\n }\n
return {\n type: Token.Punctuator,\n
value: source.slice(start, index),\n range: [start,
index]\n };\n default:\n b
reak;\n }\n }\n break;\n }\n\n
// Peek more characters.\n\n ch2 = source[index + 1];\n\n // Oth
er 2-character punctuators: && ||\n\n if (ch1 === ch2 && ('&|'.indexOf(ch
1) >= 0)) {\n index += 2;\n return {\n type
: Token.Punctuator,\n value: ch1 + ch2,\n range: [
start, index]\n };\n }\n\n if ('<>=!+-*%&|^/'.indexOf(c
h1) >= 0) {\n ++index;\n return {\n type: T
oken.Punctuator,\n value: ch1,\n range: [start, in
dex]\n };\n }\n\n throwError({}, Messages.UnexpectedTok
en, 'ILLEGAL');\n }\n\n // 7.8.3 Numeric Literals\n function scanNumeri
cLiteral() {\n var number, start, ch;\n\n ch = source[index];\n
assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n 'Nume
ric literal must start with a decimal digit or a decimal point');\n\n sta
rt = index;\n number = '';\n if (ch !== '.') {\n number
= source[index++];\n ch = source[index];\n\n // Hex numbe
r starts with '0x'.\n // Octal number starts with '0'.\n i
f (number === '0') {\n // decimal number starts with '0' such as
'09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\
n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n
}\n }\n\n while (isDecimalDigit(source.charCode
At(index))) {\n number += source[index++];\n }\n
ch = source[index];\n }\n\n if (ch === '.') {\n n
umber += source[index++];\n while (isDecimalDigit(source.charCodeAt(i
ndex))) {\n number += source[index++];\n }\n
ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n
number += source[index++];\n\n ch = source[index];\n
if (ch === '+' || ch === '-') {\n number += source[index++];\
n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n
while (isDecimalDigit(source.charCodeAt(index))) {\n
number += source[index++];\n }\n } else {\n
throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n
}\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n
throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n r
eturn {\n type: Token.NumericLiteral,\n value: parseFloat(
number),\n range: [start, index]\n };\n }\n\n // 7.8.4 S
tring Literals\n\n function scanStringLiteral() {\n var str = '', quot
e, start, ch, octal = false;\n\n quote = source[index];\n assert((
quote === '\\'' || quote === '\"'),\n 'String literal must starts wit
h a quote');\n\n start = index;\n ++index;\n\n while (index
< length) {\n ch = source[index++];\n\n if (ch === quote)
{\n quote = '';\n break;\n } else if (
ch === '\\\\') {\n ch = source[index++];\n if (!ch
|| !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n
case 'n':\n str += '\\n';\n
break;\n case 'r':\n str
+= '\\r';\n break;\n case 't':\n
str += '\\t';\n break;\n
case 'b':\n str += '\\b';\n b
reak;\n case 'f':\n str += '\\f';\n
break;\n case 'v':\n
str += '\\x0B';\n break;\n\n defau
lt:\n str += ch;\n break;\n
}\n } else {\n if (ch === '\\r'
&& source[index] === '\\n') {\n ++index;\n
}\n }\n } else if (isLineTerminator(ch.charCodeAt
(0))) {\n break;\n } else {\n str += ch
;\n }\n }\n\n if (quote !== '') {\n throwErr
or({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n return {\n
type: Token.StringLiteral,\n value: str,\n octal:
octal,\n range: [start, index]\n };\n }\n\n function is
IdentifierName(token) {\n return token.type === Token.Identifier ||\n
token.type === Token.Keyword ||\n token.type === Token.Boolea
nLiteral ||\n token.type === Token.NullLiteral;\n }\n\n functio
n advance() {\n var ch;\n\n skipWhitespace();\n\n if (index
>= length) {\n return {\n type: Token.EOF,\n
range: [index, index]\n };\n }\n\n ch = source.c
harCodeAt(index);\n\n // Very common: ( and ) and ;\n if (ch === 4
0 || ch === 41 || ch === 58) {\n return scanPunctuator();\n }\
n\n // String literal starts with single quote (#39) or double quote (#34
).\n if (ch === 39 || ch === 34) {\n return scanStringLiteral(
);\n }\n\n if (isIdentifierStart(ch)) {\n return scanId
entifier();\n }\n\n // Dot (.) char #46 can also start a floating-
point number, hence the need\n // to check the next character.\n i
f (ch === 46) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {
\n return scanNumericLiteral();\n }\n retur
n scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n
return scanNumericLiteral();\n }\n\n return scanPunctuator();\n
}\n\n function lex() {\n var token;\n\n token = lookahead;\n
index = token.range[1];\n\n lookahead = advance();\n\n inde
x = token.range[1];\n\n return token;\n }\n\n function peek() {\n
var pos;\n\n pos = index;\n lookahead = advance();\n
index = pos;\n }\n\n // Throw an exception\n\n function throwError(toke
n, messageFormat) {\n var error,\n args = Array.prototype.slic
e.call(arguments, 2),\n msg = messageFormat.replace(\n
/%(\\d)/g,\n function (whole, index) {\n asse
rt(index < args.length, 'Message reference must be in range');\n
return args[index];\n }\n );\n\n error = ne
w Error(msg);\n error.index = index;\n error.description = msg;\n
throw error;\n }\n\n // Throw an exception because of the token.\n\
n function throwUnexpected(token) {\n throwError(token, Messages.Unexp
ectedToken, token.value);\n }\n\n // Expect the next token to match the sp
ecified punctuator.\n // If not, an exception will be thrown.\n\n function
expect(value) {\n var token = lex();\n if (token.type !== Token.P
unctuator || token.value !== value) {\n throwUnexpected(token);\n
}\n }\n\n // Return true if the next token matches the specified punct
uator.\n\n function match(value) {\n return lookahead.type === Token.P
unctuator && lookahead.value === value;\n }\n\n // Return true if the next
token matches the specified keyword\n\n function matchKeyword(keyword) {\n
return lookahead.type === Token.Keyword && lookahead.value === keyword;\n
}\n\n function consumeSemicolon() {\n // Catch the very common case
first: immediately a semicolon (char #59).\n if (source.charCodeAt(index
) === 59) {\n lex();\n return;\n }\n\n skipW
hitespace();\n\n if (match(';')) {\n lex();\n retur
n;\n }\n\n if (lookahead.type !== Token.EOF && !match('}')) {\n
throwUnexpected(lookahead);\n }\n }\n\n // 11.1.4 Array In
itialiser\n\n function parseArrayInitialiser() {\n var elements = [];\
n\n expect('[');\n\n while (!match(']')) {\n if (match(
',')) {\n lex();\n elements.push(null);\n
} else {\n elements.push(parseExpression());\n\n
if (!match(']')) {\n expect(',');\n }\n
}\n }\n\n expect(']');\n\n return delegate.createArr
ayExpression(elements);\n }\n\n // 11.1.5 Object Initialiser\n\n functi
on parseObjectPropertyKey() {\n var token;\n\n skipWhitespace();\n
token = lex();\n\n // Note: This function is called only from par
seObjectProperty(), where\n // EOF and Punctuator tokens are already filt
ered out.\n if (token.type === Token.StringLiteral || token.type === Toke
n.NumericLiteral) {\n return delegate.createLiteral(token);\n
}\n\n return delegate.createIdentifier(token.value);\n }\n\n functi
on parseObjectProperty() {\n var token, key;\n\n token = lookahead
;\n skipWhitespace();\n\n if (token.type === Token.EOF || token.ty
pe === Token.Punctuator) {\n throwUnexpected(token);\n }\n\n
key = parseObjectPropertyKey();\n expect(':');\n return dele
gate.createProperty('init', key, parseExpression());\n }\n\n function pars
eObjectInitialiser() {\n var properties = [];\n\n expect('{');\n\n
while (!match('}')) {\n properties.push(parseObjectProperty()
);\n\n if (!match('}')) {\n expect(',');\n
}\n }\n\n expect('}');\n\n return delegate.createObjectExpr
ession(properties);\n }\n\n // 11.1.6 The Grouping Operator\n\n functio
n parseGroupExpression() {\n var expr;\n\n expect('(');\n\n
expr = parseExpression();\n\n expect(')');\n\n return expr;\n
}\n\n\n // 11.1 Primary Expressions\n\n function parsePrimaryExpression()
{\n var type, token, expr;\n\n if (match('(')) {\n retu
rn parseGroupExpression();\n }\n\n type = lookahead.type;\n\n
if (type === Token.Identifier) {\n expr = delegate.createIdentifie
r(lex().value);\n } else if (type === Token.StringLiteral || type === Tok
en.NumericLiteral) {\n expr = delegate.createLiteral(lex());\n
} else if (type === Token.Keyword) {\n if (matchKeyword('this')) {\n
lex();\n expr = delegate.createThisExpression();\
n }\n } else if (type === Token.BooleanLiteral) {\n
token = lex();\n token.value = (token.value === 'true');\n
expr = delegate.createLiteral(token);\n } else if (type === Token.NullL
iteral) {\n token = lex();\n token.value = null;\n
expr = delegate.createLiteral(token);\n } else if (match('[')) {\n
expr = parseArrayInitialiser();\n } else if (match('{')) {\n
expr = parseObjectInitialiser();\n }\n\n if (expr) {\n
return expr;\n }\n\n throwUnexpected(lex());\n }\n\n
// 11.2 Left-Hand-Side Expressions\n\n function parseArguments() {\n
var args = [];\n\n expect('(');\n\n if (!match(')')) {\n
while (index < length) {\n args.push(parseExpression());\n
if (match(')')) {\n break;\n }\n
expect(',');\n }\n }\n\n expect(')');\n\n
return args;\n }\n\n function parseNonComputedProperty() {\n
var token;\n\n token = lex();\n\n if (!isIdentifierName(token)) {
\n throwUnexpected(token);\n }\n\n return delegate.crea
teIdentifier(token.value);\n }\n\n function parseNonComputedMember() {\n
expect('.');\n\n return parseNonComputedProperty();\n }\n\n f
unction parseComputedMember() {\n var expr;\n\n expect('[');\n\n
expr = parseExpression();\n\n expect(']');\n\n return expr;\
n }\n\n function parseLeftHandSideExpression() {\n var expr, args,
property;\n\n expr = parsePrimaryExpression();\n\n while (true) {\
n if (match('[')) {\n property = parseComputedMember()
;\n expr = delegate.createMemberExpression('[', expr, property);\
n } else if (match('.')) {\n property = parseNonComput
edMember();\n expr = delegate.createMemberExpression('.', expr, p
roperty);\n } else if (match('(')) {\n args = parseArg
uments();\n expr = delegate.createCallExpression(expr, args);\n
} else {\n break;\n }\n }\n\n
return expr;\n }\n\n // 11.3 Postfix Expressions\n\n var parsePostfixEx
pression = parseLeftHandSideExpression;\n\n // 11.4 Unary Operators\n\n fu
nction parseUnaryExpression() {\n var token, expr;\n\n if (lookahe
ad.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\n
expr = parsePostfixExpression();\n } else if (match('+') || match('-') |
| match('!')) {\n token = lex();\n expr = parseUnaryExpres
sion();\n expr = delegate.createUnaryExpression(token.value, expr);\n
} else if (matchKeyword('delete') || matchKeyword('void') || matchKeywor
d('typeof')) {\n throwError({}, Messages.UnexpectedToken);\n }
else {\n expr = parsePostfixExpression();\n }\n\n retu
rn expr;\n }\n\n function binaryPrecedence(token) {\n var prec = 0;
\n\n if (token.type !== Token.Punctuator && token.type !== Token.Keyword)
{\n return 0;\n }\n\n switch (token.value) {\n
case '||':\n prec = 1;\n break;\n\n case '&&':\n
prec = 2;\n break;\n\n case '==':\n case '!=':
\n case '===':\n case '!==':\n prec = 6;\n b
reak;\n\n case '<':\n case '>':\n case '<=':\n case
'>=':\n case 'instanceof':\n prec = 7;\n break;\n\n
case 'in':\n prec = 7;\n break;\n\n case '+
':\n case '-':\n prec = 9;\n break;\n\n case
'*':\n case '/':\n case '%':\n prec = 11;\n
break;\n\n default:\n break;\n }\n\n return pre
c;\n }\n\n // 11.5 Multiplicative Operators\n // 11.6 Additive Operator
s\n // 11.7 Bitwise Shift Operators\n // 11.8 Relational Operators\n //
11.9 Equality Operators\n // 11.10 Binary Bitwise Operators\n // 11.11 Bi
nary Logical Operators\n\n function parseBinaryExpression() {\n var ex
pr, token, prec, stack, right, operator, left, i;\n\n left = parseUnaryEx
pression();\n\n token = lookahead;\n prec = binaryPrecedence(token
);\n if (prec === 0) {\n return left;\n }\n toke
n.prec = prec;\n lex();\n\n right = parseUnaryExpression();\n\n
stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lo
okahead)) > 0) {\n\n // Reduce: make a binary expression from the thr
ee topmost entries.\n while ((stack.length > 2) && (prec <= stack[sta
ck.length - 2].prec)) {\n right = stack.pop();\n o
perator = stack.pop().value;\n left = stack.pop();\n
expr = delegate.createBinaryExpression(operator, left, right);\n
stack.push(expr);\n }\n\n // Shift.\n token
= lex();\n token.prec = prec;\n stack.push(token);\n
expr = parseUnaryExpression();\n stack.push(expr);\n }\n
\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\
n expr = stack[i];\n while (i > 1) {\n expr = delegate.
createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -
= 2;\n }\n\n return expr;\n }\n\n\n // 11.12 Conditional Ope
rator\n\n function parseConditionalExpression() {\n var expr, conseque
nt, alternate;\n\n expr = parseBinaryExpression();\n\n if (match('
?')) {\n lex();\n consequent = parseConditionalExpression(
);\n expect(':');\n alternate = parseConditionalExpression
();\n\n expr = delegate.createConditionalExpression(expr, consequent,
alternate);\n }\n\n return expr;\n }\n\n // Simplification
since we do not support AssignmentExpression.\n var parseExpression = parseCo
nditionalExpression;\n\n // Polymer Syntax extensions\n\n // Filter ::\n
// Identifier\n // Identifier \"(\" \")\"\n // Identifier \"(\" Fi
lterArguments \")\"\n\n function parseFilter() {\n var identifier, arg
s;\n\n identifier = lex();\n\n if (identifier.type !== Token.Ident
ifier) {\n throwUnexpected(identifier);\n }\n\n args =
match('(') ? parseArguments() : [];\n\n return delegate.createFilter(iden
tifier.value, args);\n }\n\n // Filters ::\n // \"|\" Filter\n //
Filters \"|\" Filter\n\n function parseFilters() {\n while (match('|
')) {\n lex();\n parseFilter();\n }\n }\n\n /
/ TopLevel ::\n // LabelledExpressions\n // AsExpression\n // InE
xpression\n // FilterExpression\n\n // AsExpression ::\n // FilterE
xpression as Identifier\n\n // InExpression ::\n // Identifier, Identifi
er in FilterExpression\n // Identifier in FilterExpression\n\n // Filter
Expression ::\n // Expression\n // Expression Filters\n\n function
parseTopLevel() {\n skipWhitespace();\n peek();\n\n var exp
r = parseExpression();\n if (expr) {\n if (lookahead.value ===
',' || lookahead.value == 'in' &&\n expr.type === Syntax.
Identifier) {\n parseInExpression(expr);\n } else {\n
parseFilters();\n if (lookahead.value === 'as') {\
n parseAsExpression(expr);\n } else {\n
delegate.createTopLevel(expr);\n }\n }\n
}\n\n if (lookahead.type !== Token.EOF) {\n throwUnexpe
cted(lookahead);\n }\n }\n\n function parseAsExpression(expr) {\n
lex(); // as\n var identifier = lex().value;\n delegate.cre
ateAsExpression(expr, identifier);\n }\n\n function parseInExpression(iden
tifier) {\n var indexName;\n if (lookahead.value === ',') {\n
lex();\n if (lookahead.type !== Token.Identifier)\n
throwUnexpected(lookahead);\n indexName = lex().value;\n
}\n\n lex(); // in\n var expr = parseExpression();\n parse
Filters();\n delegate.createInExpression(identifier.name, indexName, expr
);\n }\n\n function parse(code, inDelegate) {\n delegate = inDelega
te;\n source = code;\n index = 0;\n length = source.length;
\n lookahead = null;\n state = {\n labelSet: {}\n
};\n\n return parseTopLevel();\n }\n\n global.esprima = {\n
parse: parse\n };\n})(this);\n","// Copyright (c) 2014 The Polymer Project
Authors. All rights reserved.\n// This code may only be used under the BSD style
license found at http://polymer.github.io/LICENSE.txt\n// The complete set of a
uthors may be found at http://polymer.github.io/AUTHORS.txt\n// The complete set
of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n// C
ode distributed by Google as part of the polymer project is also\n// subject to
an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n\n(
function (global) {\n 'use strict';\n\n function prepareBinding(expressionText
, name, node, filterRegistry) {\n var expression;\n try {\n expressio
n = getExpression(expressionText);\n if (expression.scopeIdent &&\n
(node.nodeType !== Node.ELEMENT_NODE ||\n node.tagName !== 'TEMPLATE
' ||\n (name !== 'bind' && name !== 'repeat'))) {\n throw Error
('as and in can only be used within <template bind/repeat>');\n }\n } ca
tch (ex) {\n console.error('Invalid expression syntax: ' + expressionText,
ex);\n return;\n }\n\n return function(model, node, oneTime) {\n
var binding = expression.getBinding(model, filterRegistry, oneTime);\n if
(expression.scopeIdent && binding) {\n node.polymerExpressionScopeIdent_
= expression.scopeIdent;\n if (expression.indexIdent)\n node.pol
ymerExpressionIndexIdent_ = expression.indexIdent;\n }\n\n return bind
ing;\n }\n }\n\n // TODO(rafaelw): Implement simple LRU.\n var expressionP
arseCache = Object.create(null);\n\n function getExpression(expressionText) {\n
var expression = expressionParseCache[expressionText];\n if (!expression)
{\n var delegate = new ASTDelegate();\n esprima.parse(expressionText,
delegate);\n expression = new Expression(delegate);\n expressionParse
Cache[expressionText] = expression;\n }\n return expression;\n }\n\n fun
ction Literal(value) {\n this.value = value;\n this.valueFn_ = undefined;\
n }\n\n Literal.prototype = {\n valueFn: function() {\n if (!this.valu
eFn_) {\n var value = this.value;\n this.valueFn_ = function() {\n
return value;\n }\n }\n\n return this.valueFn_;\n
}\n }\n\n function IdentPath(name) {\n this.name = name;\n this.path = P
ath.get(name);\n }\n\n IdentPath.prototype = {\n valueFn: function() {\n
if (!this.valueFn_) {\n var name = this.name;\n var path = this
.path;\n this.valueFn_ = function(model, observer) {\n if (obser
ver)\n observer.addPath(model, path);\n\n return path.getVal
ueFrom(model);\n }\n }\n\n return this.valueFn_;\n },\n\n
setValue: function(model, newValue) {\n if (this.path.length == 1);\n
model = findScope(model, this.path[0]);\n\n return this.path.setValueFro
m(model, newValue);\n }\n };\n\n function MemberExpression(object, property
, accessor) {\n this.computed = accessor == '[';\n\n this.dynamicDeps = ty
peof object == 'function' ||\n object.dynamicDeps ||\n
(this.computed && !(property instanceof Literal));\n\n thi
s.simplePath =\n !this.dynamicDeps &&\n (property instanceof Ident
Path || property instanceof Literal) &&\n (object instanceof MemberExpres
sion || object instanceof IdentPath);\n\n this.object = this.simplePath ? obj
ect : getFn(object);\n this.property = !this.computed || this.simplePath ?\n
property : getFn(property);\n }\n\n MemberExpression.prototype = {\n
get fullPath() {\n if (!this.fullPath_) {\n\n var parts = this.obje
ct instanceof MemberExpression ?\n this.object.fullPath.slice() : [th
is.object.name];\n parts.push(this.property instanceof IdentPath ?\n
this.property.name : this.property.value);\n this.fullPath_ = Path
.get(parts);\n }\n\n return this.fullPath_;\n },\n\n valueFn: fu
nction() {\n if (!this.valueFn_) {\n var object = this.object;\n\n
if (this.simplePath) {\n var path = this.fullPath;\n\n t
his.valueFn_ = function(model, observer) {\n if (observer)\n
observer.addPath(model, path);\n\n return path.getValueFrom(mode
l);\n };\n } else if (!this.computed) {\n var path = Pa
th.get(this.property.name);\n\n this.valueFn_ = function(model, observe
r, filterRegistry) {\n var context = object(model, observer, filterRe
gistry);\n\n if (observer)\n observer.addPath(context, p
ath);\n\n return path.getValueFrom(context);\n }\n }
else {\n // Computed property.\n var property = this.property;
\n\n this.valueFn_ = function(model, observer, filterRegistry) {\n
var context = object(model, observer, filterRegistry);\n var p
ropName = property(model, observer, filterRegistry);\n if (observer)\
n observer.addPath(context, [propName]);\n\n return cont
ext ? context[propName] : undefined;\n };\n }\n }\n re
turn this.valueFn_;\n },\n\n setValue: function(model, newValue) {\n
if (this.simplePath) {\n this.fullPath.setValueFrom(model, newValue);\n
return newValue;\n }\n\n var object = this.object(model);\n
var propName = this.property instanceof IdentPath ? this.property.name :\n
this.property(model);\n return object[propName] = newValue;\n }\n
};\n\n function Filter(name, args) {\n this.name = name;\n this.args = []
;\n for (var i = 0; i < args.length; i++) {\n this.args[i] = getFn(args[
i]);\n }\n }\n\n Filter.prototype = {\n transform: function(model, obser
ver, filterRegistry, toModelDirection,\n initialArgs) {\n
var fn = filterRegistry[this.name];\n var context = model;\n if
(fn) {\n context = undefined;\n } else {\n fn = context[this.
name];\n if (!fn) {\n console.error('Cannot find function or fil
ter: ' + this.name);\n return;\n }\n }\n\n // If toMod
elDirection is falsey, then the \"normal\" (dom-bound) direction\n // is us
ed. Otherwise, it looks for a 'toModel' property function on the\n // objec
t.\n if (toModelDirection) {\n fn = fn.toModel;\n } else if (ty
peof fn.toDOM == 'function') {\n fn = fn.toDOM;\n }\n\n if (typ
eof fn != 'function') {\n console.error('Cannot find function or filter:
' + this.name);\n return;\n }\n\n var args = initialArgs || [];
\n for (var i = 0; i < this.args.length; i++) {\n args.push(getFn(th
is.args[i])(model, observer, filterRegistry));\n }\n\n return fn.apply
(context, args);\n }\n };\n\n function notImplemented() { throw Error('Not
Implemented'); }\n\n var unaryOperators = {\n '+': function(v) { return +v;
},\n '-': function(v) { return -v; },\n '!': function(v) { return !v; }\n
};\n\n var binaryOperators = {\n '+': function(l, r) { return l+r; },\n
'-': function(l, r) { return l-r; },\n '*': function(l, r) { return l*r; },\n
'/': function(l, r) { return l/r; },\n '%': function(l, r) { return l%r;
},\n '<': function(l, r) { return l<r; },\n '>': function(l, r) { return l
>r; },\n '<=': function(l, r) { return l<=r; },\n '>=': function(l, r) { r
eturn l>=r; },\n '==': function(l, r) { return l==r; },\n '!=': function(l
, r) { return l!=r; },\n '===': function(l, r) { return l===r; },\n '!==':
function(l, r) { return l!==r; },\n '&&': function(l, r) { return l&&r; },\n
'||': function(l, r) { return l||r; },\n };\n\n function getFn(arg) {\n
return typeof arg == 'function' ? arg : arg.valueFn();\n }\n\n function ASTDe
legate() {\n this.expression = null;\n this.filters = [];\n this.deps =
{};\n this.currentPath = undefined;\n this.scopeIdent = undefined;\n t
his.indexIdent = undefined;\n this.dynamicDeps = false;\n }\n\n ASTDelegate
.prototype = {\n createUnaryExpression: function(op, argument) {\n if (!
unaryOperators[op])\n throw Error('Disallowed operator: ' + op);\n\n
argument = getFn(argument);\n\n return function(model, observer, filterReg
istry) {\n return unaryOperators[op](argument(model, observer, filterRegi
stry));\n };\n },\n\n createBinaryExpression: function(op, left, righ
t) {\n if (!binaryOperators[op])\n throw Error('Disallowed operator:
' + op);\n\n left = getFn(left);\n right = getFn(right);\n\n swi
tch (op) {\n case '||':\n this.dynamicDeps = true;\n re
turn function(model, observer, filterRegistry) {\n return left(model,
observer, filterRegistry) ||\n right(model, observer, filterRegi
stry);\n };\n case '&&':\n this.dynamicDeps = true;\n
return function(model, observer, filterRegistry) {\n return l
eft(model, observer, filterRegistry) &&\n right(model, observer,
filterRegistry);\n };\n }\n\n return function(model, observer
, filterRegistry) {\n return binaryOperators[op](left(model, observer, fi
lterRegistry),\n right(model, observer, filter
Registry));\n };\n },\n\n createConditionalExpression: function(test,
consequent, alternate) {\n test = getFn(test);\n consequent = getFn(c
onsequent);\n alternate = getFn(alternate);\n\n this.dynamicDeps = tru
e;\n\n return function(model, observer, filterRegistry) {\n return t
est(model, observer, filterRegistry) ?\n consequent(model, observer,
filterRegistry) :\n alternate(model, observer, filterRegistry);\n
}\n },\n\n createIdentifier: function(name) {\n var ident = new Ide
ntPath(name);\n ident.type = 'Identifier';\n return ident;\n },\n\n
createMemberExpression: function(accessor, object, property) {\n var ex
= new MemberExpression(object, property, accessor);\n if (ex.dynamicDeps)\
n this.dynamicDeps = true;\n return ex;\n },\n\n createCallExp
ression: function(expression, args) {\n if (!(expression instanceof IdentPa
th))\n throw Error('Only identifier function invocations are allowed');\n
\n var filter = new Filter(expression.name, args);\n\n return function
(model, observer, filterRegistry) {\n return filter.transform(model, obse
rver, filterRegistry, false);\n };\n },\n\n createLiteral: function(t
oken) {\n return new Literal(token.value);\n },\n\n createArrayExpres
sion: function(elements) {\n for (var i = 0; i < elements.length; i++)\n
elements[i] = getFn(elements[i]);\n\n return function(model, observer,
filterRegistry) {\n var arr = []\n for (var i = 0; i < elements.l
ength; i++)\n arr.push(elements[i](model, observer, filterRegistry));\n
return arr;\n }\n },\n\n createProperty: function(kind, key,
value) {\n return {\n key: key instanceof IdentPath ? key.name : key
.value,\n value: value\n };\n },\n\n createObjectExpression: f
unction(properties) {\n for (var i = 0; i < properties.length; i++)\n
properties[i].value = getFn(properties[i].value);\n\n return function(mod
el, observer, filterRegistry) {\n var obj = {};\n for (var i = 0;
i < properties.length; i++)\n obj[properties[i].key] =\n p
roperties[i].value(model, observer, filterRegistry);\n return obj;\n
}\n },\n\n createFilter: function(name, args) {\n this.filters.push(
new Filter(name, args));\n },\n\n createAsExpression: function(expression,
scopeIdent) {\n this.expression = expression;\n this.scopeIdent = sco
peIdent;\n },\n\n createInExpression: function(scopeIdent, indexIdent, exp
ression) {\n this.expression = expression;\n this.scopeIdent = scopeId
ent;\n this.indexIdent = indexIdent;\n },\n\n createTopLevel: functio
n(expression) {\n this.expression = expression;\n },\n\n createThisEx
pression: notImplemented\n }\n\n function ConstantObservable(value) {\n thi
s.value_ = value;\n }\n\n ConstantObservable.prototype = {\n open: function
() { return this.value_; },\n discardChanges: function() { return this.value_
; },\n deliver: function() {},\n close: function() {},\n }\n\n function
Expression(delegate) {\n this.scopeIdent = delegate.scopeIdent;\n this.ind
exIdent = delegate.indexIdent;\n\n if (!delegate.expression)\n throw Err
or('No expression found.');\n\n this.expression = delegate.expression;\n g
etFn(this.expression); // forces enumeration of path dependencies\n\n this.fi
lters = delegate.filters;\n this.dynamicDeps = delegate.dynamicDeps;\n }\n\n
Expression.prototype = {\n getBinding: function(model, filterRegistry, oneT
ime) {\n if (oneTime)\n return this.getValue(model, undefined, filte
rRegistry);\n\n var observer = new CompoundObserver();\n // captures d
eps.\n var firstValue = this.getValue(model, observer, filterRegistry);\n
var firstTime = true;\n var self = this;\n\n function valueFn() {\
n // deps cannot have changed on first value retrieval.\n if (firs
tTime) {\n firstTime = false;\n return firstValue;\n }\
n\n if (self.dynamicDeps)\n observer.startReset();\n\n va
r value = self.getValue(model,\n self.dynamicDe
ps ? observer : undefined,\n filterRegistry);\n
if (self.dynamicDeps)\n observer.finishReset();\n\n retu
rn value;\n }\n\n function setValueFn(newValue) {\n self.setVal
ue(model, newValue, filterRegistry);\n return newValue;\n }\n\n
return new ObserverTransform(observer, valueFn, setValueFn, true);\n },\n\n
getValue: function(model, observer, filterRegistry) {\n var value = getF
n(this.expression)(model, observer, filterRegistry);\n for (var i = 0; i <
this.filters.length; i++) {\n value = this.filters[i].transform(model, ob
server, filterRegistry,\n false, [value]);\n }\n\n return v
alue;\n },\n\n setValue: function(model, newValue, filterRegistry) {\n
var count = this.filters ? this.filters.length : 0;\n while (count-- > 0)
{\n newValue = this.filters[count].transform(model, undefined,\n
filterRegistry, true, [newValue]);\n }\n\n if (this.expression.set
Value)\n return this.expression.setValue(model, newValue);\n }\n }\n\
n /**\n * Converts a style property name to a css property name. For example:
\n * \"WebkitUserSelect\" to \"-webkit-user-select\"\n */\n function conver
tStylePropertyName(name) {\n return String(name).replace(/[A-Z]/g, function(c
) {\n return '-' + c.toLowerCase();\n });\n }\n\n var parentScopeName
= '@' + Math.random().toString(36).slice(2);\n\n // Single ident paths must bin
d directly to the appropriate scope object.\n // I.e. Pushed values in two-bind
ings need to be assigned to the actual model\n // object.\n function findScope
(model, prop) {\n while (model[parentScopeName] &&\n !Object.protot
ype.hasOwnProperty.call(model, prop)) {\n model = model[parentScopeName];\n
}\n\n return model;\n }\n\n function isLiteralExpression(pathString) {\
n switch (pathString) {\n case '':\n return false;\n\n case
'false':\n case 'null':\n case 'true':\n return true;\n }\n\
n if (!isNaN(Number(pathString)))\n return true;\n\n return false;\n
};\n\n function PolymerExpressions() {}\n\n PolymerExpressions.prototype = {\
n // \"built-in\" filters\n styleObject: function(value) {\n var part
s = [];\n for (var key in value) {\n parts.push(convertStyleProperty
Name(key) + ': ' + value[key]);\n }\n return parts.join('; ');\n },
\n\n tokenList: function(value) {\n var tokens = [];\n for (var key
in value) {\n if (value[key])\n tokens.push(key);\n }\n
return tokens.join(' ');\n },\n\n // binding delegate API\n prepareI
nstancePositionChanged: function(template) {\n var indexIdent = template.po
lymerExpressionIndexIdent_;\n if (!indexIdent)\n return;\n\n re
turn function(templateInstance, index) {\n templateInstance.model[indexId
ent] = index;\n };\n },\n\n prepareBinding: function(pathString, name
, node) {\n var path = Path.get(pathString);\n\n if (!isLiteralExpress
ion(pathString) && path.valid) {\n if (path.length == 1) {\n ret
urn function(model, node, oneTime) {\n if (oneTime)\n re
turn path.getValueFrom(model);\n\n var scope = findScope(model, path[
0]);\n return new PathObserver(scope, path);\n };\n }
\n return; // bail out early if pathString is simple path.\n }\n\n
return prepareBinding(pathString, name, node, this);\n },\n\n prepareI
nstanceModel: function(template) {\n var scopeName = template.polymerExpres
sionScopeIdent_;\n if (!scopeName)\n return;\n\n var parentScop
e = template.templateInstance ?\n template.templateInstance.model :\n
template.model;\n\n var indexName = template.polymerExpressionIndex
Ident_;\n\n return function(model) {\n return createScopeObject(pare
ntScope, model, scopeName, indexName);\n };\n }\n };\n\n var createSco
peObject = ('__proto__' in {}) ?\n function(parentScope, model, scopeName, in
dexName) {\n var scope = {};\n scope[scopeName] = model;\n scope[
indexName] = undefined;\n scope[parentScopeName] = parentScope;\n scop
e.__proto__ = parentScope;\n return scope;\n } :\n function(parentSco
pe, model, scopeName, indexName) {\n var scope = Object.create(parentScope)
;\n Object.defineProperty(scope, scopeName,\n { value: model, conf
igurable: true, writable: true });\n Object.defineProperty(scope, indexName
,\n { value: undefined, configurable: true, writable: true });\n O
bject.defineProperty(scope, parentScopeName,\n { value: parentScope, co
nfigurable: true, writable: true });\n return scope;\n };\n\n global.Po
lymerExpressions = PolymerExpressions;\n PolymerExpressions.getExpression = get
Expression;\n})(this);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors
. All rights reserved.\n * This code may only be used under the BSD style licens
e found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors
may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of con
tributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dis
tributed by Google as part of the polymer project is also\n * subject to an addi
tional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nPolym
er = {\n version: '0.3.5-5d00e4b'\n};\n","/*\n * Copyright (c) 2014 The Polymer
Project Authors. All rights reserved.\n * This code may only be used under the
BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete
set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The com
plete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.
txt\n * Code distributed by Google as part of the polymer project is also\n * su
bject to an additional IP rights grant found at http://polymer.github.io/PATENTS
.txt\n */\n\n// TODO(sorvell): this ensures Polymer is an object and not a funct
ion\n// Platform is currently defining it as a function to allow for async loadi
ng\n// of polymer; once we refine the loading process this likely goes away.\nif
(typeof window.Polymer === 'function') {\n Polymer = {};\n}\n\n","/*\n * Copyr
ight (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code ma
y only be used under the BSD style license found at http://polymer.github.io/LIC
ENSE.txt\n * The complete set of authors may be found at http://polymer.github.i
o/AUTHORS.txt\n * The complete set of contributors may be found at http://polyme
r.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polym
er project is also\n * subject to an additional IP rights grant found at http://
polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // copy own proper
ties from 'api' to 'prototype, with name hinting for 'super'\n function extend(
prototype, api) {\n if (prototype && api) {\n // use only own properties
of 'api'\n Object.getOwnPropertyNames(api).forEach(function(n) {\n
// acquire property descriptor\n var pd = Object.getOwnPropertyDescriptor
(api, n);\n if (pd) {\n // clone property via descriptor\n
Object.defineProperty(prototype, n, pd);\n // cache name-of-method
for 'super' engine\n if (typeof pd.value == 'function') {\n
// hint the 'super' engine\n pd.value.nom = n;\n }\n
}\n });\n }\n return prototype;\n }\n \n // exports\n\n scope.ext
end = extend;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project
Authors. All rights reserved.\n * This code may only be used under the BSD style
license found at http://polymer.github.io/LICENSE.txt\n * The complete set of a
uthors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set
of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * C
ode distributed by Google as part of the polymer project is also\n * subject to
an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */
\n\n(function(scope) {\n \n // usage\n \n // invoke cb.call(this) in 100ms,
unless the job is re-registered,\n // which resets the timer\n // \n // this.
myJob = this.job(this.myJob, cb, 100)\n //\n // returns a job handle which can
be used to re-register a job\n\n var Job = function(inContext) {\n this.con
text = inContext;\n this.boundComplete = this.complete.bind(this)\n };\n Jo
b.prototype = {\n go: function(callback, wait) {\n this.callback = callb
ack;\n var h;\n if (!wait) {\n h = requestAnimationFrame(this.b
oundComplete);\n this.handle = function() {\n cancelAnimationFra
me(h);\n }\n } else {\n h = setTimeout(this.boundComplete, wa
it);\n this.handle = function() {\n clearTimeout(h);\n }\
n }\n },\n stop: function() {\n if (this.handle) {\n this
.handle();\n this.handle = null;\n }\n },\n complete: function
() {\n if (this.handle) {\n this.stop();\n this.callback.call
(this.context);\n }\n }\n };\n \n function job(job, callback, wait) {
\n if (job) {\n job.stop();\n } else {\n job = new Job(this);\n
}\n job.go(callback, wait);\n return job;\n }\n \n // exports \n\n
scope.job = job;\n \n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Pro
ject Authors. All rights reserved.\n * This code may only be used under the BSD
style license found at http://polymer.github.io/LICENSE.txt\n * The complete set
of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complet
e set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\
n * Code distributed by Google as part of the polymer project is also\n * subjec
t to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
\n */\n\n(function(scope) {\n\n var registry = {};\n\n HTMLElement.register =
function(tag, prototype) {\n registry[tag] = prototype;\n }\n\n // get prot
otype mapped to node <tag>\n HTMLElement.getPrototypeForTag = function(tag) {\n
var prototype = !tag ? HTMLElement.prototype : registry[tag];\n // TODO(s
jmiles): creating <tag> is likely to have wasteful side-effects\n return prot
otype || Object.getPrototypeOf(document.createElement(tag));\n };\n\n // we ha
ve to flag propagation stoppage for the event dispatcher\n var originalStopProp
agation = Event.prototype.stopPropagation;\n Event.prototype.stopPropagation =
function() {\n this.cancelBubble = true;\n originalStopPropagation.apply(t
his, arguments);\n };\n \n // TODO(sorvell): remove when we're sure imports d
oes not need\n // to load stylesheets\n /*\n HTMLImports.importer.preloadSele
ctors += \n ', polymer-element link[rel=stylesheet]';\n */\n})(Polymer);\n
","/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\r\n * This code may only be used under the BSD style license found at http://po
lymer.github.io/LICENSE.txt\r\n * The complete set of authors may be found at ht
tp://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be
found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Go
ogle as part of the polymer project is also\r\n * subject to an additional IP ri
ghts grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n (functio
n(scope) {\r\n // super\r\n\r\n // `arrayOfArgs` is an optional array of a
rgs like one might pass\r\n // to `Function.apply`\r\n\r\n // TODO(sjmiles
):\r\n // $super must be installed on an instance or prototype chain\r\n
// as `super`, and invoked via `this`, e.g.\r\n // `this.super();`\
r\n\r\n // will not work if function objects are not unique, for example,\
r\n // when using mixins.\r\n // The memoization strategy assumes ea
ch function exists on only one \r\n // prototype chain i.e. we use the fun
ction object for memoizing)\r\n // perhaps we can bookkeep on the prototyp
e itself instead\r\n function $super(arrayOfArgs) {\r\n // since we are
thunking a method call, performance is important here: \r\n // memoize all
lookups, once memoized the fast path calls no other \r\n // functions\r\n
//\r\n // find the caller (cannot be `strict` because of 'caller')\r\n
var caller = $super.caller;\r\n // memoized 'name of method' \r\n
var nom = caller.nom;\r\n // memoized next implementation prototype\r\n
var _super = caller._super;\r\n if (!_super) {\r\n if (!nom) {\r\
n nom = caller.nom = nameInThis.call(this, caller);\r\n }\r\n
if (!nom) {\r\n console.warn('called super() on a method not insta
lled declaratively (has no .nom property)');\r\n }\r\n // super pr
ototype is either cached or we have to find it\r\n // by searching __prot
o__ (at the 'top')\r\n // invariant: because we cache _super on fn below,
we never reach \r\n // here from inside a series of calls to super(), so
it's ok to \r\n // start searching from the prototype of 'this' (at the
'top')\r\n // we must never memoize a null super for this reason\r\n
_super = memoizeSuper(caller, nom, getPrototypeOf(this));\r\n }\r\n
// our super function\r\n var fn = _super[nom];\r\n if (fn) {\r\n
// memoize information so 'fn' can call 'super'\r\n if (!fn._super) {
\r\n // must not memoize null, or we lose our invariant above\r\n
memoizeSuper(fn, nom, _super);\r\n }\r\n // invoke the inherit
ed method\r\n // if 'fn' is not function valued, this will throw\r\n
return fn.apply(this, arrayOfArgs || []);\r\n }\r\n }\r\n\r\n func
tion nameInThis(value) {\r\n var p = this.__proto__;\r\n while (p && p
!== HTMLElement.prototype) {\r\n // TODO(sjmiles): getOwnPropertyNames i
s absurdly expensive\r\n var n$ = Object.getOwnPropertyNames(p);\r\n
for (var i=0, l=n$.length, n; i<l && (n=n$[i]); i++) {\r\n var d = O
bject.getOwnPropertyDescriptor(p, n);\r\n if (typeof d.value === 'funct
ion' && d.value === value) {\r\n return n;\r\n }\r\n
}\r\n p = p.__proto__;\r\n }\r\n }\r\n\r\n function memoizeSup
er(method, name, proto) {\r\n // find and cache next prototype containing `
name`\r\n // we need the prototype so we can do another lookup\r\n //
from here\r\n var s = nextSuper(proto, name, method);\r\n if (s[name])
{\r\n // `s` is a prototype, the actual method is `s[name]`\r\n /
/ tag super method with it's name for quicker lookups\r\n s[name].nom = n
ame;\r\n }\r\n return method._super = s;\r\n }\r\n\r\n function
nextSuper(proto, name, caller) {\r\n // look for an inherited prototype tha
t implements name\r\n while (proto) {\r\n if ((proto[name] !== calle
r) && proto[name]) {\r\n return proto;\r\n }\r\n proto =
getPrototypeOf(proto);\r\n }\r\n // must not return null, or we lose o
ur invariant above\r\n // in this case, a super() call was invoked where no
superclass\r\n // method exists\r\n // TODO(sjmiles): thow an excepti
on?\r\n return Object;\r\n }\r\n\r\n // NOTE: In some platforms (IE10
) the prototype chain is faked via \r\n // __proto__. Therefore, always get p
rototype via __proto__ instead of\r\n // the more standard Object.getPrototyp
eOf.\r\n function getPrototypeOf(prototype) {\r\n return prototype.__pro
to__;\r\n }\r\n\r\n // utility function to precompute name tags for functi
ons\r\n // in a (unchained) prototype\r\n function hintSuper(prototype) {\
r\n // tag functions with their prototype name to optimize\r\n // supe
r call invocations\r\n for (var n in prototype) {\r\n var pd = Objec
t.getOwnPropertyDescriptor(prototype, n);\r\n if (pd && typeof pd.value =
== 'function') {\r\n pd.value.nom = n;\r\n }\r\n }\r\n }
\r\n\r\n // exports\r\n\r\n scope.super = $super;\r\n\r\n})(Polymer);\r\n"
,"/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n
* This code may only be used under the BSD style license found at http://polymer
.github.io/LICENSE.txt\n * The complete set of authors may be found at http://po
lymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at
http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as par
t of the polymer project is also\n * subject to an additional IP rights grant fo
und at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n func
tion noopHandler(value) {\n return value;\n }\n\n var typeHandlers = {\n
string: noopHandler,\n 'undefined': noopHandler,\n date: function(value)
{\n return new Date(Date.parse(value) || Date.now());\n },\n boolean:
function(value) {\n if (value === '') {\n return true;\n }\n
return value === 'false' ? false : !!value;\n },\n number: function(va
lue) {\n var n = parseFloat(value);\n // hex values like \"0xFFFF\" pa
rseFloat as 0\n if (n === 0) {\n n = parseInt(value);\n }\n
return isNaN(n) ? value : n;\n // this code disabled because encoded valu
es (like \"0xFFFF\")\n // do not round trip to their original format\n
//return (String(floatVal) === value) ? floatVal : value;\n },\n object:
function(value, currentValue) {\n if (currentValue === null) {\n ret
urn value;\n }\n try {\n // If the string is an object, we can
parse is with the JSON library.\n // include convenience replace for sing
le-quotes. If the author omits\n // quotes altogether, parse will fail.\n
return JSON.parse(value.replace(/'/g, '\"'));\n } catch(e) {\n
// The object isn't valid JSON, return the raw value\n return value;\n
}\n },\n // avoid deserialization of functions\n 'function': func
tion(value, currentValue) {\n return currentValue;\n }\n };\n\n functi
on deserializeValue(value, currentValue) {\n // attempt to infer type from de
fault value\n var inferredType = typeof currentValue;\n // invent 'date' t
ype value for Date\n if (currentValue instanceof Date) {\n inferredType
= 'date';\n }\n // delegate deserialization via type string\n return ty
peHandlers[inferredType](value, currentValue);\n }\n\n // exports\n\n scope.d
eserializeValue = deserializeValue;\n\n})(Polymer);\n","/*\n * Copyright (c) 201
4 The Polymer Project Authors. All rights reserved.\n * This code may only be us
ed under the BSD style license found at http://polymer.github.io/LICENSE.txt\n *
The complete set of authors may be found at http://polymer.github.io/AUTHORS.tx
t\n * The complete set of contributors may be found at http://polymer.github.io/
CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project i
s also\n * subject to an additional IP rights grant found at http://polymer.gith
ub.io/PATENTS.txt\n */\n(function(scope) {\n\n // imports\n\n var extend = sco
pe.extend;\n\n // module\n\n var api = {};\n\n api.declaration = {};\n api.i
nstance = {};\n\n api.publish = function(apis, prototype) {\n for (var n in
apis) {\n extend(prototype, apis[n]);\n }\n };\n\n // exports\n\n sco
pe.api = api;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project
Authors. All rights reserved.\n * This code may only be used under the BSD style
license found at http://polymer.github.io/LICENSE.txt\n * The complete set of a
uthors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set
of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * C
ode distributed by Google as part of the polymer project is also\n * subject to
an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */
\n\n(function(scope) {\n\n var utils = {\n /**\n * Invokes a function a
synchronously. The context of the callback\n * function is bound to 'this'
automatically.\n * @method async\n * @param {Function|String} method\n
* @param {any|Array} args\n * @param {number} timeout\n */\n
async: function(method, args, timeout) {\n // when polyfilling Object.obser
ve, ensure changes \n // propagate before executing the async method\n
Platform.flush();\n // second argument to `apply` must be an array\n
args = (args && args.length) ? args : [args];\n // function to invoke\n
var fn = function() {\n (this[method] || method).apply(this, args);\n
}.bind(this);\n // execute `fn` sooner or later\n var handle = tim
eout ? setTimeout(fn, timeout) :\n requestAnimationFrame(fn);\n //
NOTE: switch on inverting handle to determine which time is used.\n return
timeout ? handle : ~handle;\n },\n cancelAsync: function(handle) {\n
if (handle < 0) {\n cancelAnimationFrame(~handle);\n } else {\n
clearTimeout(handle);\n }\n },\n /**\n * Fire an event.\n
* @method fire\n * @returns {Object} event\n * @param {string} type
An event name.\n * @param {any} detail\n * @param {Node} onNode Targe
t node.\n * @param {Boolean} bubbles Set false to prevent bubbling, default
s to true\n * @param {Boolean} cancelable Set false to prevent cancellation
, defaults to true\n */\n fire: function(type, detail, onNode, bubbles,
cancelable) {\n var node = onNode || this;\n var detail = detail === n
ull || detail === undefined ? {} : detail;\n var event = new CustomEvent(ty
pe, {\n bubbles: bubbles !== undefined ? bubbles : true,\n cancela
ble: cancelable !== undefined ? cancelable : true,\n detail: detail\n
});\n node.dispatchEvent(event);\n return event;\n },\n /**\n
* Fire an event asynchronously.\n * @method asyncFire\n * @param
{string} type An event name.\n * @param detail\n * @param {Node} toNod
e Target node.\n */\n asyncFire: function(/*inType, inDetail*/) {\n
this.async(\"fire\", arguments);\n },\n /**\n * Remove class from ol
d, add class to anew, if they exist.\n * @param classFollows\n * @para
m anew A node.\n * @param old A node\n * @param className\n */\n
classFollows: function(anew, old, className) {\n if (old) {\n old
.classList.remove(className);\n }\n if (anew) {\n anew.classLis
t.add(className);\n }\n },\n /**\n * Inject HTML which contains
markup bound to this element into\n * a target element (replacing target el
ement content).\n * @param String html to inject\n * @param Element ta
rget element\n */\n injectBoundHTML: function(html, element) {\n va
r template = document.createElement('template');\n template.innerHTML = htm
l;\n var fragment = this.instanceTemplate(template);\n if (element) {\
n element.textContent = '';\n element.appendChild(fragment);\n
}\n return fragment;\n }\n };\n\n // no-operation function for handy
stubs\n var nop = function() {};\n\n // null-object for handy stubs\n var no
b = {};\n\n // deprecated\n\n utils.asyncMethod = utils.async;\n\n // exports
\n\n scope.api.instance.utils = utils;\n scope.nop = nop;\n scope.nob = nob;\
n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All r
ights reserved.\n * This code may only be used under the BSD style license found
at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be
found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributo
rs may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distribute
d by Google as part of the polymer project is also\n * subject to an additional
IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(
scope) {\n\n // imports\n\n var log = window.logFlags || {};\n var EVENT_PREF
IX = 'on-';\n\n // instance events api\n var events = {\n // read-only\n
EVENT_PREFIX: EVENT_PREFIX,\n // event listeners on host\n addHostListene
rs: function() {\n var events = this.eventDelegates;\n log.events && (
Object.keys(events).length > 0) && console.log('[%s] addHostListeners:', this.lo
calName, events);\n // NOTE: host events look like bindings but really are
not;\n // (1) we don't want the attribute to be set and (2) we want to supp
ort\n // multiple event listeners ('host' and 'instance') and Node.bind\n
// by default supports 1 thing being bound.\n for (var type in events)
{\n var methodName = events[type];\n PolymerGestures.addEventListe
ner(this, type, this.element.getEventHandler(this, this, methodName));\n }\
n },\n // call 'method' or function method on 'obj' with 'args', if the me
thod exists\n dispatchMethod: function(obj, method, args) {\n if (obj) {
\n log.events && console.group('[%s] dispatch [%s]', obj.localName, metho
d);\n var fn = typeof method === 'function' ? method : obj[method];\n
if (fn) {\n fn[args ? 'apply' : 'call'](obj, args);\n }\n
log.events && console.groupEnd();\n Platform.flush();\n }\n
}\n };\n\n // exports\n\n scope.api.instance.events = events;\n\n // alias P
olymerGestures event listener logic\n scope.addEventListener = PolymerGestures.
addEventListener;\n scope.removeEventListener = PolymerGestures.removeEventList
ener;\n\n})(Polymer);\n","/*\r\n * Copyright (c) 2014 The Polymer Project Author
s. All rights reserved.\r\n * This code may only be used under the BSD style lic
ense found at http://polymer.github.io/LICENSE.txt\r\n * The complete set of aut
hors may be found at http://polymer.github.io/AUTHORS.txt\r\n * The complete set
of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n *
Code distributed by Google as part of the polymer project is also\r\n * subject
to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\
r\n */\r\n\r\n(function(scope) {\r\n\r\n // instance api for attributes\r\n\r\n
var attributes = {\r\n copyInstanceAttributes: function () {\r\n var a
$ = this._instanceAttributes;\r\n for (var k in a$) {\r\n if (!this.
hasAttribute(k)) {\r\n this.setAttribute(k, a$[k]);\r\n }\r\n
}\r\n },\r\n // for each attribute on this, deserialize value to proper
ty as needed\r\n takeAttributes: function() {\r\n // if we have no publi
sh lookup table, we have no attributes to take\r\n // TODO(sjmiles): ad hoc
\r\n if (this._publishLC) {\r\n for (var i=0, a$=this.attributes, l=
a$.length, a; (a=a$[i]) && i<l; i++) {\r\n this.attributeToProperty(a.n
ame, a.value);\r\n }\r\n }\r\n },\r\n // if attribute 'name' i
s mapped to a property, deserialize\r\n // 'value' into that property\r\n
attributeToProperty: function(name, value) {\r\n // try to match this attri
bute to a property (attributes are\r\n // all lower-case, so this is case-i
nsensitive search)\r\n var name = this.propertyForAttribute(name);\r\n
if (name) {\r\n // filter out 'mustached' values, these are to be\r\n
// replaced with bound-data and are not yet values\r\n // themselves
\r\n if (value && value.search(scope.bindPattern) >= 0) {\r\n re
turn;\r\n }\r\n // get original value\r\n var currentValue
= this[name];\r\n // deserialize Boolean or Number values from attribute\
r\n var value = this.deserializeValue(value, currentValue);\r\n //
only act if the value has changed\r\n if (value !== currentValue) {\r\n
// install new value (has side-effects)\r\n this[name] = value
;\r\n }\r\n }\r\n },\r\n // return the published property matc
hing name, or undefined\r\n propertyForAttribute: function(name) {\r\n v
ar match = this._publishLC && this._publishLC[name];\r\n //console.log('pro
pertyForAttribute:', name, 'matches', match);\r\n return match;\r\n },\r
\n // convert representation of 'stringValue' based on type of 'currentValue'
\r\n deserializeValue: function(stringValue, currentValue) {\r\n return
scope.deserializeValue(stringValue, currentValue);\r\n },\r\n serializeVal
ue: function(value, inferredType) {\r\n if (inferredType === 'boolean') {\r
\n return value ? '' : undefined;\r\n } else if (inferredType !== 'o
bject' && inferredType !== 'function'\r\n && value !== undefined) {\r\n
return value;\r\n }\r\n },\r\n reflectPropertyToAttribute: fu
nction(name) {\r\n var inferredType = typeof this[name];\r\n // try to
intelligently serialize property value\r\n var serializedValue = this.seri
alizeValue(this[name], inferredType);\r\n // boolean properties must reflec
t as boolean attributes\r\n if (serializedValue !== undefined) {\r\n
this.setAttribute(name, serializedValue);\r\n // TODO(sorvell): we shoul
d remove attr for all properties\r\n // that have undefined serialization
; however, we will need to\r\n // refine the attr reflection system to ac
hieve this; pica, for example,\r\n // relies on having inferredType objec
t properties not removed as\r\n // attrs.\r\n } else if (inferredTyp
e === 'boolean') {\r\n this.removeAttribute(name);\r\n }\r\n }\r\
n };\r\n\r\n // exports\r\n\r\n scope.api.instance.attributes = attributes;\r
\n\r\n})(Polymer);\r\n","/*\n * Copyright (c) 2014 The Polymer Project Authors.
All rights reserved.\n * This code may only be used under the BSD style license
found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors ma
y be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contr
ibutors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distr
ibuted by Google as part of the polymer project is also\n * subject to an additi
onal IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(func
tion(scope) {\n\n // imports\n\n var log = window.logFlags || {};\n\n // magi
c words\n\n var OBSERVE_SUFFIX = 'Changed';\n\n // element api\n\n var empty
= [];\n\n var updateRecord = {\n object: undefined,\n type: 'update',\n
name: undefined,\n oldValue: undefined\n };\n\n var numberIsNaN = Number.
isNaN || function(value) {\n return typeof value === 'number' && isNaN(value)
;\n }\n\n function areSameValue(left, right) {\n if (left === right)\n
return left !== 0 || 1 / left === 1 / right;\n if (numberIsNaN(left) && numb
erIsNaN(right))\n return true;\n\n return left !== left && right !== rig
ht;\n }\n\n // capture A's value if B's value is null or undefined,\n // othe
rwise use B's value\n function resolveBindingValue(oldValue, value) {\n if (
value === undefined && oldValue === null) {\n return value;\n }\n ret
urn (value === null || value === undefined) ? oldValue : value;\n }\n\n var pr
operties = {\n createPropertyObserver: function() {\n var n$ = this._obs
erveNames;\n if (n$ && n$.length) {\n var o = this._propertyObserver
= new CompoundObserver(true);\n this.registerObserver(o);\n // TO
DO(sorvell): may not be kosher to access the value here (this[n]);\n // p
reviously we looked at the descriptor on the prototype\n // this doesn't
work for inheritance and not for accessors without\n // a value property\
n for (var i=0, l=n$.length, n; (i<l) && (n=n$[i]); i++) {\n o.a
ddPath(this, n);\n this.observeArrayValue(n, this[n], null);\n }
\n }\n },\n openPropertyObserver: function() {\n if (this._prope
rtyObserver) {\n this._propertyObserver.open(this.notifyPropertyChanges,
this);\n }\n },\n notifyPropertyChanges: function(newValues, oldValue
s, paths) {\n var name, method, called = {};\n for (var i in oldValues
) {\n // note: paths is of form [object, path, object, path]\n nam
e = paths[2 * i + 1];\n method = this.observe[name];\n if (method)
{\n var ov = oldValues[i], nv = newValues[i];\n // observes t
he value if it is an array\n this.observeArrayValue(name, nv, ov);\n
if (!called[method]) {\n // only invoke change method if one o
f ov or nv is not (undefined | null)\n if ((ov !== undefined && ov !=
= null) || (nv !== undefined && nv !== null)) {\n called[method] =
true;\n // TODO(sorvell): call method with the set of values it's e
xpecting;\n // e.g. 'foo bar': 'invalidate' expects the new and old
values for\n // foo and bar. Currently we give only one of these a
nd then\n // deliver all the arguments.\n this.invokeM
ethod(method, [ov, nv, arguments]);\n }\n }\n }\n
}\n },\n deliverChanges: function() {\n if (this._propertyObserver)
{\n this._propertyObserver.deliver();\n }\n },\n propertyChan
ged_: function(name, value, oldValue) {\n if (this.reflect[name]) {\n
this.reflectPropertyToAttribute(name);\n }\n },\n observeArrayValue
: function(name, value, old) {\n // we only care if there are registered si
de-effects\n var callbackName = this.observe[name];\n if (callbackName
) {\n // if we are observing the previous value, stop\n if (Array.
isArray(old)) {\n log.observe && console.log('[%s] observeArrayValue: u
nregister observer [%s]', this.localName, name);\n this.closeNamedObser
ver(name + '__array');\n }\n // if the new value is an array, bein
g observing it\n if (Array.isArray(value)) {\n log.observe && co
nsole.log('[%s] observeArrayValue: register observer [%s]', this.localName, name
, value);\n var observer = new ArrayObserver(value);\n observe
r.open(function(value, old) {\n this.invokeMethod(callbackName, [old]
);\n }, this);\n this.registerNamedObserver(name + '__array',
observer);\n }\n }\n },\n emitPropertyChangeRecord: function(n
ame, value, oldValue) {\n var object = this;\n if (areSameValue(value,
oldValue))\n return;\n\n this.propertyChanged_(name, value, oldValu
e);\n\n if (!Observer.hasObjectObserve)\n return;\n\n var notif
ier = this.notifier_;\n if (!notifier)\n notifier = this.notifier_ =
Object.getNotifier(this);\n\n updateRecord.object = this;\n updateRec
ord.name = name;\n updateRecord.oldValue = oldValue;\n\n notifier.noti
fy(updateRecord);\n },\n bindToAccessor: function(name, observable, resolv
eFn) {\n var privateName = name + '_';\n var privateObservable = name
+ 'Observable_';\n\n this[privateObservable] = observable;\n var oldV
alue = this[privateName];\n\n var self = this;\n var value = observabl
e.open(function(value, oldValue) {\n self[privateName] = value;\n
self.emitPropertyChangeRecord(name, value, oldValue);\n });\n\n if (re
solveFn && !areSameValue(oldValue, value)) {\n var resolvedValue = resolv
eFn(oldValue, value);\n if (!areSameValue(value, resolvedValue)) {\n
value = resolvedValue;\n if (observable.setValue)\n obs
ervable.setValue(value);\n }\n }\n\n this[privateName] = value;
\n this.emitPropertyChangeRecord(name, value, oldValue);\n\n var obser
ver = {\n close: function() {\n observable.close();\n s
elf[privateObservable] = undefined;\n }\n };\n this.registerObs
erver(observer);\n return observer;\n },\n createComputedProperties:
function() {\n if (!this._computedNames) {\n return;\n }\n\n
for (var i = 0; i < this._computedNames.length; i++) {\n var name = th
is._computedNames[i];\n var expressionText = this.computed[name];\n
try {\n var expression = PolymerExpressions.getExpression(expressionT
ext);\n var observable = expression.getBinding(this, this.element.synta
x);\n this.bindToAccessor(name, observable);\n } catch (ex) {\n
console.error('Failed to create computed property', ex);\n }\n
}\n },\n bindProperty: function(property, observable, oneTime) {\n
if (oneTime) {\n this[property] = observable;\n return;\n }
\n return this.bindToAccessor(property, observable, resolveBindingValue);\n
},\n invokeMethod: function(method, args) {\n var fn = this[method]
|| method;\n if (typeof fn === 'function') {\n fn.apply(this, args);
\n }\n },\n registerObserver: function(observer) {\n if (!this._
observers) {\n this._observers = [observer];\n return;\n }\n\
n this._observers.push(observer);\n },\n // observer array items are
arrays of observers.\n closeObservers: function() {\n if (!this._observe
rs) {\n return;\n }\n\n var observers = this._observers;\n
for (var i = 0; i < observers.length; i++) {\n var observer = observers[
i];\n if (observer && typeof observer.close == 'function') {\n o
bserver.close();\n }\n }\n\n this._observers = [];\n },\n
// bookkeeping observers for memory management\n registerNamedObserver: func
tion(name, observer) {\n var o$ = this._namedObservers || (this._namedObser
vers = {});\n o$[name] = observer;\n },\n closeNamedObserver: functio
n(name) {\n var o$ = this._namedObservers;\n if (o$ && o$[name]) {\n
o$[name].close();\n o$[name] = null;\n return true;\n }
\n },\n closeNamedObservers: function() {\n if (this._namedObservers)
{\n for (var i in this._namedObservers) {\n this.closeNamedObse
rver(i);\n }\n this._namedObservers = {};\n }\n }\n };\n\
n // logging\n var LOG_OBSERVE = '[%s] watching [%s]';\n var LOG_OBSERVED = '
[%s#%s] watch: [%s] now [%s] was [%s]';\n var LOG_CHANGED = '[%s#%s] propertyCh
anged: [%s] now [%s] was [%s]';\n\n // exports\n\n scope.api.instance.properti
es = properties;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Proje
ct Authors. All rights reserved.\n * This code may only be used under the BSD st
yle license found at http://polymer.github.io/LICENSE.txt\n * The complete set o
f authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete
set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n
* Code distributed by Google as part of the polymer project is also\n * subject
to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n
*/\n\n(function(scope) {\n\n // imports\n\n var log = window.logFlags || 0;\n
\n // element api supporting mdv\n var mdv = {\n instanceTemplate: function
(template) {\n // ensure a default bindingDelegate\n var syntax = this
.syntax || (!template.bindingDelegate &&\n this.element.syntax);\n
var dom = template.createInstance(this, syntax);\n var observers = dom.bin
dings_;\n for (var i = 0; i < observers.length; i++) {\n this.regist
erObserver(observers[i]);\n }\n return dom;\n },\n bind: functio
n(name, observable, oneTime) {\n var property = this.propertyForAttribute(n
ame);\n if (!property) {\n // TODO(sjmiles): this mixin method must
use the special form\n // of `super` installed by `mixinMethod` in declar
ation/prototype.js\n return this.mixinSuper(arguments);\n } else {\n
// use n-way Polymer binding\n var observer = this.bindProperty(p
roperty, observable, oneTime);\n // NOTE: reflecting binding information
is typically required only for\n // tooling. It has a performance cost so
it's opt-in in Node.bind.\n if (Platform.enableBindingsReflection && obs
erver) {\n observer.path = observable.path_;\n this._recordBin
ding(property, observer);\n }\n if (this.reflect[property]) {\n
this.reflectPropertyToAttribute(property);\n }\n return obs
erver;\n }\n },\n bindFinished: function() {\n this.makeElementR
eady();\n },\n _recordBinding: function(name, observer) {\n this.bind
ings_ = this.bindings_ || {};\n this.bindings_[name] = observer;\n },\n
// TODO(sorvell): unbind/unbindAll has been removed, as public api, from\n
// TemplateBinding. We still need to close/dispose of observers but perhaps\n
// we should choose a more explicit name.\n asyncUnbindAll: function() {\n
if (!this._unbound) {\n log.unbind && console.log('[%s] asyncUnbindA
ll', this.localName);\n this._unbindAllJob = this.job(this._unbindAllJob,
this.unbindAll, 0);\n }\n },\n unbindAll: function() {\n if (!t
his._unbound) {\n this.closeObservers();\n this.closeNamedObserver
s();\n this._unbound = true;\n }\n },\n cancelUnbindAll: funct
ion() {\n if (this._unbound) {\n log.unbind && console.warn('[%s] al
ready unbound, cannot cancel unbindAll', this.localName);\n return;\n
}\n log.unbind && console.log('[%s] cancelUnbindAll', this.localName);\n
if (this._unbindAllJob) {\n this._unbindAllJob = this._unbindAllJob.
stop();\n }\n }\n };\n\n function unbindNodeTree(node) {\n forNodeT
ree(node, _nodeUnbindAll);\n }\n\n function _nodeUnbindAll(node) {\n node.u
nbindAll();\n }\n\n function forNodeTree(node, callback) {\n if (node) {\n
callback(node);\n for (var child = node.firstChild; child; child = chi
ld.nextSibling) {\n forNodeTree(child, callback);\n }\n }\n }\n\
n var mustachePattern = /\\{\\{([^{}]*)}}/;\n\n // exports\n\n scope.bindPatt
ern = mustachePattern;\n scope.api.instance.mdv = mdv;\n\n})(Polymer);\n","/*\n
* Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This
code may only be used under the BSD style license found at http://polymer.githu
b.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.
github.io/AUTHORS.txt\n * The complete set of contributors may be found at http:
//polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of t
he polymer project is also\n * subject to an additional IP rights grant found at
http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var base =
{\n PolymerBase: true,\n job: function(job, callback, wait) {\n if (
typeof job === 'string') {\n var n = '___' + job;\n this[n] = Poly
mer.job.call(this, this[n], callback, wait);\n } else {\n return Pol
ymer.job.call(this, job, callback, wait);\n }\n },\n super: Polymer.s
uper,\n // user entry point for element has had its createdCallback called\n
created: function() {\n },\n // user entry point for element has shadow
Root and is ready for\n // api interaction\n ready: function() {\n },\n
createdCallback: function() {\n if (this.templateInstance && this.templ
ateInstance.model) {\n console.warn('Attributes on ' + this.localName + '
were data bound ' +\n 'prior to Polymer upgrading the element. This
may result in ' +\n 'incorrect binding types.');\n }\n this
.created();\n this.prepareElement();\n if (!this.ownerDocument.isStagi
ngDocument) {\n this.makeElementReady();\n }\n },\n // system
entry point, do not override\n prepareElement: function() {\n if (this._
elementPrepared) {\n console.warn('Element already prepared', this.localN
ame);\n return;\n }\n this._elementPrepared = true;\n // s
torage for shadowRoots info\n this.shadowRoots = {};\n // install prop
erty observers\n this.createPropertyObserver();\n this.openPropertyObs
erver();\n // install boilerplate attributes\n this.copyInstanceAttrib
utes();\n // process input attributes\n this.takeAttributes();\n
// add event listeners\n this.addHostListeners();\n },\n makeElementR
eady: function() {\n if (this._readied) {\n return;\n }\n
this._readied = true;\n this.createComputedProperties();\n // TODO(sor
vell): We could create an entry point here\n // for the user to compute pro
perty values.\n // process declarative resources\n this.parseDeclarati
ons(this.__proto__);\n // TODO(sorvell): CE polyfill uses unresolved attrib
ute to simulate\n // :unresolved; remove this attribute to be compatible wi
th native\n // CE.\n this.removeAttribute('unresolved');\n // use
r entry point\n this.ready();\n },\n attachedCallback: function() {\n
this.cancelUnbindAll();\n // invoke user action\n if (this.attac
hed) {\n this.attached();\n }\n // TODO(sorvell): bc\n if
(this.enteredView) {\n this.enteredView();\n }\n // NOTE: domRe
ady can be used to access elements in dom (descendants,\n // ancestors, sib
lings) such that the developer is enured to upgrade\n // ordering. If the e
lement definitions have loaded, domReady\n // can be used to access upgrade
d elements.\n if (!this.hasBeenAttached) {\n this.hasBeenAttached =
true;\n if (this.domReady) {\n this.async('domReady');\n
}\n }\n },\n detachedCallback: function() {\n if (!this.preventD
ispose) {\n this.asyncUnbindAll();\n }\n // invoke user action\
n if (this.detached) {\n this.detached();\n }\n // TODO(so
rvell): bc\n if (this.leftView) {\n this.leftView();\n }\n }
,\n // TODO(sorvell): bc\n enteredViewCallback: function() {\n this.a
ttachedCallback();\n },\n // TODO(sorvell): bc\n leftViewCallback: func
tion() {\n this.detachedCallback();\n },\n // TODO(sorvell): bc\n
enteredDocumentCallback: function() {\n this.attachedCallback();\n },\n
// TODO(sorvell): bc\n leftDocumentCallback: function() {\n this.deta
chedCallback();\n },\n // recursive ancestral <element> initialization, ol
dest first\n parseDeclarations: function(p) {\n if (p && p.element) {\n
this.parseDeclarations(p.__proto__);\n p.parseDeclaration.call(thi
s, p.element);\n }\n },\n // parse input <element> as needed, overrid
e for custom behavior\n parseDeclaration: function(elementElement) {\n v
ar template = this.fetchTemplate(elementElement);\n if (template) {\n
var root = this.shadowFromTemplate(template);\n this.shadowRoots[elemen
tElement.name] = root;\n }\n },\n // return a shadow-root template (i
f desired), override for custom behavior\n fetchTemplate: function(elementEle
ment) {\n return elementElement.querySelector('template');\n },\n //
utility function that creates a shadow root from a <template>\n shadowFromTem
plate: function(template) {\n if (template) {\n // make a shadow roo
t\n var root = this.createShadowRoot();\n // stamp template\n
// which includes parsing and applying MDV bindings before being\n //
inserted (to avoid {{}} in attribute values)\n // e.g. to prevent <img sr
c=\"images/{{icon}}\"> from generating a 404.\n var dom = this.instanceTe
mplate(template);\n // append to shadow dom\n root.appendChild(dom
);\n // perform post-construction initialization tasks on shadow root\n
this.shadowRootReady(root, template);\n // return the created shado
w root\n return root;\n }\n },\n // utility function that stam
ps a <template> into light-dom\n lightFromTemplate: function(template, refNod
e) {\n if (template) {\n // TODO(sorvell): mark this element as an e
ventController so that\n // event listeners on bound nodes inside it will
be called on it.\n // Note, the expectation here is that events on all d
escendants\n // should be handled by this element.\n this.eventCon
troller = this;\n // stamp template\n // which includes parsing an
d applying MDV bindings before being\n // inserted (to avoid {{}} in attr
ibute values)\n // e.g. to prevent <img src=\"images/{{icon}}\"> from gen
erating a 404.\n var dom = this.instanceTemplate(template);\n // a
ppend to shadow dom\n if (refNode) {\n this.insertBefore(dom, re
fNode);\n } else {\n this.appendChild(dom);\n }\n
// perform post-construction initialization tasks on ahem, light root\n t
his.shadowRootReady(this);\n // return the created shadow root\n r
eturn dom;\n }\n },\n shadowRootReady: function(root) {\n // loc
ate nodes with id and store references to them in this.$ hash\n this.marsha
lNodeReferences(root);\n },\n // locate nodes with id and store references
to them in this.$ hash\n marshalNodeReferences: function(root) {\n // e
stablish $ instance variable\n var $ = this.$ = this.$ || {};\n // pop
ulate $ from nodes with ID from the LOCAL tree\n if (root) {\n var n
$ = root.querySelectorAll(\"[id]\");\n for (var i=0, l=n$.length, n; (i<l
) && (n=n$[i]); i++) {\n $[n.id] = n;\n };\n }\n },\n
attributeChangedCallback: function(name, oldValue) {\n // TODO(sjmiles): a
dhoc filter\n if (name !== 'class' && name !== 'style') {\n this.att
ributeToProperty(name, this.getAttribute(name));\n }\n if (this.attrib
uteChanged) {\n this.attributeChanged.apply(this, arguments);\n }\n
},\n onMutation: function(node, listener) {\n var observer = new Muta
tionObserver(function(mutations) {\n listener.call(this, observer, mutati
ons);\n observer.disconnect();\n }.bind(this));\n observer.obse
rve(node, {childList: true, subtree: true});\n }\n };\n\n // true if object
has own PolymerBase api\n function isBase(object) {\n return object.hasOwnP
roperty('PolymerBase')\n }\n\n // name a base constructor for dev tools\n\n f
unction PolymerBase() {};\n PolymerBase.prototype = base;\n base.constructor =
PolymerBase;\n\n // exports\n\n scope.Base = PolymerBase;\n scope.isBase = i
sBase;\n scope.api.instance.base = base;\n\n})(Polymer);\n","/*\n * Copyright (
c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only
be used under the BSD style license found at http://polymer.github.io/LICENSE.t
xt\n * The complete set of authors may be found at http://polymer.github.io/AUTH
ORS.txt\n * The complete set of contributors may be found at http://polymer.gith
ub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer pro
ject is also\n * subject to an additional IP rights grant found at http://polyme
r.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log
= window.logFlags || {};\n var hasShadowDOMPolyfill = window.ShadowDOMPolyfill;
\n\n // magic words\n \n var STYLE_SCOPE_ATTRIBUTE = 'element';\n var STYLE_
CONTROLLER_SCOPE = 'controller';\n \n var styles = {\n STYLE_SCOPE_ATTRIBUT
E: STYLE_SCOPE_ATTRIBUTE,\n /**\n * Installs external stylesheets and <st
yle> elements with the attribute \n * polymer-scope='controller' into the sc
ope of element. This is intended\n * to be a called during custom element co
nstruction.\n */\n installControllerStyles: function() {\n // apply c
ontroller styles, but only if they are not yet applied\n var scope = this.f
indStyleScope();\n if (scope && !this.scopeHasNamedStyle(scope, this.localN
ame)) {\n // allow inherited controller styles\n var proto = getPr
ototypeOf(this), cssText = '';\n while (proto && proto.element) {\n
cssText += proto.element.cssTextForScope(STYLE_CONTROLLER_SCOPE);\n
proto = getPrototypeOf(proto);\n }\n if (cssText) {\n th
is.installScopeCssText(cssText, scope);\n }\n }\n },\n install
ScopeStyle: function(style, name, scope) {\n var scope = scope || this.find
StyleScope(), name = name || '';\n if (scope && !this.scopeHasNamedStyle(sc
ope, this.localName + name)) {\n var cssText = '';\n if (style ins
tanceof Array) {\n for (var i=0, l=style.length, s; (i<l) && (s=style[i
]); i++) {\n cssText += s.textContent + '\\n\\n';\n }\n
} else {\n cssText = style.textContent;\n }\n this.ins
tallScopeCssText(cssText, scope, name);\n }\n },\n installScopeCssTex
t: function(cssText, scope, name) {\n scope = scope || this.findStyleScope(
);\n name = name || '';\n if (!scope) {\n return;\n }\n
if (hasShadowDOMPolyfill) {\n cssText = shimCssText(cssText, scope.hos
t);\n }\n var style = this.element.cssTextToScopeStyle(cssText,\n
STYLE_CONTROLLER_SCOPE);\n Polymer.applyStyleToScope(style, scope);\n
// cache that this style has been applied\n this.styleCacheForScope(sc
ope)[this.localName + name] = true;\n },\n findStyleScope: function(node)
{\n // find the shadow root that contains this element\n var n = node
|| this;\n while (n.parentNode) {\n n = n.parentNode;\n }\n
return n;\n },\n scopeHasNamedStyle: function(scope, name) {\n var
cache = this.styleCacheForScope(scope);\n return cache[name];\n },\n
styleCacheForScope: function(scope) {\n if (hasShadowDOMPolyfill) {\n
var scopeName = scope.host ? scope.host.localName : scope.localName;\n
return polyfillScopeStyleCache[scopeName] || (polyfillScopeStyleCache[scopeName]
= {});\n } else {\n return scope._scopeStyles = (scope._scopeStyles
|| {});\n }\n }\n };\n\n var polyfillScopeStyleCache = {};\n \n //
NOTE: use raw prototype traversal so that we ensure correct traversal\n // on p
latforms where the protoype chain is simulated via __proto__ (IE10)\n function
getPrototypeOf(prototype) {\n return prototype.__proto__;\n }\n\n function
shimCssText(cssText, host) {\n var name = '', is = false;\n if (host) {\n
name = host.localName;\n is = host.hasAttribute('is');\n }\n var
selector = Platform.ShadowCSS.makeScopeSelector(name, is);\n return Platform
.ShadowCSS.shimCssText(cssText, selector);\n }\n\n // exports\n\n scope.api.i
nstance.styles = styles;\n \n})(Polymer);\n","/*\n * Copyright (c) 2014 The Pol
ymer Project Authors. All rights reserved.\n * This code may only be used under
the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The comp
lete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The
complete set of contributors may be found at http://polymer.github.io/CONTRIBUT
ORS.txt\n * Code distributed by Google as part of the polymer project is also\n
* subject to an additional IP rights grant found at http://polymer.github.io/PAT
ENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var extend = scope.exte
nd;\n var api = scope.api;\n\n // imperative implementation: Polymer()\n\n //
specify an 'own' prototype for tag `name`\n function element(name, prototype)
{\n if (arguments.length === 1 && typeof arguments[0] !== 'string') {\n
prototype = name;\n var script = document._currentScript;\n name = scr
ipt && script.parentNode && script.parentNode.getAttribute ?\n script.p
arentNode.getAttribute('name') : '';\n if (!name) {\n throw 'Element
name could not be inferred.';\n }\n }\n if (getRegisteredPrototype[n
ame]) {\n throw 'Already registered (Polymer) prototype for element ' + nam
e;\n }\n // cache the prototype\n registerPrototype(name, prototype);\n
// notify the registrar waiting for 'name', if any\n notifyPrototype(name
);\n }\n\n // async prototype source\n\n function waitingForPrototype(name, c
lient) {\n waitPrototype[name] = client;\n }\n\n var waitPrototype = {};\n\
n function notifyPrototype(name) {\n if (waitPrototype[name]) {\n waitP
rototype[name].registerWhenReady();\n delete waitPrototype[name];\n }\n
}\n\n // utility and bookkeeping\n\n // maps tag names to prototypes, as regi
stered with\n // Polymer. Prototypes associated with a tag name\n // using doc
ument.registerElement are available from\n // HTMLElement.getPrototypeForTag().
\n // If an element was fully registered by Polymer, then\n // Polymer.getRegi
steredPrototype(name) === \n // HTMLElement.getPrototypeForTag(name)\n\n var
prototypesByName = {};\n\n function registerPrototype(name, prototype) {\n
return prototypesByName[name] = prototype || {};\n }\n\n function getRegistere
dPrototype(name) {\n return prototypesByName[name];\n }\n\n // exports\n\n
scope.getRegisteredPrototype = getRegisteredPrototype;\n scope.waitingForProto
type = waitingForPrototype;\n\n // namespace shenanigans so we can expose our s
cope on the registration \n // function\n\n // make window.Polymer reference `
element()`\n\n window.Polymer = element;\n\n // TODO(sjmiles): find a way to d
o this that is less terrible\n // copy window.Polymer properties onto `element(
)`\n\n extend(Polymer, scope);\n\n // Under the HTMLImports polyfill, scripts
in the main document\n // do not block on imports; we want to allow calls to Po
lymer in the main\n // document. Platform collects those calls until we can pro
cess them, which\n // we do here.\n\n var declarations = Platform.deliverDecla
rations();\n if (declarations) {\n for (var i=0, l=declarations.length, d; (
i<l) && (d=declarations[i]); i++) {\n element.apply(null, d);\n }\n }\n
\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All ri
ghts reserved.\n * This code may only be used under the BSD style license found
at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be f
ound at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributor
s may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed
by Google as part of the polymer project is also\n * subject to an additional I
P rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(s
cope) {\n\nvar path = {\n resolveElementPaths: function(node) {\n Platform.u
rlResolver.resolveDom(node);\n },\n addResolvePathApi: function() {\n // le
t assetpath attribute modify the resolve path\n var assetPath = this.getAttri
bute('assetpath') || '';\n var root = new URL(assetPath, this.ownerDocument.b
aseURI);\n this.prototype.resolvePath = function(urlPath, base) {\n var
u = new URL(urlPath, base || root);\n return u.href;\n };\n }\n};\n\n//
exports\nscope.api.declaration.path = path;\n\n})(Polymer);\n","/*\n * Copyrigh
t (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may o
nly be used under the BSD style license found at http://polymer.github.io/LICENS
E.txt\n * The complete set of authors may be found at http://polymer.github.io/A
UTHORS.txt\n * The complete set of contributors may be found at http://polymer.g
ithub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer
project is also\n * subject to an additional IP rights grant found at http://pol
ymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var l
og = window.logFlags || {};\n var api = scope.api.instance.styles;\n var STYLE
_SCOPE_ATTRIBUTE = api.STYLE_SCOPE_ATTRIBUTE;\n\n var hasShadowDOMPolyfill = wi
ndow.ShadowDOMPolyfill;\n\n // magic words\n\n var STYLE_SELECTOR = 'style';\n
var STYLE_LOADABLE_MATCH = '@import';\n var SHEET_SELECTOR = 'link[rel=styles
heet]';\n var STYLE_GLOBAL_SCOPE = 'global';\n var SCOPE_ATTR = 'polymer-scope
';\n\n var styles = {\n // returns true if resources are loading\n loadSt
yles: function(callback) {\n var template = this.fetchTemplate();\n va
r content = template && this.templateContent();\n if (content) {\n t
his.convertSheetsToStyles(content);\n var styles = this.findLoadableStyle
s(content);\n if (styles.length) {\n var templateUrl = template.
ownerDocument.baseURI;\n return Platform.styleResolver.loadStyles(style
s, templateUrl, callback);\n }\n }\n if (callback) {\n c
allback();\n }\n },\n convertSheetsToStyles: function(root) {\n
var s$ = root.querySelectorAll(SHEET_SELECTOR);\n for (var i=0, l=s$.length
, s, c; (i<l) && (s=s$[i]); i++) {\n c = createStyleElement(importRuleFor
Sheet(s, this.ownerDocument.baseURI),\n this.ownerDocument);\n
this.copySheetAttributes(c, s);\n s.parentNode.replaceChild(c, s);\n
}\n },\n copySheetAttributes: function(style, link) {\n for (var i=
0, a$=link.attributes, l=a$.length, a; (a=a$[i]) && i<l; i++) {\n if (a.n
ame !== 'rel' && a.name !== 'href') {\n style.setAttribute(a.name, a.va
lue);\n }\n }\n },\n findLoadableStyles: function(root) {\n
var loadables = [];\n if (root) {\n var s$ = root.querySelectorAl
l(STYLE_SELECTOR);\n for (var i=0, l=s$.length, s; (i<l) && (s=s$[i]); i+
+) {\n if (s.textContent.match(STYLE_LOADABLE_MATCH)) {\n lo
adables.push(s);\n }\n }\n }\n return loadables;\n
},\n /**\n * Install external stylesheets loaded in <polymer-element> ele
ments into the \n * element's template.\n * @param elementElement The <e
lement> element to style.\n */\n installSheets: function() {\n this.
cacheSheets();\n this.cacheStyles();\n this.installLocalSheets();\n
this.installGlobalStyles();\n },\n /**\n * Remove all sheets from e
lement and store for later use.\n */\n cacheSheets: function() {\n t
his.sheets = this.findNodes(SHEET_SELECTOR);\n this.sheets.forEach(function
(s) {\n if (s.parentNode) {\n s.parentNode.removeChild(s);\n
}\n });\n },\n cacheStyles: function() {\n this.styles = thi
s.findNodes(STYLE_SELECTOR + '[' + SCOPE_ATTR + ']');\n this.styles.forEach
(function(s) {\n if (s.parentNode) {\n s.parentNode.removeChild(
s);\n }\n });\n },\n /**\n * Takes external stylesheets lo
aded in an <element> element and moves\n * their content into a <style> elem
ent inside the <element>'s template.\n * The sheet is then removed from the
<element>. This is done only so \n * that if the element is loaded in the ma
in document, the sheet does\n * not become active.\n * Note, ignores she
ets with the attribute 'polymer-scope'.\n * @param elementElement The <eleme
nt> element to style.\n */\n installLocalSheets: function () {\n var
sheets = this.sheets.filter(function(s) {\n return !s.hasAttribute(SCOPE
_ATTR);\n });\n var content = this.templateContent();\n if (conte
nt) {\n var cssText = '';\n sheets.forEach(function(sheet) {\n
cssText += cssTextFromSheet(sheet) + '\\n';\n });\n if (cssT
ext) {\n var style = createStyleElement(cssText, this.ownerDocument);\n
content.insertBefore(style, content.firstChild);\n }\n }\n
},\n findNodes: function(selector, matcher) {\n var nodes = this.que
rySelectorAll(selector).array();\n var content = this.templateContent();\n
if (content) {\n var templateNodes = content.querySelectorAll(select
or).array();\n nodes = nodes.concat(templateNodes);\n }\n retur
n matcher ? nodes.filter(matcher) : nodes;\n },\n /**\n * Promotes ext
ernal stylesheets and <style> elements with the attribute \n * polymer-scope
='global' into global scope.\n * This is particularly useful for defining @k
eyframe rules which \n * currently do not function in scoped or shadow style
elements.\n * (See wkb.ug/72462)\n * @param elementElement The <element
> element to style.\n */\n // TODO(sorvell): remove when wkb.ug/72462 is a
ddressed.\n installGlobalStyles: function() {\n var style = this.styleFo
rScope(STYLE_GLOBAL_SCOPE);\n applyStyleToScope(style, document.head);\n
},\n cssTextForScope: function(scopeDescriptor) {\n var cssText = '';\n
// handle stylesheets\n var selector = '[' + SCOPE_ATTR + '=' + scope
Descriptor + ']';\n var matcher = function(s) {\n return matchesSele
ctor(s, selector);\n };\n var sheets = this.sheets.filter(matcher);\n
sheets.forEach(function(sheet) {\n cssText += cssTextFromSheet(sheet
) + '\\n\\n';\n });\n // handle cached style elements\n var style
s = this.styles.filter(matcher);\n styles.forEach(function(style) {\n
cssText += style.textContent + '\\n\\n';\n });\n return cssText;\n
},\n styleForScope: function(scopeDescriptor) {\n var cssText = this.c
ssTextForScope(scopeDescriptor);\n return this.cssTextToScopeStyle(cssText,
scopeDescriptor);\n },\n cssTextToScopeStyle: function(cssText, scopeDesc
riptor) {\n if (cssText) {\n var style = createStyleElement(cssText)
;\n style.setAttribute(STYLE_SCOPE_ATTRIBUTE, this.getAttribute('name') +
\n '-' + scopeDescriptor);\n return style;\n }\n }\n
};\n\n function importRuleForSheet(sheet, baseUrl) {\n var href = new URL(sh
eet.getAttribute('href'), baseUrl).href;\n return '@import \\'' + href + '\\'
;';\n }\n\n function applyStyleToScope(style, scope) {\n if (style) {\n
if (scope === document) {\n scope = document.head;\n }\n if (
hasShadowDOMPolyfill) {\n scope = document.head;\n }\n // TODO(
sorvell): necessary for IE\n // see https://connect.microsoft.com/IE/feedba
ck/details/790212/\n // cloning-a-style-element-and-adding-to-document-prod
uces\n // -unexpected-result#details\n // var clone = style.cloneNode(
true);\n var clone = createStyleElement(style.textContent);\n var attr
= style.getAttribute(STYLE_SCOPE_ATTRIBUTE);\n if (attr) {\n clone.
setAttribute(STYLE_SCOPE_ATTRIBUTE, attr);\n }\n // TODO(sorvell): pro
bably too brittle; try to figure out \n // where to put the element.\n
var refNode = scope.firstElementChild;\n if (scope === document.head) {\n
var selector = 'style[' + STYLE_SCOPE_ATTRIBUTE + ']';\n var s$ =
document.head.querySelectorAll(selector);\n if (s$.length) {\n r
efNode = s$[s$.length-1].nextElementSibling;\n }\n }\n scope.in
sertBefore(clone, refNode);\n }\n }\n\n function createStyleElement(cssText
, scope) {\n scope = scope || document;\n scope = scope.createElement ? sc
ope : scope.ownerDocument;\n var style = scope.createElement('style');\n s
tyle.textContent = cssText;\n return style;\n }\n\n function cssTextFromShe
et(sheet) {\n return (sheet && sheet.__resource) || '';\n }\n\n function ma
tchesSelector(node, inSelector) {\n if (matches) {\n return matches.call
(node, inSelector);\n }\n }\n var p = HTMLElement.prototype;\n var matches
= p.matches || p.matchesSelector || p.webkitMatchesSelector \n || p.mozMat
chesSelector;\n \n // exports\n\n scope.api.declaration.styles = styles;\n s
cope.applyStyleToScope = applyStyleToScope;\n \n})(Polymer);\n","/*\n * Copyrig
ht (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may
only be used under the BSD style license found at http://polymer.github.io/LICEN
SE.txt\n * The complete set of authors may be found at http://polymer.github.io/
AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.
github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer
project is also\n * subject to an additional IP rights grant found at http://po
lymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var
log = window.logFlags || {};\n var api = scope.api.instance.events;\n var EVEN
T_PREFIX = api.EVENT_PREFIX;\n // polymer-element declarative api: events featu
re\n\n var mixedCaseEventTypes = {};\n [\n 'webkitAnimationStart',\n 'we
bkitAnimationEnd',\n 'webkitTransitionEnd',\n 'DOMFocusOut',\n 'DOMFocu
sIn',\n 'DOMMouseScroll'\n ].forEach(function(e) {\n mixedCaseEventTypes[
e.toLowerCase()] = e;\n });\n\n var events = {\n parseHostEvents: function(
) {\n // our delegates map\n var delegates = this.prototype.eventDeleg
ates;\n // extract data from attributes into delegates\n this.addAttri
buteDelegates(delegates);\n },\n addAttributeDelegates: function(delegates
) {\n // for each attribute\n for (var i=0, a; a=this.attributes[i]; i
++) {\n // does it have magic marker identifying it as an event delegate?
\n if (this.hasEventPrefix(a.name)) {\n // if so, add the info t
o delegates\n delegates[this.removeEventPrefix(a.name)] = a.value.repla
ce('{{', '')\n .replace('}}', '').trim();\n }\n }\n
},\n // starts with 'on-'\n hasEventPrefix: function (n) {\n return n
&& (n[0] === 'o') && (n[1] === 'n') && (n[2] === '-');\n },\n removeEvent
Prefix: function(n) {\n return n.slice(prefixLength);\n },\n findCont
roller: function(node) {\n while (node.parentNode) {\n if (node.even
tController) {\n return node.eventController;\n }\n node
= node.parentNode;\n }\n return node.host;\n },\n getEventHandle
r: function(controller, target, method) {\n var events = this;\n retur
n function(e) {\n if (!controller || !controller.PolymerBase) {\n
controller = events.findController(target);\n }\n\n var args = [
e, e.detail, e.currentTarget];\n controller.dispatchMethod(controller, me
thod, args);\n };\n },\n prepareEventBinding: function(pathString, na
me, node) {\n if (!this.hasEventPrefix(name))\n return;\n\n var
eventType = this.removeEventPrefix(name);\n eventType = mixedCaseEventType
s[eventType] || eventType;\n\n var events = this;\n\n return function(
model, node, oneTime) {\n var handler = events.getEventHandler(undefined,
node, pathString);\n PolymerGestures.addEventListener(node, eventType, h
andler);\n\n if (oneTime)\n return;\n\n // TODO(rafaelw):
This is really pointless work. Aside from the cost\n // of these allocat
ions, NodeBind is going to setAttribute back to its\n // current value. F
ixing this would mean changing the TemplateBinding\n // binding delegate
API.\n function bindingValue() {\n return '{{ ' + pathString + '
}}';\n }\n\n return {\n open: bindingValue,\n d
iscardChanges: bindingValue,\n close: function() {\n Polymer
Gestures.removeEventListener(node, eventType, handler);\n }\n };
\n };\n }\n };\n\n var prefixLength = EVENT_PREFIX.length;\n\n // exp
orts\n scope.api.declaration.events = events;\n\n})(Polymer);\n","/*\n * Copyri
ght (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may
only be used under the BSD style license found at http://polymer.github.io/LICE
NSE.txt\n * The complete set of authors may be found at http://polymer.github.io
/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer
.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polyme
r project is also\n * subject to an additional IP rights grant found at http://p
olymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // element api\n\n
var properties = {\n inferObservers: function(prototype) {\n // called
before prototype.observe is chained to inherited object\n var observe = pro
totype.observe, property;\n for (var n in prototype) {\n if (n.slice
(-7) === 'Changed') {\n if (!observe) {\n observe = (protot
ype.observe = {});\n }\n property = n.slice(0, -7)\n
observe[property] = observe[property] || n;\n }\n }\n },\n exp
lodeObservers: function(prototype) {\n // called before prototype.observe i
s chained to inherited object\n var o = prototype.observe;\n if (o) {\
n var exploded = {};\n for (var n in o) {\n var names = n
.split(' ');\n for (var i=0, ni; ni=names[i]; i++) {\n explo
ded[ni] = o[n];\n }\n }\n prototype.observe = exploded;\n
}\n },\n optimizePropertyMaps: function(prototype) {\n if (prot
otype.observe) {\n // construct name list\n var a = prototype._obs
erveNames = [];\n for (var n in prototype.observe) {\n var names
= n.split(' ');\n for (var i=0, ni; ni=names[i]; i++) {\n a
.push(ni);\n }\n }\n }\n if (prototype.publish) {\n
// construct name list\n var a = prototype._publishNames = [];\n
for (var n in prototype.publish) {\n a.push(n);\n }\n }
\n if (prototype.computed) {\n // construct name list\n var a
= prototype._computedNames = [];\n for (var n in prototype.computed) {\n
a.push(n);\n }\n }\n },\n publishProperties: functio
n(prototype, base) {\n // if we have any properties to publish\n var p
ublish = prototype.publish;\n if (publish) {\n // transcribe `publis
h` entries onto own prototype\n this.requireProperties(publish, prototype
, base);\n // construct map of lower-cased property names\n protot
ype._publishLC = this.lowerCaseMap(publish);\n }\n },\n //\n // `n
ame: value` entries in the `publish` object may need to generate \n // matchi
ng properties on the prototype.\n //\n // Values that are objects may have
a `reflect` property, which\n // signals that the value describes property c
ontrol metadata.\n // In metadata objects, the prototype default value (if an
y)\n // is encoded in the `value` property.\n //\n // publish: {\n /
/ foo: 5, \n // bar: {value: true, reflect: true},\n // zot: {}\n
// }\n //\n // `reflect` metadata property controls whether changes to th
e property\n // are reflected back to the attribute (default false). \n //
\n // A value is stored on the prototype unless it's === `undefined`,\n //
in which case the base chain is checked for a value.\n // If the basal value
is also undefined, `null` is stored on the prototype.\n //\n // The refle
ction data is stored on another prototype object, `reflect`\n // which also c
an be specified directly.\n //\n // reflect: {\n // foo: true\n //
}\n //\n requireProperties: function(propertyInfos, prototype, base) {\n
// per-prototype storage for reflected properties\n prototype.reflect
= prototype.reflect || {};\n // ensure a prototype value for each property\
n // and update the property's reflect to attribute status\n for (var
n in propertyInfos) {\n var value = propertyInfos[n];\n // value h
as metadata if it has a `reflect` property\n if (value && value.reflect !
== undefined) {\n prototype.reflect[n] = Boolean(value.reflect);\n
value = value.value;\n }\n // only set a value if one is spec
ified\n if (value !== undefined) {\n prototype[n] = value;\n
}\n }\n },\n lowerCaseMap: function(properties) {\n var map
= {};\n for (var n in properties) {\n map[n.toLowerCase()] = n;\n
}\n return map;\n },\n createPropertyAccessor: function(name) {\n
var proto = this.prototype;\n\n var privateName = name + '_';\n v
ar privateObservable = name + 'Observable_';\n proto[privateName] = proto[
name];\n\n Object.defineProperty(proto, name, {\n get: function() {\
n var observable = this[privateObservable];\n if (observable)\
n observable.deliver();\n\n return this[privateName];\n
},\n set: function(value) {\n var observable = this[privateOb
servable];\n if (observable) {\n observable.setValue(value);
\n return;\n }\n\n var oldValue = this[privateName]
;\n this[privateName] = value;\n this.emitPropertyChangeRecord
(name, value, oldValue);\n\n return value;\n },\n configu
rable: true\n });\n },\n createPropertyAccessors: function(prototype)
{\n var n$ = prototype._publishNames;\n if (n$ && n$.length) {\n
for (var i=0, l=n$.length, n, fn; (i<l) && (n=n$[i]); i++) {\n this.
createPropertyAccessor(n);\n }\n }\n var n$ = prototype._comput
edNames;\n if (n$ && n$.length) {\n for (var i=0, l=n$.length, n, fn
; (i<l) && (n=n$[i]); i++) {\n this.createPropertyAccessor(n);\n
}\n }\n }\n };\n\n // exports\n\n scope.api.declaration.properties =
properties;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project A
uthors. All rights reserved.\n * This code may only be used under the BSD style
license found at http://polymer.github.io/LICENSE.txt\n * The complete set of au
thors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set
of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Co
de distributed by Google as part of the polymer project is also\n * subject to a
n additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\
n(function(scope) {\n\n // magic words\n\n var ATTRIBUTES_ATTRIBUTE = 'attribu
tes';\n var ATTRIBUTES_REGEX = /\\s|,/;\n\n // attributes api\n\n var attribu
tes = {\n \n inheritAttributesObjects: function(prototype) {\n // cha
in our lower-cased publish map to the inherited version\n this.inheritObjec
t(prototype, 'publishLC');\n // chain our instance attributes map to the in
herited version\n this.inheritObject(prototype, '_instanceAttributes');\n
},\n\n publishAttributes: function(prototype, base) {\n // merge names
from 'attributes' attribute into the 'publish' object\n var attributes = t
his.getAttribute(ATTRIBUTES_ATTRIBUTE);\n if (attributes) {\n // cre
ate a `publish` object if needed.\n // the `publish` object is only relev
ant to this prototype, the \n // publishing logic in `declaration/propert
ies.js` is responsible for\n // managing property values on the prototype
chain.\n // TODO(sjmiles): the `publish` object is later chained to it's
\n // ancestor object, presumably this is only for \n
// reflection or other non-library uses. \n var publis
h = prototype.publish || (prototype.publish = {}); \n // names='a b c' or
names='a,b,c'\n var names = attributes.split(ATTRIBUTES_REGEX);\n
// record each name for publishing\n for (var i=0, l=names.length, n; i<
l; i++) {\n // remove excess ws\n n = names[i].trim();\n
// looks weird, but causes n to exist on `publish` if it does not;\n
// a more careful test would need expensive `in` operator\n if (n &&
publish[n] === undefined) {\n publish[n] = undefined;\n }\n
}\n }\n },\n\n // record clonable attributes from <element>\n
accumulateInstanceAttributes: function() {\n // inherit instance attribu
tes\n var clonable = this.prototype._instanceAttributes;\n // merge at
tributes from element\n var a$ = this.attributes;\n for (var i=0, l=a$
.length, a; (i<l) && (a=a$[i]); i++) { \n if (this.isInstanceAttribute(a
.name)) {\n clonable[a.name] = a.value;\n }\n }\n },\n\n
isInstanceAttribute: function(name) {\n return !this.blackList[name] &&
name.slice(0,3) !== 'on-';\n },\n\n // do not clone these attributes onto
instances\n blackList: {\n name: 1,\n 'extends': 1,\n constru
ctor: 1,\n noscript: 1,\n assetpath: 1,\n 'cache-csstext': 1\n
}\n \n };\n\n // add ATTRIBUTES_ATTRIBUTE to the blacklist\n attributes.b
lackList[ATTRIBUTES_ATTRIBUTE] = 1;\n\n // exports\n\n scope.api.declaration.a
ttributes = attributes;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polyme
r Project Authors. All rights reserved.\n * This code may only be used under the
BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complet
e set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The co
mplete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
.txt\n * Code distributed by Google as part of the polymer project is also\n * s
ubject to an additional IP rights grant found at http://polymer.github.io/PATENT
S.txt\n */\n\n(function(scope) {\n\n // imports\n var events = scope.api.decla
ration.events;\n\n var syntax = new PolymerExpressions();\n var prepareBinding
= syntax.prepareBinding;\n\n // Polymer takes a first crack at the binding to
see if it's a declarative\n // event handler.\n syntax.prepareBinding = functi
on(pathString, name, node) {\n return events.prepareEventBinding(pathString,
name, node) ||\n prepareBinding.call(syntax, pathString, name, node);\
n };\n\n // declaration api supporting mdv\n var mdv = {\n syntax: syntax,
\n fetchTemplate: function() {\n return this.querySelector('template');\
n },\n templateContent: function() {\n var template = this.fetchTempl
ate();\n return template && Platform.templateContent(template);\n },\n
installBindingDelegate: function(template) {\n if (template) {\n t
emplate.bindingDelegate = this.syntax;\n }\n }\n };\n\n // exports\n
scope.api.declaration.mdv = mdv;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 T
he Polymer Project Authors. All rights reserved.\n * This code may only be used
under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * Th
e complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n
* The complete set of contributors may be found at http://polymer.github.io/CON
TRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is a
lso\n * subject to an additional IP rights grant found at http://polymer.github.
io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n \n var api = scope
.api;\n var isBase = scope.isBase;\n var extend = scope.extend;\n\n var hasSh
adowDOMPolyfill = window.ShadowDOMPolyfill;\n\n // prototype api\n\n var proto
type = {\n\n register: function(name, extendeeName) {\n // build prototy
pe combining extendee, Polymer base, and named api\n this.buildPrototype(na
me, extendeeName);\n // register our custom element with the platform\n
this.registerPrototype(name, extendeeName);\n // reference constructor in
a global named by 'constructor' attribute\n this.publishConstructor();\n
},\n\n buildPrototype: function(name, extendeeName) {\n // get our cus
tom prototype (before chaining)\n var extension = scope.getRegisteredProtot
ype(name);\n // get basal prototype\n var base = this.generateBaseProt
otype(extendeeName);\n // implement declarative features\n this.desuga
rBeforeChaining(extension, base);\n // join prototypes\n this.prototyp
e = this.chainPrototypes(extension, base);\n // more declarative features\n
this.desugarAfterChaining(name, extendeeName);\n },\n\n desugarBefor
eChaining: function(prototype, base) {\n // back reference declaration elem
ent\n // TODO(sjmiles): replace `element` with `elementElement` or `declara
tion`\n prototype.element = this;\n // transcribe `attributes` declara
tions onto own prototype's `publish`\n this.publishAttributes(prototype, ba
se);\n // `publish` properties to the prototype and to attribute watch\n
this.publishProperties(prototype, base);\n // infer observers for `obser
ve` list based on method names\n this.inferObservers(prototype);\n //
desugar compound observer syntax, e.g. 'a b c' \n this.explodeObservers(pro
totype);\n },\n\n chainPrototypes: function(prototype, base) {\n // c
hain various meta-data objects to inherited versions\n this.inheritMetaData
(prototype, base);\n // chain custom api to inherited\n var chained =
this.chainObject(prototype, base);\n // x-platform fixup\n ensureProto
typeTraversal(chained);\n return chained;\n },\n\n inheritMetaData: f
unction(prototype, base) {\n // chain observe object to inherited\n th
is.inheritObject('observe', prototype, base);\n // chain publish object to
inherited\n this.inheritObject('publish', prototype, base);\n // chain
reflect object to inherited\n this.inheritObject('reflect', prototype, bas
e);\n // chain our lower-cased publish map to the inherited version\n
this.inheritObject('_publishLC', prototype, base);\n // chain our instance
attributes map to the inherited version\n this.inheritObject('_instanceAttr
ibutes', prototype, base);\n // chain our event delegates map to the inheri
ted version\n this.inheritObject('eventDelegates', prototype, base);\n }
,\n\n // implement various declarative features\n desugarAfterChaining: fu
nction(name, extendee) {\n // build side-chained lists to optimize iteratio
ns\n this.optimizePropertyMaps(this.prototype);\n this.createPropertyA
ccessors(this.prototype);\n // install mdv delegate on template\n this
.installBindingDelegate(this.fetchTemplate());\n // install external styles
heets as if they are inline\n this.installSheets();\n // adjust any pa
ths in dom from imports\n this.resolveElementPaths(this);\n // compile
list of attributes to copy to instances\n this.accumulateInstanceAttribute
s();\n // parse on-* delegates declared on `this` element\n this.parse
HostEvents();\n //\n // install a helper method this.resolvePath to ai
d in \n // setting resource urls. e.g.\n // this.$.image.src = this.re
solvePath('images/foo.png')\n this.addResolvePathApi();\n // under Sha
dowDOMPolyfill, transforms to approximate missing CSS features\n if (hasSha
dowDOMPolyfill) {\n Platform.ShadowCSS.shimStyling(this.templateContent()
, name, extendee);\n }\n // allow custom element access to the declara
tive context\n if (this.prototype.registerCallback) {\n this.prototy
pe.registerCallback(this);\n }\n },\n\n // if a named constructor is
requested in element, map a reference\n // to the constructor to the given sy
mbol\n publishConstructor: function() {\n var symbol = this.getAttribute
('constructor');\n if (symbol) {\n window[symbol] = this.ctor;\n
}\n },\n\n // build prototype combining extendee, Polymer base, and name
d api\n generateBasePrototype: function(extnds) {\n var prototype = this
.findBasePrototype(extnds);\n if (!prototype) {\n // create a protot
ype based on tag-name extension\n var prototype = HTMLElement.getPrototyp
eForTag(extnds);\n // insert base api in inheritance chain (if needed)\n
prototype = this.ensureBaseApi(prototype);\n // memoize this base\
n memoizedBases[extnds] = prototype;\n }\n return prototype;\n
},\n\n findBasePrototype: function(name) {\n return memoizedBases[nam
e];\n },\n\n // install Polymer instance api into prototype chain, as need
ed \n ensureBaseApi: function(prototype) {\n if (prototype.PolymerBase)
{\n return prototype;\n }\n var extended = Object.create(protot
ype);\n // we need a unique copy of base api for each base prototype\n
// therefore we 'extend' here instead of simply chaining\n api.publish(api
.instance, extended);\n // TODO(sjmiles): sharing methods across prototype
chains is\n // not supported by 'super' implementation which optimizes\n
// by memoizing prototype relationships.\n // Probably we should have a
version of 'extend' that is \n // share-aware: it could study the text of e
ach function,\n // look for usage of 'super', and wrap those functions in\n
// closures.\n // As of now, there is only one problematic method, so
\n // we just patch it manually.\n // To avoid re-entrancy problems,
the special super method\n // installed is called `mixinSuper` and the mixi
n method\n // must use this method instead of the default `super`.\n t
his.mixinMethod(extended, prototype, api.instance.mdv, 'bind');\n // return
buffed-up prototype\n return extended;\n },\n\n mixinMethod: functio
n(extended, prototype, api, name) {\n var $super = function(args) {\n
return prototype[name].apply(this, args);\n };\n extended[name] = fu
nction() {\n this.mixinSuper = $super;\n return api[name].apply(th
is, arguments);\n }\n },\n\n // ensure prototype[name] inherits from
a prototype.prototype[name]\n inheritObject: function(name, prototype, base)
{\n // require an object\n var source = prototype[name] || {};\n
// chain inherited properties onto a new object\n prototype[name] = this.ch
ainObject(source, base[name]);\n },\n\n // register 'prototype' to custom
element 'name', store constructor \n registerPrototype: function(name, extend
ee) { \n var info = {\n prototype: this.prototype\n }\n //
native element must be specified in extends\n var typeExtension = this.fin
dTypeExtension(extendee);\n if (typeExtension) {\n info.extends = ty
peExtension;\n }\n // register the prototype with HTMLElement for name
lookup\n HTMLElement.register(name, this.prototype);\n // register th
e custom type\n this.ctor = document.registerElement(name, info);\n },\n
\n findTypeExtension: function(name) {\n if (name && name.indexOf('-') <
0) {\n return name;\n } else {\n var p = this.findBaseProtot
ype(name);\n if (p.element) {\n return this.findTypeExtension(p.
element.extends);\n }\n }\n }\n\n };\n\n // memoize base protot
ypes\n var memoizedBases = {};\n\n // implementation of 'chainObject' depends
on support for __proto__\n if (Object.__proto__) {\n prototype.chainObject =
function(object, inherited) {\n if (object && inherited && object !== inhe
rited) {\n object.__proto__ = inherited;\n }\n return object;\n
}\n } else {\n prototype.chainObject = function(object, inherited) {\n
if (object && inherited && object !== inherited) {\n var chained = Ob
ject.create(inherited);\n object = extend(chained, object);\n }\n
return object;\n }\n }\n\n // On platforms that do not support __proto__
(versions of IE), the prototype\n // chain of a custom element is simulated vi
a installation of __proto__.\n // Although custom elements manages this, we ins
tall it here so it's\n // available during desugaring.\n function ensureProtot
ypeTraversal(prototype) {\n if (!Object.__proto__) {\n var ancestor = Ob
ject.getPrototypeOf(prototype);\n prototype.__proto__ = ancestor;\n if
(isBase(ancestor)) {\n ancestor.__proto__ = Object.getPrototypeOf(ancest
or);\n }\n }\n }\n\n // exports\n\n api.declaration.prototype = proto
type;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors.
All rights reserved.\n * This code may only be used under the BSD style license
found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors m
ay be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of cont
ributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dist
ributed by Google as part of the polymer project is also\n * subject to an addit
ional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(fun
ction(scope) {\n\n /*\n\n Elements are added to a registration queue so that
they register in \n the proper order at the appropriate time. We do this for
a few reasons:\n\n * to enable elements to load resources (like stylesheets)
\n asynchronously. We need to do this until the platform provides an efficie
nt\n alternative. One issue is that remote @import stylesheets are \n re-f
etched whenever stamped into a shadowRoot.\n\n * to ensure elements loaded 'a
t the same time' (e.g. via some set of\n imports) are registered as a batch.
This allows elements to be enured from\n upgrade ordering as long as they que
ry the dom tree 1 task after\n upgrade (aka domReady). This is a performance
tradeoff. On the one hand,\n elements that could register while imports are l
oading are prevented from \n doing so. On the other, grouping upgrades into a
single task means less\n incremental work (for example style recalcs), Also
, we can ensure the \n document is in a known state at the single quantum of
time when \n elements upgrade.\n\n */\n var queue = {\n\n // tell the qu
eue to wait for an element to be ready\n wait: function(element) {\n if
(!element.__queue) {\n element.__queue = {};\n elements.push(eleme
nt);\n }\n },\n\n // enqueue an element to the next spot in the queue
.\n enqueue: function(element, check, go) {\n var shouldAdd = element.__
queue && !element.__queue.check;\n if (shouldAdd) {\n queueForElemen
t(element).push(element);\n element.__queue.check = check;\n eleme
nt.__queue.go = go;\n }\n return (this.indexOf(element) !== 0);\n }
,\n\n indexOf: function(element) {\n var i = queueForElement(element).in
dexOf(element);\n if (i >= 0 && document.contains(element)) {\n i +=
(HTMLImports.useNative || HTMLImports.ready) ? \n importQueue.length :
1e9;\n }\n return i; \n },\n\n // tell the queue an element is
ready to be registered\n go: function(element) {\n var readied = this.r
emove(element);\n if (readied) {\n element.__queue.flushable = true;
\n this.addToFlushQueue(readied);\n this.check();\n }\n },
\n\n remove: function(element) {\n var i = this.indexOf(element);\n
if (i !== 0) {\n //console.warn('queue order wrong', i);\n return
;\n }\n return queueForElement(element).shift();\n },\n\n check:
function() {\n // next\n var element = this.nextElement();\n if
(element) {\n element.__queue.check.call(element);\n }\n if (th
is.canReady()) {\n this.ready();\n return true;\n }\n },\n
\n nextElement: function() {\n return nextQueued();\n },\n\n canRe
ady: function() {\n return !this.waitToReady && this.isEmpty();\n },\n\n
isEmpty: function() {\n for (var i=0, l=elements.length, e; (i<l) && \n
(e=elements[i]); i++) {\n if (e.__queue && !e.__queue.flushable
) {\n return;\n }\n }\n return true;\n },\n\n ad
dToFlushQueue: function(element) {\n flushQueue.push(element); \n },\n\
n flush: function() {\n // prevent re-entrance\n if (this.flushing)
{\n return;\n }\n this.flushing = true;\n var element;\n
while (flushQueue.length) {\n element = flushQueue.shift();\n
element.__queue.go.call(element);\n element.__queue = null;\n }\n
this.flushing = false;\n },\n\n ready: function() {\n this.flush(
);\n // TODO(sorvell): As an optimization, turn off CE polyfill upgrading\n
// while registering. This way we avoid having to upgrade each document\n
// piecemeal per registration and can instead register all elements\n
// and upgrade once in a batch. Without this optimization, upgrade time\n /
/ degrades significantly when SD polyfill is used. This is mainly because\n
// querying the document tree for elements is slow under the SD polyfill.\n
if (CustomElements.ready === false) {\n CustomElements.upgradeDocumentT
ree(document);\n CustomElements.ready = true;\n }\n Platform.fl
ush();\n requestAnimationFrame(this.flushReadyCallbacks);\n },\n\n ad
dReadyCallback: function(callback) {\n if (callback) {\n readyCallba
cks.push(callback);\n }\n },\n\n flushReadyCallbacks: function() {\n
if (readyCallbacks) {\n var fn;\n while (readyCallbacks.lengt
h) {\n fn = readyCallbacks.shift();\n fn();\n }\n
}\n },\n\n waitToReady: true\n\n };\n\n var elements = [];\n var flushQ
ueue = [];\n var importQueue = [];\n var mainQueue = [];\n var readyCallbacks
= [];\n\n function queueForElement(element) {\n return document.contains(el
ement) ? mainQueue : importQueue;\n }\n\n function nextQueued() {\n return
importQueue.length ? importQueue[0] : mainQueue[0];\n }\n\n var polymerReadied
= false; \n\n document.addEventListener('WebComponentsReady', function() {\n
CustomElements.ready = false;\n });\n \n function whenPolymerReady(callback
) {\n queue.waitToReady = true;\n CustomElements.ready = false;\n HTMLI
mports.whenImportsReady(function() {\n queue.addReadyCallback(callback);\n
queue.waitToReady = false;\n queue.check();\n });\n }\n\n // expo
rts\n scope.elements = elements;\n scope.queue = queue;\n scope.whenReady = s
cope.whenPolymerReady = whenPolymerReady;\n})(Polymer);\n","/*\n * Copyright (c)
2014 The Polymer Project Authors. All rights reserved.\n * This code may only b
e used under the BSD style license found at http://polymer.github.io/LICENSE.txt
\n * The complete set of authors may be found at http://polymer.github.io/AUTHOR
S.txt\n * The complete set of contributors may be found at http://polymer.github
.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer proje
ct is also\n * subject to an additional IP rights grant found at http://polymer.
github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var whenPolymerReady = sco
pe.whenPolymerReady;\n\n function importElements(elementOrFragment, callback) {
\n if (elementOrFragment) {\n document.head.appendChild(elementOrFragmen
t);\n whenPolymerReady(callback);\n } else if (callback) {\n callba
ck();\n }\n }\n\n function importUrls(urls, callback) {\n if (urls && ur
ls.length) {\n var frag = document.createDocumentFragment();\n for
(var i=0, l=urls.length, url, link; (i<l) && (url=urls[i]); i++) {\n l
ink = document.createElement('link');\n link.rel = 'import';\n
link.href = url;\n frag.appendChild(link);\n }\n importE
lements(frag, callback);\n } else if (callback) {\n callback();\n }\n
}\n\n // exports\n scope.import = importUrls;\n scope.importElements = impo
rtElements;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Au
thors. All rights reserved.\n * This code may only be used under the BSD style l
icense found at http://polymer.github.io/LICENSE.txt\n * The complete set of aut
hors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set o
f contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Cod
e distributed by Google as part of the polymer project is also\n * subject to an
additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n
\n(function(scope) {\n\n // imports\n\n var extend = scope.extend;\n var api
= scope.api;\n var queue = scope.queue;\n var whenPolymerReady = scope.whenPol
ymerReady;\n var getRegisteredPrototype = scope.getRegisteredPrototype;\n var
waitingForPrototype = scope.waitingForPrototype;\n\n // declarative implementat
ion: <polymer-element>\n\n var prototype = extend(Object.create(HTMLElement.pro
totype), {\n\n createdCallback: function() {\n if (this.getAttribute('na
me')) {\n this.init();\n }\n },\n\n init: function() {\n
// fetch declared values\n this.name = this.getAttribute('name');\n th
is.extends = this.getAttribute('extends');\n queue.wait(this);\n // in
itiate any async resource fetches\n this.loadResources();\n // registe
r when all constraints are met\n this.registerWhenReady();\n },\n\n /
/ TODO(sorvell): we currently queue in the order the prototypes are \n // reg
istered, but we should queue in the order that polymer-elements\n // are regi
stered. We are currently blocked from doing this based on \n // crbug.com/395
686.\n registerWhenReady: function() {\n if (this.registered\n || t
his.waitingForPrototype(this.name)\n || this.waitingForQueue()\n ||
this.waitingForResources()) {\n return;\n }\n queue.go(this);
\n },\n\n _register: function() {\n //console.log('registering', this
.name);\n // warn if extending from a custom element not registered via Pol
ymer\n if (isCustomTag(this.extends) && !isRegistered(this.extends)) {\n
console.warn('%s is attempting to extend %s, an unregistered element ' +\n
'or one that was not registered with Polymer.', this.name,\n
this.extends);\n }\n this.register(this.name, this.extends);\n
this.registered = true;\n },\n\n waitingForPrototype: function(name) {\n
if (!getRegisteredPrototype(name)) {\n // then wait for a prototype\
n waitingForPrototype(name, this);\n // emulate script if user is
not supplying one\n this.handleNoScript(name);\n // prototype not
ready yet\n return true;\n }\n },\n\n handleNoScript: function
(name) {\n // if explicitly marked as 'noscript'\n if (this.hasAttribu
te('noscript') && !this.noscript) {\n this.noscript = true;\n // i
mperative element registration\n Polymer(name);\n }\n },\n\n w
aitingForResources: function() {\n return this._needsResources;\n },\n\n
// NOTE: Elements must be queued in proper order for inheritance/composition
\n // dependency resolution. Previously this was enforced for inheritance,\n
// and by rule for composition. It's now entirely by rule.\n waitingForQue
ue: function() {\n return queue.enqueue(this, this.registerWhenReady, this.
_register);\n },\n\n loadResources: function() {\n this._needsResourc
es = true;\n this.loadStyles(function() {\n this._needsResources = f
alse;\n this.registerWhenReady();\n }.bind(this));\n }\n\n });\n
\n // semi-pluggable APIs \n\n // TODO(sjmiles): should be fully pluggable (ak
a decoupled, currently\n // the various plugins are allowed to depend on each o
ther directly)\n api.publish(api.declaration, prototype);\n\n // utility and b
ookkeeping\n\n function isRegistered(name) {\n return Boolean(HTMLElement.ge
tPrototypeForTag(name));\n }\n\n function isCustomTag(name) {\n return (nam
e && name.indexOf('-') >= 0);\n }\n\n // boot tasks\n\n whenPolymerReady(func
tion() {\n document.body.removeAttribute('unresolved');\n document.dispatc
hEvent(\n new CustomEvent('polymer-ready', {bubbles: true})\n );\n });\
n\n // register polymer-element with document\n\n document.registerElement('po
lymer-element', {prototype: prototype});\n\n})(Polymer);\n","/*\n * Copyright (c
) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only
be used under the BSD style license found at http://polymer.github.io/LICENSE.tx
t\n * The complete set of authors may be found at http://polymer.github.io/AUTHO
RS.txt\n * The complete set of contributors may be found at http://polymer.githu
b.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer proj
ect is also\n * subject to an additional IP rights grant found at http://polymer
.github.io/PATENTS.txt\n */\n\n/**\n * The `auto-binding` element extends the te
mplate element. It provides a quick \n * and easy way to do data binding without
the need to setup a model. \n * The `auto-binding` element itself serves as the
model and controller for the \n * elements it contains. Both data and event han
dlers can be bound. \n *\n * The `auto-binding` element acts just like a templat
e that is bound to \n * a model. It stamps its content in the dom adjacent to it
self. When the \n * content is stamped, the `template-bound` event is fired.\n *
\n * Example:\n *\n * <template is=\"auto-binding\">\n * <div>Say some
thing: <input value=\"{{value}}\"></div>\n * <div>You said: {{value}}</div
>\n * <button on-tap=\"{{buttonTap}}\">Tap me!</button>\n * </template
>\n * <script>\n * var template = document.querySelector('template');\
n * template.value = 'something';\n * template.buttonTap = function(
) {\n * console.log('tap!');\n * };\n * </script>\n *\n * @mod
ule Polymer\n * @status stable\n*/\n\n(function() {\n\n var element = document.
createElement('polymer-element');\n element.setAttribute('name', 'auto-binding'
);\n element.setAttribute('extends', 'template');\n element.init();\n\n Polym
er('auto-binding', {\n\n createdCallback: function() {\n this.syntax = t
his.bindingDelegate = this.makeSyntax();\n // delay stamping until polymer-
ready so that auto-binding is not\n // required to load last.\n Polyme
r.whenPolymerReady(function() {\n this.model = this;\n this.setAtt
ribute('bind', '');\n // we don't bother with an explicit signal here, we
could ust a MO\n // if necessary\n this.async(function() {\n
// note: this will marshall *all* the elements in the parentNode\n
// rather than just stamped ones. We'd need to use createInstance\n //
to fix this or something else fancier.\n this.marshalNodeReferences(th
is.parentNode);\n // template stamping is asynchronous so stamping isn'
t complete\n // by polymer-ready; fire an event so users can use stampe
d elements\n this.fire('template-bound');\n });\n }.bind(th
is));\n },\n\n makeSyntax: function() {\n var events = Object.create(
Polymer.api.declaration.events);\n var self = this;\n events.findContr
oller = function() { return self.model; };\n\n var syntax = new PolymerExpr
essions();\n var prepareBinding = syntax.prepareBinding; \n syntax.pr
epareBinding = function(pathString, name, node) {\n return events.prepare
EventBinding(pathString, name, node) ||\n prepareBinding.call(synt
ax, pathString, name, node);\n };\n return syntax;\n }\n\n });\n\n
})();\n"]} | 1 {"version":3,"file":"polymer.js","sources":["polymer.concat.js"],"names":["windo
w","PolymerGestures","scope","HAS_FULL_PATH","pathTest","document","createElemen
t","createShadowRoot","sr","s","appendChild","addEventListener","ev","path","sto
pPropagation","CustomEvent","bubbles","head","dispatchEvent","parentNode","remov
eChild","target","shadow","inEl","shadowRoot","webkitShadowRoot","canTarget","Bo
olean","elementFromPoint","targetingShadow","this","olderShadow","os","olderShad
owRoot","se","querySelector","allShadows","element","shadows","push","searchRoot
","inRoot","x","y","t","owner","nodeType","Node","DOCUMENT_NODE","DOCUMENT_FRAGM
ENT_NODE","findTarget","inEvent","clientX","clientY","findTouchAction","n","i","
length","ELEMENT_NODE","hasAttribute","getAttribute","host","LCA","a","b","conta
ins","adepth","depth","bdepth","d","walk","u","deepContains","common","insideNod
e","node","rect","getBoundingClientRect","left","right","top","bottom","targetFi
nding","bind","shadowSelector","v","selector","rule","attrib2css","selectors","s
tyles","hasTouchAction","style","touchAction","hasShadowRoot","ShadowDOMPolyfill
","forEach","r","String","map","el","textContent","MOUSE_PROPS","MOUSE_DEFAULTS"
,"NOP_FACTORY","eventFactory","preventTap","makeBaseEvent","inType","inDict","e"
,"createEvent","initEvent","cancelable","makeGestureEvent","Object","create","k"
,"keys","makePointerEvent","p","buttons","pressure","pointerId","width","height"
,"tiltX","tiltY","pointerType","hwTimestamp","isPrimary","_source","PointerMap",
"USE_MAP","m","Map","pointers","POINTERS_FN","values","prototype","size","set","
inId","indexOf","has","delete","splice","get","clear","callback","thisArg","call
","currentGestures","CLONE_PROPS","CLONE_DEFAULTS","HAS_SVG_INSTANCE","SVGElemen
tInstance","dispatcher","pointermap","requiredGestures","eventMap","eventSources
","eventSourceList","gestures","dependencyMap","down","listeners","index","up","
gestureQueue","registerSource","name","source","newEvents","events","registerGes
ture","obj","g","exposes","toLowerCase","register","initial","es","l","unregiste
r","fireEvent","move","type","fillGestureQueue","cancel","tapPrevented","eventHa
ndler","_handledByPG","gesturesWanted","currentTarget","_pgEvents","ri","gk","fn
","listen","addEvent","unlisten","removeEvent","eventName","boundHandler","remov
eEventListener","makeEvent","preventDefault","_target","cloneEvent","eventCopy",
"correspondingUseElement","clone","gestureTrigger","rg","_requiredGestures","j",
"requestAnimationFrame","boundGestureTrigger","activateGesture","gesture","dep",
"recognizer","_pgListeners","actionNode","defaultActions","setAttribute","handle
r","capture","deactivateGesture","DEDUP_DIST","WHICH_TO_BUTTONS","HAS_BUTTONS","
MouseEvent","mouseEvents","POINTER_ID","POINTER_TYPE","lastTouches","isEventSimu
latedFromTouch","lts","dx","Math","abs","dy","prepareEvent","which","mousedown",
"mouseup","mousemove","cleanupMouse","relatedTarget","DEDUP_TIMEOUT","Array","CL
ICK_COUNT_TIMEOUT","HYSTERESIS","HAS_TOUCH_ACTION","touchEvents","scrollTypes","
EMITTER","XSCROLLER","YSCROLLER","touchActionToScrollType","st","firstTouch","is
PrimaryTouch","inTouch","identifier","setPrimaryTouch","firstXY","X","Y","scroll
ing","cancelResetClickCount","removePrimaryPointer","inPointer","resetClickCount
","clickCount","resetId","setTimeout","clearTimeout","typeToButtons","ret","touc
h","id","currentTouchEvent","fastPath","touchToPointer","cte","detail","webkitRa
diusX","radiusX","webkitRadiusY","radiusY","webkitForce","force","self","process
Touches","inFunction","tl","changedTouches","_cancel","cleanUpPointer","shouldSc
roll","scrollAxis","oa","da","doa","findTouch","inTL","vacuumTouches","touches",
"value","key","touchstart","dedupSynthMouse","touchmove","dd","sqrt","touchcance
l","touchend","lt","HAS_BITMAP_TYPE","MSPointerEvent","MSPOINTER_TYPE_MOUSE","ms
Events","POINTER_TYPES","cleanup","MSPointerDown","MSPointerMove","MSPointerUp",
"MSPointerCancel","pointerEvents","pointerdown","pointermove","pointerup","point
ercancel","nav","navigator","PointerEvent","msPointerEnabled","undefined","ontou
chstart","isSafari","userAgent","match","body","track","trackx","tracky","WIGGLE
_THRESHOLD","clampDir","inDelta","calcPositionDelta","inA","inB","pageX","pageY"
,"fireTrack","inTrackingData","downEvent","lastMoveEvent","xDirection","yDirecti
on","gestureProto","trackInfo","ddx","screenX","ddy","screenY","downTarget","tra
cking","hold","HOLD_DELAY","heldPointer","holdJob","pulse","Date","now","timeSta
mp","held","fireHold","clearInterval","setInterval","inHoldTime","holdTime","tap
","shouldTap","downState","start","altKey","ctrlKey","metaKey","shiftKey","globa
l","assert","condition","message","Error","isDecimalDigit","ch","isWhiteSpace","
fromCharCode","isLineTerminator","isIdentifierStart","isIdentifierPart","isKeywo
rd","skipWhitespace","charCodeAt","getIdentifier","slice","scanIdentifier","Toke
n","Identifier","Keyword","NullLiteral","BooleanLiteral","range","scanPunctuator
","code2","ch2","code","ch1","Punctuator","throwError","Messages","UnexpectedTok
en","scanNumericLiteral","number","NumericLiteral","parseFloat","scanStringLiter
al","quote","str","octal","StringLiteral","isIdentifierName","token","advance","
EOF","lex","lookahead","peek","pos","messageFormat","error","args","arguments","
msg","replace","whole","description","throwUnexpected","expect","matchKeyword","
keyword","parseArrayInitialiser","elements","parseExpression","delegate","create
ArrayExpression","parseObjectPropertyKey","createLiteral","createIdentifier","pa
rseObjectProperty","createProperty","parseObjectInitialiser","properties","creat
eObjectExpression","parseGroupExpression","expr","parsePrimaryExpression","creat
eThisExpression","parseArguments","parseNonComputedProperty","parseNonComputedMe
mber","parseComputedMember","parseLeftHandSideExpression","property","createMemb
erExpression","createCallExpression","parseUnaryExpression","parsePostfixExpress
ion","createUnaryExpression","binaryPrecedence","prec","parseBinaryExpression","
stack","operator","pop","createBinaryExpression","parseConditionalExpression","c
onsequent","alternate","createConditionalExpression","parseFilter","createFilter
","parseFilters","parseTopLevel","Syntax","parseInExpression","parseAsExpression
","createTopLevel","createAsExpression","indexName","createInExpression","parse"
,"inDelegate","state","labelSet","TokenName","ArrayExpression","BinaryExpression
","CallExpression","ConditionalExpression","EmptyStatement","ExpressionStatement
","Literal","LabeledStatement","LogicalExpression","MemberExpression","ObjectExp
ression","Program","Property","ThisExpression","UnaryExpression","UnknownLabel",
"Redeclaration","esprima","prepareBinding","expressionText","filterRegistry","ex
pression","getExpression","scopeIdent","tagName","ex","console","model","oneTime
","binding","getBinding","polymerExpressionScopeIdent_","indexIdent","polymerExp
ressionIndexIdent_","expressionParseCache","ASTDelegate","Expression","valueFn_"
,"IdentPath","Path","object","accessor","computed","dynamicDeps","simplePath","g
etFn","Filter","notImplemented","arg","valueFn","filters","deps","currentPath","
ConstantObservable","value_","convertStylePropertyName","c","findScope","prop","
parentScopeName","hasOwnProperty","isLiteralExpression","pathString","isNaN","Nu
mber","PolymerExpressions","observer","addPath","getValueFrom","setValue","newVa
lue","setValueFrom",{"end":{"file":"polymer.concat.js","comments_before":[],"nlb
":false,"endpos":92826,"pos":92818,"col":8,"line":3185,"value":"fullPath","type"
:"name"},"start":{"file":"polymer.concat.js","comments_before":[],"nlb":false,"e
ndpos":92826,"pos":92818,"col":8,"line":3185,"value":"fullPath","type":"name"},"
name":"fullPath"},"fullPath","fullPath_","parts","context","propName","transform
","toModelDirection","initialArgs","toModel","toDOM","apply","unaryOperators","+
","-","!","binaryOperators","*","/","%","<",">","<=",">=","==","!=","===","!==",
"&&","||","op","argument","test","ident","filter","arr","kind","open","discardCh
anges","deliver","close","firstTime","firstValue","startReset","getValue","finis
hReset","setValueFn","CompoundObserver","ObserverTransform","count","random","to
String","styleObject","join","tokenList","tokens","prepareInstancePositionChange
d","template","templateInstance","valid","PathObserver","prepareInstanceModel","
scopeName","parentScope","createScopeObject","__proto__","defineProperty","confi
gurable","writable","Polymer","version","Platform","logFlags","flush","CustomEle
ments","useNative","ready","takeRecords","instanceof","base","HTMLImports","wrap
","unwrap","whenImportsReady","doc","mainDoc","whenDocumentReady","watchImportsL
oad","isDocumentReady","readyState","requiredReadyState","checkReady","READY_EVE
NT","markTargetLoaded","event","__loaded","checkDone","loaded","loadedImport","i
mports","querySelectorAll","imp","isImportLoaded","link","__importParsed","handl
eImports","nodes","isImport","handleImport","localName","rel","import","hasNativ
e","isIE","hasShadowDOMPolyfill","wrapIfNeeded","currentScriptDescriptor","scrip
t","currentScript","scripts","MutationObserver","mxns","addedNodes","observe","c
hildList","readyTime","getTime","whenReady","withDependencies","task","depends",
"marshal","module","dependsOrFactory","moduleFactory","modules","using","modular
ize","insertBefore","firstChild","detectObjectObserve","recs","records","deliver
ChangeRecords","unobserve","detectEval","chrome","app","runtime","getDeviceStora
ge","f","Function","isIndex","toNumber","isObject","areSameValue","numberIsNaN",
"getPathCharType","char","noop","parsePath","maybeUnescapeQuote","nextChar","mod
e","newChar","actions","append","transition","action","typeMap","pathStateMachin
e","isIdent","identRegExp","privateToken","constructorIsPrivate","hasEval","comp
iledGetValueFromFn","getPath","pathCache","invalidPath","formatAccessor","dirtyC
heck","cycles","MAX_DIRTY_CHECK_CYCLES","check_","testingExposeCycleCount","dirt
yCheckCycleCount","objectIsEmpty","diffIsEmpty","diff","added","removed","change
d","diffObjectFromOldObject","oldObject","isArray","runEOMTasks","eomTasks","new
ObservedObject","state_","OPENED","discardRecords","first","obs","arrayObserve",
"discard","observedObjectCache","getObservedObject","dir","newObservedSet","root
Obj","rootObjProps","objects","getPrototypeOf","allRootObjNonObservedProps","rec
","observers","iterateObjects_","observerCount","record","Observer","unobservedC
ount","observedSetCache","getObservedSet","lastObservedSet","UNOPENED","callback
_","target_","directObserver_","id_","nextObserverId","addToAll","_allObserversC
ount","collectObservers","allObservers","removeFromAll","ObjectObserver","oldObj
ect_","ArrayObserver","array","object_","path_","reportChangesOnOpen","reportCha
ngesOnOpen_","observed_","identFn","observable","getValueFn","dontPassThroughSet
","observable_","getValueFn_","setValueFn_","dontPassThroughSet_","diffObjectFro
mChangeRecords","changeRecords","oldValues","expectedRecordTypes","oldValue","ne
wSplice","addedCount","ArraySplice","calcSplices","current","currentStart","curr
entEnd","old","oldStart","oldEnd","arraySplice","intersect","start1","end1","sta
rt2","end2","mergeSplice","splices","inserted","insertionOffset","intersectCount
","deleteCount","prepend","offset","createInitialSplices","JSON","stringify","pr
ojectArraySplices","concat","hasObserve","createObject","proto","newObject","get
OwnPropertyNames","getOwnPropertyDescriptor","identStart","identPart","RegExp","
beforePath","ws","[","eof","inPath",".","beforeIdent","inIdent","0","beforeEleme
nt","'","\"","afterZero","]","inIndex","inSingleQuote","else","inDoubleQuote","a
fterElement","iterateObjects","runEOM","eomObj","pingPong","eomRunScheduled","CL
OSED","RESETTING","connect_","disconnect_","report_","changes","_errorThrownDuri
ngCallback","runningMicrotaskCheckpoint","hasDebugForceFullDelivery","eval","per
formMicrotaskCheckpoint","anyChanged","toCheck","clearObservers","copyObject","c
opy","applySplices","previous","spliceArgs","addIndex","skipChanges","observerSe
ntinel","needsDirectObserver","addObserver","observedCallback_","add","update","
EDIT_LEAVE","EDIT_UPDATE","EDIT_ADD","EDIT_DELETE","calcEditDistances","rowCount
","columnCount","distances","equals","north","west","spliceOperationsFromEditDis
tances","edits","min","northWest","reverse","prefixCount","suffixCount","minLeng
th","sharedPrefix","sharedSuffix","ops","oldIndex","searchLength","index1","inde
x2","calculateSplices","currentValue","previousValue","runEOM_","observerSentine
l_","hasObjectObserve","getTreeScope","getElementById","updateBindings","binding
s","bindings_","returnBinding","sanitizeValue","updateText","data","textBinding"
,"updateAttribute","conditional","removeAttribute","attributeBinding","getEventF
orInputType","checkboxEventType","updateInput","input","santizeFn","inputBinding
","bindInputEvent","postEventFn","eventType","booleanSanitize","getAssociatedRad
ioButtons","form","treeScope","radios","checkedPostEvent","radio","checkedBindin
g","checked","updateOption","option","select","selectBinding","HTMLSelectElement
","optionBinding","bindFinished","maybeUpdateBindings","enable","Text","Element"
,"div","checkbox","initMouseEvent","HTMLInputElement","HTMLElement","sanitizeFn"
,"HTMLTextAreaElement","HTMLOptionElement","getFragmentRoot","searchRefId","ref"
,"protoContent_","templateCreator_","isSVGTemplate","namespaceURI","isHTMLTempla
te","isAttributeTemplate","semanticTemplateElements","isTemplate","isTemplate_",
"forAllTemplatesFrom","subTemplates","allTemplatesSelectors","bootstrapTemplates
RecursivelyFrom","bootstrap","HTMLTemplateElement","decorate","content","mixin",
"to","from","getOrCreateTemplateContentsOwner","ownerDocument","defaultView","te
mplateContentsOwner_","implementation","createHTMLDocument","lastChild","getTemp
lateStagingDocument","stagingDocument_","isStagingDocument","href","baseURI","ex
tractTemplateFromAttributeTemplate","attribs","attributes","attrib","templateAtt
ributeDirectives","extractTemplateFromSVGTemplate","liftNonNativeTemplateChildre
nIntoContent","useRoot","child","fixTemplateElementPrototype","hasProto","ensure
SetModelScheduled","setModelFn_","setModelFnScheduled_","getBindings","delegate_
","processBindings","model_","parseMustaches","prepareBindingFn","startIndex","l
astIndex","endIndex","onlyOneTime","oneTimeStart","terminator","trim","delegateF
n","hasOnePath","isSimplePath","combinator","processOneTimeBinding","processSing
lePathBinding","processBinding","instanceBindings","iter","processBindingDirecti
ves_","parseWithDefault","parseAttributeBindings","attr","substring","IF","BIND"
,"REPEAT","if","repeat","TEXT_NODE","cloneAndBindInstance","parent","stagingDocu
ment","importNode","nextSibling","children","setDelegate_","createInstanceBindin
gMap","getContentUid","contentUidCounter","getInstanceBindingMap","contentId","b
indingMaps","bindingMap_","TemplateIterator","templateElement","closed","templat
eElement_","instances","iteratedValue","presentValue","arrayObserver","opt_this"
,"Document","documentElement","THEAD","TBODY","TFOOT","TH","TR","TD","COLGROUP",
"COL","CAPTION","OPTION","OPTGROUP","hasTemplateElement","html","TypeError","tem
plateObserver","refChanged_","opt_instanceRef","templateIsDecorated_","isNativeH
TMLTemplate","bootstrapContents","liftContents","liftRoot","content_","createDoc
umentFragment","instanceRef_","htmlElement","HTMLUnknownElement","contentDescrip
tor","enumerable","directives","iterator_","closeDeps","updateDependencies","att
ributeFilter","createInstance","bindingDelegate","newDelegate_","refContent_","r
ef_","emptyInstance","instance","terminator_","instanceRecord","templateInstance
_","firstNode","lastNode","collectTerminator","raw","valueChanged","updateIterat
edValue","getUpdatedValue","instancePositionChangedFn_","instanceModelFn_","next
Ref","ifOneTime","ifValue","hasIf","updateIfValue","updateValue","observeValue",
"handleSplices","getLastInstanceNode","subtemplateIterator","getLastTemplateNode
","insertInstanceAt","fragment","previousInstanceLast","extractInstanceAt","getD
elegateFn","instanceCache","removeDelta","closeInstanceBindings","reportInstance
sMoved","reportInstanceMoved","forAllTemplatesFrom_","endOfMicrotask","twiddle",
"iterations","callbacks","atEndOfMicrotask","shift","createTextNode","JsMutation
Observer","characterData","flushing","group","groupEnd","FLUSH_POLL_INTERVAL","f
lushPoll","originalImportNode","deep","imported","upgradeAll","replaceUrlsInCssT
ext","cssText","baseUrl","keepAbsolute","regexp","pre","url","post","urlPath","r
esolveRelativeUrl","URL","makeDocumentRelPath","root","port","protocol","makeRel
Path","sourceUrl","targetUrl","pathname","split","unshift","search","hash","urlR
esolver","resolveDom","resolveAttributes","resolveStyles","templates","resolveTe
mplate","resolveStyle","resolveCssText","CSS_URL_REGEXP","CSS_IMPORT_REGEXP","ha
sAttributes","resolveElementAttributes","URL_ATTRS_SELECTOR","URL_ATTRS","replac
ement","URL_TEMPLATE_SEARCH","Loader","regex","cache","requests","extractUrls","
text","matched","matches","exec","process","done","fetch","inflight","req","xhr"
,"wait","handleXhr","request","response","responseText","resolve","XMLHttpReques
t","send","onerror","onload","pending","StyleResolver","loader","flatten","resol
veNode","intermediate","loadStyles","loadedStyle","styleResolver","extend","api"
,"pd","nom","inObj","copyProperty","inName","inSource","inTarget","getPropertyDe
scriptor","inObject","job","stop","Job","go","inContext","boundComplete","comple
te","h","handle","cancelAnimationFrame","createDOM","inTagOrNode","inHTML","inAt
trs","dom","cloneNode","innerHTML","registry","tag","getPrototypeForTag","origin
alStopPropagation","Event","cancelBubble","DOMTokenList","remove","toggle","bool
","switch","oldName","newName","ArraySlice","namedNodeMap","NamedNodeMap","MozNa
medAttrMap","NodeList","HTMLCollection","$super","arrayOfArgs","caller","_super"
,"nameInThis","warn","memoizeSuper","n$","method","nextSuper","super","noopHandl
er","deserializeValue","inferredType","typeHandlers","string","date","boolean","
parseInt","function","declaration","publish","apis","utils","async","timeout","c
ancelAsync","fire","onNode","asyncFire","classFollows","anew","className","class
List","injectBoundHTML","instanceTemplate","nop","nob","asyncMethod","log","EVEN
T_PREFIX","addHostListeners","eventDelegates","methodName","getEventHandler","di
spatchMethod","copyInstanceAttributes","a$","_instanceAttributes","takeAttribute
s","_publishLC","attributeToProperty","propertyForAttribute","bindPattern","stri
ngValue","serializeValue","reflectPropertyToAttribute","serializedValue","resolv
eBindingValue","updateRecord","createPropertyObserver","_observeNames","o","_pro
pertyObserver","registerObserver","observeArrayValue","openPropertyObserver","no
tifyPropertyChanges","newValues","paths","called","ov","nv","invokeMethod","deli
verChanges","propertyChanged_","reflect","callbackName","closeNamedObserver","re
gisterNamedObserver","emitPropertyChangeRecord","notifier","notifier_","getNotif
ier","notify","bindToAccessor","resolveFn","privateName","privateObservable","re
solvedValue","createComputedProperties","_computedNames","syntax","bindProperty"
,"_observers","closeObservers","o$","_namedObservers","closeNamedObservers","mdv
","enableBindingsReflection","_recordBinding","mixinSuper","makeElementReady","a
syncUnbindAll","_unbound","unbind","_unbindAllJob","unbindAll","cancelUnbindAll"
,"mustachePattern","isBase","PolymerBase","created","createdCallback","prepareEl
ement","_elementPrepared","shadowRoots","_readied","parseDeclarations","attached
Callback","attached","enteredView","hasBeenAttached","domReady","detachedCallbac
k","preventDispose","detached","leftView","enteredViewCallback","leftViewCallbac
k","enteredDocumentCallback","leftDocumentCallback","parseDeclaration","elementE
lement","fetchTemplate","shadowFromTemplate","shadowRootReady","lightFromTemplat
e","refNode","eventController","marshalNodeReferences","$","attributeChangedCall
back","attributeChanged","onMutation","listener","mutations","disconnect","subtr
ee","constructor","Base","shimCssText","is","ShadowCSS","makeScopeSelector","STY
LE_SCOPE_ATTRIBUTE","STYLE_CONTROLLER_SCOPE","installControllerStyles","findStyl
eScope","scopeHasNamedStyle","cssTextForScope","installScopeCssText","installSco
peStyle","cssTextToScopeStyle","applyStyleToScope","styleCacheForScope","polyfil
lScopeStyleCache","_scopeStyles","_currentScript","getRegisteredPrototype","regi
sterPrototype","notifyPrototype","waitingForPrototype","client","waitPrototype",
"registerWhenReady","prototypesByName","consumeDeclarations","declarations","res
olveElementPaths","addResolvePathApi","assetPath","resolvePath","importRuleForSh
eet","sheet","createStyleElement","firstElementChild","s$","nextElementSibling",
"cssTextFromSheet","__resource","matchesSelector","inSelector","STYLE_SELECTOR",
"STYLE_LOADABLE_MATCH","SHEET_SELECTOR","STYLE_GLOBAL_SCOPE","SCOPE_ATTR","templ
ateContent","convertSheetsToStyles","findLoadableStyles","templateUrl","copyShee
tAttributes","replaceChild","loadables","installSheets","cacheSheets","cacheStyl
es","installLocalSheets","installGlobalStyles","sheets","findNodes","matcher","t
emplateNodes","styleForScope","scopeDescriptor","webkitMatchesSelector","mozMatc
hesSelector","mixedCaseEventTypes","parseHostEvents","delegates","addAttributeDe
legates","hasEventPrefix","removeEventPrefix","prefixLength","findController","c
ontroller","prepareEventBinding","bindingValue","inferObservers","explodeObserve
rs","exploded","ni","names","optimizePropertyMaps","_publishNames","publishPrope
rties","requireProperties","lowerCaseMap","propertyInfos","createPropertyAccesso
r","createPropertyAccessors","ATTRIBUTES_ATTRIBUTE","ATTRIBUTES_REGEX","inheritA
ttributesObjects","inheritObject","publishAttributes","accumulateInstanceAttribu
tes","clonable","isInstanceAttribute","blackList","extends","noscript","assetpat
h","cache-csstext","installBindingDelegate","ensurePrototypeTraversal","ancestor
","extendeeName","buildPrototype","publishConstructor","extension","generateBase
Prototype","desugarBeforeChaining","chainPrototypes","desugarAfterChaining","inh
eritMetaData","chained","chainObject","extendee","shimStyling","registerCallback
","symbol","ctor","extnds","findBasePrototype","ensureBaseApi","memoizedBases","
extended","mixinMethod","info","typeExtension","findTypeExtension","registerElem
ent","inherited","queueForElement","mainQueue","importQueue","nextQueued","queue
","waitToReady","addReadyCallback","check","__queue","enqueue","shouldAdd","read
ied","flushable","addToFlushQueue","nextElement","canReady","isEmpty","flushQueu
e","polyfillWasReady","upgradeDocumentTree","flushReadyCallbacks","readyCallback
s","whenPolymerReady","isRegistered","isCustomTag","init","loadResources","regis
tered","waitingForQueue","waitingForResources","_register","handleNoScript","_ne
edsResources","importElements","elementOrFragment","importUrls","urls","frag","m
akeSyntax"],"mappings":";;;;;;;;;;AASAA,OAAOC,mBAWP,SAAUC,GACR,GAAIC,IAAgB,EAGhB
C,EAAWC,SAASC,cAAc,OACtC,IAAIF,EAASG,iBAAkB,CAC7B,GAAIC,GAAKJ,EAASG,mBACdE,EAAIJ
,SAASC,cAAc,OAC/BE,GAAGE,YAAYD,GACfL,EAASO,iBAAiB,WAAY,SAASC,GACzCA,EAAGC,OAELV,
EAAgBS,EAAGC,KAAK,KAAOJ,GAEjCG,EAAGE,mBAEL,IAAIF,GAAK,GAAIG,aAAY,YAAaC,SAAS,GAE/
CX,UAASY,KAAKP,YAAYN,GAC1BK,EAAES,cAAcN,GAChBR,EAASe,WAAWC,YAAYhB,GAChCI,EAAKC,E
AAI,KAEXL,EAAW,IAEX,IAAIiB,IACFC,OAAQ,SAASC,GACf,MAAIA,GACKA,EAAKC,YAAcD,EAAKE,i
BADjC,QAIFC,UAAW,SAASJ,GAClB,MAAOA,IAAUK,QAAQL,EAAOM,mBAElCC,gBAAiB,SAASN,GACxB,
GAAId,GAAIqB,KAAKR,OAAOC,EACpB,OAAIO,MAAKJ,UAAUjB,GACVA,EADT,QAIFsB,YAAa,SAAST,G
ACpB,GAAIU,GAAKV,EAAOW,eAChB,KAAKD,EAAI,CACP,GAAIE,GAAKZ,EAAOa,cAAc,SAC1BD,KACFF
,EAAKE,EAAGD,iBAGZ,MAAOD,IAETI,WAAY,SAASC,GAEnB,IADA,GAAIC,MAAc7B,EAAIqB,KAAKR,O
AAOe,GAC5B5B,GACJ6B,EAAQC,KAAK9B,GACbA,EAAIqB,KAAKC,YAAYtB,EAEvB,OAAO6B,IAETE,WA
AY,SAASC,EAAQC,EAAGC,GAC9B,GAAIC,GAAOpC,CACX,OAAIiC,IACFG,EAAIH,EAAOb,iBAAiBc,EA
AGC,GAC3BC,EAEFpC,EAAKsB,KAAKD,gBAAgBe,GACjBH,IAAWpC,WAEpBG,EAAKsB,KAAKC,YAAYU,I
AGjBX,KAAKU,WAAWhC,EAAIkC,EAAGC,IAAMC,GAVtC,QAaFC,MAAO,SAASR,GACd,IAAKA,EACH,MAA
OhC,SAIT,KAFA,GAAII,GAAI4B,EAED5B,EAAEU,YACPV,EAAIA,EAAEU,UAMR,OAHIV,GAAEqC,UAAY
C,KAAKC,eAAiBvC,EAAEqC,UAAYC,KAAKE,yBACzDxC,EAAIJ,UAECI,GAETyC,WAAY,SAASC,GACnB,
GAAIhD,GAAiBgD,EAAQtC,KAC3B,MAAOsC,GAAQtC,KAAK,EAEtB,IAAI6B,GAAIS,EAAQC,QAAST,EA
AIQ,EAAQE,QAEjC5C,EAAIqB,KAAKe,MAAMM,EAAQ9B,OAK3B,OAHKZ,GAAEmB,iBAAiBc,EAAGC,KAC
zBlC,EAAIJ,UAECyB,KAAKU,WAAW/B,EAAGiC,EAAGC,IAE/BW,gBAAiB,SAASH,GACxB,GAAII,EACJ
,IAAIpD,GAAiBgD,EAAQtC,MAE3B,IAAK,GADDA,GAAOsC,EAAQtC,KACV2C,EAAI,EAAGA,EAAI3C,E
AAK4C,OAAQD,IAE/B,GADAD,EAAI1C,EAAK2C,GACLD,EAAET,WAAaC,KAAKW,cAAgBH,EAAEI,aAAa,
gBACrD,MAAOJ,GAAEK,aAAa,oBAK1B,KADAL,EAAIJ,EAAQ9B,OACNkC,GAAG,CACP,GAAIA,EAAEI,a
AAa,gBACjB,MAAOJ,GAAEK,aAAa,eAExBL,GAAIA,EAAEpC,YAAcoC,EAAEM,KAI1B,MAAO,QAETC,IA
AK,SAASC,EAAGC,GACf,GAAID,IAAMC,EACR,MAAOD,EAET,IAAIA,IAAMC,EACR,MAAOD,EAET,IAAI
C,IAAMD,EACR,MAAOC,EAET,KAAKA,IAAMD,EACT,MAAO1D,SAGT,IAAI0D,EAAEE,UAAYF,EAAEE,SA
ASD,GAC3B,MAAOD,EAET,IAAIC,EAAEC,UAAYD,EAAEC,SAASF,GAC3B,MAAOC,EAET,IAAIE,GAASpC
,KAAKqC,MAAMJ,GACpBK,EAAStC,KAAKqC,MAAMH,GACpBK,EAAIH,EAASE,CAMjB,KALIC,GAAK,EAC
PN,EAAIjC,KAAKwC,KAAKP,EAAGM,GAEjBL,EAAIlC,KAAKwC,KAAKN,GAAIK,GAEbN,GAAKC,GAAKD,
IAAMC,GACrBD,EAAIA,EAAE5C,YAAc4C,EAAEF,KACtBG,EAAIA,EAAE7C,YAAc6C,EAAEH,IAExB,OA
AOE,IAETO,KAAM,SAASf,EAAGgB,GAChB,IAAK,GAAIf,GAAI,EAAGD,GAAUgB,EAAJf,EAAQA,IAC5B
D,EAAIA,EAAEpC,YAAcoC,EAAEM,IAExB,OAAON,IAETY,MAAO,SAASZ,GAEd,IADA,GAAIc,GAAI,EA
CFd,GACJc,IACAd,EAAIA,EAAEpC,YAAcoC,EAAEM,IAExB,OAAOQ,IAETG,aAAc,SAAST,EAAGC,GAC
xB,GAAIS,GAAS3C,KAAKgC,IAAIC,EAAGC,EAEzB,OAAOS,KAAWV,GAEpBW,WAAY,SAASC,EAAMjC,EA
AGC,GAC5B,GAAIiC,GAAOD,EAAKE,uBAChB,OAAQD,GAAKE,MAAQpC,GAAOA,GAAKkC,EAAKG,OAAWH,
EAAKI,KAAOrC,GAAOA,GAAKiC,EAAKK,QAGlF/E,GAAMgF,cAAgB7D,EAOtBnB,EAAMgD,WAAa7B,EAA
O6B,WAAWiC,KAAK9D,GAS1CnB,EAAMsE,aAAenD,EAAOmD,aAAaW,KAAK9D,GAqB9CnB,EAAMwE,WAAa
rD,EAAOqD,YAEzB1E,OAAOC,iBAYV,WACE,QAASmF,GAAeC,GACtB,MAAO,eAAiBC,EAASD,GAEnC,QA
ASC,GAASD,GAChB,MAAO,kBAAoBA,EAAI,KAEjC,QAASE,GAAKF,GACZ,MAAO,uBAAyBA,EAAI,mBAAq
BA,EAAI,KAE/D,GAAIG,IACF,OACA,OACA,QACA,SAEED,KAAM,cACNE,WACE,cACA,gBAGJ,gBAEEC,
EAAS,GAETC,EAA4D,gBAApCtF,UAASY,KAAK2E,MAAMC,YAE5CC,GAAiB9F,OAAO+F,mBAAqB1F,SAAS
Y,KAAKV,gBAE/D,IAAIoF,EAAgB,CAClBH,EAAWQ,QAAQ,SAASC,GACtBC,OAAOD,KAAOA,GAChBP,GA
AUJ,EAASW,GAAKV,EAAKU,GAAK,KAC9BH,IACFJ,GAAUN,EAAea,GAAKV,EAAKU,GAAK,QAG1CP,GAAU
O,EAAER,UAAUU,IAAIb,GAAYC,EAAKU,EAAEV,MAAQ,KACjDO,IACFJ,GAAUO,EAAER,UAAUU,IAAIf,
GAAkBG,EAAKU,EAAEV,MAAQ,QAKjE,IAAIa,GAAK/F,SAASC,cAAc,QAChC8F,GAAGC,YAAcX,EACjBr
F,SAASY,KAAKP,YAAY0F,OA2B9B,SAAUlG,GAER,GAAIoG,IACF,UACA,aACA,OACA,SACA,UACA,UAC
A,UACA,UACA,UACA,SACA,WACA,UACA,SACA,gBACA,QACA,SAGEC,IACF,GACA,EACA,KACA,KACA,E
ACA,EACA,EACA,GACA,GACA,GACA,GACA,EACA,EACA,KACA,EACA,GAGEC,EAAc,WAAY,MAAO,eAEjC
C,GAEFC,WAAYF,EACZG,cAAe,SAASC,EAAQC,GAC9B,GAAIC,GAAIzG,SAAS0G,YAAY,QAG7B,OAFAD,
GAAEE,UAAUJ,EAAQC,EAAO7F,UAAW,EAAO6F,EAAOI,aAAc,GAClEH,EAAEJ,WAAaD,EAAaC,WAAWI,G
AChCA,GAETI,iBAAkB,SAASN,EAAQC,GACjCA,EAASA,GAAUM,OAAOC,OAAO,KAGjC,KAAK,GAAuCC,G
ADxCP,EAAIhF,KAAK6E,cAAcC,EAAQC,GAC1BrD,EAAI,EAAG8D,EAAOH,OAAOG,KAAKT,GAAYrD,EAA
I8D,EAAK7D,OAAQD,IAC9D6D,EAAIC,EAAK9D,GACTsD,EAAEO,GAAKR,EAAOQ,EAEhB,OAAOP,IAETS
,iBAAkB,SAASX,EAAQC,GACjCA,EAASA,GAAUM,OAAOC,OAAO,KAIjC,KAAI,GAAWI,GAFXV,EAAIhF,
KAAK6E,cAAcC,EAAQC,GAE3BrD,EAAI,EAAMA,EAAI8C,EAAY7C,OAAQD,IACxCgE,EAAIlB,EAAY9C,
GAChBsD,EAAEU,GAAKX,EAAOW,IAAMjB,EAAe/C,EAErCsD,GAAEW,QAAUZ,EAAOY,SAAW,CAI9B,IAA
IC,GAAW,CAsBf,OApBEA,GADEb,EAAOa,SACEb,EAAOa,SAEPZ,EAAEW,QAAU,GAAM,EAI/BX,EAAEpE
,EAAIoE,EAAE1D,QACR0D,EAAEnE,EAAImE,EAAEzD,QAGRyD,EAAEa,UAAYd,EAAOc,WAAa,EAClCb,
EAAEc,MAAQf,EAAOe,OAAS,EAC1Bd,EAAEe,OAAShB,EAAOgB,QAAU,EAC5Bf,EAAEY,SAAWA,EACbZ,
EAAEgB,MAAQjB,EAAOiB,OAAS,EAC1BhB,EAAEiB,MAAQlB,EAAOkB,OAAS,EAC1BjB,EAAEkB,YAAcn
B,EAAOmB,aAAe,GACtClB,EAAEmB,YAAcpB,EAAOoB,aAAe,EACtCnB,EAAEoB,UAAYrB,EAAOqB,YAA
a,EAClCpB,EAAEqB,QAAUtB,EAAOsB,SAAW,GACvBrB,GAIX5G,GAAMuG,aAAeA,GACpBzG,OAAOC,iB
AcV,SAAUC,GAGR,QAASkI,KACP,GAAIC,EAAS,CACX,GAAIC,GAAI,GAAIC,IAEZ,OADAD,GAAEE,SAA
WC,EACNH,EAEPxG,KAAKwF,QACLxF,KAAK4G,UATT,GAAIL,GAAUrI,OAAOuI,KAAOvI,OAAOuI,IAAI
I,UAAU3C,QAC7CyC,EAAc,WAAY,MAAO3G,MAAK8G,KAY1CR,GAAWO,WACTE,IAAK,SAASC,EAAM3F,GA
ClB,GAAIK,GAAI1B,KAAKwF,KAAKyB,QAAQD,EACtBtF,GAAI,GACN1B,KAAK4G,OAAOlF,GAAKL,GAE
jBrB,KAAKwF,KAAK/E,KAAKuG,GACfhH,KAAK4G,OAAOnG,KAAKY,KAGrB6F,IAAK,SAASF,GACZ,MAA
OhH,MAAKwF,KAAKyB,QAAQD,GAAQ,IAEnCG,SAAU,SAASH,GACjB,GAAItF,GAAI1B,KAAKwF,KAAKyB
,QAAQD,EACtBtF,GAAI,KACN1B,KAAKwF,KAAK4B,OAAO1F,EAAG,GACpB1B,KAAK4G,OAAOQ,OAAO1F
,EAAG,KAG1B2F,IAAK,SAASL,GACZ,GAAItF,GAAI1B,KAAKwF,KAAKyB,QAAQD,EAC1B,OAAOhH,MAA
K4G,OAAOlF,IAErB4F,MAAO,WACLtH,KAAKwF,KAAK7D,OAAS,EACnB3B,KAAK4G,OAAOjF,OAAS,GAG
vBuC,QAAS,SAASqD,EAAUC,GAC1BxH,KAAK4G,OAAO1C,QAAQ,SAASX,EAAG7B,GAC9B6F,EAASE,KAA
KD,EAASjE,EAAGvD,KAAKwF,KAAK9D,GAAI1B,OACvCA,OAEL0G,SAAU,WACR,MAAO1G,MAAKwF,KAAK
7D,SAIrBvD,EAAMkI,WAAaA,GAClBpI,OAAOC,iBAWV,SAAUC,GACR,GAuFIsJ,GAvFAC,GAEF,UACA,
aACA,OACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,WACA,UACA,SACA,gBAEA,UAEA,YACA,QACA
,SACA,WACA,QACA,QACA,cACA,cACA,YAEA,OACA,SACA,gBACA,QACA,QACA,QACA,YAEA,aACA,eAC
A,WAGEC,IAEF,GACA,EACA,KACA,KACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,EACA,EACA,KA
EA,EAEA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,EAEA,GACA,KACA,KACA,EACA,EACA,EA
CA,EACA,cACA,GAGEC,EAAkD,mBAAvBC,oBAE3BnD,EAAevG,EAAMuG,aAiBrBoD,GACFC,WAAY,GAAI
5J,GAAMkI,WACtB2B,iBAAkB,GAAI7J,GAAMkI,WAC5B4B,SAAU7C,OAAOC,OAAO,MAGxB6C,aAAc9C,
OAAOC,OAAO,MAC5B8C,mBACAC,YAEAC,eAEEC,MAAOC,UAAW,EAAGC,MAAO,IAC5BC,IAAKF,UAAW,EA
AGC,MAAO,KAE5BE,gBASAC,eAAgB,SAASC,EAAMC,GAC7B,GAAInK,GAAImK,EACJC,EAAYpK,EAAEqK
,MACdD,KACFA,EAAU7E,QAAQ,SAASc,GACrBrG,EAAEqG,KACJhF,KAAKkI,SAASlD,GAAKrG,EAAEqG
,GAAG3B,KAAK1E,KAE9BqB,MACHA,KAAKmI,aAAaU,GAAQlK,EAC1BqB,KAAKoI,gBAAgB3H,KAAK9B,
KAG9BsK,gBAAiB,SAASJ,EAAMC,GAC9B,GAAII,GAAM7D,OAAOC,OAAO,KACxB4D,GAAIV,UAAY,EACh
BU,EAAIT,MAAQzI,KAAKqI,SAAS1G,MAC1B,KAAK,GAAWwH,GAAPzH,EAAI,EAAMA,EAAIoH,EAAOM,Q
AAQzH,OAAQD,IAC5CyH,EAAIL,EAAOM,QAAQ1H,GAAG2H,cACtBrJ,KAAKsI,cAAca,GAAKD,CAE1BlJ
,MAAKqI,SAAS5H,KAAKqI,IAErBQ,SAAU,SAAS/I,EAASgJ,GAE1B,IAAK,GAAWC,GADZC,EAAIzJ,KA
AKoI,gBAAgBzG,OACpBD,EAAI,EAAY+H,EAAJ/H,IAAW8H,EAAKxJ,KAAKoI,gBAAgB1G,IAAKA,IAE7
D8H,EAAGF,SAAS7B,KAAK+B,EAAIjJ,EAASgJ,IAGlCG,WAAY,SAASnJ,GAEnB,IAAK,GAAWiJ,GADZC
,EAAIzJ,KAAKoI,gBAAgBzG,OACpBD,EAAI,EAAY+H,EAAJ/H,IAAW8H,EAAKxJ,KAAKoI,gBAAgB1G,
IAAKA,IAE7D8H,EAAGE,WAAWjC,KAAK+B,EAAIjJ,IAI3BgI,KAAM,SAASlH,GACbrB,KAAKiI,iBAAi
BlB,IAAI1F,EAAQwE,UAAW6B,GAC7C1H,KAAK2J,UAAU,OAAQtI,IAEzBuI,KAAM,SAASvI,GAEbA,EA
AQwI,KAAO,OACf7J,KAAK8J,iBAAiBzI,IAExBqH,GAAI,SAASrH,GACXrB,KAAK2J,UAAU,KAAMtI,G
ACrBrB,KAAKiI,iBAAiBd,OAAO9F,EAAQwE,YAEvCkE,OAAQ,SAAS1I,GACfA,EAAQ2I,cAAe,EACvBh
K,KAAK2J,UAAU,KAAMtI,GACrBrB,KAAKiI,iBAAiBd,OAAO9F,EAAQwE,YAGvCoE,aAAc,SAAS5I,GA
KrB,GAAIwI,GAAOxI,EAAQwI,IAGnB,IAAa,eAATA,GAAkC,cAATA,GAAiC,gBAATA,GAAmC,kBAATA,
EAA0B,CAClGxI,EAAQ6I,eACXxC,KAGF,IAAIyC,GAAiB9I,EAAQ+I,cAAcC,SAC3C,IAAIF,EAEF,IA
AK,GAAWhG,GAAGmG,EAAInB,EADnBoB,EAAKlF,OAAOG,KAAK2E,GACZzI,EAAI,EAAaA,EAAI6I,EAA
G5I,OAAQD,IAEvCyH,EAAIoB,EAAG7I,GACHyI,EAAehB,GAAK,IAEtBhF,EAAInE,KAAKsI,cAAca,G
AEvBmB,EAAKnG,EAAIA,EAAEsE,MAAQ,GACnBf,EAAgB4C,IAAM,GAM9B,IAAIjJ,EAAQ6I,aAAZ,CAG
A,GAAIM,GAAKxK,KAAKkI,UAAYlI,KAAKkI,SAAS2B,EACpCW,IACFA,EAAGnJ,GAELA,EAAQ6I,cAAe
,IAGzBO,OAAQ,SAASlL,EAAQyJ,GACvB,IAAK,GAA8BhE,GAA1BtD,EAAI,EAAG+H,EAAIT,EAAOrH,O
AAgB8H,EAAJ/H,IAAWsD,EAAIgE,EAAOtH,IAAKA,IAChE1B,KAAK0K,SAASnL,EAAQyF,IAI1B2F,SA
AU,SAASpL,EAAQyJ,GACzB,IAAK,GAA8BhE,GAA1BtD,EAAI,EAAG+H,EAAIT,EAAOrH,OAAgB8H,EAA
J/H,IAAWsD,EAAIgE,EAAOtH,IAAKA,IAChE1B,KAAK4K,YAAYrL,EAAQyF,IAG7B0F,SAAU,SAASnL,
EAAQsL,GACzBtL,EAAOV,iBAAiBgM,EAAW7K,KAAK8K,eAE1CF,YAAa,SAASrL,EAAQsL,GAC5BtL,EA
AOwL,oBAAoBF,EAAW7K,KAAK8K,eAW7CE,UAAW,SAASlG,EAAQzD,GAC1B,GAAI2D,GAAIL,EAAac,iB
AAiBX,EAAQzD,EAI9C,OAHA2D,GAAEiG,eAAiB5J,EAAQ4J,eAC3BjG,EAAEgF,aAAe3I,EAAQ2I,aAC
zBhF,EAAEkG,QAAUlG,EAAEkG,SAAW7J,EAAQ9B,OAC1ByF,GAGT2E,UAAW,SAAS7E,EAAQzD,GAC1B,
GAAI2D,GAAIhF,KAAKgL,UAAUlG,EAAQzD,EAC/B,OAAOrB,MAAKZ,cAAc4F,IAS5BmG,WAAY,SAAS9J
,GAEnB,IAAK,GADgCqE,GAAjC0F,EAAY/F,OAAOC,OAAO,MACrB5D,EAAI,EAAGA,EAAIiG,EAAYhG,O
AAQD,IACtCgE,EAAIiC,EAAYjG,GAChB0J,EAAU1F,GAAKrE,EAAQqE,IAAMkC,EAAelG,IAIlC,WAAN
gE,GAAwB,kBAANA,IAChBmC,GAAoBuD,EAAU1F,YAAcoC,sBAC9CsD,EAAU1F,GAAK0F,EAAU1F,GAAG
2F,wBAQlC,OAHAD,GAAUH,eAAiB,WACzB5J,EAAQ4J,kBAEHG,GAQThM,cAAe,SAASiC,GACtB,GAAIP
,GAAIO,EAAQ6J,OAChB,IAAIpK,EAAG,CACLA,EAAE1B,cAAciC,EAGhB,IAAIiK,GAAQtL,KAAKmL,W
AAW9J,EAC5BiK,GAAM/L,OAASuB,EACfd,KAAK8J,iBAAiBwB,KAG1BC,eAAgB,WAEd,IAAK,GAAWvG,
GAAGwG,EAAV9J,EAAI,EAAUA,EAAI1B,KAAK2I,aAAahH,OAAQD,IAAK,CACxDsD,EAAIhF,KAAK2I,a
AAajH,GACtB8J,EAAKxG,EAAEyG,iBACP,KAAK,GAAWtC,GAAGqB,EAAVkB,EAAI,EAAUA,EAAI1L,KA
AKqI,SAAS1G,OAAQ+J,IAE3CF,EAAGE,KACLvC,EAAInJ,KAAKqI,SAASqD,GAClBlB,EAAKrB,EAAEn
E,EAAE6E,MACLW,GACFA,EAAG/C,KAAK0B,EAAGnE,IAKnBhF,KAAK2I,aAAahH,OAAS,GAE7BmI,iBA
AkB,SAAShL,GAEpBkB,KAAK2I,aAAahH,QACrBgK,sBAAsB3L,KAAK4L,qBAE7B9M,EAAG2M,kBAAoBz
L,KAAKiI,iBAAiBZ,IAAIvI,EAAG+G,WACpD7F,KAAK2I,aAAalI,KAAK3B,IAG3BiJ,GAAW+C,aAAe/
C,EAAWkC,aAAa5G,KAAK0E,GACvDA,EAAW6D,oBAAsB7D,EAAWwD,eAAelI,KAAK0E,GAChE3J,EAAM2
J,WAAaA,EAWnB3J,EAAMyN,gBAAkB,SAAShJ,EAAMiJ,GACrC,GAAI3C,GAAI2C,EAAQzC,cACZ0C,EA
AMhE,EAAWO,cAAca,EACnC,IAAI4C,EAAK,CACP,GAAIC,GAAajE,EAAWM,SAAS0D,EAAItD,MAMzC,I
ALK5F,EAAKoJ,eACRlE,EAAWuB,SAASzG,GACpBA,EAAKoJ,aAAe,GAGlBD,EAAY,CACd,GACIE,GADA
nI,EAAciI,EAAWG,gBAAkBH,EAAWG,eAAehD,EAEzE,QAAOtG,EAAK7B,UACV,IAAKC,MAAKW,aACRsK
,EAAarJ,CACf,MACA,KAAK5B,MAAKE,uBACR+K,EAAarJ,EAAKd,IACpB,MACA,SACEmK,EAAa,KAGbn
I,GAAemI,IAAeA,EAAWrK,aAAa,iBACxDqK,EAAWE,aAAa,eAAgBrI,GAGvClB,EAAKwH,YACRxH,EAA
KwH,cAEPxH,EAAKwH,UAAUlB,IAAMtG,EAAKwH,UAAUlB,IAAM,GAAK,EAC/CtG,EAAKoJ,eAEP,MAAO
pM,SAAQkM,IAYjB3N,EAAMS,iBAAmB,SAASgE,EAAMiJ,EAASO,EAASC,GACpDD,IACFjO,EAAMyN,gB
AAgBhJ,EAAMiJ,GAC5BjJ,EAAKhE,iBAAiBiN,EAASO,EAASC,KAa5ClO,EAAMmO,kBAAoB,SAAS1J,E
AAMiJ,GACvC,GAAI3C,GAAI2C,EAAQzC,cACZ0C,EAAMhE,EAAWO,cAAca,EAgBnC,OAfI4C,KACElJ,
EAAKoJ,aAAe,GACtBpJ,EAAKoJ,eAEmB,IAAtBpJ,EAAKoJ,cACPlE,EAAW2B,WAAW7G,GAEpBA,EAAK
wH,YACHxH,EAAKwH,UAAUlB,GAAK,EACtBtG,EAAKwH,UAAUlB,KAEftG,EAAKwH,UAAUlB,GAAK,IAI
nBtJ,QAAQkM,IAWjB3N,EAAM2M,oBAAsB,SAASlI,EAAMiJ,EAASO,EAASC,GACvDD,IACFjO,EAAMmO
,kBAAkB1J,EAAMiJ,GAC9BjJ,EAAKkI,oBAAoBe,EAASO,EAASC,MAG9CpO,OAAOC,iBAWV,SAAWC,GA
CT,GAAI2J,GAAa3J,EAAM2J,WACnBC,EAAaD,EAAWC,WAExBwE,EAAa,GAEbC,GAAoB,EAAG,EAAG,EA
AG,GAE7BC,GAAc,CAClB,KACEA,EAA+D,IAAjD,GAAIC,YAAW,QAAShH,QAAS,IAAIA,QACnD,MAAOX,
IAGT,GAAI4H,IACFC,WAAY,EACZC,aAAc,QACd9D,QACE,YACA,YACA,WAEFI,SACE,OACA,KACA,QAE
FE,SAAU,SAAS/J,GACjBwI,EAAW0C,OAAOlL,EAAQS,KAAKgJ,SAEjCU,WAAY,SAASnK,GACnBwI,EAA
W4C,SAASpL,EAAQS,KAAKgJ,SAEnC+D,eAEAC,0BAA2B,SAAS3L,GAGlC,IAAK,GAA2BP,GAF5BmM,EA
AMjN,KAAK+M,YACXnM,EAAIS,EAAQC,QAAST,EAAIQ,EAAQE,QAC5BG,EAAI,EAAG+H,EAAIwD,EAAIt
L,OAAe8H,EAAJ/H,IAAUZ,EAAImM,EAAIvL,IAAKA,IAAK,CAE7D,GAAIwL,GAAKC,KAAKC,IAAIxM,E
AAIE,EAAEF,GAAIyM,EAAKF,KAAKC,IAAIvM,EAAIC,EAAED,EAChD,IAAU2L,GAANU,GAA0BV,GAANa
,EACtB,OAAO,IAIbC,aAAc,SAASjM,GACrB,GAAI2D,GAAI+C,EAAWoD,WAAW9J,EAQ9B,OAPA2D,GAA
Ea,UAAY7F,KAAK6M,WACnB7H,EAAEoB,WAAY,EACdpB,EAAEkB,YAAclG,KAAK8M,aACrB9H,EAAEqB,
QAAU,QACPqG,IACH1H,EAAEW,QAAU8G,EAAiBzH,EAAEuI,QAAU,GAEpCvI,GAETwI,UAAW,SAASnM,G
AClB,IAAKrB,KAAKgN,0BAA0B3L,GAAU,CAC5C,GAAIqE,GAAIsC,EAAWd,IAAIlH,KAAK6M,WAGxBnH
,IACF1F,KAAKyN,QAAQpM,EAEf,IAAI2D,GAAIhF,KAAKsN,aAAajM,EAC1B2D,GAAEzF,OAASnB,EAA
MgD,WAAWC,GAC5B2G,EAAWjB,IAAI/G,KAAK6M,WAAY7H,EAAEzF,QAClCwI,EAAWQ,KAAKvD,KAGpB0
I,UAAW,SAASrM,GAClB,IAAKrB,KAAKgN,0BAA0B3L,GAAU,CAC5C,GAAI9B,GAASyI,EAAWX,IAAIrH
,KAAK6M,WACjC,IAAItN,EAAQ,CACV,GAAIyF,GAAIhF,KAAKsN,aAAajM,EAC1B2D,GAAEzF,OAASA,
EAEO,IAAdyF,EAAEW,SACJoC,EAAWgC,OAAO/E,GAClBhF,KAAK2N,gBAEL5F,EAAW6B,KAAK5E,MAKx
ByI,QAAS,SAASpM,GAChB,IAAKrB,KAAKgN,0BAA0B3L,GAAU,CAC5C,GAAI2D,GAAIhF,KAAKsN,aAA
ajM,EAC1B2D,GAAE4I,cAAgBxP,EAAMgD,WAAWC,GACnC2D,EAAEzF,OAASyI,EAAWX,IAAIrH,KAAK6
M,YAC/B9E,EAAWW,GAAG1D,GACdhF,KAAK2N,iBAGTA,aAAc,WACZ3F,EAAW,UAAUhI,KAAK6M,aAI9B
zO,GAAMwO,YAAcA,GACnB1O,OAAOC,iBAWV,SAAUC,GACR,GAAI2J,GAAa3J,EAAM2J,WAEnBC,GADa5
J,EAAMgF,cAAc9C,WAAW+C,KAAKjF,EAAMgF,eAC1C2E,EAAWC,YAGxB6F,GAFWC,MAAMjH,UAAUxC,I
AAIoD,KAAKpE,KAAKyK,MAAMjH,UAAUxC,KAEzC,MAChB0J,EAAsB,IACtBC,EAAa,GAIbC,GAAmB,EA
GnBC,GACFlF,QACE,aACA,YACA,WACA,eAEFI,SACE,OACA,KACA,QAEFE,SAAU,SAAS/J,EAAQgK,GA
CrBA,GAGJxB,EAAW0C,OAAOlL,EAAQS,KAAKgJ,SAEjCU,WAAY,SAASnK,GACnBwI,EAAW4C,SAASpL,
EAAQS,KAAKgJ,SAEnCmF,aACEC,QAAS,OACTC,UAAW,QACXC,UAAW,SAEbC,wBAAyB,SAASxK,GAChC,
GAAIjD,GAAIiD,EACJyK,EAAKxO,KAAKmO,WACd,OAAIrN,KAAM0N,EAAGJ,QACJ,OACEtN,IAAM0N,E
AAGH,UACX,IACEvN,IAAM0N,EAAGF,UACX,IAEA,MAGXxB,aAAc,QACd2B,WAAY,KACZC,eAAgB,SAAS
C,GACvB,MAAO3O,MAAKyO,aAAeE,EAAQC,YAErCC,gBAAiB,SAASF,IAEM,IAA1B3G,EAAWtB,YAA+C,
IAA1BsB,EAAWtB,YAAoBsB,EAAWd,IAAI,MAChFlH,KAAKyO,WAAaE,EAAQC,WAC1B5O,KAAK8O,SAAW
C,EAAGJ,EAAQrN,QAAS0N,EAAGL,EAAQpN,SAC/CvB,KAAKiP,UAAY,KACjBjP,KAAKkP,0BAGTC,qBA
AsB,SAASC,GACzBA,EAAUhJ,YACZpG,KAAKyO,WAAa,KAClBzO,KAAK8O,QAAU,KACf9O,KAAKqP,oBA
GTC,WAAY,EACZC,QAAS,KACTF,gBAAiB,WACf,GAAI7E,GAAK,WACPxK,KAAKsP,WAAa,EAClBtP,KAA
KuP,QAAU,MACflM,KAAKrD,KACPA,MAAKuP,QAAUC,WAAWhF,EAAIuD,IAEhCmB,sBAAuB,WACjBlP,K
AAKuP,SACPE,aAAazP,KAAKuP,UAGtBG,cAAe,SAAS7F,GACtB,GAAI8F,GAAM,CAIV,QAHa,eAAT9F,
GAAkC,cAATA,KAC3B8F,EAAM,GAEDA,GAETvO,WAAY,SAASwO,EAAOC,GAC1B,GAAoC,eAAhC7P,KAAK
8P,kBAAkBjG,KAAuB,CAChD,GAAI7J,KAAK0O,eAAekB,GAAQ,CAC9B,GAAIG,IACFzO,QAASsO,EAAM
tO,QACfC,QAASqO,EAAMrO,QACfxC,KAAMiB,KAAK8P,kBAAkB/Q,KAC7BQ,OAAQS,KAAK8P,kBAAkBv
Q,OAEjC,OAAOnB,GAAMgD,WAAW2O,GAExB,MAAO3R,GAAMgD,WAAWwO,GAI5B,MAAO5H,GAAWX,IAAIw
I,IAExBG,eAAgB,SAASrB,GACvB,GAAIsB,GAAMjQ,KAAK8P,kBACX9K,EAAI+C,EAAWoD,WAAWwD,GA
I1BkB,EAAK7K,EAAEa,UAAY8I,EAAQC,WAAa,CAC5C5J,GAAEzF,OAASS,KAAKoB,WAAWuN,EAASkB,G
ACpC7K,EAAE9F,SAAU,EACZ8F,EAAEG,YAAa,EACfH,EAAEkL,OAASlQ,KAAKsP,WAChBtK,EAAEW,QA
AU3F,KAAK0P,cAAcO,EAAIpG,MACnC7E,EAAEc,MAAQ6I,EAAQwB,eAAiBxB,EAAQyB,SAAW,EACtDpL
,EAAEe,OAAS4I,EAAQ0B,eAAiB1B,EAAQ2B,SAAW,EACvDtL,EAAEY,SAAW+I,EAAQ4B,aAAe5B,EAAQ
6B,OAAS,GACrDxL,EAAEoB,UAAYpG,KAAK0O,eAAeC,GAClC3J,EAAEkB,YAAclG,KAAK8M,aACrB9H,
EAAEqB,QAAU,OAEZ,IAAIoK,GAAOzQ,IAMX,OALAgF,GAAEiG,eAAiB,WACjBwF,EAAKxB,WAAY,EACj
BwB,EAAK3B,QAAU,KACfmB,EAAIhF,kBAECjG,GAET0L,eAAgB,SAASrP,EAASsP,GAChC,GAAIC,GAA
KvP,EAAQwP,cACjB7Q,MAAK8P,kBAAoBzO,CACzB,KAAK,GAAWP,GAAG4E,EAAVhE,EAAI,EAASA,EAA
IkP,EAAGjP,OAAQD,IACnCZ,EAAI8P,EAAGlP,GACPgE,EAAI1F,KAAKgQ,eAAelP,GACH,eAAjBO,EA
AQwI,MACV7B,EAAWjB,IAAIrB,EAAEG,UAAWH,EAAEnG,QAE5ByI,EAAWd,IAAIxB,EAAEG,YACnB8K,
EAAWlJ,KAAKzH,KAAM0F,IAEH,aAAjBrE,EAAQwI,MAAuBxI,EAAQyP,UACzC9Q,KAAK+Q,eAAerL,IA
M1BsL,aAAc,SAAS3P,GACrB,GAAIrB,KAAK8O,QAAS,CAChB,GAAIa,GACA5L,EAAc3F,EAAMgF,cAAc
5B,gBAAgBH,GAClD4P,EAAajR,KAAKuO,wBAAwBxK,EAC9C,IAAmB,SAAfkN,EAEFtB,GAAM,MACD,IA
AmB,OAAfsB,EAETtB,GAAM,MACD,CACL,GAAI7O,GAAIO,EAAQwP,eAAe,GAE3B5O,EAAIgP,EACJC,E
AAoB,MAAfD,EAAqB,IAAM,IAChCE,EAAKhE,KAAKC,IAAItM,EAAE,SAAWmB,GAAKjC,KAAK8O,QAAQ7
M,IAC7CmP,EAAMjE,KAAKC,IAAItM,EAAE,SAAWoQ,GAAMlR,KAAK8O,QAAQoC,GAGnDvB,GAAMwB,GA
AMC,EAEd,MAAOzB,KAGX0B,UAAW,SAASC,EAAMtK,GACxB,IAAK,GAA4BlG,GAAxBY,EAAI,EAAG+H,E
AAI6H,EAAK3P,OAAe8H,EAAJ/H,IAAUZ,EAAIwQ,EAAK5P,IAAKA,IAC1D,GAAIZ,EAAE8N,aAAe5H,E
ACnB,OAAO,GAUbuK,cAAe,SAASlQ,GACtB,GAAIuP,GAAKvP,EAAQmQ,OAGjB,IAAIxJ,EAAWtB,YAAc
kK,EAAGjP,OAAQ,CACtC,GAAIY,KACJyF,GAAW9D,QAAQ,SAASuN,EAAOC,GAIjC,GAAY,IAARA,IAAc
1R,KAAKqR,UAAUT,EAAIc,EAAM,GAAI,CAC7C,GAAIhM,GAAI+L,CACRlP,GAAE9B,KAAKiF,KAER1F,
MACHuC,EAAE2B,QAAQ,SAASwB,GACjB1F,KAAK+J,OAAOrE,GACZsC,EAAWb,OAAOzB,EAAEG,eAI1B8
L,WAAY,SAAStQ,GACnBrB,KAAKuR,cAAclQ,GACnBrB,KAAK6O,gBAAgBxN,EAAQwP,eAAe,IAC5C7Q,
KAAK4R,gBAAgBvQ,GAChBrB,KAAKiP,YACRjP,KAAKsP,aACLtP,KAAK0Q,eAAerP,EAASrB,KAAKuI,
QAGtCA,KAAM,SAAS6G,GACbrH,EAAWQ,KAAK6G,IAElByC,UAAW,SAASxQ,GAClB,GAAI4M,EAGE5M,E
AAQ8D,YACVnF,KAAK0Q,eAAerP,EAASrB,KAAK4J,UAGpC,IAAK5J,KAAKiP,WAQH,GAAIjP,KAAK8O,
QAAS,CACvB,GAAIhO,GAAIO,EAAQwP,eAAe,GAC3B3D,EAAKpM,EAAEQ,QAAUtB,KAAK8O,QAAQC,EAC
9B1B,EAAKvM,EAAES,QAAUvB,KAAK8O,QAAQE,EAC9B8C,EAAK3E,KAAK4E,KAAK7E,EAAKA,EAAKG,E
AAKA,EAC9ByE,IAAM9D,IACRhO,KAAKgS,YAAY3Q,GACjBrB,KAAKiP,WAAY,EACjBjP,KAAK8O,QAAU
,WAfM,QAAnB9O,KAAKiP,WAAsBjP,KAAKgR,aAAa3P,GAC/CrB,KAAKiP,WAAY,GAEjBjP,KAAKiP,WA
AY,EACjB5N,EAAQ4J,iBACRjL,KAAK0Q,eAAerP,EAASrB,KAAK4J,QAe1CA,KAAM,SAASwF,GACbrH,
EAAW6B,KAAKwF,IAElB6C,SAAU,SAAS5Q,GACjBrB,KAAK4R,gBAAgBvQ,GACrBrB,KAAK0Q,eAAerP,
EAASrB,KAAK0I,KAEpCA,GAAI,SAAS0G,GACXA,EAAUxB,cAAgBxP,EAAMgD,WAAWgO,GAC3CrH,EAAW
W,GAAG0G,IAEhBrF,OAAQ,SAASqF,GACfrH,EAAWgC,OAAOqF,IAEpB4C,YAAa,SAAS3Q,GACpBA,EAA
QyP,SAAU,EAClB9Q,KAAK0Q,eAAerP,EAASrB,KAAK+J,SAEpCgH,eAAgB,SAAS3B,GACvBpH,EAAW,U
AAUoH,EAAUvJ,WAC/B7F,KAAKmP,qBAAqBC,IAG5BwC,gBAAiB,SAASvQ,GACxB,GAAI4L,GAAM7O,EA
AMwO,YAAYG,YACxBjM,EAAIO,EAAQwP,eAAe,EAE/B,IAAI7Q,KAAK0O,eAAe5N,GAAI,CAE1B,GAAIo
R,IAAMtR,EAAGE,EAAEQ,QAAST,EAAGC,EAAES,QAC7B0L,GAAIxM,KAAKyR,EACT,IAAI1H,GAAK,SA
AUyC,EAAKiF,GACtB,GAAIxQ,GAAIuL,EAAIhG,QAAQiL,EAChBxQ,GAAI,IACNuL,EAAI7F,OAAO1F,
EAAG,IAEf2B,KAAK,KAAM4J,EAAKiF,EACnB1C,YAAWhF,EAAIqD,KAKrBzP,GAAM8P,YAAcA,GACnBh
Q,OAAOC,iBAWV,SAAUC,GACR,GAAI2J,GAAa3J,EAAM2J,WACnBC,EAAaD,EAAWC,WACxBmK,EAAkBjU
,OAAOkU,gBAAwE,gBAA/ClU,QAAOkU,eAAeC,qBACxEC,GACFtJ,QACE,gBACA,gBACA,cACA,mBAEFM
,SAAU,SAAS/J,GACjBwI,EAAW0C,OAAOlL,EAAQS,KAAKgJ,SAEjCU,WAAY,SAASnK,GACnBwI,EAAW4
C,SAASpL,EAAQS,KAAKgJ,SAEnCuJ,eACE,GACA,cACA,QACA,MACA,SAEFjF,aAAc,SAASjM,GACrB,
GAAI2D,GAAI3D,CAMR,OALA2D,GAAI+C,EAAWoD,WAAW9J,GACtB8Q,IACFnN,EAAEkB,YAAclG,KAAK
uS,cAAclR,EAAQ6E,cAE7ClB,EAAEqB,QAAU,KACLrB,GAETwN,QAAS,SAAS3C,GAChB7H,EAAW,UAAU
6H,IAEvB4C,cAAe,SAASpR,GACtB,GAAI2D,GAAIhF,KAAKsN,aAAajM,EAC1B2D,GAAEzF,OAASnB,E
AAMgD,WAAWC,GAC5B2G,EAAWjB,IAAI1F,EAAQwE,UAAWb,EAAEzF,QACpCwI,EAAWQ,KAAKvD,IAElB
0N,cAAe,SAASrR,GACtB,GAAI9B,GAASyI,EAAWX,IAAIhG,EAAQwE,UACpC,IAAItG,EAAQ,CACV,GA
AIyF,GAAIhF,KAAKsN,aAAajM,EAC1B2D,GAAEzF,OAASA,EACXwI,EAAW6B,KAAK5E,KAGpB2N,YAAa
,SAAStR,GACpB,GAAI2D,GAAIhF,KAAKsN,aAAajM,EAC1B2D,GAAE4I,cAAgBxP,EAAMgD,WAAWC,GA
CnC2D,EAAEzF,OAASyI,EAAWX,IAAIrC,EAAEa,WAC5BkC,EAAWW,GAAG1D,GACdhF,KAAKwS,QAAQnR
,EAAQwE,YAEvB+M,gBAAiB,SAASvR,GACxB,GAAI2D,GAAIhF,KAAKsN,aAAajM,EAC1B2D,GAAE4I,c
AAgBxP,EAAMgD,WAAWC,GACnC2D,EAAEzF,OAASyI,EAAWX,IAAIrC,EAAEa,WAC5BkC,EAAWgC,OAAO
/E,GAClBhF,KAAKwS,QAAQnR,EAAQwE,YAIzBzH,GAAMkU,SAAWA,GAChBpU,OAAOC,iBAWV,SAAUC,G
ACR,GAAI2J,GAAa3J,EAAM2J,WACnBC,EAAaD,EAAWC,WACxB6K,GACF7J,QACE,cACA,cACA,YACA,i
BAEFsE,aAAc,SAASjM,GACrB,GAAI2D,GAAI+C,EAAWoD,WAAW9J,EAE9B,OADA2D,GAAEqB,QAAU,UA
CLrB,GAETsE,SAAU,SAAS/J,GACjBwI,EAAW0C,OAAOlL,EAAQS,KAAKgJ,SAEjCU,WAAY,SAASnK,GA
CnBwI,EAAW4C,SAASpL,EAAQS,KAAKgJ,SAEnCwJ,QAAS,SAAS3C,GAChB7H,EAAW,UAAU6H,IAEvBiD
,YAAa,SAASzR,GACpB,GAAI2D,GAAIhF,KAAKsN,aAAajM,EAC1B2D,GAAEzF,OAASnB,EAAMgD,WAAW
C,GAC5B2G,EAAWjB,IAAI/B,EAAEa,UAAWb,EAAEzF,QAC9BwI,EAAWQ,KAAKvD,IAElB+N,YAAa,SAA
S1R,GACpB,GAAI9B,GAASyI,EAAWX,IAAIhG,EAAQwE,UACpC,IAAItG,EAAQ,CACV,GAAIyF,GAAIhF
,KAAKsN,aAAajM,EAC1B2D,GAAEzF,OAASA,EACXwI,EAAW6B,KAAK5E,KAGpBgO,UAAW,SAAS3R,GAC
lB,GAAI2D,GAAIhF,KAAKsN,aAAajM,EAC1B2D,GAAE4I,cAAgBxP,EAAMgD,WAAWC,GACnC2D,EAAEz
F,OAASyI,EAAWX,IAAIrC,EAAEa,WAC5BkC,EAAWW,GAAG1D,GACdhF,KAAKwS,QAAQnR,EAAQwE,YAE
vBoN,cAAe,SAAS5R,GACtB,GAAI2D,GAAIhF,KAAKsN,aAAajM,EAC1B2D,GAAE4I,cAAgBxP,EAAMgD
,WAAWC,GACnC2D,EAAEzF,OAASyI,EAAWX,IAAIrC,EAAEa,WAC5BkC,EAAWgC,OAAO/E,GAClBhF,KA
AKwS,QAAQnR,EAAQwE,YAIzBzH,GAAMyU,cAAgBA,GACrB3U,OAAOC,iBAgBV,SAAUC,GACR,GAAI2J,
GAAa3J,EAAM2J,WACnBmL,EAAMhV,OAAOiV,SAEjB,IAAIjV,OAAOkV,aACTrL,EAAWa,eAAe,UAAWxK
,EAAMyU,mBACtC,IAAIK,EAAIG,iBACbtL,EAAWa,eAAe,KAAMxK,EAAMkU,cAGtC,IADAvK,EAAWa,e
AAe,QAASxK,EAAMwO,aACb0G,SAAxBpV,OAAOqV,aAA4B,CACrCxL,EAAWa,eAAe,QAASxK,EAAM8P,Y
AOzC,IAAIsF,GAAWN,EAAIO,UAAUC,MAAM,YAAcR,EAAIO,UAAUC,MAAM,SACjEF,IACFjV,SAASoV,K
AAK9U,iBAAiB,aAAc,cAInDkJ,EAAWuB,SAAS/K,UAAU,IAC7BL,OAAOC,iBA2GT,SAAUC,GACR,GAAI
2J,GAAa3J,EAAM2J,WACnBpD,EAAevG,EAAMuG,aACrBqD,EAAa,GAAI5J,GAAMkI,WACvBsN,GACF5K
,QACE,OACA,OACA,MAEFI,SACC,aACA,QACA,SACA,SACA,YAED+C,gBACEyH,MAAS,OACTC,OAAU,QA
CVC,OAAU,SAEZC,iBAAkB,EAClBC,SAAU,SAASC,GACjB,MAAOA,GAAU,EAAI,EAAI,IAE3BC,kBAAmB
,SAASC,EAAKC,GAC/B,GAAIxT,GAAI,EAAGC,EAAI,CAKf,OAJIsT,IAAOC,IACTxT,EAAIwT,EAAIC,
MAAQF,EAAIE,MACpBxT,EAAIuT,EAAIE,MAAQH,EAAIG,QAEd1T,EAAGA,EAAGC,EAAGA,IAEnB0T,UA
AW,SAASzP,EAAQzD,EAASmT,GACnC,GAAI1T,GAAI0T,EACJjS,EAAIvC,KAAKkU,kBAAkBpT,EAAE2T
,UAAWpT,GACxCyQ,EAAK9R,KAAKkU,kBAAkBpT,EAAE4T,cAAerT,EACjD,IAAIyQ,EAAGlR,EACLE,E
AAE6T,WAAa3U,KAAKgU,SAASlC,EAAGlR,OAC3B,IAAe,WAAXkE,EACT,MAEF,IAAIgN,EAAGjR,EACL
C,EAAE8T,WAAa5U,KAAKgU,SAASlC,EAAGjR,OAC3B,IAAe,WAAXiE,EACT,MAEF,IAAI+P,IACF3V,S
AAS,EACTiG,YAAY,EACZ2P,UAAWhU,EAAEgU,UACblH,cAAevM,EAAQuM,cACvB1H,YAAa7E,EAAQ6E,
YACrBL,UAAWxE,EAAQwE,UACnBQ,QAAS,QAEI,YAAXvB,IACF+P,EAAajU,EAAIS,EAAQT,EACzBiU,E
AAa3H,GAAK3K,EAAE3B,EACpBiU,EAAaE,IAAMjD,EAAGlR,EACtBiU,EAAavT,QAAUD,EAAQC,QAC/B
uT,EAAaR,MAAQhT,EAAQgT,MAC7BQ,EAAaG,QAAU3T,EAAQ2T,QAC/BH,EAAaF,WAAa7T,EAAE6T,YAE
f,WAAX7P,IACF+P,EAAaxH,GAAK9K,EAAE1B,EACpBgU,EAAaI,IAAMnD,EAAGjR,EACtBgU,EAAahU,
EAAIQ,EAAQR,EACzBgU,EAAatT,QAAUF,EAAQE,QAC/BsT,EAAaP,MAAQjT,EAAQiT,MAC7BO,EAAaK,
QAAU7T,EAAQ6T,QAC/BL,EAAaD,WAAa9T,EAAE8T,WAE9B,IAAI5P,GAAIL,EAAaS,iBAAiBN,EAAQ+P
,EAC9C/T,GAAEqU,WAAW/V,cAAc4F,IAE7BuD,KAAM,SAASlH,GACb,GAAIA,EAAQ+E,YAAsC,UAAxB/
E,EAAQ6E,YAA8C,IAApB7E,EAAQsE,SAAgB,GAAO,CACzF,GAAID,IACF+O,UAAWpT,EACX8T,WAAY9T
,EAAQ9B,OACpBuV,aACAJ,cAAe,KACfC,WAAY,EACZC,WAAY,EACZQ,UAAU,EAEZpN,GAAWjB,IAAI1F
,EAAQwE,UAAWH,KAGtCkE,KAAM,SAASvI,GACb,GAAIqE,GAAIsC,EAAWX,IAAIhG,EAAQwE,UAC/B,I
AAIH,EAAG,CACL,IAAKA,EAAE0P,SAAU,CACf,GAAI7S,GAAIvC,KAAKkU,kBAAkBxO,EAAE+O,UAAWp
T,GACxCuI,EAAOrH,EAAE3B,EAAI2B,EAAE3B,EAAI2B,EAAE1B,EAAI0B,EAAE1B,CAE3B+I,GAAO5J
,KAAK+T,mBACdrO,EAAE0P,UAAW,EACb1P,EAAEgP,cAAgBhP,EAAE+O,UACpBzU,KAAKuU,UAAU,aAA
clT,EAASqE,IAGtCA,EAAE0P,WACJpV,KAAKuU,UAAU,QAASlT,EAASqE,GACjC1F,KAAKuU,UAAU,SA
AUlT,EAASqE,GAClC1F,KAAKuU,UAAU,SAAUlT,EAASqE,IAEpCA,EAAEgP,cAAgBrT,IAGtBqH,GAAI
,SAASrH,GACX,GAAIqE,GAAIsC,EAAWX,IAAIhG,EAAQwE,UAC3BH,KACEA,EAAE0P,UACJpV,KAAKuU
,UAAU,WAAYlT,EAASqE,GAEtCsC,EAAWb,OAAO9F,EAAQwE,aAIhCkC,GAAWkB,gBAAgB,QAAS2K,IAC
nC1V,OAAOC,iBAuDX,SAAUC,GACR,GAAI2J,GAAa3J,EAAM2J,WACnBpD,EAAevG,EAAMuG,aACrB0Q,
GAEFC,WAAY,IAEZvB,iBAAkB,GAClB/K,QACE,OACA,OACA,MAEFI,SACE,OACA,YACA,WAEFmM,YAAa
,KACbC,QAAS,KACTC,MAAO,WACL,GAAIJ,GAAOK,KAAKC,MAAQ3V,KAAKuV,YAAYK,UACrC/L,EAAO7J
,KAAK6V,KAAO,YAAc,MACrC7V,MAAK8V,SAASjM,EAAMwL,GACpBrV,KAAK6V,MAAO,GAEd9L,OAAQ,W
ACNgM,cAAc/V,KAAKwV,SACfxV,KAAK6V,MACP7V,KAAK8V,SAAS,WAEhB9V,KAAK6V,MAAO,EACZ7V,
KAAKuV,YAAc,KACnBvV,KAAKT,OAAS,KACdS,KAAKwV,QAAU,MAEjBjN,KAAM,SAASlH,GACTA,EAAQ+
E,YAAcpG,KAAKuV,cAC7BvV,KAAKuV,YAAclU,EACnBrB,KAAKT,OAAS8B,EAAQ9B,OACtBS,KAAKwV,
QAAUQ,YAAYhW,KAAKyV,MAAMpS,KAAKrD,MAAOA,KAAKsV,cAG3D5M,GAAI,SAASrH,GACPrB,KAAKuV
,aAAevV,KAAKuV,YAAY1P,YAAcxE,EAAQwE,WAC7D7F,KAAK+J,UAGTH,KAAM,SAASvI,GACb,GAAIrB
,KAAKuV,aAAevV,KAAKuV,YAAY1P,YAAcxE,EAAQwE,UAAW,CACxE,GAAIjF,GAAIS,EAAQC,QAAUtB,
KAAKuV,YAAYjU,QACvCT,EAAIQ,EAAQE,QAAUvB,KAAKuV,YAAYhU,OACtCX,GAAIA,EAAIC,EAAIA,E
AAKb,KAAK+T,kBACzB/T,KAAK+J,WAIX+L,SAAU,SAAShR,EAAQmR,GACzB,GAAIvQ,IACFxG,SAAS,E
ACTiG,YAAY,EACZe,YAAalG,KAAKuV,YAAYrP,YAC9BL,UAAW7F,KAAKuV,YAAY1P,UAC5BjF,EAAGZ,
KAAKuV,YAAYjU,QACpBT,EAAGb,KAAKuV,YAAYhU,QACpB8E,QAAS,OAEP4P,KACFvQ,EAAEwQ,SAAWD
,EAEf,IAAIjR,GAAIL,EAAaS,iBAAiBN,EAAQY,EAC9C1F,MAAKT,OAAOH,cAAc4F,IAG9B+C,GAAWkB
,gBAAgB,OAAQoM,IAClCnX,OAAOC,iBAwCV,SAAUC,GACR,GAAI2J,GAAa3J,EAAM2J,WACnBpD,EAAe
vG,EAAMuG,aACrBqD,EAAa,GAAI5J,GAAMkI,WACvB6P,GACFnN,QACE,OACA,MAEFI,SACE,OAEFb,K
AAM,SAASlH,GACTA,EAAQ+E,YAAc/E,EAAQ2I,cAChChC,EAAWjB,IAAI1F,EAAQwE,WACrBtG,OAAQ8
B,EAAQ9B,OAChBoG,QAAStE,EAAQsE,QACjB/E,EAAGS,EAAQC,QACXT,EAAGQ,EAAQE,WAIjB6U,UAA
W,SAASpR,EAAGqR,GACrB,MAAsB,UAAlBrR,EAAEkB,YAEyB,IAAtBmQ,EAAU1Q,SAEXX,EAAEgF,cAE
ZtB,GAAI,SAASrH,GACX,GAAIiV,GAAQtO,EAAWX,IAAIhG,EAAQwE,UACnC,IAAIyQ,GAAStW,KAAKo
W,UAAU/U,EAASiV,GAAQ,CAE3C,GAAIxV,GAAI1C,EAAMgF,cAAcpB,IAAIsU,EAAM/W,OAAQ8B,EAAQ
uM,cACtD,IAAI9M,EAAG,CACL,GAAIkE,GAAIL,EAAaS,iBAAiB,OACpClG,SAAS,EACTiG,YAAY,EAC
ZvE,EAAGS,EAAQC,QACXT,EAAGQ,EAAQE,QACX2O,OAAQ7O,EAAQ6O,OAChBhK,YAAa7E,EAAQ6E,YAC
rBL,UAAWxE,EAAQwE,UACnB0Q,OAAQlV,EAAQkV,OAChBC,QAASnV,EAAQmV,QACjBC,QAASpV,EAAQo
V,QACjBC,SAAUrV,EAAQqV,SAClBrQ,QAAS,OAEXvF,GAAE1B,cAAc4F,IAGpBgD,EAAWb,OAAO9F,EA
AQwE,YAI9BlB,GAAaC,WAAa,SAASI,GACjC,MAAO,YACLA,EAAEgF,cAAe,EACjBhC,EAAWb,OAAOnC,
EAAEa,aAGxBkC,EAAWkB,gBAAgB,MAAOkN,IACjCjY,OAAOC,iBAkCV,SAAWwY,GACP,YAiEA,SAASC,
GAAOC,EAAWC,GACvB,IAAKD,EACD,KAAM,IAAIE,OAAM,WAAaD,GAIrC,QAASE,GAAeC,GACpB,MAAQA
,IAAM,IAAY,IAANA,EAMxB,QAASC,GAAaD,GAClB,MAAe,MAAPA,GACI,IAAPA,GACO,KAAPA,GACO,K
AAPA,GACO,MAAPA,GACAA,GAAM,MAAU,yGAAyGhQ,QAAQ7C,OAAO+S,aAAaF,IAAO,EAKrK,QAASG,GA
AiBH,GACtB,MAAe,MAAPA,GAAsB,KAAPA,GAAsB,OAAPA,GAA0B,OAAPA,EAK7D,QAASI,GAAkBJ,GAC
vB,MAAe,MAAPA,GAAsB,KAAPA,GAClBA,GAAM,IAAY,IAANA,GACZA,GAAM,IAAY,KAANA,EAGrB,QAA
SK,GAAiBL,GACtB,MAAe,MAAPA,GAAsB,KAAPA,GAClBA,GAAM,IAAY,IAANA,GACZA,GAAM,IAAY,KA
ANA,GACZA,GAAM,IAAY,IAANA,EAKrB,QAASM,GAAU1H,GACf,MAAe,SAAPA,EAKZ,QAAS2H,KACL,KA
Ae7V,EAAR8G,GAAkByO,EAAapO,EAAO2O,WAAWhP,OACnDA,EAIT,QAASiP,KACL,GAAIpB,GAAOW,CA
GX,KADAX,EAAQ7N,IACO9G,EAAR8G,IACHwO,EAAKnO,EAAO2O,WAAWhP,GACnB6O,EAAiBL,OACfxO,
CAMV,OAAOK,GAAO6O,MAAMrB,EAAO7N,GAG/B,QAASmP,KACL,GAAItB,GAAOzG,EAAIhG,CAoBf,OAl
BAyM,GAAQ7N,EAERoH,EAAK6H,IAKD7N,EADc,IAAdgG,EAAGlO,OACIkW,EAAMC,WACNP,EAAU1H,GA
CVgI,EAAME,QACC,SAAPlI,EACAgI,EAAMG,YACC,SAAPnI,GAAwB,UAAPA,EACjBgI,EAAMI,eAENJ,
EAAMC,YAIbjO,KAAMA,EACN4H,MAAO5B,EACPqI,OAAQ5B,EAAO7N,IAOvB,QAAS0P,KACL,GAEIC,GA
EAC,EAJA/B,EAAQ7N,EACR6P,EAAOxP,EAAO2O,WAAWhP,GAEzB8P,EAAMzP,EAAOL,EAGjB,QAAQ6P,
GAGR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,
IACL,IAAK,IACL,IAAK,IACL,IAAK,IAED,QADE7P,GAEEoB,KAAMgO,EAAMW,WACZ/G,MAAOrN,OAAO
+S,aAAamB,GAC3BJ,OAAQ5B,EAAO7N,GAGvB,SAII,GAHA2P,EAAQtP,EAAO2O,WAAWhP,EAAQ,GAGpB
,KAAV2P,EACA,OAAQE,GACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,I
ACL,IAAK,IACL,IAAK,IACL,IAAK,KAED,MADA7P,IAAS,GAELoB,KAAMgO,EAAMW,WACZ/G,MAAOrN,
OAAO+S,aAAamB,GAAQlU,OAAO+S,aAAaiB,GACvDF,OAAQ5B,EAAO7N,GAGvB,KAAK,IACL,IAAK,IAO
D,MANAA,IAAS,EAGwB,KAA7BK,EAAO2O,WAAWhP,MAChBA,GAGFoB,KAAMgO,EAAMW,WACZ/G,MAAO3I
,EAAO6O,MAAMrB,EAAO7N,GAC3ByP,OAAQ5B,EAAO7N,KAe/B,MAJA4P,GAAMvP,EAAOL,EAAQ,GAIjB
8P,IAAQF,GAAQ,KAAKpR,QAAQsR,IAAQ,GACrC9P,GAAS,GAELoB,KAAMgO,EAAMW,WACZ/G,MAAO8G,
EAAMF,EACbH,OAAQ5B,EAAO7N,KAInB,eAAexB,QAAQsR,IAAQ,KAC7B9P,GAEEoB,KAAMgO,EAAMW,W
ACZ/G,MAAO8G,EACPL,OAAQ5B,EAAO7N,SAIvBgQ,MAAeC,EAASC,gBAAiB,WAI7C,QAASC,KACL,GAA
IC,GAAQvC,EAAOW,CAQnB,IANAA,EAAKnO,EAAOL,GACZmO,EAAOI,EAAeC,EAAGQ,WAAW,KAAe,MAAP
R,EACxC,sEAEJX,EAAQ7N,EACRoQ,EAAS,GACE,MAAP5B,EAAY,CAaZ,IAZA4B,EAAS/P,EAAOL,KACh
BwO,EAAKnO,EAAOL,GAIG,MAAXoQ,GAEI5B,GAAMD,EAAeC,EAAGQ,WAAW,KACnCgB,KAAeC,EAASC,g
BAAiB,WAI1C3B,EAAelO,EAAO2O,WAAWhP,KACpCoQ,GAAU/P,EAAOL,IAErBwO,GAAKnO,EAAOL,GAG
hB,GAAW,MAAPwO,EAAY,CAEZ,IADA4B,GAAU/P,EAAOL,KACVuO,EAAelO,EAAO2O,WAAWhP,KACpCoQ
,GAAU/P,EAAOL,IAErBwO,GAAKnO,EAAOL,GAGhB,GAAW,MAAPwO,GAAqB,MAAPA,EAOd,GANA4B,GAA
U/P,EAAOL,KAEjBwO,EAAKnO,EAAOL,IACD,MAAPwO,GAAqB,MAAPA,KACd4B,GAAU/P,EAAOL,MAEjB
uO,EAAelO,EAAO2O,WAAWhP,IACjC,KAAOuO,EAAelO,EAAO2O,WAAWhP,KACpCoQ,GAAU/P,EAAOL,S
AGrBgQ,MAAeC,EAASC,gBAAiB,UAQjD,OAJItB,GAAkBvO,EAAO2O,WAAWhP,KACpCgQ,KAAeC,EAASC
,gBAAiB,YAIzC9O,KAAMgO,EAAMiB,eACZrH,MAAOsH,WAAWF,GAClBX,OAAQ5B,EAAO7N,IAMvB,QAA
SuQ,KACL,GAAcC,GAAO3C,EAAOW,EAAxBiC,EAAM,GAAsBC,GAAQ,CASxC,KAPAF,EAAQnQ,EAAOL,GA
CfmO,EAAkB,MAAVqC,GAA4B,MAAVA,EACtB,2CAEJ3C,EAAQ7N,IACNA,EAEa9G,EAAR8G,GAAgB,CAG
nB,GAFAwO,EAAKnO,EAAOL,KAERwO,IAAOgC,EAAO,CACdA,EAAQ,EACR,OACG,GAAW,OAAPhC,EAEP,
GADAA,EAAKnO,EAAOL,KACPwO,GAAOG,EAAiBH,EAAGQ,WAAW,IA0B3B,OAARR,GAAkC,OAAlBnO,EAA
OL,MACrBA,MA1BN,QAAQwO,GACR,IAAK,IACDiC,GAAO,IACP,MACJ,KAAK,IACDA,GAAO,IACP,MACJ
,KAAK,IACDA,GAAO,GACP,MACJ,KAAK,IACDA,GAAO,IACP,MACJ,KAAK,IACDA,GAAO,IACP,MACJ,K
AAK,IACDA,GAAO,GACP,MAEJ,SACIA,GAAOjC,MAQZ,CAAA,GAAIG,EAAiBH,EAAGQ,WAAW,IACtC,KA
EAyB,IAAOjC,GAQf,MAJc,KAAVgC,GACAR,KAAeC,EAASC,gBAAiB,YAIzC9O,KAAMgO,EAAMuB,cACZ
3H,MAAOyH,EACPC,MAAOA,EACPjB,OAAQ5B,EAAO7N,IAIvB,QAAS4Q,GAAiBC,GACtB,MAAOA,GAAMz
P,OAASgO,EAAMC,YACxBwB,EAAMzP,OAASgO,EAAME,SACrBuB,EAAMzP,OAASgO,EAAMI,gBACrBqB,
EAAMzP,OAASgO,EAAMG,YAG7B,QAASuB,KACL,GAAItC,EAIJ,OAFAO,KAEI/O,GAAS9G,GAELkI,KAA
MgO,EAAM2B,IACZtB,OAAQzP,EAAOA,KAIvBwO,EAAKnO,EAAO2O,WAAWhP,GAGZ,KAAPwO,GAAoB,KA
APA,GAAoB,KAAPA,EACnBkB,IAIA,KAAPlB,GAAoB,KAAPA,EACN+B,IAGP3B,EAAkBJ,GACXW,IAKA,
KAAPX,EACID,EAAelO,EAAO2O,WAAWhP,EAAQ,IAClCmQ,IAEJT,IAGPnB,EAAeC,GACR2B,IAGJT,KA
GX,QAASsB,KACL,GAAIH,EASJ,OAPAA,GAAQI,EACRjR,EAAQ6Q,EAAMpB,MAAM,GAEpBwB,EAAYH,IA
EZ9Q,EAAQ6Q,EAAMpB,MAAM,GAEboB,EAGX,QAASK,KACL,GAAIC,EAEJA,GAAMnR,EACNiR,EAAYH,I
ACZ9Q,EAAQmR,EAKZ,QAASnB,GAAWa,EAAOO,GACvB,GAAIC,GACAC,EAAOjM,MAAMjH,UAAU8Q,MAAM
lQ,KAAKuS,UAAW,GAC7CC,EAAMJ,EAAcK,QAChB,SACA,SAAUC,EAAO1R,GAEb,MADAmO,GAAOnO,EAA
QsR,EAAKpY,OAAQ,sCACrBoY,EAAKtR,IAOxB,MAHAqR,GAAQ,GAAI/C,OAAMkD,GAClBH,EAAMrR,MA
AQA,EACdqR,EAAMM,YAAcH,EACdH,EAKV,QAASO,GAAgBf,GACrBb,EAAWa,EAAOZ,EAASC,gBAAiBW,
EAAM7H,OAMtD,QAAS6I,GAAO7I,GACZ,GAAI6H,GAAQG,KACRH,EAAMzP,OAASgO,EAAMW,YAAcc,EAA
M7H,QAAUA,IACnD4I,EAAgBf,GAMxB,QAAS5F,GAAMjC,GACX,MAAOiI,GAAU7P,OAASgO,EAAMW,YAA
ckB,EAAUjI,QAAUA,EAKtE,QAAS8I,GAAaC,GAClB,MAAOd,GAAU7P,OAASgO,EAAME,SAAW2B,EAAUj
I,QAAU+I,EAwBnE,QAASC,KACL,GAAIC,KAIJ,KAFAJ,EAAO,MAEC5G,EAAM,MACNA,EAAM,MACN+F,I
ACAiB,EAASja,KAAK,QAEdia,EAASja,KAAKka,MAETjH,EAAM,MACP4G,EAAO,KAOnB,OAFAA,GAAO,
KAEAM,EAASC,sBAAsBH,GAK1C,QAASI,KACL,GAAIxB,EAOJ,OALA9B,KACA8B,EAAQG,IAIJH,EAAMz
P,OAASgO,EAAMuB,eAAiBE,EAAMzP,OAASgO,EAAMiB,eACpD8B,EAASG,cAAczB,GAG3BsB,EAASI,i
BAAiB1B,EAAM7H,OAG3C,QAASwJ,KACL,GAAI3B,GAAO5H,CAWX,OATA4H,GAAQI,EACRlC,KAEI8B,E
AAMzP,OAASgO,EAAM2B,KAAOF,EAAMzP,OAASgO,EAAMW,aACjD6B,EAAgBf,GAGpB5H,EAAMoJ,IACN
R,EAAO,KACAM,EAASM,eAAe,OAAQxJ,EAAKiJ,MAGhD,QAASQ,KACL,GAAIC,KAIJ,KAFAd,EAAO,MAE
C5G,EAAM,MACV0H,EAAW3a,KAAKwa,KAEXvH,EAAM,MACP4G,EAAO,IAMf,OAFAA,GAAO,KAEAM,EAAS
S,uBAAuBD,GAK3C,QAASE,KACL,GAAIC,EAQJ,OANAjB,GAAO,KAEPiB,EAAOZ,KAEPL,EAAO,KAEAiB
,EAMX,QAASC,KACL,GAAI3R,GAAMyP,EAAOiC,CAEjB,OAAI7H,GAAM,KACC4H,KAGXzR,EAAO6P,EAA
U7P,KAEbA,IAASgO,EAAMC,WACfyD,EAAOX,EAASI,iBAAiBvB,IAAMhI,OAChC5H,IAASgO,EAAMuB,
eAAiBvP,IAASgO,EAAMiB,eACtDyC,EAAOX,EAASG,cAActB,KACvB5P,IAASgO,EAAME,QAClBwC,EA
Aa,UACbd,IACA8B,EAAOX,EAASa,wBAEb5R,IAASgO,EAAMI,gBACtBqB,EAAQG,IACRH,EAAM7H,MAA
yB,SAAhB6H,EAAM7H,MACrB8J,EAAOX,EAASG,cAAczB,IACvBzP,IAASgO,EAAMG,aACtBsB,EAAQG,
IACRH,EAAM7H,MAAQ,KACd8J,EAAOX,EAASG,cAAczB,IACvB5F,EAAM,KACb6H,EAAOd,IACA/G,EAA
M,OACb6H,EAAOJ,KAGPI,EACOA,MAGXlB,GAAgBZ,MAKpB,QAASiC,KACL,GAAI3B,KAIJ,IAFAO,EAA
O,MAEF5G,EAAM,KACP,KAAe/R,EAAR8G,IACHsR,EAAKtZ,KAAKka,OACNjH,EAAM,OAGV4G,EAAO,IA
Mf,OAFAA,GAAO,KAEAP,EAGX,QAAS4B,KACL,GAAIrC,EAQJ,OANAA,GAAQG,IAEHJ,EAAiBC,IAClBe
,EAAgBf,GAGbsB,EAASI,iBAAiB1B,EAAM7H,OAG3C,QAASmK,KAGL,MAFAtB,GAAO,KAEAqB,IAGX,Q
AASE,KACL,GAAIN,EAQJ,OANAjB,GAAO,KAEPiB,EAAOZ,KAEPL,EAAO,KAEAiB,EAGX,QAASO,KACL,
GAAIP,GAAMxB,EAAMgC,CAIhB,KAFAR,EAAOC,MAGH,GAAI9H,EAAM,KACNqI,EAAWF,IACXN,EAAOX,
EAASoB,uBAAuB,IAAKT,EAAMQ,OAC/C,IAAIrI,EAAM,KACbqI,EAAWH,IACXL,EAAOX,EAASoB,uBAA
uB,IAAKT,EAAMQ,OAC/C,CAAA,IAAIrI,EAAM,KAIb,KAHAqG,GAAO2B,IACPH,EAAOX,EAASqB,qBAA
qBV,EAAMxB,GAMnD,MAAOwB,GASX,QAASW,KACL,GAAI5C,GAAOiC,CAcX,OAZI7B,GAAU7P,OAASgO,
EAAMW,YAAckB,EAAU7P,OAASgO,EAAME,QAChEwD,EAAOY,KACAzI,EAAM,MAAQA,EAAM,MAAQA,EAAM
,MACzC4F,EAAQG,IACR8B,EAAOW,IACPX,EAAOX,EAASwB,sBAAsB9C,EAAM7H,MAAO8J,IAC5ChB,EA
Aa,WAAaA,EAAa,SAAWA,EAAa,UACtE9B,KAAeC,EAASC,iBAExB4C,EAAOY,KAGJZ,EAGX,QAASc,GAA
iB/C,GACtB,GAAIgD,GAAO,CAEX,IAAIhD,EAAMzP,OAASgO,EAAMW,YAAcc,EAAMzP,OAASgO,EAAME
,QACxD,MAAO,EAGX,QAAQuB,EAAM7H,OACd,IAAK,KACD6K,EAAO,CACP,MAEJ,KAAK,KACDA,EAAO,C
ACP,MAEJ,KAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACDA,EAAO,CACP,MAEJ,KAAK,IACL,IAAK,
IACL,IAAK,KACL,IAAK,KACL,IAAK,aACDA,EAAO,CACP,MAEJ,KAAK,KACDA,EAAO,CACP,MAEJ,KAA
K,IACL,IAAK,IACDA,EAAO,CACP,MAEJ,KAAK,IACL,IAAK,IACL,IAAK,IACDA,EAAO,GAOX,MAAOA,
GAWX,QAASC,KACL,GAAIhB,GAAMjC,EAAOgD,EAAME,EAAOvZ,EAAOwZ,EAAUzZ,EAAMtB,CAMrD,IAJ
AsB,EAAOkZ,IAEP5C,EAAQI,EACR4C,EAAOD,EAAiB/C,GACX,IAATgD,EACA,MAAOtZ,EASX,KAPAsW
,EAAMgD,KAAOA,EACb7C,IAEAxW,EAAQiZ,IAERM,GAASxZ,EAAMsW,EAAOrW,IAEdqZ,EAAOD,EAAiB
3C,IAAc,GAAG,CAG7C,KAAQ8C,EAAM7a,OAAS,GAAO2a,GAAQE,EAAMA,EAAM7a,OAAS,GAAG2a,MAC1
DrZ,EAAQuZ,EAAME,MACdD,EAAWD,EAAME,MAAMjL,MACvBzO,EAAOwZ,EAAME,MACbnB,EAAOX,EAAS
+B,uBAAuBF,EAAUzZ,EAAMC,GACvDuZ,EAAM/b,KAAK8a,EAIfjC,GAAQG,IACRH,EAAMgD,KAAOA,EA
CbE,EAAM/b,KAAK6Y,GACXiC,EAAOW,IACPM,EAAM/b,KAAK8a,GAMf,IAFA7Z,EAAI8a,EAAM7a,OAA
S,EACnB4Z,EAAOiB,EAAM9a,GACNA,EAAI,GACP6Z,EAAOX,EAAS+B,uBAAuBH,EAAM9a,EAAI,GAAG+
P,MAAO+K,EAAM9a,EAAI,GAAI6Z,GACzE7Z,GAAK,CAGT,OAAO6Z,GAMX,QAASqB,KACL,GAAIrB,GAA
MsB,EAAYC,CAatB,OAXAvB,GAAOgB,IAEH7I,EAAM,OACN+F,IACAoD,EAAaD,IACbtC,EAAO,KACPwC
,EAAYF,IAEZrB,EAAOX,EAASmC,4BAA4BxB,EAAMsB,EAAYC,IAG3DvB,EAaX,QAASyB,KACL,GAAIpO
,GAAYmL,CAUhB,OARAnL,GAAa6K,IAET7K,EAAW/E,OAASgO,EAAMC,YAC1BuC,EAAgBzL,GAGpBmL,E
AAOrG,EAAM,KAAOgI,OAEbd,EAASqC,aAAarO,EAAW6C,MAAOsI,GAOnD,QAASmD,KACL,KAAOxJ,EAA
M,MACT+F,IACAuD,IAqBR,QAASG,KACL3F,IACAmC,GAEA,IAAI4B,GAAOZ,IACPY,KACwB,MAApB7B,
EAAUjI,OAAoC,MAAnBiI,EAAUjI,OAC9B8J,EAAK1R,OAASuT,EAAOtF,WAC5BuF,EAAkB9B,IAElB2B
,IACwB,OAApBxD,EAAUjI,MACV6L,EAAkB/B,GAElBX,EAAS2C,eAAehC,KAKhC7B,EAAU7P,OAASgO,
EAAM2B,KACzBa,EAAgBX,GAIxB,QAAS4D,GAAkB/B,GACvB9B,GACA,IAAI7K,GAAa6K,IAAMhI,KACv
BmJ,GAAS4C,mBAAmBjC,EAAM3M,GAGtC,QAASyO,GAAkBzO,GACvB,GAAI6O,EACoB,OAApB/D,EAAUj
I,QACVgI,IACIC,EAAU7P,OAASgO,EAAMC,YACzBuC,EAAgBX,GACpB+D,EAAYhE,IAAMhI,OAGtBgI,
GACA,IAAI8B,GAAOZ,IACXuC,KACAtC,EAAS8C,mBAAmB9O,EAAW/F,KAAM4U,EAAWlC,GAG5D,QAASo
C,GAAMrF,EAAMsF,GAUjB,MATAhD,GAAWgD,EACX9U,EAASwP,EACT7P,EAAQ,EACR9G,EAASmH,EAAO
nH,OAChB+X,EAAY,KACZmE,GACIC,aAGGX,IAx+BX,GAAItF,GACAkG,EACAX,EACA1E,EACA5P,EACA
L,EACA9G,EACAiZ,EACAlB,EACAmE,CAEJhG,IACII,eAAgB,EAChBuB,IAAK,EACL1B,WAAY,EACZC,
QAAS,EACTC,YAAa,EACbc,eAAgB,EAChBN,WAAY,EACZY,cAAe,GAGnB2E,KACAA,EAAUlG,EAAMI,gB
AAkB,UAClC8F,EAAUlG,EAAM2B,KAAO,QACvBuE,EAAUlG,EAAMC,YAAc,aAC9BiG,EAAUlG,EAAME,S
AAW,UAC3BgG,EAAUlG,EAAMG,aAAe,OAC/B+F,EAAUlG,EAAMiB,gBAAkB,UAClCiF,EAAUlG,EAAMW,
YAAc,aAC9BuF,EAAUlG,EAAMuB,eAAiB,SAEjCgE,GACIY,gBAAiB,kBACjBC,iBAAkB,mBAClBC,eAA
gB,iBAChBC,sBAAuB,wBACvBC,eAAgB,iBAChBC,oBAAqB,sBACrBvG,WAAY,aACZwG,QAAS,UACTC,i
BAAkB,mBAClBC,kBAAmB,oBACnBC,iBAAkB,mBAClBC,iBAAkB,mBAClBC,QAAS,UACTC,SAAU,WACVC
,eAAgB,iBAChBC,gBAAiB,mBAIrBpG,GACIC,gBAAkB,sBAClBoG,aAAc,uBACdC,cAAe,oCAgrBnB,I
AAI7C,IAAyBL,EAuJzBnB,GAAkBiC,CA6GtBjG,GAAOsI,SACHtB,MAAOA,IAEZ3d,MASH,SAAW2W,GA
CT,YAEA,SAASuI,GAAeC,EAAgBtW,EAAMhG,EAAMuc,GAClD,GAAIC,EACJ,KAEE,GADAA,EAAaC,EAA
cH,GACvBE,EAAWE,aACV1c,EAAK7B,WAAaC,KAAKW,cACN,aAAjBiB,EAAK2c,SACK,SAAT3W,GAA4B,
WAATA,GACvB,KAAMkO,OAAM,4DAEd,MAAO0I,GAEP,WADAC,SAAQ5F,MAAM,8BAAgCqF,EAAgBM,GAIh
E,MAAO,UAASE,EAAO9c,EAAM+c,GAC3B,GAAIC,GAAUR,EAAWS,WAAWH,EAAOP,EAAgBQ,EAO3D,OANI
P,GAAWE,YAAcM,IAC3Bhd,EAAKkd,6BAA+BV,EAAWE,WAC3CF,EAAWW,aACbnd,EAAKod,6BAA+BZ,EA
AWW,aAG5CH,GAOX,QAASP,GAAcH,GACrB,GAAIE,GAAaa,EAAqBf,EACtC,KAAKE,EAAY,CACf,GAAIz
E,GAAW,GAAIuF,EACnBlB,SAAQtB,MAAMwB,EAAgBvE,GAC9ByE,EAAa,GAAIe,GAAWxF,GAC5BsF,EA
AqBf,GAAkBE,EAEzC,MAAOA,GAGT,QAASf,GAAQ7M,GACfzR,KAAKyR,MAAQA,EACbzR,KAAKqgB,SAA
W/M,OAgBlB,QAASgN,GAAUzX,GACjB7I,KAAK6I,KAAOA,EACZ7I,KAAKjB,KAAOwhB,KAAKlZ,IAAIw
B,GA2BvB,QAAS4V,GAAiB+B,EAAQzE,EAAU0E,GAC1CzgB,KAAK0gB,SAAuB,KAAZD,EAEhBzgB,KAAK
2gB,YAA+B,kBAAVH,IACPA,EAAOG,aACN3gB,KAAK0gB,YAAc3E,YAAoBuC,IAE3Dte,KAAK4gB,YACA
5gB,KAAK2gB,cACL5E,YAAoBuE,IAAavE,YAAoBuC,MACrDkC,YAAkB/B,IAAoB+B,YAAkBF,IAE7Dtg
B,KAAKwgB,OAASxgB,KAAK4gB,WAAaJ,EAASK,EAAML,GAC/CxgB,KAAK+b,UAAY/b,KAAK0gB,UAAY1
gB,KAAK4gB,WACnC7E,EAAW8E,EAAM9E,GAuEvB,QAAS+E,GAAOjY,EAAMkR,GACpB/Z,KAAK6I,KAAO
A,EACZ7I,KAAK+Z,OACL,KAAK,GAAIrY,GAAI,EAAGA,EAAIqY,EAAKpY,OAAQD,IAC/B1B,KAAK+Z,K
AAKrY,GAAKmf,EAAM9G,EAAKrY,IA0C9B,QAASqf,KAAmB,KAAMhK,OAAM,mBA0BxC,QAAS8J,GAAMG,
GACb,MAAqB,kBAAPA,GAAoBA,EAAMA,EAAIC,UAG9C,QAASd,KACPngB,KAAKqf,WAAa,KAClBrf,KAA
KkhB,WACLlhB,KAAKmhB,QACLnhB,KAAKohB,YAAc9N,OACnBtT,KAAKuf,WAAajM,OAClBtT,KAAKgg
B,WAAa1M,OAClBtT,KAAK2gB,aAAc,EA2IrB,QAASU,GAAmB5P,GAC1BzR,KAAKshB,OAAS7P,EAUhB,
QAAS2O,GAAWxF,GAIlB,GAHA5a,KAAKuf,WAAa3E,EAAS2E,WAC3Bvf,KAAKggB,WAAapF,EAASoF,YA
EtBpF,EAASyE,WACZ,KAAMtI,OAAM,uBAEd/W,MAAKqf,WAAazE,EAASyE,WAC3BwB,EAAM7gB,KAAKq
f,YAEXrf,KAAKkhB,QAAUtG,EAASsG,QACxBlhB,KAAK2gB,YAAc/F,EAAS+F,YAmE9B,QAASY,GAAyB
1Y,GAChC,MAAOzE,QAAOyE,GAAMqR,QAAQ,SAAU,SAASsH,GAC7C,MAAO,IAAMA,EAAEnY,gBASnB,QA
ASoY,GAAU9B,EAAO+B,GACxB,KAAO/B,EAAMgC,KACLtc,OAAOwB,UAAU+a,eAAena,KAAKkY,EAAO+B
,IAClD/B,EAAQA,EAAMgC,EAGhB,OAAOhC,GAGT,QAASkC,GAAoBC,GAC3B,OAAQA,GACN,IAAK,GACH
,OAAO,CAET,KAAK,QACL,IAAK,OACL,IAAK,OACH,OAAO,EAGX,MAAKC,OAAMC,OAAOF,KAGX,GAFE,E
AKX,QAASG,MA7eT,GAAI/B,GAAuB7a,OAAOC,OAAO,KAkBzCgZ,GAAQzX,WACNoa,QAAS,WACP,IAAKj
hB,KAAKqgB,SAAU,CAClB,GAAI5O,GAAQzR,KAAKyR,KACjBzR,MAAKqgB,SAAW,WACd,MAAO5O,IAIX
,MAAOzR,MAAKqgB,WAShBC,EAAUzZ,WACRoa,QAAS,WACP,IAAKjhB,KAAKqgB,SAAU,CAClB,GACIth
B,IADOiB,KAAK6I,KACL7I,KAAKjB,KAChBiB,MAAKqgB,SAAW,SAASV,EAAOuC,GAI9B,MAHIA,IACF
A,EAASC,QAAQxC,EAAO5gB,GAEnBA,EAAKqjB,aAAazC,IAI7B,MAAO3f,MAAKqgB,UAGdgC,SAAU,SA
AS1C,EAAO2C,GAIxB,MAHwB,IAApBtiB,KAAKjB,KAAK4C,OACZge,EAAQ8B,EAAU9B,EAAO3f,KAAKj
B,KAAK,IAE9BiB,KAAKjB,KAAKwjB,aAAa5C,EAAO2C,KAqBzC7D,EAAiB5X,WACf2b,GAAIC,YACF,I
AAKziB,KAAK0iB,UAAW,CAEnB,GAAIC,GAAQ3iB,KAAKwgB,iBAAkB/B,GAC/Bze,KAAKwgB,OAAOiC,
SAAS9K,SAAW3X,KAAKwgB,OAAO3X,KAChD8Z,GAAMliB,KAAKT,KAAK+b,mBAAoBuE,GAChCtgB,KAAK
+b,SAASlT,KAAO7I,KAAK+b,SAAStK,OACvCzR,KAAK0iB,UAAYnC,KAAKlZ,IAAIsb,GAG5B,MAAO3i
B,MAAK0iB,WAGdzB,QAAS,WACP,IAAKjhB,KAAKqgB,SAAU,CAClB,GAAIG,GAASxgB,KAAKwgB,MAEl
B,IAAIxgB,KAAK4gB,WAAY,CACnB,GAAI7hB,GAAOiB,KAAKyiB,QAEhBziB,MAAKqgB,SAAW,SAASV,
EAAOuC,GAI9B,MAHIA,IACFA,EAASC,QAAQxC,EAAO5gB,GAEnBA,EAAKqjB,aAAazC,QAEtB,IAAK3f
,KAAK0gB,SAWV,CAEL,GAAI3E,GAAW/b,KAAK+b,QAEpB/b,MAAKqgB,SAAW,SAASV,EAAOuC,EAAU9C
,GACxC,GAAIwD,GAAUpC,EAAOb,EAAOuC,EAAU9C,GAClCyD,EAAW9G,EAAS4D,EAAOuC,EAAU9C,EAI
zC;MAHI8C,IACFA,EAASC,QAAQS,GAAUC,IAEtBD,EAAUA,EAAQC,GAAYvP,YArBd,CACzB,GAAIvU,G
AAOwhB,KAAKlZ,IAAIrH,KAAK+b,SAASlT,KAElC7I,MAAKqgB,SAAW,SAASV,EAAOuC,EAAU9C,GACx
C,GAAIwD,GAAUpC,EAAOb,EAAOuC,EAAU9C,EAKtC,OAHI8C,IACFA,EAASC,QAAQS,EAAS7jB,GAErB
A,EAAKqjB,aAAaQ,KAgB/B,MAAO5iB,MAAKqgB,UAGdgC,SAAU,SAAS1C,EAAO2C,GACxB,GAAItiB,K
AAK4gB,WAEP,MADA5gB,MAAKyiB,SAASF,aAAa5C,EAAO2C,GAC3BA,CAGT,IAAI9B,GAASxgB,KAAKw
gB,OAAOb,GACrBkD,EAAW7iB,KAAK+b,mBAAoBuE,GAAYtgB,KAAK+b,SAASlT,KAC9D7I,KAAK+b,SA
AS4D,EAClB,OAAOa,GAAOqC,GAAYP,IAY9BxB,EAAOja,WACLic,UAAW,SAASnD,EAAOuC,EAAU9C,EA
AgB2D,EACjCC,GAClB,GAAIxY,GAAK4U,EAAepf,KAAK6I,MACzB+Z,EAAUjD,CACd,IAAInV,EACFoY
,EAAUtP,WAGV,IADA9I,EAAKoY,EAAQ5iB,KAAK6I,OACb2B,EAEH,WADAkV,SAAQ5F,MAAM,mCAAqC9
Z,KAAK6I,KAc5D,IANIka,EACFvY,EAAKA,EAAGyY,QACoB,kBAAZzY,GAAG0Y,QACnB1Y,EAAKA,EAA
G0Y,OAGO,kBAAN1Y,GAET,WADAkV,SAAQ5F,MAAM,mCAAqC9Z,KAAK6I,KAK1D,KAAK,GADDkR,GAAOi
J,MACFthB,EAAI,EAAGA,EAAI1B,KAAK+Z,KAAKpY,OAAQD,IACpCqY,EAAKtZ,KAAKogB,EAAM7gB,K
AAK+Z,KAAKrY,IAAIie,EAAOuC,EAAU9C,GAGjD,OAAO5U,GAAG2Y,MAAMP,EAAS7I,IAM7B,IAAIqJ,
IACFC,IAAK,SAAS9f,GAAK,OAAQA,GAC3B+f,IAAK,SAAS/f,GAAK,OAAQA,GAC3BggB,IAAK,SAAShg
B,GAAK,OAAQA,IAGzBigB,GACFH,IAAK,SAAS5Z,EAAGtF,GAAK,MAAOsF,GAAEtF,GAC/Bmf,IAAK,S
AAS7Z,EAAGtF,GAAK,MAAOsF,GAAEtF,GAC/Bsf,IAAK,SAASha,EAAGtF,GAAK,MAAOsF,GAAEtF,GA
C/Buf,IAAK,SAASja,EAAGtF,GAAK,MAAOsF,GAAEtF,GAC/Bwf,IAAK,SAASla,EAAGtF,GAAK,MAAO
sF,GAAEtF,GAC/Byf,IAAK,SAASna,EAAGtF,GAAK,MAASA,GAAFsF,GAC7Boa,IAAK,SAASpa,EAAGt
F,GAAK,MAAOsF,GAAEtF,GAC/B2f,KAAM,SAASra,EAAGtF,GAAK,MAAUA,IAAHsF,GAC9Bsa,KAAM,S
AASta,EAAGtF,GAAK,MAAOsF,IAAGtF,GACjC6f,KAAM,SAASva,EAAGtF,GAAK,MAAOsF,IAAGtF,GA
CjC8f,KAAM,SAASxa,EAAGtF,GAAK,MAAOsF,IAAGtF,GACjC+f,MAAO,SAASza,EAAGtF,GAAK,MAAO
sF,KAAItF,GACnCggB,MAAO,SAAS1a,EAAGtF,GAAK,MAAOsF,KAAItF,GACnCigB,KAAM,SAAS3a,EA
AGtF,GAAK,MAAOsF,IAAGtF,GACjCkgB,KAAM,SAAS5a,EAAGtF,GAAK,MAAOsF,IAAGtF,GAiBnCgc,
GAAYtZ,WACVuV,sBAAuB,SAASkI,EAAIC,GAClC,IAAKnB,EAAekB,GAClB,KAAMvN,OAAM,wBAA0BuN
,EAIxC,OAFAC,GAAW1D,EAAM0D,GAEV,SAAS5E,EAAOuC,EAAU9C,GAC/B,MAAOgE,GAAekB,GAAIC,E
AAS5E,EAAOuC,EAAU9C,MAIxDzC,uBAAwB,SAAS2H,EAAIthB,EAAMC,GACzC,IAAKugB,EAAgBc,GAC
nB,KAAMvN,OAAM,wBAA0BuN,EAKxC,QAHAthB,EAAO6d,EAAM7d,GACbC,EAAQ4d,EAAM5d,GAENqhB,
GACN,IAAK,KAEH,MADAtkB,MAAK2gB,aAAc,EACZ,SAAShB,EAAOuC,EAAU9C,GAC/B,MAAOpc,GAAK2
c,EAAOuC,EAAU9C,IACzBnc,EAAM0c,EAAOuC,EAAU9C,GAE/B,KAAK,KAEH,MADApf,MAAK2gB,aAAc
,EACZ,SAAShB,EAAOuC,EAAU9C,GAC/B,MAAOpc,GAAK2c,EAAOuC,EAAU9C,IACzBnc,EAAM0c,EAAO
uC,EAAU9C,IAIjC,MAAO,UAASO,EAAOuC,EAAU9C,GAC/B,MAAOoE,GAAgBc,GAAIthB,EAAK2c,EAAO
uC,EAAU9C,GACtBnc,EAAM0c,EAAOuC,EAAU9C,MAItDrC,4BAA6B,SAASyH,EAAM3H,EAAYC,GAOtD,
MANA0H,GAAO3D,EAAM2D,GACb3H,EAAagE,EAAMhE,GACnBC,EAAY+D,EAAM/D,GAElB9c,KAAK2gB,a
AAc,EAEZ,SAAShB,EAAOuC,EAAU9C,GAC/B,MAAOoF,GAAK7E,EAAOuC,EAAU9C,GACzBvC,EAAW8C,E
AAOuC,EAAU9C,GAC5BtC,EAAU6C,EAAOuC,EAAU9C,KAInCpE,iBAAkB,SAASnS,GACzB,GAAI4b,GAA
Q,GAAInE,GAAUzX,EAE1B,OADA4b,GAAM5a,KAAO,aACN4a,GAGTzI,uBAAwB,SAASyE,EAAUD,EAAQz
E,GACjD,GAAI0D,GAAK,GAAIhB,GAAiB+B,EAAQzE,EAAU0E,EAGhD,OAFIhB,GAAGkB,cACL3gB,KAA
K2gB,aAAc,GACdlB,GAGTxD,qBAAsB,SAASoD,EAAYtF,GACzC,KAAMsF,YAAsBiB,IAC1B,KAAMvJ,O
AAM,mDAEd,IAAI2N,GAAS,GAAI5D,GAAOzB,EAAWxW,KAAMkR,EAEzC,OAAO,UAAS4F,EAAOuC,EAAU9
C,GAC/B,MAAOsF,GAAO5B,UAAUnD,EAAOuC,EAAU9C,GAAgB,KAI7DrE,cAAe,SAASzB,GACtB,MAAO,
IAAIgF,GAAQhF,EAAM7H,QAG3BoJ,sBAAuB,SAASH,GAC9B,IAAK,GAAIhZ,GAAI,EAAGA,EAAIgZ,EA
AS/Y,OAAQD,IACnCgZ,EAAShZ,GAAKmf,EAAMnG,EAAShZ,GAE/B,OAAO,UAASie,EAAOuC,EAAU9C,G
AE/B,IAAK,GADDuF,MACKjjB,EAAI,EAAGA,EAAIgZ,EAAS/Y,OAAQD,IACnCijB,EAAIlkB,KAAKia,
EAAShZ,GAAGie,EAAOuC,EAAU9C,GACxC,OAAOuF,KAIXzJ,eAAgB,SAAS0J,EAAMlT,EAAKD,GAClC,
OACEC,IAAKA,YAAe4O,GAAY5O,EAAI7I,KAAO6I,EAAID,MAC/CA,MAAOA,IAIX4J,uBAAwB,SAASD,G
AC/B,IAAK,GAAI1Z,GAAI,EAAGA,EAAI0Z,EAAWzZ,OAAQD,IACrC0Z,EAAW1Z,GAAG+P,MAAQoP,EAA
MzF,EAAW1Z,GAAG+P,MAE5C,OAAO,UAASkO,EAAOuC,EAAU9C,GAE/B,IAAK,GADDlW,MACKxH,EAAI,
EAAGA,EAAI0Z,EAAWzZ,OAAQD,IACrCwH,EAAIkS,EAAW1Z,GAAGgQ,KACd0J,EAAW1Z,GAAG+P,MAAM
kO,EAAOuC,EAAU9C,EAC3C,OAAOlW,KAIX+T,aAAc,SAASpU,EAAMkR,GAC3B/Z,KAAKkhB,QAAQzgB,
KAAK,GAAIqgB,GAAOjY,EAAMkR,KAGrCyD,mBAAoB,SAAS6B,EAAYE,GACvCvf,KAAKqf,WAAaA,EACl
Brf,KAAKuf,WAAaA,GAGpB7B,mBAAoB,SAAS6B,EAAYS,EAAYX,GACnDrf,KAAKqf,WAAaA,EAClBrf,
KAAKuf,WAAaA,EAClBvf,KAAKggB,WAAaA,GAGpBzC,eAAgB,SAAS8B,GACvBrf,KAAKqf,WAAaA,GAG
pB5D,qBAAsBsF,GAOxBM,EAAmBxa,WACjBge,KAAM,WAAa,MAAO7kB,MAAKshB,QAC/BwD,eAAgB,WAA
a,MAAO9kB,MAAKshB,QACzCyD,QAAS,aACTC,MAAO,cAiBT5E,EAAWvZ,WACTiZ,WAAY,SAASH,EAAOP
,EAAgBQ,GAU1C,QAASqB,KAEP,GAAIgE,EAEF,MADAA,IAAY,EACLC,CAGLzU,GAAKkQ,aACPuB,EAAS
iD,YAEX,IAAI1T,GAAQhB,EAAK2U,SAASzF,EACAlP,EAAKkQ,YAAcuB,EAAW5O,OAC9B8L,EAI1B,OA
HI3O,GAAKkQ,aACPuB,EAASmD,cAEJ5T,EAGT,QAAS6T,GAAWhD,GAElB,MADA7R,GAAK4R,SAAS1C,E
AAO2C,EAAUlD,GACxBkD,EA9BT,GAAI1C,EACF,MAAO5f,MAAKolB,SAASzF,EAAOrM,OAAW8L,EAEzC
,IAAI8C,GAAW,GAAIqD,kBAEfL,EAAallB,KAAKolB,SAASzF,EAAOuC,EAAU9C,GAC5C6F,GAAY,EAC
ZxU,EAAOzQ,IA0BX,OAAO,IAAIwlB,mBAAkBtD,EAAUjB,EAASqE,GAAY,IAG9DF,SAAU,SAASzF,EAA
OuC,EAAU9C,GAElC,IAAK,GADD3N,GAAQoP,EAAM7gB,KAAKqf,YAAYM,EAAOuC,EAAU9C,GAC3C1d,E
AAI,EAAGA,EAAI1B,KAAKkhB,QAAQvf,OAAQD,IACvC+P,EAAQzR,KAAKkhB,QAAQxf,GAAGohB,UAAU
nD,EAAOuC,EAAU9C,GAC/C,GAAQ3N,GAGd,OAAOA,IAGT4Q,SAAU,SAAS1C,EAAO2C,EAAUlD,GAElC,
IADA,GAAIqG,GAAQzlB,KAAKkhB,QAAUlhB,KAAKkhB,QAAQvf,OAAS,EAC1C8jB,IAAU,GACfnD,EAA
WtiB,KAAKkhB,QAAQuE,GAAO3C,UAAUnD,EAAOrM,OAC5C8L,GAAgB,GAAOkD,GAG7B,OAAItiB,MAAK
qf,WAAWgD,SACXriB,KAAKqf,WAAWgD,SAAS1C,EAAO2C,GADzC,QAeJ,IAAIX,GAAkB,IAAMxU,KAAK
uY,SAASC,SAAS,IAAIhO,MAAM,EAiC7DsK,GAAmBpb,WAEjB+e,YAAa,SAASnU,GACpB,GAAIkR,KACJ
,KAAK,GAAIjR,KAAOD,GACdkR,EAAMliB,KAAK8gB,EAAyB7P,GAAO,KAAOD,EAAMC,GAE1D,OAAOiR,
GAAMkD,KAAK,OAGpBC,UAAW,SAASrU,GAClB,GAAIsU,KACJ,KAAK,GAAIrU,KAAOD,GACVA,EAAMC,I
ACRqU,EAAOtlB,KAAKiR,EAEhB,OAAOqU,GAAOF,KAAK,MAIrBG,+BAAgC,SAASC,GACvC,GAAIjG,GA
AaiG,EAAShG,4BAC1B,IAAKD,EAGL,MAAO,UAASkG,EAAkBzd,GAChCyd,EAAiBvG,MAAMK,GAAcvX,I
AIzCyW,eAAgB,SAAS4C,EAAYjZ,EAAMhG,GACzC,GAAI9D,GAAOwhB,KAAKlZ,IAAIya,EAEpB,EAAA,
GAAKD,EAAoBC,KAAe/iB,EAAKonB,MAa7C,MAAOjH,GAAe4C,EAAYjZ,EAAMhG,EAAM7C,KAZ5C,IAAm
B,GAAfjB,EAAK4C,OACP,MAAO,UAASge,EAAO9c,EAAM+c,GAC3B,GAAIA,EACF,MAAO7gB,GAAKqjB,
aAAazC,EAE3B,IAAIvhB,GAAQqjB,EAAU9B,EAAO5gB,EAAK,GAClC,OAAO,IAAIqnB,cAAahoB,EAAO
W,MASvCsnB,qBAAsB,SAASJ,GAC7B,GAAIK,GAAYL,EAASlG,4BACzB,IAAKuG,EAAL,CAGA,GAAIC,G
AAcN,EAASC,iBACvBD,EAASC,iBAAiBvG,MAC1BsG,EAAStG,MAETlC,EAAYwI,EAAShG,4BAEzB,OAA
O,UAASN,GACd,MAAO6G,GAAkBD,EAAa5G,EAAO2G,EAAW7I,MAK9D,IAAI+I,GAAqB,gBACvB,SAASD,
EAAa5G,EAAO2G,EAAW7I,GACtC,GAAIrf,KAKJ,OAJAA,GAAMkoB,GAAa3G,EACnBvhB,EAAMqf,GAAa
nK,OACnBlV,EAAMujB,GAAmB4E,EACzBnoB,EAAMqoB,UAAYF,EACXnoB,GAET,SAASmoB,EAAa5G,EA
AO2G,EAAW7I,GACtC,GAAIrf,GAAQiH,OAAOC,OAAOihB,EAO1B,OANAlhB,QAAOqhB,eAAetoB,EAAO
koB,GACvB7U,MAAOkO,EAAOgH,cAAc,EAAMC,UAAU,IAClDvhB,OAAOqhB,eAAetoB,EAAOqf,GACvBh
M,MAAO6B,OAAWqT,cAAc,EAAMC,UAAU,IACtDvhB,OAAOqhB,eAAetoB,EAAOujB,GACvBlQ,MAAO8U,
EAAaI,cAAc,EAAMC,UAAU,IACjDxoB,EAGXuY,GAAOsL,mBAAqBA,EAC5BA,EAAmB3C,cAAgBA,GAClC
tf,MAUH6mB,SACEC,QAAS,iBAemB,kBAAnB5oB,QAAO2oB,UAChBA,YAiBG3oB,OAAO6oB,WACVC,SAA
W9oB,OAAO8oB,aAGlBD,UACCE,MAAO,cAGRC,gBACCC,WAAW,EACVC,OAAO,EACPC,YAAa,aACbC,aAA
Y,SAASpe,EAAKqe,GACxB,MAAOre,aAAeqe,KAI1BC,aACCL,WAAW,GAIZtoB,iBAAiB,oBAAqB,WACp
CN,SAASa,cACP,GAAIH,aAAY,sBAAuBC,SAAS,OAMpD+E,kBAAoB,KACpBwjB,KAAOC,OAAS,SAASjmB
,GACvB,MAAOA,KAcX,SAAUrD,GAsCV,QAASupB,GAAiBpgB,EAAUqgB,GAClCA,EAAMA,GAAOC,EAEbC
,EAAkB,WAChBC,EAAiBxgB,EAAUqgB,IAC1BA,GAML,QAASI,GAAgBJ,GACvB,MAA2B,aAAnBA,EAAIK
,YACRL,EAAIK,aAAeC,EAIzB,QAASJ,GAAkBvgB,EAAUqgB,GACnC,GAAKI,EAAgBJ,GASVrgB,GACTA
,QAVyB,CACzB,GAAI4gB,GAAa,YACQ,aAAnBP,EAAIK,YACJL,EAAIK,aAAeC,KACrBN,EAAI7c,oBAA
oBqd,EAAaD,GACrCL,EAAkBvgB,EAAUqgB,IAGhCA,GAAI/oB,iBAAiBupB,EAAaD,IAMtC,QAASE,GA
AiBC,GACxBA,EAAM/oB,OAAOgpB,UAAW,EAI1B,QAASR,GAAiBxgB,EAAUqgB,GAGlC,QAASY,KACHC,
GAAUhf,GACZlC,GAAYA,IAGhB,QAASmhB,GAAa1jB,GACpBqjB,EAAiBrjB,GACjByjB,IACAD,IAVF,
GAAIG,GAAUf,EAAIgB,iBAAiB,oBAC/BH,EAAS,EAAGhf,EAAIkf,EAAQhnB,MAW5B,IAAI8H,EACF,I
AAK,GAASof,GAALnnB,EAAE,EAAW+H,EAAF/H,IAASmnB,EAAIF,EAAQjnB,IAAKA,IACxConB,EAAeD
,GACjBH,EAAajhB,KAAKohB,GAAMtpB,OAAQspB,KAEhCA,EAAIhqB,iBAAiB,OAAQ6pB,GAC7BG,EAA
IhqB,iBAAiB,QAAS6pB,QAIlCF,KAMJ,QAASM,GAAeC,GACtB,MAAO5B,GAAY4B,EAAKR,SAAWQ,EAAK
C,eAuBxC,QAASC,GAAcC,GACrB,IAAK,GAAyBznB,GAArBC,EAAE,EAAG+H,EAAEyf,EAAMvnB,OAAc8
H,EAAF/H,IAASD,EAAEynB,EAAMxnB,IAAKA,IAClDynB,EAAS1nB,IACX2nB,EAAa3nB,GAKnB,QAAS
0nB,GAAS5oB,GAChB,MAA6B,SAAtBA,EAAQ8oB,WAAwC,WAAhB9oB,EAAQ+oB,IAGjD,QAASF,GAAa7o
B,GACpB,GAAIkoB,GAASloB,EAAQgpB,MACjBd,GACFJ,GAAkB9oB,OAAQgB,KAE1BA,EAAQ1B,iBAAi
B,OAAQwpB,GACjC9nB,EAAQ1B,iBAAiB,QAASwpB,IAhJxC,GAAImB,GAAa,UAAYjrB,UAASC,cAAc,Q
AChD2oB,EAAYqC,CAEhBC,MAAO,UAAUjF,KAAKrR,UAAUM,UAGhC,IAAIiW,GAAuB7pB,QAAQ3B,OAAO
+F,mBACtCwjB,EAAO,SAAS5kB,GAClB,MAAO6mB,GAAuBzlB,kBAAkB0lB,aAAa9mB,GAAQA,GAEnEgl
B,EAAUJ,EAAKlpB,UAMfqrB,GACFviB,IAAK,WACH,GAAIwiB,GAASrC,YAAYsC,eAAiBvrB,SAASurB
,gBAItB,aAAxBvrB,SAAS0pB,WACV1pB,SAASwrB,QAAQxrB,SAASwrB,QAAQpoB,OAAS,GAAK,KACpD
,OAAO8lB,GAAKoC,IAEdlD,cAAc,EAGhBthB,QAAOqhB,eAAenoB,SAAU,iBAAkBqrB,GAClDvkB,OAA
OqhB,eAAemB,EAAS,iBAAkB+B,EAejD,IAAI1B,GAAqBuB,KAAO,WAAa,cACzCrB,EAAc,kBAuEdjB,K
ACF,GAAI6C,kBAAiB,SAASC,GAC5B,IAAK,GAAwBzjB,GAApB9E,EAAE,EAAG+H,EAAEwgB,EAAKtoB,
OAAgB8H,EAAJ/H,IAAW8E,EAAEyjB,EAAKvoB,IAAKA,IAClD8E,EAAE0jB,YACJjB,EAAcziB,EAAE0
jB,cAGnBC,QAAQ5rB,SAASY,MAAOirB,WAAW,IA0BtC,WACE,GAA4B,YAAxB7rB,SAAS0pB,WAEX,IAA
K,GAA2BY,GAD5BF,EAAUpqB,SAASqqB,iBAAiB,oBAC/BlnB,EAAE,EAAG+H,EAAEkf,EAAQhnB,OAAg
B8H,EAAF/H,IAASmnB,EAAIF,EAAQjnB,IAAKA,IAC9D0nB,EAAaP,OAWrBlB,EAAiB,WACfH,YAAYJ,
OAAQ,EACpBI,YAAY6C,WAAY,GAAI3U,OAAO4U,UACnCzC,EAAQzoB,cACN,GAAIH,aAAY,qBAAsBC,SA
AS,OAKnDd,EAAM+oB,UAAYA,EAClB/oB,EAAM0qB,eAAiBA,EACvB1qB,EAAMmsB,UAAY5C,EAClBvpB
,EAAMqrB,KAAOA,KAGbrrB,EAAMupB,iBAAmBA,GAEtBzpB,OAAOspB,aAUV,SAAUppB,GAER,QAASos
B,GAAiBC,EAAMC,GAK9B,MAJAA,GAAUA,MACLA,EAAQrmB,MACXqmB,GAAWA,IAEND,EAAKtH,MAAMnj
B,KAAM0qB,EAAQrmB,IAAIsmB,IAGtC,QAASC,GAAO/hB,EAAMgiB,EAAkBC,GACtC,GAAIF,EACJ,QA
AQ5Q,UAAUrY,QAChB,IAAK,GACH,MACF,KAAK,GACHipB,EAAS,IACT,MACF,KAAK,GAEHA,EAASC,EA
AiB1H,MAAMnjB,KAChC,MACF,SAEE4qB,EAASJ,EAAiBM,EAAeD,GAG7CE,EAAQliB,GAAQ+hB,EAGlB
,QAASD,GAAQ9hB,GACf,MAAOkiB,GAAQliB,GAKjB,QAASmiB,GAAMN,EAASD,GACtBjD,YAAYG,iBAA
iB,WAC3B6C,EAAiBC,EAAMC,KAJ3B,GAAIK,KAUJ3sB,GAAMusB,QAAUA,EAEhBvsB,EAAM6sB,WAAaL
,EACnBxsB,EAAM4sB,MAAQA,GAEb9sB,QAWH,WAQE,GAAI4F,GAAQvF,SAASC,cAAc,QACnCsF,GAAMS
,YAAc,kHAQpB,IAAIpF,GAAOZ,SAAS8B,cAAc,OAClClB,GAAK+rB,aAAapnB,EAAO3E,EAAKgsB,aAE
7BpE,UAgBH,SAAUpQ,QACR,YAKA,SAASyU,uBAQP,QAAS7jB,GAAS8jB,GAChBC,EAAUD,EARZ,GAA8B
,kBAAnBhmB,QAAO8kB,SACW,kBAAlBrc,OAAMqc,QACf,OAAO,CAGT,IAAImB,MAMA9G,KACAG,IAUJ,
OATAtf,QAAO8kB,QAAQ3F,EAAMjd,GACrBuG,MAAMqc,QAAQxF,EAAKpd,GACnBid,EAAK3U,GAAK,EA
CV2U,EAAK3U,GAAK,QACH2U,GAAK3U,GACZ8U,EAAIlkB,KAAK,EAAG,GACZkkB,EAAIhjB,OAAS,EAE
b0D,OAAOkmB,qBAAqBhkB,GACL,IAAnB+jB,EAAQ3pB,QACH,EAEc,OAAnB2pB,EAAQ,GAAGzhB,MACQ
,UAAnByhB,EAAQ,GAAGzhB,MACQ,UAAnByhB,EAAQ,GAAGzhB,MACQ,UAAnByhB,EAAQ,GAAGzhB,MAC
Q,UAAnByhB,EAAQ,GAAGzhB,MACN,GAGTxE,OAAOmmB,UAAUhH,EAAMjd,GACvBuG,MAAM0d,UAAU7G,
EAAKpd,IAEd,GAKT,QAASkkB,cAGP,GAAsB,mBAAXC,SAA0BA,OAAOC,KAAOD,OAAOC,IAAIC,QAC5D,
OAAO,CAMT,IAAIzY,UAAU0Y,iBACZ,OAAO,CAGT,KACE,GAAIC,GAAI,GAAIC,UAAS,GAAI,eACzB,OA
AOD,KACP,MAAOrM,GACP,OAAO,GAMX,QAASuM,SAAQrtB,GACf,OAAQA,IAAMA,IAAM,EAGtB,QAASst
B,UAASttB,GAChB,OAAQA,EAGV,QAASutB,UAAShjB,GAChB,MAAOA,KAAQ7D,OAAO6D,GAOxB,QAASi
jB,cAAanpB,EAAMC,GAC1B,MAAID,KAASC,EACK,IAATD,GAAc,EAAIA,IAAS,EAAIC,EACpCmpB,YAA
YppB,IAASopB,YAAYnpB,IAC5B,EAEFD,IAASA,GAAQC,IAAUA,EAqBpC,QAASopB,iBAAgBC,GACvB,
GAAahZ,SAATgZ,EACF,MAAO,KAET,IAAIhU,GAAOgU,EAAK7U,WAAW,EAE3B,QAAOa,GACL,IAAK,IAC
L,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACH,MAAOgU,EAET,KAAK,IACL,IAAK,I
ACH,MAAO,OAET,KAAK,IACL,IAAK,GACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,OACL,IAAK,M
ACL,IAAK,MACH,MAAO,KAIX,MAAahU,IAAR,IAAwB,KAARA,GAA0BA,GAAR,IAAwB,IAARA,EAC9C,QA
GGA,GAAR,IAAwB,IAARA,EACX,SAEF,OAuET,QAASiU,SAET,QAASC,WAAUztB,GAsBjB,QAAS0tB,KA
CP,KAAIhkB,GAAS1J,EAAK4C,QAAlB,CAGA,GAAI+qB,GAAW3tB,EAAK0J,EAAQ,EAC5B,OAAa,iBAAR
kkB,GAAuC,KAAZD,GACnB,iBAARC,GAAuC,KAAZD,GAC9BjkB,IACAmkB,EAAUF,EACVG,EAAQC,UACD
,GALT,QASF,IAnCA,GAEItL,GAAGoL,EAASlb,EAAK7H,EAAMkjB,EAAYC,EAAQC,EAF3CznB,KACAiD
,EAAQ,GAC4CkkB,EAAO,aAE3DE,GACFpsB,KAAM,WACQ6S,SAAR5B,IAGJlM,EAAK/E,KAAKiR,GACVA
,EAAM4B,SAGRwZ,OAAQ,WACMxZ,SAAR5B,EACFA,EAAMkb,EAENlb,GAAOkb,IAkBND,GAIL,GAHAlkB
,IACA+Y,EAAIziB,EAAK0J,GAEA,MAAL+Y,IAAaiL,EAAmBE,GAApC,CAOA,GAJA9iB,EAAOwiB,gBAA
gB7K,GACvByL,EAAUC,iBAAiBP,GAC3BI,EAAaE,EAAQpjB,IAASojB,EAAQ,SAAW,QAE/B,SAAdF,EA
CF,MAOF,IALAJ,EAAOI,EAAW,GAClBC,EAASH,EAAQE,EAAW,KAAOR,KACnCK,EAA4BtZ,SAAlByZ,EA
AW,GAAmBvL,EAAIuL,EAAW,GACvDC,IAEa,cAATL,EACF,MAAOnnB,IAOb,QAAS2nB,SAAQxuB,GACf,
MAAOyuB,aAAY5I,KAAK7lB,GAK1B,QAAS4hB,MAAKoC,EAAO0K,GACnB,GAAIA,IAAiBC,qBACnB,KAA
MvW,OAAM,wCAEd,KAAK,GAAIrV,GAAI,EAAGA,EAAIihB,EAAMhhB,OAAQD,IAChC1B,KAAKS,KAAK2D
,OAAOue,EAAMjhB,IAGrB6rB,UAAWvtB,KAAK2B,SAClB3B,KAAKoiB,aAAepiB,KAAKwtB,0BAO7B,Q
AASC,SAAQ3L,GACf,GAAIA,YAAsBvB,MACxB,MAAOuB,EAKT,KAHkB,MAAdA,GAA2C,GAArBA,EAAWng
B,UACnCmgB,EAAa,IAEU,gBAAdA,GAAwB,CACjC,GAAIkK,QAAQlK,EAAWngB,QAErB,MAAO,IAAI4e,
MAAKuB,EAAYwL,qBAG9BxL,GAAa1d,OAAO0d,GAGtB,GAAI/iB,GAAO2uB,UAAU5L,EACrB,IAAI/iB,
EACF,MAAOA,EAET,IAAI4jB,GAAQ6J,UAAU1K,EACtB,KAAKa,EACH,MAAOgL,YAET,IAAI5uB,GAAO,
GAAIwhB,MAAKoC,EAAO2K,qBAE3B,OADAI,WAAU5L,GAAc/iB,EACjBA,EAKT,QAAS6uB,gBAAelc,GA
CtB,MAAIsa,SAAQta,GACH,IAAMA,EAAM,IAEZ,KAAOA,EAAIwI,QAAQ,KAAM,OAAS,KAqF7C,QAAS2T
,YAAW3L,GAElB,IADA,GAAI4L,GAAS,EACGC,uBAATD,GAAmC5L,EAAS8L,UACjDF,GAKF,OAHIG,2BA
CFtX,OAAOuX,qBAAuBJ,GAEzBA,EAAS,EAGlB,QAASK,eAAc3N,GACrB,IAAK,GAAIkB,KAAQlB,GACf
,OAAO,CACT,QAAO,EAGT,QAAS4N,aAAYC,GACnB,MAAOF,eAAcE,EAAKC,QACnBH,cAAcE,EAAKE,UAC
nBJ,cAAcE,EAAKG,SAG5B,QAASC,yBAAwBjO,EAAQkO,GACvC,GAAIJ,MACAC,KACAC,IAEJ,KAAK,GA
AI9M,KAAQgN,GAAW,CAC1B,GAAIpM,GAAW9B,EAAOkB,IAELpO,SAAbgP,GAA0BA,IAAaoM,EAAUhN,M
AG/CA,IAAQlB,GAKV8B,IAAaoM,EAAUhN,KACzB8M,EAAQ9M,GAAQY,GALhBiM,EAAQ7M,GAAQpO,QAQ
pB,IAAK,GAAIoO,KAAQlB,GACXkB,IAAQgN,KAGZJ,EAAM5M,GAAQlB,EAAOkB,GAMvB,OAHI5T,OAAM
6gB,QAAQnO,IAAWA,EAAO7e,SAAW+sB,EAAU/sB,SACvD6sB,EAAQ7sB,OAAS6e,EAAO7e,SAGxB2sB,
MAAOA,EACPC,QAASA,EACTC,QAASA,GAKb,QAASI,eACP,IAAKC,SAASltB,OACZ,OAAO,CAET,KAAK,
GAAID,GAAI,EAAGA,EAAImtB,SAASltB,OAAQD,IACnCmtB,SAASntB,IAGX,OADAmtB,UAASltB,OAA
S,GACX,EA4BT,QAASmtB,qBAMP,QAASvnB,GAAS+jB,GACZpJ,GAAYA,EAAS6M,SAAWC,SAAWC,GAC7C
/M,EAAS8L,OAAO1C,GAPpB,GAAIpJ,GACA1B,EACAyO,GAAiB,EACjBC,GAAQ,CAOZ,QACErK,KAAM,S
AASsK,GACb,GAAIjN,EACF,KAAMnL,OAAM,wBAETmY,IACH7pB,OAAOkmB,qBAAqBhkB,GAE9B2a,EAA
WiN,EACXD,GAAQ,GAEV/E,QAAS,SAASjhB,EAAKkmB,GACrB5O,EAAStX,EACLkmB,EACFthB,MAAMqc
,QAAQ3J,EAAQjZ,GAEtBlC,OAAO8kB,QAAQ3J,EAAQjZ,IAE3Bwd,QAAS,SAASsK,GAChBJ,EAAiBI,E
ACjBhqB,OAAOkmB,qBAAqBhkB,GAC5B0nB,GAAiB,GAEnBjK,MAAO,WACL9C,EAAW5O,OACXjO,OAAOm
mB,UAAUhL,EAAQjZ,GACzB+nB,oBAAoB7uB,KAAKT,QA2B/B,QAASuvB,mBAAkBrN,EAAU1B,EAAQ4O,
GAC3C,GAAII,GAAMF,oBAAoB5S,OAASoS,mBAGvC,OAFAU,GAAI3K,KAAK3C,GACTsN,EAAIrF,QAAQ3
J,EAAQ4O,GACbI,EAKT,QAASC,kBAOP,QAAStF,GAAQjhB,EAAKwY,GACfxY,IAGDA,IAAQwmB,IACVC
,EAAajO,IAAQ,GAEnBkO,EAAQ3oB,QAAQiC,GAAO,IACzB0mB,EAAQnvB,KAAKyI,GACb7D,OAAO8kB,
QAAQjhB,EAAK3B,IAGtB4iB,EAAQ9kB,OAAOwqB,eAAe3mB,GAAMwY,IAGtC,QAASoO,GAA2BzE,GACl
C,IAAK,GAAI3pB,GAAI,EAAGA,EAAI2pB,EAAK1pB,OAAQD,IAAK,CACpC,GAAIquB,GAAM1E,EAAK3p
B,EACf,IAAIquB,EAAIvP,SAAWkP,GACfC,EAAaI,EAAIlnB,OACJ,iBAAbknB,EAAIlmB,KACN,OAAO
,EAGX,OAAO,EAGT,QAAStC,GAAS8jB,GAChB,IAAIyE,EAA2BzE,GAA/B,CAIA,IAAK,GADDnJ,GACKx
gB,EAAI,EAAGA,EAAIsuB,EAAUruB,OAAQD,IACpCwgB,EAAW8N,EAAUtuB,GACjBwgB,EAAS6M,QAAU
C,QACrB9M,EAAS+N,gBAAgB9F,EAI7B,KAAK,GAAIzoB,GAAI,EAAGA,EAAIsuB,EAAUruB,OAAQD,IA
CpCwgB,EAAW8N,EAAUtuB,GACjBwgB,EAAS6M,QAAUC,QACrB9M,EAAS8L,UAhDf,GAGI0B,GACAC,EA
JAO,EAAgB,EAChBF,KACAJ,KAmDAO,GACF3P,OAAQlN,OACRsc,QAASA,EACT/K,KAAM,SAASsK,EAAK
3O,GACbkP,IACHA,EAAUlP,EACVmP,MAGFK,EAAUvvB,KAAK0uB,GACfe,IACAf,EAAIc,gBAAgB9F,I
AEtBnF,MAAO,WAEL,GADAkL,MACIA,EAAgB,GAApB,CAIA,IAAK,GAAIxuB,GAAI,EAAGA,EAAIkuB,E
AAQjuB,OAAQD,IAClC2D,OAAOmmB,UAAUoE,EAAQluB,GAAI6F,GAC7B6oB,SAASC,iBAGXL,GAAUruB
,OAAS,EACnBiuB,EAAQjuB,OAAS,EACjB+tB,EAAUpc,OACVqc,EAAerc,OACfgd,iBAAiB7vB,KAAKT
,QAI1B,OAAOmwB,GAKT,QAASI,gBAAerO,EAAUhZ,GAMhC,MALKsnB,kBAAmBA,gBAAgBhQ,SAAWtX,I
ACjDsnB,gBAAkBF,iBAAiB5T,OAAS+S,iBAC5Ce,gBAAgBhQ,OAAStX,GAE3BsnB,gBAAgB3L,KAAK3C
,EAAUhZ,GACxBsnB,gBAUT,QAASJ,YACPpwB,KAAK+uB,OAAS0B,SACdzwB,KAAK0wB,UAAYpd,OACjB
tT,KAAK2wB,QAAUrd,OACftT,KAAK4wB,gBAAkBtd,OACvBtT,KAAKshB,OAAShO,OACdtT,KAAK6wB,
IAAMC,iBA2Db,QAASC,UAAS7O,GAChBkO,SAASY,qBACJC,kBAGLC,aAAazwB,KAAKyhB,GAGpB,QAAS
iP,iBACPf,SAASY,qBAiEX,QAASI,gBAAe5Q,GACtB4P,SAAS3oB,KAAKzH,MACdA,KAAKshB,OAASd,
EACdxgB,KAAKqxB,WAAa/d,OA0FpB,QAASge,eAAcC,GACrB,IAAKzjB,MAAM6gB,QAAQ4C,GACjB,KA
AMxa,OAAM,kCACdqa,gBAAe3pB,KAAKzH,KAAMuxB,GAgD5B,QAASnL,cAAa5F,EAAQzhB,GAC5BqxB,
SAAS3oB,KAAKzH,MAEdA,KAAKwxB,QAAUhR,EACfxgB,KAAKyxB,MAAQhE,QAAQ1uB,GACrBiB,KAAK4
wB,gBAAkBtd,OA8CzB,QAASiS,kBAAiBmM,GACxBtB,SAAS3oB,KAAKzH,MAEdA,KAAK2xB,qBAAuBD,
EAC5B1xB,KAAKshB,UACLthB,KAAK4wB,gBAAkBtd,OACvBtT,KAAK4xB,aAgIP,QAASC,SAAQpgB,GA
AS,MAAOA,GAEjC,QAAS+T,mBAAkBsM,EAAYC,EAAYzM,EACxB0M,GACzBhyB,KAAK0wB,UAAYpd,OACj
BtT,KAAK2wB,QAAUrd,OACftT,KAAKshB,OAAShO,OACdtT,KAAKiyB,YAAcH,EACnB9xB,KAAKkyB,Y
AAcH,GAAcF,QACjC7xB,KAAKmyB,YAAc7M,GAAcuM,QAGjC7xB,KAAKoyB,oBAAsBJ,EAsD7B,QAASK,
6BAA4B7R,EAAQ8R,EAAeC,GAI1D,IAAK,GAHDjE,MACAC,KAEK7sB,EAAI,EAAGA,EAAI4wB,EAAc3wB
,OAAQD,IAAK,CAC7C,GAAIyuB,GAASmC,EAAc5wB,EACtB8wB,qBAAoBrC,EAAOtmB,OAM1BsmB,EAAO
tnB,OAAQ0pB,KACnBA,EAAUpC,EAAOtnB,MAAQsnB,EAAOsC,UAEf,UAAftC,EAAOtmB,OAGQ,OAAfsm
B,EAAOtmB,KAUPsmB,EAAOtnB,OAAQylB,UACVA,GAAM6B,EAAOtnB,YACb0pB,GAAUpC,EAAOtnB,OA
ExB0lB,EAAQ4B,EAAOtnB,OAAQ,EAbnBsnB,EAAOtnB,OAAQ0lB,SACVA,GAAQ4B,EAAOtnB,MAEtByl
B,EAAM6B,EAAOtnB,OAAQ,KAfvB6W,QAAQ5F,MAAM,8BAAgCqW,EAAOtmB,MACrD6V,QAAQ5F,MAAMqW
,IA4BlB,IAAK,GAAIzO,KAAQ4M,GACfA,EAAM5M,GAAQlB,EAAOkB,EAEvB,KAAK,GAAIA,KAAQ6M,GA
CfA,EAAQ7M,GAAQpO,MAElB,IAAIkb,KACJ,KAAK,GAAI9M,KAAQ6Q,GACf,KAAI7Q,IAAQ4M,IAAS5M
,IAAQ6M,IAA7B,CAGA,GAAIjM,GAAW9B,EAAOkB,EAClB6Q,GAAU7Q,KAAUY,IACtBkM,EAAQ9M,GAAQ
Y,GAGpB,OACEgM,MAAOA,EACPC,QAASA,EACTC,QAASA,GAIb,QAASkE,WAAUjqB,EAAO8lB,EAASoE,
GACjC,OACElqB,MAAOA,EACP8lB,QAASA,EACToE,WAAYA,GAShB,QAASC,gBA0OT,QAASC,aAAYC,EA
ASC,EAAcC,EACvBC,EAAKC,EAAUC,GAClC,MAAOC,aAAYP,YAAYC,EAASC,EAAcC,EACvBC,EAAKC,EA
AUC,GAGhD,QAASE,WAAUC,EAAQC,EAAMC,EAAQC,GAEvC,MAAWD,GAAPD,GAAwBD,EAAPG,EACZ,GAGL
F,GAAQC,GAAUC,GAAQH,EACrB,EAGIE,EAATF,EACSG,EAAPF,EACKA,EAAOC,EAEPC,EAAOD,EAGLD,
EAAPE,EACKA,EAAOH,EAEPC,EAAOD,EAIpB,QAASI,aAAYC,EAASlrB,EAAO8lB,EAASoE,GAO5C,IAA
K,GALDvrB,GAASsrB,UAAUjqB,EAAO8lB,EAASoE,GAEnCiB,GAAW,EACXC,EAAkB,EAEbnyB,EAAI,E
AAGA,EAAIiyB,EAAQhyB,OAAQD,IAAK,CACvC,GAAIoxB,GAAUa,EAAQjyB,EAGtB,IAFAoxB,EAAQrq
B,OAASorB,GAEbD,EAAJ,CAGA,GAAIE,GAAiBT,UAAUjsB,EAAOqB,MACPrB,EAAOqB,MAAQrB,EAAOm
nB,QAAQ5sB,OAC9BmxB,EAAQrqB,MACRqqB,EAAQrqB,MAAQqqB,EAAQH,WAEvD,IAAImB,GAAkB,EAA
G,CAGvBH,EAAQvsB,OAAO1F,EAAG,GAClBA,IAEAmyB,GAAmBf,EAAQH,WAAaG,EAAQvE,QAAQ5sB,OA
ExDyF,EAAOurB,YAAcG,EAAQH,WAAamB,CAC1C,IAAIC,GAAc3sB,EAAOmnB,QAAQ5sB,OACfmxB,EAA
QvE,QAAQ5sB,OAASmyB,CAE3C,IAAK1sB,EAAOurB,YAAeoB,EAGpB,CACL,GAAIxF,GAAUuE,EAAQvE
,OAEtB,IAAInnB,EAAOqB,MAAQqqB,EAAQrqB,MAAO,CAEhC,GAAIurB,GAAU5sB,EAAOmnB,QAAQ5W,
MAAM,EAAGmb,EAAQrqB,MAAQrB,EAAOqB,MAC7DqF,OAAMjH,UAAUpG,KAAK0iB,MAAM6Q,EAASzF,GA
CpCA,EAAUyF,EAGZ,GAAI5sB,EAAOqB,MAAQrB,EAAOmnB,QAAQ5sB,OAASmxB,EAAQrqB,MAAQqqB,E
AAQH,WAAY,CAE7E,GAAI7F,GAAS1lB,EAAOmnB,QAAQ5W,MAAMmb,EAAQrqB,MAAQqqB,EAAQH,WAAav
rB,EAAOqB,MAC9EqF,OAAMjH,UAAUpG,KAAK0iB,MAAMoL,EAASzB,GAGtC1lB,EAAOmnB,QAAUA,EAC
buE,EAAQrqB,MAAQrB,EAAOqB,QACzBrB,EAAOqB,MAAQqqB,EAAQrqB,WAnBzBmrB,IAAW,MAsBR,IA
AIxsB,EAAOqB,MAAQqqB,EAAQrqB,MAAO,CAGvCmrB,GAAW,EAEXD,EAAQvsB,OAAO1F,EAAG,EAAG0F
,GACrB1F,GAEA,IAAIuyB,GAAS7sB,EAAOurB,WAAavrB,EAAOmnB,QAAQ5sB,MAChDmxB,GAAQrqB,O
AASwrB,EACjBJ,GAAmBI,IAIlBL,GACHD,EAAQlzB,KAAK2G,GAGjB,QAAS8sB,sBAAqB3C,EAAOe,GA
GnC,IAAK,GAFDqB,MAEKjyB,EAAI,EAAGA,EAAI4wB,EAAc3wB,OAAQD,IAAK,CAC7C,GAAIyuB,GAAS
mC,EAAc5wB,EAC3B,QAAOyuB,EAAOtmB,MACZ,IAAK,SACH6pB,YAAYC,EAASxD,EAAO1nB,MAAO0nB,
EAAO5B,QAAQ5W,QAASwY,EAAOwC,WAClE,MACF,KAAK,MACL,IAAK,SACL,IAAK,SACH,IAAK3G,QAAQ
mE,EAAOtnB,MAClB,QACF,IAAIJ,GAAQwjB,SAASkE,EAAOtnB,KAC5B,IAAY,EAARJ,EACF,QACFirB
,aAAYC,EAASlrB,GAAQ0nB,EAAOsC,UAAW,EAC/C,MACF,SACE/S,QAAQ5F,MAAM,2BAA6Bqa,KAAKC,
UAAUjE,KAKhE,MAAOwD,GAGT,QAASU,qBAAoB9C,EAAOe,GAClC,GAAIqB,KAcJ,OAZAO,sBAAqB3C,E
AAOe,GAAepuB,QAAQ,SAASkD,GAC1D,MAAyB,IAArBA,EAAOurB,YAA4C,GAAzBvrB,EAAOmnB,QAAQ5
sB,YACvCyF,EAAOmnB,QAAQ,KAAOgD,EAAMnqB,EAAOqB,QACrCkrB,EAAQlzB,KAAK2G,SAKjBusB,E
AAUA,EAAQW,OAAOzB,YAAYtB,EAAOnqB,EAAOqB,MAAOrB,EAAOqB,MAAQrB,EAAOurB,WAC3CvrB,EA
AOmnB,QAAS,EAAGnnB,EAAOmnB,QAAQ5sB,YAGlEgyB,EA3pDT,GAAI1F,yBAA0BtX,OAAOsX,wBA2Cj
CsG,WAAanJ,sBAwBbmC,QAAU9B,aAcVW,YAAczV,OAAOqL,OAAOD,OAAS,SAAStQ,GAChD,MAAwB,gBA
AVA,IAAsBkF,OAAOoL,MAAMtQ,IAY/C+iB,aAAgB,gBAClB,SAAStrB,GAAO,MAAOA,IACvB,SAASA,G
ACP,GAAIurB,GAAQvrB,EAAIud,SAChB,KAAKgO,EACH,MAAOvrB,EACT,IAAIwrB,GAAYrvB,OAAOC,
OAAOmvB,EAK9B,OAJApvB,QAAOsvB,oBAAoBzrB,GAAKhF,QAAQ,SAAS2E,GAC/CxD,OAAOqhB,eAAeg
O,EAAW7rB,EACZxD,OAAOuvB,yBAAyB1rB,EAAKL,MAErD6rB,GAGPG,WAAa,aACbC,UAAY,gBACZ1H,
YAAc,GAAI2H,QAAO,IAAMF,WAAa,IAAMC,UAAY,MA2C9D5H,kBACF8H,YACEC,IAAO,cACPxQ,OAAU,U
AAW,UACrByQ,KAAM,iBACNC,KAAQ,cAGVC,QACEH,IAAO,UACPI,KAAM,eACNH,KAAM,iBACNC,KAAQ,
cAGVG,aACEL,IAAO,eACPxQ,OAAU,UAAW,WAGvB8Q,SACE9Q,OAAU,UAAW,UACrB+Q,GAAM,UAAW,UAC
jB3c,QAAW,UAAW,UACtBoc,IAAO,SAAU,QACjBI,KAAM,cAAe,QACrBH,KAAM,gBAAiB,QACvBC,KAAQ
,YAAa,SAGvBM,eACER,IAAO,iBACPO,GAAM,YAAa,UACnB3c,QAAW,UAAW,UACtB6c,KAAM,gBAAiB,S
AAU,IACjCC,KAAM,gBAAiB,SAAU,KAGnCC,WACEX,IAAO,eAAgB,QACvBY,KAAM,SAAU,SAGlBC,SACE
N,GAAM,UAAW,UACjB3c,QAAW,UAAW,UACtBoc,IAAO,gBACPY,KAAM,SAAU,SAGlBE,eACEL,KAAM,gB
ACNP,KAAQ,SACRa,QAAS,gBAAiB,WAG5BC,eACEN,KAAM,gBACNR,KAAQ,SACRa,QAAS,gBAAiB,WAG5
BE,cACEjB,IAAO,gBACPY,KAAM,SAAU,UAyEhBvI,wBAgBAI,YA+BJnN,MAAKlZ,IAAMomB,QAUXlN,K
AAK1Z,UAAY2tB,cACf/N,aACAN,OAAO,EAEPR,SAAU,WAER,IAAK,GADD7D,GAAa,GACRpgB,EAAI,EA
AGA,EAAI1B,KAAK2B,OAAQD,IAAK,CACpC,GAAIgQ,GAAM1R,KAAK0B,EAEbogB,IADEqL,QAAQzb,GA
CIhQ,EAAI,IAAMgQ,EAAMA,EAEhBkc,eAAelc,GAIjC,MAAOoQ,IAGTM,aAAc,SAASlZ,GACrB,IAAK,
GAAIxH,GAAI,EAAGA,EAAI1B,KAAK2B,OAAQD,IAAK,CACpC,GAAW,MAAPwH,EACF,MACFA,GAAMA,EA
AIlJ,KAAK0B,IAEjB,MAAOwH,IAGTitB,eAAgB,SAASjtB,EAAKihB,GAC5B,IAAK,GAAIzoB,GAAI,E
AAGA,EAAI1B,KAAK2B,OAAQD,IAAK,CAGpC,GAFIA,IACFwH,EAAMA,EAAIlJ,KAAK0B,EAAI,MAChBw
qB,SAAShjB,GACZ,MACFihB,GAAQjhB,EAAKlJ,KAAK,MAItBwtB,uBAAwB,WACtB,GAAItU,GAAM,GA
CN4I,EAAa,KACjB5I,IAAO,iBAGP,KAFA,GACIxH,GADAhQ,EAAI,EAEDA,EAAK1B,KAAK2B,OAAS,EA
AID,IAC5BgQ,EAAM1R,KAAK0B,GACXogB,GAAcqL,QAAQzb,GAAO,IAAMA,EAAMkc,eAAelc,GACxDwH
,GAAO,aAAe4I,EAAa,UAErC5I,IAAO,KAEP,IAAIxH,GAAM1R,KAAK0B,EAIf,OAHAogB,IAAcqL,QAA
Qzb,GAAO,IAAMA,EAAMkc,eAAelc,GAExDwH,GAAO,YAAc4I,EAAa,+BAC3B,GAAIiK,UAAS,MAAO7S,
IAG7BqJ,aAAc,SAASrZ,EAAKuI,GAC1B,IAAKzR,KAAK2B,OACR,OAAO,CAET,KAAK,GAAID,GAAI,EA
AGA,EAAI1B,KAAK2B,OAAS,EAAGD,IAAK,CACxC,IAAKwqB,SAAShjB,GACZ,OAAO,CACTA,GAAMA,EA
AIlJ,KAAK0B,IAGjB,MAAKwqB,UAAShjB,IAGdA,EAAIlJ,KAAK0B,IAAM+P,GACR,IAHE,IAOb,IAAI
kc,aAAc,GAAIpN,MAAK,GAAI+M,qBAC/BK,aAAYxH,OAAQ,EACpBwH,YAAYvL,aAAeuL,YAAYpL,aAAe
,YAEtD,IAAIwL,wBAAyB,IA8DzBc,YAYAuH,OAAS7B,WAAa,WACxB,GAAI8B,IAAWC,UAAU,GACrBC,G
AAkB,CAOtB,OALAlxB,QAAO8kB,QAAQkM,EAAQ,WACrBzH,cACA2H,GAAkB,IAGb,SAAS/rB,GACdqkB
,SAASpuB,KAAK+J,GACT+rB,IACHA,GAAkB,EAClBF,EAAOC,UAAYD,EAAOC,cAIhC,WACE,MAAO,UAA
S9rB,GACdqkB,SAASpuB,KAAK+J,OAId8kB,uBAyEAgB,oBA2FAE,gBAWAC,SAAW,EACXzB,OAAS,EAC
TwH,OAAS,EACTC,UAAY,EAEZ3F,eAAiB,CAWrBV,UAASvpB,WACPge,KAAM,SAAStd,EAAUhI,GACvB,
GAAIS,KAAK+uB,QAAU0B,SACjB,KAAM1Z,OAAM,oCAOd,OALAga,UAAS/wB,MACTA,KAAK0wB,UAAYnp
B,EACjBvH,KAAK2wB,QAAUpxB,EACfS,KAAK02B,WACL12B,KAAK+uB,OAASC,OACPhvB,KAAKshB,QA
Gd0D,MAAO,WACDhlB,KAAK+uB,QAAUC,SAGnBmC,cAAcnxB,MACdA,KAAK22B,cACL32B,KAAKshB,OA
AShO,OACdtT,KAAK0wB,UAAYpd,OACjBtT,KAAK2wB,QAAUrd,OACftT,KAAK+uB,OAASyH,SAGhBzR,
QAAS,WACH/kB,KAAK+uB,QAAUC,QAGnBnB,WAAW7tB,OAGb42B,QAAS,SAASC,GAChB,IACE72B,KAAK
0wB,UAAUvN,MAAMnjB,KAAK2wB,QAASkG,GACnC,MAAOpX,GACP2Q,SAAS0G,4BAA6B,EACtCpX,QAAQ
5F,MAAM,+CACE2F,EAAGjD,OAASiD,MAIhCqF,eAAgB,WAEd,MADA9kB,MAAKguB,OAAO1a,QAAW,GAC
hBtT,KAAKshB,QAIhB,IAAI2P,mBAAoBsD,WACpBrD,YACJd,UAASY,mBAAqB,EAE1BC,mBACFC,gBAe
F,IAAI6F,6BAA6B,EAE7BC,0BAA4BzC,YAAchH,SAAW,WACvD,IAEE,MADA0J,MAAK,qBACE,EACP,MA
AOxX,IACP,OAAO,KAIX9I,QAAOoQ,SAAWpQ,OAAOoQ,aAEzBpQ,OAAOoQ,SAASmQ,2BAA6B,WAC3C,IA
AIH,2BAAJ,CAGA,GAAIC,0BAEF,WADAC,MAAK,mBAIP,IAAKhG,iBAAL,CAGA8F,4BAA6B,CAE7B,IAA
IjJ,QAAS,EACTqJ,WAAYC,OAEhB,GAAG,CACDtJ,SACAsJ,QAAUlG,aACVA,gBACAiG,YAAa,CAEb,KA
AK,GAAIz1B,GAAI,EAAGA,EAAI01B,QAAQz1B,OAAQD,IAAK,CACvC,GAAIwgB,UAAWkV,QAAQ11B,EA
CnBwgB,UAAS6M,QAAUC,SAGnB9M,SAAS8L,WACXmJ,YAAa,GAEfjG,aAAazwB,KAAKyhB,WAEhB0M,gB
ACFuI,YAAa,SACCpJ,uBAATD,QAAmCqJ,WAExClJ,2BACFtX,OAAOuX,qBAAuBJ,QAEhCiJ,4BAA6B,K
AG3B9F,mBACFta,OAAOoQ,SAASsQ,eAAiB,WAC/BnG,kBAUJE,eAAevqB,UAAY2tB,cACzB/N,UAAW2J
,SAASvpB,UAEpBuoB,cAAc,EAEdsH,SAAU,WACJnC,WACFv0B,KAAK4wB,gBAAkBrB,kBAAkBvvB,KAA
MA,KAAKshB,OACXthB,KAAKovB,cAE9CpvB,KAAKqxB,WAAarxB,KAAKs3B,WAAWt3B,KAAKshB,SAK3
CgW,WAAY,SAAS9W,GACnB,GAAI+W,GAAOzpB,MAAM6gB,QAAQnO,QACzB,KAAK,GAAIkB,KAAQlB,GAC
f+W,EAAK7V,GAAQlB,EAAOkB,EAItB,OAFI5T,OAAM6gB,QAAQnO,KAChB+W,EAAK51B,OAAS6e,EAAO
7e,QAChB41B,GAGTvJ,OAAQ,SAASsE,GACf,GAAIjE,GACAkE,CACJ,IAAIgC,WAAY,CACd,IAAKjC,E
ACH,OAAO,CAETC,MACAlE,EAAOgE,4BAA4BryB,KAAKshB,OAAQgR,EACbC,OAEnCA,GAAYvyB,KAAKq
xB,WACjBhD,EAAOI,wBAAwBzuB,KAAKshB,OAAQthB,KAAKqxB,WAGnD,OAAIjD,aAAYC,IACP,GAEJk
G,aACHv0B,KAAKqxB,WAAarxB,KAAKs3B,WAAWt3B,KAAKshB,SAEzCthB,KAAK42B,SACHvI,EAAKC,
UACLD,EAAKE,YACLF,EAAKG,YACL,SAASzS,GACP,MAAOwW,GAAUxW,OAId,IAGT4a,YAAa,WACPpC,Y
ACFv0B,KAAK4wB,gBAAgB5L,QACrBhlB,KAAK4wB,gBAAkBtd,QAEvBtT,KAAKqxB,WAAa/d,QAItByR
,QAAS,WACH/kB,KAAK+uB,QAAUC,SAGfuF,WACFv0B,KAAK4wB,gBAAgB7L,SAAQ,GAE7B8I,WAAW7tB
,QAGf8kB,eAAgB,WAMd,MALI9kB,MAAK4wB,gBACP5wB,KAAK4wB,gBAAgB7L,SAAQ,GAE7B/kB,KAAK
qxB,WAAarxB,KAAKs3B,WAAWt3B,KAAKshB,QAElCthB,KAAKshB,UAUhBgQ,cAAczqB,UAAY2tB,cAE
xB/N,UAAW2K,eAAevqB,UAE1BuoB,cAAc,EAEdkI,WAAY,SAAS3S,GACnB,MAAOA,GAAIhN,SAGbqW,O
AAQ,SAASsE,GACf,GAAIqB,EACJ,IAAIY,WAAY,CACd,IAAKjC,EACH,OAAO,CACTqB,GAAUU,oBAAoB
r0B,KAAKshB,OAAQgR,OAE3CqB,GAAUd,YAAY7yB,KAAKshB,OAAQ,EAAGthB,KAAKshB,OAAO3f,OAC
5B3B,KAAKqxB,WAAY,EAAGrxB,KAAKqxB,WAAW1vB,OAG5D,OAAKgyB,IAAYA,EAAQhyB,QAGpB4yB,a
ACHv0B,KAAKqxB,WAAarxB,KAAKs3B,WAAWt3B,KAAKshB,SAEzCthB,KAAK42B,SAASjD,KACP,IANE
,KAUbrC,cAAckG,aAAe,SAASC,EAAU3E,EAASa,GACvDA,EAAQzvB,QAAQ,SAASkD,GAGvB,IAFA,GAA
IswB,IAActwB,EAAOqB,MAAOrB,EAAOmnB,QAAQ5sB,QAC3Cg2B,EAAWvwB,EAAOqB,MACfkvB,EAAWv
wB,EAAOqB,MAAQrB,EAAOurB,YACtC+E,EAAWj3B,KAAKqyB,EAAQ6E,IACxBA,GAGF7pB,OAAMjH,UA
AUO,OAAO+b,MAAMsU,EAAUC,MAY3CtR,aAAavf,UAAY2tB,cACvB/N,UAAW2J,SAASvpB,UAEpB2b,GA
AIzjB,QACF,MAAOiB,MAAKyxB,OAGdiF,SAAU,WACJnC,aACFv0B,KAAK4wB,gBAAkBL,eAAevwB,KAA
MA,KAAKwxB,UAEnDxxB,KAAKguB,OAAO1a,QAAW,IAGzBqjB,YAAa,WACX32B,KAAKshB,OAAShO,OAE
VtT,KAAK4wB,kBACP5wB,KAAK4wB,gBAAgB5L,MAAMhlB,MAC3BA,KAAK4wB,gBAAkBtd,SAI3B2c,gB
AAiB,SAAS9F,GACxBnqB,KAAKyxB,MAAM0E,eAAen2B,KAAKwxB,QAASrH,IAG1C6D,OAAQ,SAASsE,E
AAesF,GAC9B,GAAInF,GAAWzyB,KAAKshB,MAEpB,OADAthB,MAAKshB,OAASthB,KAAKyxB,MAAMrP,
aAAapiB,KAAKwxB,SACvCoG,GAAezL,aAAansB,KAAKshB,OAAQmR,IACpC,GAETzyB,KAAK42B,SAAS
52B,KAAKshB,OAAQmR,EAAUzyB,QAC9B,IAGTqiB,SAAU,SAASC,GACbtiB,KAAKyxB,OACPzxB,KAAK
yxB,MAAMlP,aAAaviB,KAAKwxB,QAASlP,KAa5C,IAAIuV,oBAEJtS,kBAAiB1e,UAAY2tB,cAC3B/N,
UAAW2J,SAASvpB,UAEpB6vB,SAAU,WACR,GAAInC,WAAY,CAGd,IAAK,GAFD/T,GACAsX,GAAsB,EACj
Bp2B,EAAI,EAAGA,EAAI1B,KAAK4xB,UAAUjwB,OAAQD,GAAK,EAE9C,GADA8e,EAASxgB,KAAK4xB,U
AAUlwB,GACpB8e,IAAWqX,iBAAkB,CAC/BC,GAAsB,CACtB,OAIAA,IACF93B,KAAK4wB,gBAAkBL,eA
AevwB,KAAMwgB,IAGhDxgB,KAAKguB,OAAO1a,QAAYtT,KAAK2xB,uBAG/BgF,YAAa,WACX,IAAK,GAA
Ij1B,GAAI,EAAGA,EAAI1B,KAAK4xB,UAAUjwB,OAAQD,GAAK,EAC1C1B,KAAK4xB,UAAUlwB,KAAOm2
B,kBACxB73B,KAAK4xB,UAAUlwB,EAAI,GAAGsjB,OAE1BhlB,MAAK4xB,UAAUjwB,OAAS,EACxB3B,K
AAKshB,OAAO3f,OAAS,EAEjB3B,KAAK4wB,kBACP5wB,KAAK4wB,gBAAgB5L,MAAMhlB,MAC3BA,KAAK
4wB,gBAAkBtd,SAI3B6O,QAAS,SAAS3B,EAAQzhB,GACxB,GAAIiB,KAAK+uB,QAAU0B,UAAYzwB,KAA
K+uB,QAAU0H,UAC5C,KAAM1f,OAAM,iCAEd,IAAIhY,GAAO0uB,QAAQ1uB,EAEnB,IADAiB,KAAK4xB,
UAAUnxB,KAAK+f,EAAQzhB,GACvBiB,KAAK2xB,qBAAV,CAEA,GAAIlpB,GAAQzI,KAAK4xB,UAAUjwB
,OAAS,EAAI,CACxC3B,MAAKshB,OAAO7Y,GAAS1J,EAAKqjB,aAAa5B,KAGzCuX,YAAa,SAAS7V,GACp
B,GAAIliB,KAAK+uB,QAAU0B,UAAYzwB,KAAK+uB,QAAU0H,UAC5C,KAAM1f,OAAM,qCAGd,IADA/W,K
AAK4xB,UAAUnxB,KAAKo3B,iBAAkB3V,GACjCliB,KAAK2xB,qBAAV,CAEA,GAAIlpB,GAAQzI,KAAK4
xB,UAAUjwB,OAAS,EAAI,CACxC3B,MAAKshB,OAAO7Y,GAASyZ,EAAS2C,KAAK7kB,KAAK+kB,QAAS/k
B,QAGnDmlB,WAAY,WACV,GAAInlB,KAAK+uB,QAAUC,OACjB,KAAMjY,OAAM,4BAEd/W,MAAK+uB,OAA
S0H,UACdz2B,KAAK22B,eAGPtR,YAAa,WACX,GAAIrlB,KAAK+uB,QAAU0H,UACjB,KAAM1f,OAAM,wC
AId,OAHA/W,MAAK+uB,OAASC,OACdhvB,KAAK02B,WAEE12B,KAAKshB,QAGd2O,gBAAiB,SAAS9F,GA
ExB,IAAK,GADD3J,GACK9e,EAAI,EAAGA,EAAI1B,KAAK4xB,UAAUjwB,OAAQD,GAAK,EAC9C8e,EAAS
xgB,KAAK4xB,UAAUlwB,GACpB8e,IAAWqX,kBACb73B,KAAK4xB,UAAUlwB,EAAI,GAAGy0B,eAAe3V,
EAAQ2J,IAInD6D,OAAQ,SAASsE,EAAesF,GAE9B,IAAK,GADDrF,GACK7wB,EAAI,EAAGA,EAAI1B,KA
AK4xB,UAAUjwB,OAAQD,GAAK,EAAG,CACjD,GAEI+P,GAFA+O,EAASxgB,KAAK4xB,UAAUlwB,GACxB3
C,EAAOiB,KAAK4xB,UAAUlwB,EAAE,EAE5B,IAAI8e,IAAWqX,iBAAkB,CAC/B,GAAI/F,GAAa/yB,CA
CjB0S,GAAQzR,KAAK+uB,SAAW0B,SACpBqB,EAAWjN,KAAK7kB,KAAK+kB,QAAS/kB,MAC9B8xB,EAAW
hN,qBAEfrT,GAAQ1S,EAAKqjB,aAAa5B,EAGxBoX,GACF53B,KAAKshB,OAAO5f,EAAI,GAAK+P,EAIn
B0a,aAAa1a,EAAOzR,KAAKshB,OAAO5f,EAAI,MAGxC6wB,EAAYA,MACZA,EAAU7wB,EAAI,GAAK1B,K
AAKshB,OAAO5f,EAAI,GACnC1B,KAAKshB,OAAO5f,EAAI,GAAK+P,GAGvB,MAAK8gB,IAKLvyB,KAAK
42B,SAAS52B,KAAKshB,OAAQiR,EAAWvyB,KAAK4xB,aACpC,IALE,KAwBbpM,kBAAkB3e,WAChBge,K
AAM,SAAStd,EAAUhI,GAKvB,MAJAS,MAAK0wB,UAAYnpB,EACjBvH,KAAK2wB,QAAUpxB,EACfS,KAAK
shB,OACDthB,KAAKkyB,YAAYlyB,KAAKiyB,YAAYpN,KAAK7kB,KAAKg4B,kBAAmBh4B,OAC5DA,KAAK
shB,QAGd0W,kBAAmB,SAASvmB,GAE1B,GADAA,EAAQzR,KAAKkyB,YAAYzgB,IACrB0a,aAAa1a,EAAO
zR,KAAKshB,QAA7B,CAEA,GAAImR,GAAWzyB,KAAKshB,MACpBthB,MAAKshB,OAAS7P,EACdzR,KAAK
0wB,UAAUjpB,KAAKzH,KAAK2wB,QAAS3wB,KAAKshB,OAAQmR,KAGjD3N,eAAgB,WAEd,MADA9kB,MAA
KshB,OAASthB,KAAKkyB,YAAYlyB,KAAKiyB,YAAYnN,kBACzC9kB,KAAKshB,QAGdyD,QAAS,WACP,M
AAO/kB,MAAKiyB,YAAYlN,WAG1B1C,SAAU,SAAS5Q,GAEjB,MADAA,GAAQzR,KAAKmyB,YAAY1gB,IAC
pBzR,KAAKoyB,qBAAuBpyB,KAAKiyB,YAAY5P,SACzCriB,KAAKiyB,YAAY5P,SAAS5Q,GADnC,QAIFu
T,MAAO,WACDhlB,KAAKiyB,aACPjyB,KAAKiyB,YAAYjN,QACnBhlB,KAAK0wB,UAAYpd,OACjBtT,KA
AK2wB,QAAUrd,OACftT,KAAKiyB,YAAc3e,OACnBtT,KAAKshB,OAAShO,OACdtT,KAAKkyB,YAAc5e,
OACnBtT,KAAKmyB,YAAc7e,QAIvB,IAAIkf,sBACFyF,KAAK,EACLC,QAAQ,EACR/wB,UAAQ,GAsENgx
B,WAAa,EACbC,YAAc,EACdC,SAAW,EACXC,YAAc,CAIlB1F,aAAY/rB,WAaV0xB,kBAAmB,SAASzF,EA
ASC,EAAcC,EACvBC,EAAKC,EAAUC,GAOzC,IAAK,GALDqF,GAAWrF,EAASD,EAAW,EAC/BuF,EAAczF,
EAAaD,EAAe,EAC1C2F,EAAY,GAAI5qB,OAAM0qB,GAGjB92B,EAAI,EAAO82B,EAAJ92B,EAAcA,IAC5
Bg3B,EAAUh3B,GAAK,GAAIoM,OAAM2qB,GACzBC,EAAUh3B,GAAG,GAAKA,CAIpB,KAAK,GAAIgK,GAA
I,EAAO+sB,EAAJ/sB,EAAiBA,IAC/BgtB,EAAU,GAAGhtB,GAAKA,CAEpB,KAAK,GAAIhK,GAAI,EAAO
82B,EAAJ92B,EAAcA,IAC5B,IAAK,GAAIgK,GAAI,EAAO+sB,EAAJ/sB,EAAiBA,IAC/B,GAAI1L,KAA
K24B,OAAO7F,EAAQC,EAAernB,EAAI,GAAIunB,EAAIC,EAAWxxB,EAAI,IAChEg3B,EAAUh3B,GAAGg
K,GAAKgtB,EAAUh3B,EAAI,GAAGgK,EAAI,OACpC,CACH,GAAIktB,GAAQF,EAAUh3B,EAAI,GAAGgK,
GAAK,EAC9BmtB,EAAOH,EAAUh3B,GAAGgK,EAAI,GAAK,CACjCgtB,GAAUh3B,GAAGgK,GAAamtB,EAA
RD,EAAeA,EAAQC,EAK/C,MAAOH,IAMTI,kCAAmC,SAASJ,GAK1C,IAJA,GAAIh3B,GAAIg3B,EAAU/2B
,OAAS,EACvB+J,EAAIgtB,EAAU,GAAG/2B,OAAS,EAC1BmxB,EAAU4F,EAAUh3B,GAAGgK,GACvBqtB,
KACGr3B,EAAI,GAAKgK,EAAI,GAClB,GAAS,GAALhK,EAKJ,GAAS,GAALgK,EAAJ,CAKA,GAIIstB,GA
JAC,EAAYP,EAAUh3B,EAAI,GAAGgK,EAAI,GACjCmtB,EAAOH,EAAUh3B,EAAI,GAAGgK,GACxBktB,E
AAQF,EAAUh3B,GAAGgK,EAAI,EAI3BstB,GADSJ,EAAPC,EACWI,EAAPJ,EAAmBA,EAAOI,EAElBA,EA
ARL,EAAoBA,EAAQK,EAEhCD,GAAOC,GACLA,GAAanG,EACfiG,EAAMt4B,KAAK03B,aAEXY,EAAMt4B,
KAAK23B,aACXtF,EAAUmG,GAEZv3B,IACAgK,KACSstB,GAAOH,GAChBE,EAAMt4B,KAAK63B,aACX52
B,IACAoxB,EAAU+F,IAEVE,EAAMt4B,KAAK43B,UACX3sB,IACAonB,EAAU8F,OA9BVG,GAAMt4B,KAA
K63B,aACX52B,QANAq3B,GAAMt4B,KAAK43B,UACX3sB,GAuCJ,OADAqtB,GAAMG,UACCH,GA2BTlG,Y
AAa,SAASC,EAASC,EAAcC,EACvBC,EAAKC,EAAUC,GACnC,GAAIgG,GAAc,EACdC,EAAc,EAEdC,EAAY
lsB,KAAK6rB,IAAIhG,EAAaD,EAAcI,EAASD,EAY7D,IAXoB,GAAhBH,GAAiC,GAAZG,IACvBiG,EAAc
n5B,KAAKs5B,aAAaxG,EAASG,EAAKoG,IAE5CrG,GAAcF,EAAQnxB,QAAUwxB,GAAUF,EAAItxB,SACh
Dy3B,EAAcp5B,KAAKu5B,aAAazG,EAASG,EAAKoG,EAAYF,IAE5DpG,GAAgBoG,EAChBjG,GAAYiG,EA
CZnG,GAAcoG,EACdjG,GAAUiG,EAENpG,EAAaD,GAAgB,GAAKI,EAASD,GAAY,EACzD,QAEF,IAAIH,G
AAgBC,EAAY,CAE9B,IADA,GAAI5rB,GAASsrB,UAAUK,KAAkB,GACvBI,EAAXD,GACL9rB,EAAOmnB,Q
AAQ9tB,KAAKwyB,EAAIC,KAE1B,QAAS9rB,GACJ,GAAI8rB,GAAYC,EACrB,OAAST,UAAUK,KAAkBC,E
AAaD,GAUpD,KAAK,GARDyG,GAAMx5B,KAAK84B,kCACX94B,KAAKu4B,kBAAkBzF,EAASC,EAAcC,EAC
vBC,EAAKC,EAAUC,IAEtC/rB,EAASkM,OACTqgB,KACAlrB,EAAQsqB,EACR0G,EAAWvG,EACNxxB,EA
AI,EAAGA,EAAI83B,EAAI73B,OAAQD,IAC9B,OAAO83B,EAAI93B,IACT,IAAKy2B,YACC/wB,IACFus
B,EAAQlzB,KAAK2G,GACbA,EAASkM,QAGX7K,IACAgxB,GACA,MACF,KAAKrB,aACEhxB,IACHA,EAAS
srB,UAAUjqB,KAAW,IAEhCrB,EAAOurB,aACPlqB,IAEArB,EAAOmnB,QAAQ9tB,KAAKwyB,EAAIwG,I
ACxBA,GACA,MACF,KAAKpB,UACEjxB,IACHA,EAASsrB,UAAUjqB,KAAW,IAEhCrB,EAAOurB,aACPlq
B,GACA,MACF,KAAK6vB,aACElxB,IACHA,EAASsrB,UAAUjqB,KAAW,IAEhCrB,EAAOmnB,QAAQ9tB,K
AAKwyB,EAAIwG,IACxBA,IAQN,MAHIryB,IACFusB,EAAQlzB,KAAK2G,GAERusB,GAGT2F,aAAc,SAA
SxG,EAASG,EAAKyG,GACnC,IAAK,GAAIh4B,GAAI,EAAOg4B,EAAJh4B,EAAkBA,IAChC,IAAK1B,KAA
K24B,OAAO7F,EAAQpxB,GAAIuxB,EAAIvxB,IAC/B,MAAOA,EACX,OAAOg4B,IAGTH,aAAc,SAASzG,E
AASG,EAAKyG,GAInC,IAHA,GAAIC,GAAS7G,EAAQnxB,OACjBi4B,EAAS3G,EAAItxB,OACb8jB,EAAQ
,EACGiU,EAARjU,GAAwBzlB,KAAK24B,OAAO7F,IAAU6G,GAAS1G,IAAM2G,KAClEnU,GAEF,OAAOA,I
AGToU,iBAAkB,SAAS/G,EAAS2E,GAClC,MAAOz3B,MAAK6yB,YAAYC,EAAS,EAAGA,EAAQnxB,OAAQ81
B,EAAU,EACtCA,EAAS91B,SAGnCg3B,OAAQ,SAASmB,EAAcC,GAC7B,MAAOD,KAAiBC,GAI5B,IAAI3G
,aAAc,GAAIR,YAuJtBjc,QAAOyZ,SAAWA,SAClBzZ,OAAOyZ,SAAS4J,QAAU5D,OAC1Bzf,OAAOyZ,SA
AS6J,kBAAoBpC,iBACpClhB,OAAOyZ,SAAS8J,iBAAmB3F,WACnC5d,OAAO2a,cAAgBA,cACvB3a,OAA
O2a,cAAcuI,iBAAmB,SAAS/G,EAAS2E,GACxD,MAAOrE,aAAYyG,iBAAiB/G,EAAS2E,IAG/C9gB,OAA
Oic,YAAcA,YACrBjc,OAAOya,eAAiBA,eACxBza,OAAOyP,aAAeA,aACtBzP,OAAO4O,iBAAmBA,iBAC
1B5O,OAAO4J,KAAOA,KACd5J,OAAO6O,kBAAoBA,mBACR,mBAAX7O,SAA0BA,QAA4B,mBAAXiU,SAA0B
A,OAASjU,OAAS3W,MAAQ9B,QASzG,WACE,YAIA,SAASi8B,GAAat3B,GACpB,KAAOA,EAAKxD,YACVwD
,EAAOA,EAAKxD,UAGd,OAAsC,kBAAxBwD,GAAKu3B,eAAgCv3B,EAAO,KAS5D,QAASw3B,GAAex3B,EA
AMgG,EAAMgX,GAClC,GAAIya,GAAWz3B,EAAK03B,SAOpB,OANKD,KACHA,EAAWz3B,EAAK03B,cAEdD
,EAASzxB,IACXgX,EAAQhX,GAAMmc,QAETsV,EAASzxB,GAAQgX,EAG1B,QAAS2a,GAAc33B,EAAMgG,
EAAMgX,GACjC,MAAOA,GAGT,QAAS4a,GAAchpB,GACrB,MAAgB,OAATA,EAAgB,GAAKA,EAG9B,QAASi
pB,GAAW73B,EAAM4O,GACxB5O,EAAK83B,KAAOF,EAAchpB,GAG5B,QAASmpB,GAAY/3B,GACnB,MAAO
,UAAS4O,GACd,MAAOipB,GAAW73B,EAAM4O,IA6B5B,QAASopB,GAAgBv2B,EAAIuE,EAAMiyB,EAAar
pB,GAC9C,MAAIqpB,QACErpB,EACFnN,EAAG8H,aAAavD,EAAM,IAEtBvE,EAAGy2B,gBAAgBlyB,QAI
vBvE,GAAG8H,aAAavD,EAAM4xB,EAAchpB,IAGtC,QAASupB,GAAiB12B,EAAIuE,EAAMiyB,GAClC,M
AAO,UAASrpB,GACdopB,EAAgBv2B,EAAIuE,EAAMiyB,EAAarpB,IAiD3C,QAASwpB,GAAqB16B,GAC5
B,OAAQA,EAAQsJ,MACd,IAAK,WACH,MAAOqxB,EACT,KAAK,QACL,IAAK,kBACL,IAAK,aACH,MAAO,Q
ACT,KAAK,QACH,GAAI,eAAe1W,KAAKrR,UAAUM,WAChC,MAAO,QACX,SACE,MAAO,SAIb,QAAS0nB,GA
AYC,EAAOrf,EAAUtK,EAAO4pB,GAC3CD,EAAMrf,IAAasf,GAAaZ,GAAehpB,GAGjD,QAAS6pB,GAAaF
,EAAOrf,EAAUsf,GACrC,MAAO,UAAS5pB,GACd,MAAO0pB,GAAYC,EAAOrf,EAAUtK,EAAO4pB,IAI/C
,QAAS9O,MAET,QAASgP,GAAeH,EAAOrf,EAAU+V,EAAY0J,GAGnD,QAASvxB,KACP6nB,EAAWzP,SAAS
+Y,EAAMrf,IAC1B+V,EAAWhN,kBACV0W,GAAejP,GAAM6O,GACtBrU,SAASmQ,6BANX,GAAIuE,GAAYR
,EAAqBG,EAUrC,OAFAA,GAAMv8B,iBAAiB48B,EAAWxxB,IAGhC+a,MAAO,WACLoW,EAAMrwB,oBAAoB
0wB,EAAWxxB,GACrC6nB,EAAW9M,SAGbiN,YAAaH,GAIjB,QAAS4J,GAAgBjqB,GACvB,MAAO5R,SAAQ
4R,GAYjB,QAASkqB,GAA0Bp7B,GACjC,GAAIA,EAAQq7B,KACV,MAAOlX,GAAOnkB,EAAQq7B,KAAKlh
B,SAAU,SAASpW,GAC5C,MAAOA,IAAM/D,GACK,SAAd+D,EAAGkb,SACQ,SAAXlb,EAAGuF,MACHvF,EA
AGuE,MAAQtI,EAAQsI,MAGzB,IAAIgzB,GAAY1B,EAAa55B,EAC7B,KAAKs7B,EACH,QACF,IAAIC,GA
ASD,EAAUjT,iBACnB,6BAA+BroB,EAAQsI,KAAO,KAClD,OAAO6b,GAAOoX,EAAQ,SAASx3B,GAC7B,M
AAOA,IAAM/D,IAAY+D,EAAGs3B,OAKlC,QAASG,GAAiBX,GAIF,UAAlBA,EAAM5b,SACS,UAAf4b,EAA
MvxB,MACR8xB,EAA0BP,GAAOl3B,QAAQ,SAAS83B,GAChD,GAAIC,GAAiBD,EAAMzB,UAAU2B,OACjCD
,IAEFA,EAAehK,YAAY5P,UAAS,KA4C5C,QAAS8Z,GAAaC,EAAQ3qB,GAC5B,GACI4qB,GACAC,EACA7J
,EAHApzB,EAAa+8B,EAAO/8B,UAIpBA,aAAsBk9B,oBACtBl9B,EAAWk7B,WACXl7B,EAAWk7B,UAAU9
oB,QACvB4qB,EAASh9B,EACTi9B,EAAgBD,EAAO9B,UAAU9oB,MACjCghB,EAAW4J,EAAO5qB,OAGpB2
qB,EAAO3qB,MAAQgpB,EAAchpB,GAEzB4qB,GAAUA,EAAO5qB,OAASghB,IAC5B6J,EAAcrK,YAAY5P,
SAASga,EAAO5qB,OAC1C6qB,EAAcrK,YAAYnN,iBAC1BiC,SAASmQ,8BAIb,QAASsF,GAAcJ,GACrB,M
AAO,UAAS3qB,GACd0qB,EAAaC,EAAQ3qB,IArSzB,GAAIiT,GAAS5W,MAAMjH,UAAU6d,OAAOjd,KAAK
pE,KAAKyK,MAAMjH,UAAU6d,OAU9DzjB,MAAK4F,UAAUxD,KAAO,SAASwF,EAAMipB,GACnCpS,QAAQ5
F,MAAM,8BAA+B9Z,KAAM6I,EAAMipB,IAG3D7wB,KAAK4F,UAAU41B,aAAe,YA+B9B,IAAIC,GAAsBlC
,CAE1Bn1B,QAAOqhB,eAAeK,SAAU,4BAC9B1f,IAAK,WACH,MAAOq1B,KAAwBrC,GAEjCtzB,IAAK,SA
AS41B,GAEZ,MADAD,GAAsBC,EAAStC,EAAiBG,EACzCmC,GAEThW,cAAc,IAGhBiW,KAAK/1B,UAAUxD
,KAAO,SAASwF,EAAM4I,EAAOmO,GAC1C,GAAa,gBAAT/W,EACF,MAAO5H,MAAK4F,UAAUxD,KAAKoE,K
AAKzH,KAAM6I,EAAM4I,EAAOmO,EAErD,IAAIA,EACF,MAAO8a,GAAW16B,KAAMyR,EAE1B,IAAIqgB,
GAAargB,CAEjB,OADAipB,GAAW16B,KAAM8xB,EAAWjN,KAAK+V,EAAY56B,QACtC08B,EAAoB18B,KA
AM6I,EAAMipB,IAqBzC+K,QAAQh2B,UAAUxD,KAAO,SAASwF,EAAM4I,EAAOmO,GAC7C,GAAIkb,GAAu
C,KAAzBjyB,EAAKA,EAAKlH,OAAS,EAMrC,IALIm5B,IACF96B,KAAK+6B,gBAAgBlyB,GACrBA,EAAO
A,EAAK8O,MAAM,EAAG,KAGnBiI,EACF,MAAOib,GAAgB76B,KAAM6I,EAAMiyB,EAAarpB,EAGlD,IAA
IqgB,GAAargB,CAIjB,OAHAopB,GAAgB76B,KAAM6I,EAAMiyB,EACxBhJ,EAAWjN,KAAKmW,EAAiBh7
B,KAAM6I,EAAMiyB,KAE1C4B,EAAoB18B,KAAM6I,EAAMipB,GAGzC,IAAIoJ,IACJ,WAGE,GAAI4B,G
AAMv+B,SAASC,cAAc,OAC7Bu+B,EAAWD,EAAIl+B,YAAYL,SAASC,cAAc,SACtDu+B,GAAS3wB,aAAa,
OAAQ,WAC9B,IAAI8iB,GACAzJ,EAAQ,CACZsX,GAASl+B,iBAAiB,QAAS,WACjC4mB,IACAyJ,EAAQA,
GAAS,UAEnB6N,EAASl+B,iBAAiB,SAAU,WAClC4mB,IACAyJ,EAAQA,GAAS,UAGnB,IAAI5G,GAAQ/pB
,SAAS0G,YAAY,aACjCqjB,GAAM0U,eAAe,SAAS,GAAM,EAAM9+B,OAAQ,EAAG,EAAG,EAAG,EAAG,GAA
G,GAC7D,GAAO,GAAO,EAAO,EAAG,MAC5B6+B,EAAS39B,cAAckpB,GAGvB4S,EAA6B,GAATzV,EAAa,S
AAWyJ,KAqG9C+N,iBAAiBp2B,UAAUxD,KAAO,SAASwF,EAAM4I,EAAOmO,GACtD,GAAa,UAAT/W,GAA6
B,YAATA,EACtB,MAAOq0B,aAAYr2B,UAAUxD,KAAKoE,KAAKzH,KAAM6I,EAAM4I,EAAOmO,EAE5D5f,
MAAK+6B,gBAAgBlyB,EACrB,IAAIs0B,GAAqB,WAARt0B,EAAoB6yB,EAAkBjB,EACnDe,EAAsB,WAAR
3yB,EAAoBkzB,EAAmBxP,CAEzD,IAAI3M,EACF,MAAOub,GAAYn7B,KAAM6I,EAAM4I,EAAO0rB,EAGx
C,IAAIrL,GAAargB,EACboO,EAAU0b,EAAev7B,KAAM6I,EAAMipB,EAAY0J,EAMrD,OALAL,GAAYn7B
,KAAM6I,EACNipB,EAAWjN,KAAKyW,EAAat7B,KAAM6I,EAAMs0B,IACzCA,GAGL9C,EAAer6B,KAAM6
I,EAAMgX,IAGpCud,oBAAoBv2B,UAAUxD,KAAO,SAASwF,EAAM4I,EAAOmO,GACzD,GAAa,UAAT/W,EA
CF,MAAOq0B,aAAYr2B,UAAUxD,KAAKoE,KAAKzH,KAAM6I,EAAM4I,EAAOmO,EAI5D,IAFA5f,KAAK+6
B,gBAAgB,SAEjBnb,EACF,MAAOub,GAAYn7B,KAAM,QAASyR,EAEpC,IAAIqgB,GAAargB,EACboO,EA
AU0b,EAAev7B,KAAM,QAAS8xB,EAG5C,OAFAqJ,GAAYn7B,KAAM,QACN8xB,EAAWjN,KAAKyW,EAAat7
B,KAAM,QAASy6B,KACjDiC,EAAoB18B,KAAM6I,EAAMgX,IA+BzCwd,kBAAkBx2B,UAAUxD,KAAO,SAA
SwF,EAAM4I,EAAOmO,GACvD,GAAa,UAAT/W,EACF,MAAOq0B,aAAYr2B,UAAUxD,KAAKoE,KAAKzH,KA
AM6I,EAAM4I,EAAOmO,EAI5D,IAFA5f,KAAK+6B,gBAAgB,SAEjBnb,EACF,MAAOuc,GAAan8B,KAAMy
R,EAE5B;GAAIqgB,GAAargB,EACboO,EAAU0b,EAAev7B,KAAM,QAAS8xB,EAE5C,OADAqK,GAAan8B,
KAAM8xB,EAAWjN,KAAK2X,EAAcx8B,QAC1C08B,EAAoB18B,KAAM6I,EAAMgX,IAGzC0c,kBAAkB11B,
UAAUxD,KAAO,SAASwF,EAAM4I,EAAOmO,GAIvD,GAHa,kBAAT/W,IACFA,EAAO,iBAEI,kBAATA,GAAq
C,UAATA,EAC9B,MAAOq0B,aAAYr2B,UAAUxD,KAAKoE,KAAKzH,KAAM6I,EAAM4I,EAAOmO,EAI5D,IA
FA5f,KAAK+6B,gBAAgBlyB,GAEjB+W,EACF,MAAOub,GAAYn7B,KAAM6I,EAAM4I,EAEjC,IAAIqgB,G
AAargB,EACboO,EAAU0b,EAAev7B,KAAM6I,EAAMipB,EAKzC,OAJAqJ,GAAYn7B,KAAM6I,EACNipB,
EAAWjN,KAAKyW,EAAat7B,KAAM6I,KAGxCwxB,EAAer6B,KAAM6I,EAAMgX,KAEnC7f,MASH,SAAU2W,
GACR,YAEA,SAASC,GAAOrT,GACd,IAAKA,EACH,KAAM,IAAIwT,OAAM,oBAKpB,QAASumB,GAAgBz6B,
GAEvB,IADA,GAAI6C,GACGA,EAAI7C,EAAKxD,YACdwD,EAAO6C,CAGT,OAAO7C,GAGT,QAAS06B,GAA
Y16B,EAAMgN,GACzB,GAAKA,EAAL,CAKA,IAFA,GAAI2tB,GACAh6B,EAAW,IAAMqM,GACb2tB,IACN3
6B,EAAOy6B,EAAgBz6B,GAEnBA,EAAK46B,cACPD,EAAM36B,EAAK46B,cAAcp9B,cAAcmD,GAChCX,E
AAKu3B,iBACZoD,EAAM36B,EAAKu3B,eAAevqB,KAExB2tB,GAAQ36B,EAAK66B,mBAGjB76B,EAAOA,
EAAK66B,gBAGd,OAAOF,IAiIT,QAASG,GAAcr5B,GACrB,MAAqB,YAAdA,EAAGkb,SACgB,8BAAnBlb,
EAAGs5B,aAGZ,QAASC,GAAev5B,GACtB,MAAqB,YAAdA,EAAGkb,SACgB,gCAAnBlb,EAAGs5B,aAGZ,
QAASE,GAAoBx5B,GAC3B,MAAOzE,SAAQk+B,EAAyBz5B,EAAGkb,UAC5Blb,EAAGzC,aAAa,aAGjC,QA
ASm8B,GAAW15B,GAIlB,MAHuBgP,UAAnBhP,EAAG25B,cACL35B,EAAG25B,YAA4B,YAAd35B,EAAGkb
,SAAyBse,EAAoBx5B,IAE5DA,EAAG25B,YAYZ,QAASC,GAAoBr7B,EAAM2H,GACjC,GAAI2zB,GAAet7
B,EAAK+lB,iBAAiBwV,EAErCJ,GAAWn7B,IACb2H,EAAG3H,GACLqB,EAAQi6B,EAAc3zB,GAGxB,QAA
S6zB,GAAkCx7B,GACzC,QAASy7B,GAAUrY,GACZsY,oBAAoBC,SAASvY,IAChCoY,EAAkCpY,EAASwY,
SAG/CP,EAAoBr7B,EAAMy7B,GAgB5B,QAASI,GAAMC,EAAIC,GACjBv5B,OAAOsvB,oBAAoBiK,GAAM1
6B,QAAQ,SAAS2E,GAChDxD,OAAOqhB,eAAeiY,EAAI91B,EACJxD,OAAOuvB,yBAAyBgK,EAAM/1B,MA
KhE,QAASg2B,GAAiC5Y,GACxC,GAAI2B,GAAM3B,EAAS6Y,aACnB,KAAKlX,EAAImX,YACP,MAAOnX,E
ACT,IAAIrlB,GAAIqlB,EAAIoX,sBACZ,KAAKz8B,EAAG,CAIN,IADAA,EAAIqlB,EAAIqX,eAAeC,mB
AAmB,IACnC38B,EAAE48B,WACP58B,EAAEjD,YAAYiD,EAAE48B,UAElBvX,GAAIoX,uBAAyBz8B,EAE
/B,MAAOA,GAGT,QAAS68B,GAA2BnZ,GAClC,IAAKA,EAASoZ,iBAAkB,CAC9B,GAAIt+B,GAAQklB,EA
AS6Y,aACrB,KAAK/9B,EAAMs+B,iBAAkB,CAC3Bt+B,EAAMs+B,iBAAmBt+B,EAAMk+B,eAAeC,mBAAm
B,IACjEn+B,EAAMs+B,iBAAiBC,mBAAoB,CAI3C,IAAI/X,GAAOxmB,EAAMs+B,iBAAiB7gC,cAAc,OA
ChD+oB,GAAKgY,KAAOhhC,SAASihC,QACrBz+B,EAAMs+B,iBAAiBlgC,KAAKP,YAAY2oB,GAExCxmB,
EAAMs+B,iBAAiBA,iBAAmBt+B,EAAMs+B,iBAGlDpZ,EAASoZ,iBAAmBt+B,EAAMs+B,iBAGpC,MAAOp
Z,GAASoZ,iBAgBlB,QAASI,GAAqCn7B,GAC5C,GAAI2hB,GAAW3hB,EAAGw6B,cAActgC,cAAc,WAC9C
8F,GAAGjF,WAAW6rB,aAAajF,EAAU3hB,EAIrC,KAFA,GAAIo7B,GAAUp7B,EAAGq7B,WACbla,EAAQi
a,EAAQ/9B,OACb8jB,IAAU,GAAG,CAClB,GAAIma,GAASF,EAAQja,EACjBoa,GAA4BD,EAAO/2B,QAC
jB,aAAhB+2B,EAAO/2B,MACTod,EAAS7Z,aAAawzB,EAAO/2B,KAAM+2B,EAAOnuB,OAC5CnN,EAAGy2
B,gBAAgB6E,EAAO/2B,OAI9B,MAAOod,GAGT,QAAS6Z,GAA+Bx7B,GACtC,GAAI2hB,GAAW3hB,EAAGw
6B,cAActgC,cAAc,WAC9C8F,GAAGjF,WAAW6rB,aAAajF,EAAU3hB,EAIrC,KAFA,GAAIo7B,GAAUp7B
,EAAGq7B,WACbla,EAAQia,EAAQ/9B,OACb8jB,IAAU,GAAG,CAClB,GAAIma,GAASF,EAAQja,EACrB
Q,GAAS7Z,aAAawzB,EAAO/2B,KAAM+2B,EAAOnuB,OAC1CnN,EAAGy2B,gBAAgB6E,EAAO/2B,MAI5B,
MADAvE,GAAGjF,WAAWC,YAAYgF,GACnB2hB,EAGT,QAAS8Z,GAAyC9Z,EAAU3hB,EAAI07B,GAC9D,GA
AIvB,GAAUxY,EAASwY,OACvB,IAAIuB,EAEF,WADAvB,GAAQ7/B,YAAY0F,EAKtB,KADA,GAAI27B,GA
CGA,EAAQ37B,EAAG6mB,YAChBsT,EAAQ7/B,YAAYqhC,GA4FxB,QAASC,GAA4B57B,GAC/B67B,EACF7
7B,EAAGmiB,UAAY8X,oBAAoB13B,UAEnC63B,EAAMp6B,EAAIi6B,oBAAoB13B,WAGlC,QAASu5B,GAA
wBna,GAC1BA,EAASoa,cACZpa,EAASoa,YAAc,WACrBpa,EAASqa,sBAAuB,CAChC,IAAIj8B,GAAMk8
B,EAAYta,EAClBA,EAASua,WAAava,EAASua,UAAUthB,eAC7CuhB,GAAgBxa,EAAU5hB,EAAK4hB,EA
ASya,UAIvCza,EAASqa,uBACZra,EAASqa,sBAAuB,EAChClQ,SAAS4J,QAAQ/T,EAASoa,cAyM9B,QA
ASM,GAAehiC,EAAGkK,EAAMhG,EAAM+9B,GACrC,GAAKjiC,GAAMA,EAAEgD,OAAb,CAOA,IAJA,GAAI
okB,GACApkB,EAAShD,EAAEgD,OACXk/B,EAAa,EAAGC,EAAY,EAAGC,EAAW,EAC1CC,GAAc,EACCr/B
,EAAZm/B,GAAoB,CACzB,GAAID,GAAaliC,EAAEsI,QAAQ,KAAM65B,GAC7BG,EAAetiC,EAAEsI,QAA
Q,KAAM65B,GAC/BlhB,GAAU,EACVshB,EAAa,IAWjB,IATID,GAAgB,IACF,EAAbJ,GAAiCA,EAAfI,K
ACrBJ,EAAaI,EACbrhB,GAAU,EACVshB,EAAa,MAGfH,EAAwB,EAAbF,EAAiB,GAAKliC,EAAEsI,QAA
Qi6B,EAAYL,EAAa,GAErD,EAAXE,EAAc,CAChB,IAAKhb,EACH,MAEFA,GAAOtlB,KAAK9B,EAAEgZ,M
AAMmpB,GACpB,OAGF/a,EAASA,MACTA,EAAOtlB,KAAK9B,EAAEgZ,MAAMmpB,EAAWD,GAC/B,IAAI/e
,GAAanjB,EAAEgZ,MAAMkpB,EAAa,EAAGE,GAAUI,MACnDpb,GAAOtlB,KAAKmf,GACZohB,EAAcA,GA
AephB,CAC7B,IAAIwhB,GAAaR,GACAA,EAAiB9e,EAAYjZ,EAAMhG,EAGlDkjB,GAAOtlB,KADS,MAAd
2gC,EACU7gB,KAAKlZ,IAAIya,GAET,MAEdiE,EAAOtlB,KAAK2gC,GACZN,EAAYC,EAAW,EAyBzB,MA
tBID,KAAcn/B,GAChBokB,EAAOtlB,KAAK,IAEdslB,EAAOsb,WAA+B,IAAlBtb,EAAOpkB,OAC3BokB
,EAAOub,aAAevb,EAAOsb,YACM,IAAbtb,EAAO,IACM,IAAbA,EAAO,GAC7BA,EAAOib,YAAcA,EAErB
jb,EAAOwb,WAAa,SAAS36B,GAG3B,IAAK,GAFD0b,GAAWyD,EAAO,GAEbrkB,EAAI,EAAGA,EAAIqkB,
EAAOpkB,OAAQD,GAAK,EAAG,CACzC,GAAI+P,GAAQsU,EAAOsb,WAAaz6B,EAASA,GAAQlF,EAAI,GAA
K,EAC5C4R,UAAV7B,IACF6Q,GAAY7Q,GACd6Q,GAAYyD,EAAOrkB,EAAI,GAGzB,MAAO4gB,IAGFyD,G
AGT,QAASyb,GAAsB34B,EAAMkd,EAAQljB,EAAM8c,GACjD,GAAIoG,EAAOsb,WAAY,CACrB,GAAID,G
AAarb,EAAO,GACpBtU,EAAQ2vB,EAAaA,EAAWzhB,EAAO9c,GAAM,GACxBkjB,EAAO,GAAG3D,aAAazC
,EAChD,OAAOoG,GAAOub,aAAe7vB,EAAQsU,EAAOwb,WAAW9vB,GAIzD,IAAK,GADD7K,MACKlF,EAAI
,EAAGA,EAAIqkB,EAAOpkB,OAAQD,GAAK,EAAG,CACzC,GAAI0/B,GAAarb,EAAOrkB,EAAI,EAC5BkF
,IAAQlF,EAAI,GAAK,GAAK0/B,EAAaA,EAAWzhB,EAAO9c,GACjDkjB,EAAOrkB,EAAI,GAAG0gB,aAA
azC,GAGjC,MAAOoG,GAAOwb,WAAW36B,GAG3B,QAAS66B,GAAyB54B,EAAMkd,EAAQljB,EAAM8c,GAC
pD,GAAIyhB,GAAarb,EAAO,GACpB7D,EAAWkf,EAAaA,EAAWzhB,EAAO9c,GAAM,GAChD,GAAIujB,cA
AazG,EAAOoG,EAAO,GAEnC,OAAOA,GAAOub,aAAepf,EACzB,GAAIsD,mBAAkBtD,EAAU6D,EAAOwb,Y
AG7C,QAASG,GAAe74B,EAAMkd,EAAQljB,EAAM8c,GAC1C,GAAIoG,EAAOib,YACT,MAAOQ,GAAsB34B
,EAAMkd,EAAQljB,EAAM8c,EAEnD,IAAIoG,EAAOsb,WACT,MAAOI,GAAyB54B,EAAMkd,EAAQljB,EA
AM8c,EAItD,KAAK,GAFDuC,GAAW,GAAIqD,kBAEV7jB,EAAI,EAAGA,EAAIqkB,EAAOpkB,OAAQD,GAA
K,EAAG,CACzC,GAAIke,GAAUmG,EAAOrkB,GACjB0/B,EAAarb,EAAOrkB,EAAI,EAE5B,IAAI0/B,EA
AJ,CACE,GAAI3vB,GAAQ2vB,EAAWzhB,EAAO9c,EAAM+c,EAChCA,GACFsC,EAASC,QAAQ1Q,GAEjByQ
,EAAS6V,YAAYtmB,OALzB,CASA,GAAI1S,GAAOgnB,EAAOrkB,EAAI,EAClBke,GACFsC,EAASC,QAAQ
pjB,EAAKqjB,aAAazC,IAEnCuC,EAASC,QAAQxC,EAAO5gB,IAG5B,MAAO,IAAIymB,mBAAkBtD,EAAU
6D,EAAOwb,YAGhD,QAASd,GAAgB59B,EAAMy3B,EAAU3a,EAAOgiB,GAC9C,IAAK,GAAIjgC,GAAI,EA
AGA,EAAI44B,EAAS34B,OAAQD,GAAK,EAAG,CAC3C,GAAImH,GAAOyxB,EAAS54B,GAChBqkB,EAASuU
,EAAS54B,EAAI,GACtB+P,EAAQiwB,EAAe74B,EAAMkd,EAAQljB,EAAM8c,GAC3CE,EAAUhd,EAAKQ,
KAAKwF,EAAM4I,EAAOsU,EAAOib,YACxCnhB,IAAW8hB,GACbA,EAAiBlhC,KAAKof,GAI1B,GADAhd,
EAAK45B,eACAnC,EAAS0D,WAAd,CAGAn7B,EAAK69B,OAAS/gB,CACd,IAAIiiB,GAAO/+B,EAAKg/B,
0BAA0BvH,EACtCqH,IAAoBC,GACtBD,EAAiBlhC,KAAKmhC,IAG1B,QAASE,GAAiBx9B,EAAIuE,EAAM
+3B,GAClC,GAAIr9B,GAAIe,EAAGxC,aAAa+G,EACxB,OAAO83B,GAAoB,IAALp9B,EAAU,OAASA,EAA
GsF,EAAMvE,EAAIs8B,GAGxD,QAASmB,GAAuBxhC,EAASqgC,GACvChqB,EAAOrW,EAMP,KAAK,GAJD+
5B,MAIK54B,EAAI,EAAGA,EAAInB,EAAQo/B,WAAWh+B,OAAQD,IAAK,CAUlD,IATA,GAAIsgC,GAAOz
hC,EAAQo/B,WAAWj+B,GAC1BmH,EAAOm5B,EAAKn5B,KACZ4I,EAAQuwB,EAAKvwB,MAOE,MAAZ5I,EA
AK,IACVA,EAAOA,EAAKo5B,UAAU,EAGxB,KAAIjE,EAAWz9B,IACVsI,IAASq5B,GAAMr5B,IAASs5B,
GAAQt5B,IAASu5B,EAD9C,CAKA,GAAIrc,GAAS4a,EAAelvB,EAAO5I,EAAMtI,EACbqgC,EACvB7a,I
AGLuU,EAAS75B,KAAKoI,EAAMkd,IAatB,MAVIiY,GAAWz9B,KACb+5B,EAAS0D,YAAa,EACtB1D,EAA
S+H,GAAKP,EAAiBvhC,EAAS2hC,EAAItB,GAC5CtG,EAASj3B,KAAOy+B,EAAiBvhC,EAAS4hC,EAAMv
B,GAChDtG,EAASgI,OAASR,EAAiBvhC,EAAS6hC,EAAQxB,IAEhDtG,EAAS+H,IAAO/H,EAASj3B,MAA
Si3B,EAASgI,SAC7ChI,EAASj3B,KAAOs9B,EAAe,OAAQwB,EAAM5hC,EAASqgC,KAGnDtG,EAGT,QAA
SiG,GAAY19B,EAAM+9B,GACzB,GAAI/9B,EAAK7B,WAAaC,KAAKW,aACzB,MAAOmgC,GAAuBl/B,EAAM
+9B,EAEtC,IAAI/9B,EAAK7B,WAAaC,KAAKshC,UAAW,CACpC,GAAIxc,GAAS4a,EAAe99B,EAAK83B,
KAAM,cAAe93B,EAC1B+9B,EAC5B,IAAI7a,EACF,OAAQ,cAAeA,GAG3B,SAGF,QAASyc,GAAqB3/B,EA
AM4/B,EAAQC,EAAiBpI,EAAU3a,EACzC/E,EACA+mB,GAK5B,IAAK,GAHDr2B,GAAQm3B,EAAO7jC,YA
AY8jC,EAAgBC,WAAW9/B,GAAM,IAE5DnB,EAAI,EACCu+B,EAAQp9B,EAAKsoB,WAAY8U,EAAOA,EAAQ
A,EAAM2C,YACrDJ,EAAqBvC,EAAO30B,EAAOo3B,EACbpI,EAASuI,SAASnhC,KAClBie,EACA/E,EAC
A+mB,EAUxB,OAPIrH,GAAS0D,aACXO,oBAAoBC,SAASlzB,EAAOzI,GAChC+X,GACFtP,EAAMw3B,aAA
aloB,IAGvB6lB,EAAgBn1B,EAAOgvB,EAAU3a,EAAOgiB,GACjCr2B,EAGT,QAASy3B,GAAyBlgC,EAA
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
AASopB,EAAYnpB,IAC5B,EAEFD,IAASA,GAAQC,IAAUA,EAKpC,QAAS+xC,GAAoBviB,EAAUhhB,GACr
C,MAAc6B,UAAV7B,GAAoC,OAAbghB,EAClBhhB,EAES,OAAVA,GAA4B6B,SAAV7B,EAAuBghB,EAAWhh
B,EApC9D,GAAIoiC,GAAM31C,OAAO8oB,aAUbiuB,GACFz0B,OAAQlN,OACRzJ,KAAM,SACNhB,KAAMy
K,OACNmf,SAAUnf,QAGR8Y,EAAcpK,OAAOD,OAAS,SAAStQ,GACzC,MAAwB,gBAAVA,IAAsBsQ,MAAMt
Q,IAqBxC2J,GACF85B,uBAAwB,WACtB,GAAIrD,GAAK7xC,KAAKm1C,aACd,IAAItD,GAAMA,EAAGlwC
,OAAQ,CACnB,GAAIyzC,GAAIp1C,KAAKq1C,kBAAoB,GAAI9vB,mBAAiB,EACtDvlB,MAAKs1C,iBAAi
BF,EAKtB,KAAK,GAAsB3zC,GAAlBC,EAAE,EAAG+H,EAAEooC,EAAGlwC,OAAc8H,EAAF/H,IAASD,EA
AEowC,EAAGnwC,IAAKA,IAChD0zC,EAAEjzB,QAAQniB,KAAMyB,GAChBzB,KAAKu1C,kBAAkB9zC,EA
AGzB,KAAKyB,GAAI,QAIzC+zC,qBAAsB,WAChBx1C,KAAKq1C,mBACPr1C,KAAKq1C,kBAAkBxwB,KAA
K7kB,KAAKy1C,sBAAuBz1C,OAG5Dy1C,sBAAuB,SAASC,EAAWnjB,EAAWojB,GACpD,GAAI9sC,GAAMi
pC,EAAQ8D,IAClB,KAAK,GAAIl0C,KAAK6wB,GAIZ,GAFA1pB,EAAO8sC,EAAM,EAAIj0C,EAAI,GACr
BowC,EAAS9xC,KAAKmqB,QAAQthB,GACV,CACV,GAAIgtC,GAAKtjB,EAAU7wB,GAAIo0C,EAAKJ,EAA
Uh0C,EAEtC1B,MAAKu1C,kBAAkB1sC,EAAMitC,EAAID,GAC5BD,EAAO9D,KAEEx+B,SAAPuiC,GAA2B
,OAAPA,GAAwBviC,SAAPwiC,GAA2B,OAAPA,KAC5DF,EAAO9D,IAAU,EAKjB9xC,KAAK+1C,aAAajE,G
AAS+D,EAAIC,EAAI97B,eAM7Cg8B,eAAgB,WACVh2C,KAAKq1C,mBACPr1C,KAAKq1C,kBAAkBtwB,WA
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","source
sContent":["/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors.
All rights reserved.\n * This code may only be used under the BSD style license
found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors m
ay be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of cont
ributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dist
ributed by Google as part of the polymer project is also\n * subject to an addit
ional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nwindow
.PolymerGestures = {};\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors.
All rights reserved.\n * This code may only be used under the BSD style license
found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors m
ay be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of cont
ributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dist
ributed by Google as part of the polymer project is also\n * subject to an addit
ional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(fun
ction(scope) {\n var HAS_FULL_PATH = false;\n\n // test for full event path su
pport\n var pathTest = document.createElement('meta');\n if (pathTest.createSh
adowRoot) {\n var sr = pathTest.createShadowRoot();\n var s = document.cre
ateElement('span');\n sr.appendChild(s);\n pathTest.addEventListener('test
path', function(ev) {\n if (ev.path) {\n // if the span is in the ev
ent path, then path[0] is the real source for all events\n HAS_FULL_PATH
= ev.path[0] === s;\n }\n ev.stopPropagation();\n });\n var ev =
new CustomEvent('testpath', {bubbles: true});\n // must add node to DOM to t
rigger event listener\n document.head.appendChild(pathTest);\n s.dispatchE
vent(ev);\n pathTest.parentNode.removeChild(pathTest);\n sr = s = null;\n
}\n pathTest = null;\n\n var target = {\n shadow: function(inEl) {\n
if (inEl) {\n return inEl.shadowRoot || inEl.webkitShadowRoot;\n }\n
},\n canTarget: function(shadow) {\n return shadow && Boolean(shadow
.elementFromPoint);\n },\n targetingShadow: function(inEl) {\n var s
= this.shadow(inEl);\n if (this.canTarget(s)) {\n return s;\n }
\n },\n olderShadow: function(shadow) {\n var os = shadow.olderShadow
Root;\n if (!os) {\n var se = shadow.querySelector('shadow');\n
if (se) {\n os = se.olderShadowRoot;\n }\n }\n retu
rn os;\n },\n allShadows: function(element) {\n var shadows = [], s =
this.shadow(element);\n while(s) {\n shadows.push(s);\n s =
this.olderShadow(s);\n }\n return shadows;\n },\n searchRoot: fu
nction(inRoot, x, y) {\n var t, st, sr, os;\n if (inRoot) {\n t
= inRoot.elementFromPoint(x, y);\n if (t) {\n // found element,
check if it has a ShadowRoot\n sr = this.targetingShadow(t);\n
} else if (inRoot !== document) {\n // check for sibling roots\n
sr = this.olderShadow(inRoot);\n }\n // search other roots, fal
l back to light dom element\n return this.searchRoot(sr, x, y) || t;\n
}\n },\n owner: function(element) {\n if (!element) {\n ret
urn document;\n }\n var s = element;\n // walk up until you hit t
he shadow root or document\n while (s.parentNode) {\n s = s.parentNo
de;\n }\n // the owner element is expected to be a Document or ShadowR
oot\n if (s.nodeType != Node.DOCUMENT_NODE && s.nodeType != Node.DOCUMENT_F
RAGMENT_NODE) {\n s = document;\n }\n return s;\n },\n fi
ndTarget: function(inEvent) {\n if (HAS_FULL_PATH && inEvent.path) {\n
return inEvent.path[0];\n }\n var x = inEvent.clientX, y = inEvent.
clientY;\n // if the listener is in the shadow root, it is much faster to s
tart there\n var s = this.owner(inEvent.target);\n // if x, y is not i
n this root, fall back to document search\n if (!s.elementFromPoint(x, y))
{\n s = document;\n }\n return this.searchRoot(s, x, y);\n }
,\n findTouchAction: function(inEvent) {\n var n;\n if (HAS_FULL_PA
TH && inEvent.path) {\n var path = inEvent.path;\n for (var i = 0;
i < path.length; i++) {\n n = path[i];\n if (n.nodeType === N
ode.ELEMENT_NODE && n.hasAttribute('touch-action')) {\n return n.getA
ttribute('touch-action');\n }\n }\n } else {\n n = i
nEvent.target;\n while(n) {\n if (n.hasAttribute('touch-action')
) {\n return n.getAttribute('touch-action');\n }\n
n = n.parentNode || n.host;\n }\n }\n // auto is default\n
return \"auto\";\n },\n LCA: function(a, b) {\n if (a === b) {\n
return a;\n }\n if (a && !b) {\n return a;\n }\n
if (b && !a) {\n return b;\n }\n if (!b && !a) {\n retur
n document;\n }\n // fast case, a is a direct descendant of b or vice
versa\n if (a.contains && a.contains(b)) {\n return a;\n }\n
if (b.contains && b.contains(a)) {\n return b;\n }\n var ade
pth = this.depth(a);\n var bdepth = this.depth(b);\n var d = adepth -
bdepth;\n if (d >= 0) {\n a = this.walk(a, d);\n } else {\n
b = this.walk(b, -d);\n }\n while (a && b && a !== b) {\n a
= a.parentNode || a.host;\n b = b.parentNode || b.host;\n }\n
return a;\n },\n walk: function(n, u) {\n for (var i = 0; n && (i < u
); i++) {\n n = n.parentNode || n.host;\n }\n return n;\n },
\n depth: function(n) {\n var d = 0;\n while(n) {\n d++;\n
n = n.parentNode || n.host;\n }\n return d;\n },\n deepCon
tains: function(a, b) {\n var common = this.LCA(a, b);\n // if a is th
e common ancestor, it must \"deeply\" contain b\n return common === a;\n
},\n insideNode: function(node, x, y) {\n var rect = node.getBoundingCl
ientRect();\n return (rect.left <= x) && (x <= rect.right) && (rect.top <=
y) && (y <= rect.bottom);\n }\n };\n scope.targetFinding = target;\n /**\n
* Given an event, finds the \"deepest\" node that could have been the origina
l target before ShadowDOM retargetting\n *\n * @param {Event} Event An event
object with clientX and clientY properties\n * @return {Element} The probable
event origninator\n */\n scope.findTarget = target.findTarget.bind(target);\
n /**\n * Determines if the \"container\" node deeply contains the \"containe
e\" node, including situations where the \"containee\" is contained by one or mo
re ShadowDOM\n * roots.\n *\n * @param {Node} container\n * @param {Node
} containee\n * @return {Boolean}\n */\n scope.deepContains = target.deepCo
ntains.bind(target);\n\n /**\n * Determines if the x/y position is inside the
given node.\n *\n * Example:\n *\n * function upHandler(event) {\n
* var innode = PolymerGestures.insideNode(event.target, event.clientX, e
vent.clientY);\n * if (innode) {\n * // wait for tap?\n *
} else {\n * // tap will never happen\n * }\n * }\n
*\n * @param {Node} node\n * @param {Number} x Screen X position\n * @pa
ram {Number} y screen Y position\n * @return {Boolean}\n */\n scope.insideN
ode = target.insideNode;\n\n})(window.PolymerGestures);\n\n/*\n *\n * Copyright
(c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may onl
y be used under the BSD style license found at http://polymer.github.io/LICENSE.
txt\n * The complete set of authors may be found at http://polymer.github.io/AUT
HORS.txt\n * The complete set of contributors may be found at http://polymer.git
hub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer pr
oject is also\n * subject to an additional IP rights grant found at http://polym
er.github.io/PATENTS.txt\n */\n\n(function() {\n function shadowSelector(v) {\n
return 'html /deep/ ' + selector(v);\n }\n function selector(v) {\n ret
urn '[touch-action=\"' + v + '\"]';\n }\n function rule(v) {\n return '{ -m
s-touch-action: ' + v + '; touch-action: ' + v + ';}';\n }\n var attrib2css =
[\n 'none',\n 'auto',\n 'pan-x',\n 'pan-y',\n {\n rule: 'pan
-x pan-y',\n selectors: [\n 'pan-x pan-y',\n 'pan-y pan-x'\n
]\n },\n 'manipulation'\n ];\n var styles = '';\n // only install
stylesheet if the browser has touch action support\n var hasTouchAction = typeo
f document.head.style.touchAction === 'string';\n // only add shadow selectors
if shadowdom is supported\n var hasShadowRoot = !window.ShadowDOMPolyfill && do
cument.head.createShadowRoot;\n\n if (hasTouchAction) {\n attrib2css.forEach
(function(r) {\n if (String(r) === r) {\n styles += selector(r) + ru
le(r) + '\\n';\n if (hasShadowRoot) {\n styles += shadowSelector
(r) + rule(r) + '\\n';\n }\n } else {\n styles += r.selectors
.map(selector) + rule(r.rule) + '\\n';\n if (hasShadowRoot) {\n
styles += r.selectors.map(shadowSelector) + rule(r.rule) + '\\n';\n }\n
}\n });\n\n var el = document.createElement('style');\n el.textCont
ent = styles;\n document.head.appendChild(el);\n }\n})();\n\n/*\n * Copyrigh
t (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may o
nly be used under the BSD style license found at http://polymer.github.io/LICENS
E.txt\n * The complete set of authors may be found at http://polymer.github.io/A
UTHORS.txt\n * The complete set of contributors may be found at http://polymer.g
ithub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer
project is also\n * subject to an additional IP rights grant found at http://pol
ymer.github.io/PATENTS.txt\n */\n\n/**\n * This is the constructor for new Point
erEvents.\n *\n * New Pointer Events must be given a type, and an optional dicti
onary of\n * initialization properties.\n *\n * Due to certain platform requirem
ents, events returned from the constructor\n * identify as MouseEvents.\n *\n *
@constructor\n * @param {String} inType The type of the event to create.\n * @pa
ram {Object} [inDict] An optional dictionary of initial event properties.\n * @r
eturn {Event} A new PointerEvent of type `inType` and initialized with propertie
s from `inDict`.\n */\n(function(scope) {\n\n var MOUSE_PROPS = [\n 'bubbles
',\n 'cancelable',\n 'view',\n 'detail',\n 'screenX',\n 'screenY'
,\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey',\n 'shiftKey'
,\n 'metaKey',\n 'button',\n 'relatedTarget',\n 'pageX',\n 'pageY
'\n ];\n\n var MOUSE_DEFAULTS = [\n false,\n false,\n null,\n null
,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false
,\n 0,\n null,\n 0,\n 0\n ];\n\n var NOP_FACTORY = function(){ ret
urn function(){}; };\n\n var eventFactory = {\n // TODO(dfreedm): this is ov
erridden by tap recognizer, needs review\n preventTap: NOP_FACTORY,\n make
BaseEvent: function(inType, inDict) {\n var e = document.createEvent('Event
');\n e.initEvent(inType, inDict.bubbles || false, inDict.cancelable || fal
se);\n e.preventTap = eventFactory.preventTap(e);\n return e;\n },\
n makeGestureEvent: function(inType, inDict) {\n inDict = inDict || Obje
ct.create(null);\n\n var e = this.makeBaseEvent(inType, inDict);\n for
(var i = 0, keys = Object.keys(inDict), k; i < keys.length; i++) {\n k =
keys[i];\n e[k] = inDict[k];\n }\n return e;\n },\n make
PointerEvent: function(inType, inDict) {\n inDict = inDict || Object.create
(null);\n\n var e = this.makeBaseEvent(inType, inDict);\n // define in
herited MouseEvent properties\n for(var i = 0, p; i < MOUSE_PROPS.length; i
++) {\n p = MOUSE_PROPS[i];\n e[p] = inDict[p] || MOUSE_DEFAULTS[i
];\n }\n e.buttons = inDict.buttons || 0;\n\n // Spec requires th
at pointers without pressure specified use 0.5 for down\n // state and 0 fo
r up state.\n var pressure = 0;\n if (inDict.pressure) {\n pres
sure = inDict.pressure;\n } else {\n pressure = e.buttons ? 0.5 : 0;
\n }\n\n // add x/y properties aliased to clientX/Y\n e.x = e.cli
entX;\n e.y = e.clientY;\n\n // define the properties of the PointerEv
ent interface\n e.pointerId = inDict.pointerId || 0;\n e.width = inDic
t.width || 0;\n e.height = inDict.height || 0;\n e.pressure = pressure
;\n e.tiltX = inDict.tiltX || 0;\n e.tiltY = inDict.tiltY || 0;\n
e.pointerType = inDict.pointerType || '';\n e.hwTimestamp = inDict.hwTimes
tamp || 0;\n e.isPrimary = inDict.isPrimary || false;\n e._source = in
Dict._source || '';\n return e;\n }\n };\n\n scope.eventFactory = even
tFactory;\n})(window.PolymerGestures);\n\n/*\n * Copyright (c) 2014 The Polymer
Project Authors. All rights reserved.\n * This code may only be used under the B
SD style license found at http://polymer.github.io/LICENSE.txt\n * The complete
set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The comp
lete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.t
xt\n * Code distributed by Google as part of the polymer project is also\n * sub
ject to an additional IP rights grant found at http://polymer.github.io/PATENTS.
txt\n */\n\n/**\n * This module implements an map of pointer states\n */\n(funct
ion(scope) {\n var USE_MAP = window.Map && window.Map.prototype.forEach;\n var
POINTERS_FN = function(){ return this.size; };\n function PointerMap() {\n
if (USE_MAP) {\n var m = new Map();\n m.pointers = POINTERS_FN;\n
return m;\n } else {\n this.keys = [];\n this.values = [];\n }\
n }\n\n PointerMap.prototype = {\n set: function(inId, inEvent) {\n va
r i = this.keys.indexOf(inId);\n if (i > -1) {\n this.values[i] = in
Event;\n } else {\n this.keys.push(inId);\n this.values.push(
inEvent);\n }\n },\n has: function(inId) {\n return this.keys.in
dexOf(inId) > -1;\n },\n 'delete': function(inId) {\n var i = this.ke
ys.indexOf(inId);\n if (i > -1) {\n this.keys.splice(i, 1);\n
this.values.splice(i, 1);\n }\n },\n get: function(inId) {\n va
r i = this.keys.indexOf(inId);\n return this.values[i];\n },\n clear:
function() {\n this.keys.length = 0;\n this.values.length = 0;\n }
,\n // return value, key, map\n forEach: function(callback, thisArg) {\n
this.values.forEach(function(v, i) {\n callback.call(thisArg, v, this
.keys[i], this);\n }, this);\n },\n pointers: function() {\n ret
urn this.keys.length;\n }\n };\n\n scope.PointerMap = PointerMap;\n})(windo
w.PolymerGestures);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. Al
l rights reserved.\n * This code may only be used under the BSD style license fo
und at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may
be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contrib
utors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distrib
uted by Google as part of the polymer project is also\n * subject to an addition
al IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(functi
on(scope) {\n var CLONE_PROPS = [\n // MouseEvent\n 'bubbles',\n 'canc
elable',\n 'view',\n 'detail',\n 'screenX',\n 'screenY',\n 'clien
tX',\n 'clientY',\n 'ctrlKey',\n 'altKey',\n 'shiftKey',\n 'metaK
ey',\n 'button',\n 'relatedTarget',\n // DOM Level 3\n 'buttons',\n
// PointerEvent\n 'pointerId',\n 'width',\n 'height',\n 'pressure
',\n 'tiltX',\n 'tiltY',\n 'pointerType',\n 'hwTimestamp',\n 'isP
rimary',\n // event instance\n 'type',\n 'target',\n 'currentTarget'
,\n 'which',\n 'pageX',\n 'pageY',\n 'timeStamp',\n // gesture ad
dons\n 'preventTap',\n 'tapPrevented',\n '_source'\n ];\n\n var CLONE
_DEFAULTS = [\n // MouseEvent\n false,\n false,\n null,\n null,\n
0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n
0,\n null,\n // DOM Level 3\n 0,\n // PointerEvent\n 0,\n
0,\n 0,\n 0,\n 0,\n 0,\n '',\n 0,\n false,\n // event in
stance\n '',\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n funct
ion(){},\n false\n ];\n\n var HAS_SVG_INSTANCE = (typeof SVGElementInstance
!== 'undefined');\n\n var eventFactory = scope.eventFactory;\n\n // set of re
cognizers to run for the currently handled event\n var currentGestures;\n\n /*
*\n * This module is for normalizing events. Mouse and Touch events will be\n
* collected here, and fire PointerEvents that have the same semantics, no\n
* matter the source.\n * Events fired:\n * - pointerdown: a pointing is ad
ded\n * - pointerup: a pointer is removed\n * - pointermove: a pointer i
s moved\n * - pointerover: a pointer crosses into an element\n * - point
erout: a pointer leaves an element\n * - pointercancel: a pointer will no lo
nger generate events\n */\n var dispatcher = {\n pointermap: new scope.Poi
nterMap(),\n requiredGestures: new scope.PointerMap(),\n eventMap: Object.
create(null),\n // Scope objects for native events.\n // This exists for e
ase of testing.\n eventSources: Object.create(null),\n eventSourceList: []
,\n gestures: [],\n // map gesture event -> {listeners: int, index: gestur
es[int]}\n dependencyMap: {\n // make sure down and up are in the map to
trigger \"register\"\n down: {listeners: 0, index: -1},\n up: {listen
ers: 0, index: -1}\n },\n gestureQueue: [],\n /**\n * Add a new eve
nt source that will generate pointer events.\n *\n * `inSource` must con
tain an array of event names named `events`, and\n * functions with the name
s specified in the `events` array.\n * @param {string} name A name for the e
vent source\n * @param {Object} source A new source of platform events.\n
*/\n registerSource: function(name, source) {\n var s = source;\n
var newEvents = s.events;\n if (newEvents) {\n newEvents.forEach(fu
nction(e) {\n if (s[e]) {\n this.eventMap[e] = s[e].bind(s);
\n }\n }, this);\n this.eventSources[name] = s;\n
this.eventSourceList.push(s);\n }\n },\n registerGesture: function(na
me, source) {\n var obj = Object.create(null);\n obj.listeners = 0;\n
obj.index = this.gestures.length;\n for (var i = 0, g; i < source.expo
ses.length; i++) {\n g = source.exposes[i].toLowerCase();\n this.d
ependencyMap[g] = obj;\n }\n this.gestures.push(source);\n },\n
register: function(element, initial) {\n var l = this.eventSourceList.lengt
h;\n for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) {\
n // call eventsource register\n es.register.call(es, element, ini
tial);\n }\n },\n unregister: function(element) {\n var l = this
.eventSourceList.length;\n for (var i = 0, es; (i < l) && (es = this.eventS
ourceList[i]); i++) {\n // call eventsource register\n es.unregist
er.call(es, element);\n }\n },\n // EVENTS\n down: function(inEven
t) {\n this.requiredGestures.set(inEvent.pointerId, currentGestures);\n
this.fireEvent('down', inEvent);\n },\n move: function(inEvent) {\n
// pipe move events into gesture queue directly\n inEvent.type = 'move';\n
this.fillGestureQueue(inEvent);\n },\n up: function(inEvent) {\n
this.fireEvent('up', inEvent);\n this.requiredGestures.delete(inEvent.poi
nterId);\n },\n cancel: function(inEvent) {\n inEvent.tapPrevented =
true;\n this.fireEvent('up', inEvent);\n this.requiredGestures.delete(
inEvent.pointerId);\n },\n // LISTENER LOGIC\n eventHandler: function(i
nEvent) {\n // This is used to prevent multiple dispatch of events from\n
// platform events. This can happen when two elements in different scopes\n
// are set up to create pointer events, which is relevant to Shadow DOM.\n\
n var type = inEvent.type;\n\n // only generate the list of desired ev
ents on \"down\"\n if (type === 'touchstart' || type === 'mousedown' || typ
e === 'pointerdown' || type === 'MSPointerDown') {\n if (!inEvent._handle
dByPG) {\n currentGestures = {};\n }\n // map gesture nam
es to ordered set of recognizers\n var gesturesWanted = inEvent.currentTa
rget._pgEvents;\n if (gesturesWanted) {\n var gk = Object.keys(g
esturesWanted);\n for (var i = 0, r, ri, g; i < gk.length; i++) {\n
// gesture\n g = gk[i];\n if (gesturesWanted[g] >
0) {\n // lookup gesture recognizer\n r = this.depende
ncyMap[g];\n // recognizer index\n ri = r ? r.index :
-1;\n currentGestures[ri] = true;\n }\n }\n
}\n }\n\n if (inEvent._handledByPG) {\n return;\n }\n
var fn = this.eventMap && this.eventMap[type];\n if (fn) {\n fn
(inEvent);\n }\n inEvent._handledByPG = true;\n },\n // set up e
vent listeners\n listen: function(target, events) {\n for (var i = 0, l
= events.length, e; (i < l) && (e = events[i]); i++) {\n this.addEvent(ta
rget, e);\n }\n },\n // remove event listeners\n unlisten: functio
n(target, events) {\n for (var i = 0, l = events.length, e; (i < l) && (e =
events[i]); i++) {\n this.removeEvent(target, e);\n }\n },\n
addEvent: function(target, eventName) {\n target.addEventListener(eventName
, this.boundHandler);\n },\n removeEvent: function(target, eventName) {\n
target.removeEventListener(eventName, this.boundHandler);\n },\n // E
VENT CREATION AND TRACKING\n /**\n * Creates a new Event of type `inType`
, based on the information in\n * `inEvent`.\n *\n * @param {string}
inType A string representing the type of event to create\n * @param {Event}
inEvent A platform event with a target\n * @return {Event} A PointerEvent o
f type `inType`\n */\n makeEvent: function(inType, inEvent) {\n var
e = eventFactory.makePointerEvent(inType, inEvent);\n e.preventDefault = in
Event.preventDefault;\n e.tapPrevented = inEvent.tapPrevented;\n e._ta
rget = e._target || inEvent.target;\n return e;\n },\n // make and di
spatch an event in one call\n fireEvent: function(inType, inEvent) {\n v
ar e = this.makeEvent(inType, inEvent);\n return this.dispatchEvent(e);\n
},\n /**\n * Returns a snapshot of inEvent, with writable properties.\n
*\n * @param {Event} inEvent An event that contains properties to copy.
\n * @return {Object} An object containing shallow copies of `inEvent`'s\n
* properties.\n */\n cloneEvent: function(inEvent) {\n var eve
ntCopy = Object.create(null), p;\n for (var i = 0; i < CLONE_PROPS.length;
i++) {\n p = CLONE_PROPS[i];\n eventCopy[p] = inEvent[p] || CLONE_
DEFAULTS[i];\n // Work around SVGInstanceElement shadow tree\n //
Return the <use> element that is represented by the instance for Safari, Chrome,
IE.\n // This is the behavior implemented by Firefox.\n if (p ===
'target' || p === 'relatedTarget') {\n if (HAS_SVG_INSTANCE && eventCo
py[p] instanceof SVGElementInstance) {\n eventCopy[p] = eventCopy[p].
correspondingUseElement;\n }\n }\n }\n // keep the sem
antics of preventDefault\n eventCopy.preventDefault = function() {\n
inEvent.preventDefault();\n };\n return eventCopy;\n },\n /**\n
* Dispatches the event to its target.\n *\n * @param {Event} inEven
t The event to be dispatched.\n * @return {Boolean} True if an event handler
returns true, false otherwise.\n */\n dispatchEvent: function(inEvent) {
\n var t = inEvent._target;\n if (t) {\n t.dispatchEvent(inEven
t);\n // clone the event for the gesture system to process\n // cl
one after dispatch to pick up gesture prevention code\n var clone = this.
cloneEvent(inEvent);\n clone.target = t;\n this.fillGestureQueue(c
lone);\n }\n },\n gestureTrigger: function() {\n // process the
gesture queue\n for (var i = 0, e, rg; i < this.gestureQueue.length; i++) {
\n e = this.gestureQueue[i];\n rg = e._requiredGestures;\n
for (var j = 0, g, fn; j < this.gestures.length; j++) {\n // only run r
ecognizer if an element in the source event's path is listening for those gestur
es\n if (rg[j]) {\n g = this.gestures[j];\n fn =
g[e.type];\n if (fn) {\n fn.call(g, e);\n }\n
}\n }\n }\n this.gestureQueue.length = 0;\n },\n
fillGestureQueue: function(ev) {\n // only trigger the gesture queue once
\n if (!this.gestureQueue.length) {\n requestAnimationFrame(this.bou
ndGestureTrigger);\n }\n ev._requiredGestures = this.requiredGestures.
get(ev.pointerId);\n this.gestureQueue.push(ev);\n }\n };\n dispatcher
.boundHandler = dispatcher.eventHandler.bind(dispatcher);\n dispatcher.boundGes
tureTrigger = dispatcher.gestureTrigger.bind(dispatcher);\n scope.dispatcher =
dispatcher;\n\n /**\n * Listen for `gesture` on `node` with the `handler` fun
ction\n *\n * If `handler` is the first listener for `gesture`, the underlyi
ng gesture recognizer is then enabled.\n *\n * @param {Element} node\n * @
param {string} gesture\n * @return Boolean `gesture` is a valid gesture\n */
\n scope.activateGesture = function(node, gesture) {\n var g = gesture.toLow
erCase();\n var dep = dispatcher.dependencyMap[g];\n if (dep) {\n var
recognizer = dispatcher.gestures[dep.index];\n if (!node._pgListeners) {\n
dispatcher.register(node);\n node._pgListeners = 0;\n }\n
// TODO(dfreedm): re-evaluate bookkeeping to avoid using attributes\n if
(recognizer) {\n var touchAction = recognizer.defaultActions && recogniz
er.defaultActions[g];\n var actionNode;\n switch(node.nodeType) {\
n case Node.ELEMENT_NODE:\n actionNode = node;\n br
eak;\n case Node.DOCUMENT_FRAGMENT_NODE:\n actionNode = node
.host;\n break;\n default:\n actionNode = null;\n
break;\n }\n if (touchAction && actionNode && !actionNode.
hasAttribute('touch-action')) {\n actionNode.setAttribute('touch-action
', touchAction);\n }\n }\n if (!node._pgEvents) {\n node
._pgEvents = {};\n }\n node._pgEvents[g] = (node._pgEvents[g] || 0) +
1;\n node._pgListeners++;\n }\n return Boolean(dep);\n };\n\n /**\n
*\n * Listen for `gesture` from `node` with `handler` function.\n *\n *
@param {Element} node\n * @param {string} gesture\n * @param {Function} han
dler\n * @param {Boolean} capture\n */\n scope.addEventListener = function(
node, gesture, handler, capture) {\n if (handler) {\n scope.activateGest
ure(node, gesture);\n node.addEventListener(gesture, handler, capture);\n
}\n };\n\n /**\n * Tears down the gesture configuration for `node`\n *\n
* If `handler` is the last listener for `gesture`, the underlying gesture rec
ognizer is disabled.\n *\n * @param {Element} node\n * @param {string} ges
ture\n * @return Boolean `gesture` is a valid gesture\n */\n scope.deactiva
teGesture = function(node, gesture) {\n var g = gesture.toLowerCase();\n v
ar dep = dispatcher.dependencyMap[g];\n if (dep) {\n if (node._pgListene
rs > 0) {\n node._pgListeners--;\n }\n if (node._pgListeners ==
= 0) {\n dispatcher.unregister(node);\n }\n if (node._pgEvents)
{\n if (node._pgEvents[g] > 0) {\n node._pgEvents[g]--;\n
} else {\n node._pgEvents[g] = 0;\n }\n }\n }\n ret
urn Boolean(dep);\n };\n\n /**\n * Stop listening for `gesture` from `node`
with `handler` function.\n *\n * @param {Element} node\n * @param {string}
gesture\n * @param {Function} handler\n * @param {Boolean} capture\n */\n
scope.removeEventListener = function(node, gesture, handler, capture) {\n i
f (handler) {\n scope.deactivateGesture(node, gesture);\n node.removeE
ventListener(gesture, handler, capture);\n }\n };\n})(window.PolymerGestures
);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved
.\n * This code may only be used under the BSD style license found at http://pol
ymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:
//polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be foun
d at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights gran
t found at http://polymer.github.io/PATENTS.txt\n */\n\n(function (scope) {\n v
ar dispatcher = scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n
// radius around touchend that swallows mouse events\n var DEDUP_DIST = 25;\n\n
var WHICH_TO_BUTTONS = [0, 1, 4, 2];\n\n var HAS_BUTTONS = false;\n try {\n
HAS_BUTTONS = new MouseEvent('test', {buttons: 1}).buttons === 1;\n } catch
(e) {}\n\n // handler block for native mouse events\n var mouseEvents = {\n
POINTER_ID: 1,\n POINTER_TYPE: 'mouse',\n events: [\n 'mousedown',\n
'mousemove',\n 'mouseup'\n ],\n exposes: [\n 'down',\n
'up',\n 'move'\n ],\n register: function(target) {\n dispatche
r.listen(target, this.events);\n },\n unregister: function(target) {\n
dispatcher.unlisten(target, this.events);\n },\n lastTouches: [],\n /
/ collide with the global mouse listener\n isEventSimulatedFromTouch: functio
n(inEvent) {\n var lts = this.lastTouches;\n var x = inEvent.clientX,
y = inEvent.clientY;\n for (var i = 0, l = lts.length, t; i < l && (t = lts
[i]); i++) {\n // simulated mouse events will be swallowed near a primary
touchend\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n
if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) {\n return true;\n }\n
}\n },\n prepareEvent: function(inEvent) {\n var e = dispatcher
.cloneEvent(inEvent);\n e.pointerId = this.POINTER_ID;\n e.isPrimary =
true;\n e.pointerType = this.POINTER_TYPE;\n e._source = 'mouse';\n
if (!HAS_BUTTONS) {\n e.buttons = WHICH_TO_BUTTONS[e.which] || 0;\n
}\n return e;\n },\n mousedown: function(inEvent) {\n if (!t
his.isEventSimulatedFromTouch(inEvent)) {\n var p = pointermap.has(this.P
OINTER_ID);\n // TODO(dfreedman) workaround for some elements not sending
mouseup\n // http://crbug/149091\n if (p) {\n this.mouse
up(inEvent);\n }\n var e = this.prepareEvent(inEvent);\n e.
target = scope.findTarget(inEvent);\n pointermap.set(this.POINTER_ID, e.t
arget);\n dispatcher.down(e);\n }\n },\n mousemove: function(i
nEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var ta
rget = pointermap.get(this.POINTER_ID);\n if (target) {\n var e
= this.prepareEvent(inEvent);\n e.target = target;\n // handle
case where we missed a mouseup\n if (e.buttons === 0) {\n d
ispatcher.cancel(e);\n this.cleanupMouse();\n } else {\n
dispatcher.move(e);\n }\n }\n }\n },\n mouseu
p: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n
var e = this.prepareEvent(inEvent);\n e.relatedTarget = scope.find
Target(inEvent);\n e.target = pointermap.get(this.POINTER_ID);\n d
ispatcher.up(e);\n this.cleanupMouse();\n }\n },\n cleanupMous
e: function() {\n pointermap['delete'](this.POINTER_ID);\n }\n };\n\n
scope.mouseEvents = mouseEvents;\n})(window.PolymerGestures);\n\n/*\n * Copyrigh
t (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may o
nly be used under the BSD style license found at http://polymer.github.io/LICENS
E.txt\n * The complete set of authors may be found at http://polymer.github.io/A
UTHORS.txt\n * The complete set of contributors may be found at http://polymer.g
ithub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer
project is also\n * subject to an additional IP rights grant found at http://pol
ymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatcher = scope.
dispatcher;\n var allShadows = scope.targetFinding.allShadows.bind(scope.target
Finding);\n var pointermap = dispatcher.pointermap;\n var touchMap = Array.pro
totype.map.call.bind(Array.prototype.map);\n // This should be long enough to i
gnore compat mouse events made by touch\n var DEDUP_TIMEOUT = 2500;\n var CLIC
K_COUNT_TIMEOUT = 200;\n var HYSTERESIS = 20;\n var ATTRIB = 'touch-action';\n
// TODO(dfreedm): disable until http://crbug.com/399765 is resolved\n // var
HAS_TOUCH_ACTION = ATTRIB in document.head.style;\n var HAS_TOUCH_ACTION = fals
e;\n\n // handler block for native touch events\n var touchEvents = {\n eve
nts: [\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touch
cancel'\n ],\n exposes: [\n 'down',\n 'up',\n 'move'\n ]
,\n register: function(target, initial) {\n if (initial) {\n retu
rn;\n }\n dispatcher.listen(target, this.events);\n },\n unregis
ter: function(target) {\n dispatcher.unlisten(target, this.events);\n },
\n scrollTypes: {\n EMITTER: 'none',\n XSCROLLER: 'pan-x',\n Y
SCROLLER: 'pan-y',\n },\n touchActionToScrollType: function(touchAction) {
\n var t = touchAction;\n var st = this.scrollTypes;\n if (t ===
st.EMITTER) {\n return 'none';\n } else if (t === st.XSCROLLER) {\n
return 'X';\n } else if (t === st.YSCROLLER) {\n return 'Y';\
n } else {\n return 'XY';\n }\n },\n POINTER_TYPE: 'touch
',\n firstTouch: null,\n isPrimaryTouch: function(inTouch) {\n return
this.firstTouch === inTouch.identifier;\n },\n setPrimaryTouch: function(
inTouch) {\n // set primary touch if there no pointers, or the only pointer
is the mouse\n if (pointermap.pointers() === 0 || (pointermap.pointers() =
== 1 && pointermap.has(1))) {\n this.firstTouch = inTouch.identifier;\n
this.firstXY = {X: inTouch.clientX, Y: inTouch.clientY};\n this.scr
olling = null;\n this.cancelResetClickCount();\n }\n },\n remo
vePrimaryPointer: function(inPointer) {\n if (inPointer.isPrimary) {\n
this.firstTouch = null;\n this.firstXY = null;\n this.resetClic
kCount();\n }\n },\n clickCount: 0,\n resetId: null,\n resetCli
ckCount: function() {\n var fn = function() {\n this.clickCount = 0;
\n this.resetId = null;\n }.bind(this);\n this.resetId = setTim
eout(fn, CLICK_COUNT_TIMEOUT);\n },\n cancelResetClickCount: function() {\
n if (this.resetId) {\n clearTimeout(this.resetId);\n }\n },
\n typeToButtons: function(type) {\n var ret = 0;\n if (type === 't
ouchstart' || type === 'touchmove') {\n ret = 1;\n }\n return r
et;\n },\n findTarget: function(touch, id) {\n if (this.currentTouchE
vent.type === 'touchstart') {\n if (this.isPrimaryTouch(touch)) {\n
var fastPath = {\n clientX: touch.clientX,\n clientY:
touch.clientY,\n path: this.currentTouchEvent.path,\n targ
et: this.currentTouchEvent.target\n };\n return scope.findTarg
et(fastPath);\n } else {\n return scope.findTarget(touch);\n
}\n }\n // reuse target we found in touchstart\n return point
ermap.get(id);\n },\n touchToPointer: function(inTouch) {\n var cte =
this.currentTouchEvent;\n var e = dispatcher.cloneEvent(inTouch);\n /
/ Spec specifies that pointerId 1 is reserved for Mouse.\n // Touch identif
iers can start at 0.\n // Add 2 to the touch identifier for compatibility.\
n var id = e.pointerId = inTouch.identifier + 2;\n e.target = this.fin
dTarget(inTouch, id);\n e.bubbles = true;\n e.cancelable = true;\n
e.detail = this.clickCount;\n e.buttons = this.typeToButtons(cte.type);\n
e.width = inTouch.webkitRadiusX || inTouch.radiusX || 0;\n e.height =
inTouch.webkitRadiusY || inTouch.radiusY || 0;\n e.pressure = inTouch.webk
itForce || inTouch.force || 0.5;\n e.isPrimary = this.isPrimaryTouch(inTouc
h);\n e.pointerType = this.POINTER_TYPE;\n e._source = 'touch';\n
// forward touch preventDefaults\n var self = this;\n e.preventDefaul
t = function() {\n self.scrolling = false;\n self.firstXY = null;\
n cte.preventDefault();\n };\n return e;\n },\n processTo
uches: function(inEvent, inFunction) {\n var tl = inEvent.changedTouches;\n
this.currentTouchEvent = inEvent;\n for (var i = 0, t, p; i < tl.leng
th; i++) {\n t = tl[i];\n p = this.touchToPointer(t);\n if
(inEvent.type === 'touchstart') {\n pointermap.set(p.pointerId, p.targe
t);\n }\n if (pointermap.has(p.pointerId)) {\n inFunction
.call(this, p);\n }\n if (inEvent.type === 'touchend' || inEvent._
cancel) {\n this.cleanUpPointer(p);\n }\n }\n },\n //
For single axis scrollers, determines whether the element should emit\n // p
ointer events or behave as a scroller\n shouldScroll: function(inEvent) {\n
if (this.firstXY) {\n var ret;\n var touchAction = scope.targe
tFinding.findTouchAction(inEvent);\n var scrollAxis = this.touchActionToS
crollType(touchAction);\n if (scrollAxis === 'none') {\n // this
element is a touch-action: none, should never scroll\n ret = false;\n
} else if (scrollAxis === 'XY') {\n // this element should alway
s scroll\n ret = true;\n } else {\n var t = inEvent.cha
ngedTouches[0];\n // check the intended scroll axis, and other axis\n
var a = scrollAxis;\n var oa = scrollAxis === 'Y' ? 'X' : 'Y';\
n var da = Math.abs(t['client' + a] - this.firstXY[a]);\n var
doa = Math.abs(t['client' + oa] - this.firstXY[oa]);\n // if delta in t
he scroll axis > delta other axis, scroll instead of\n // making events
\n ret = da >= doa;\n }\n return ret;\n }\n },\n
findTouch: function(inTL, inId) {\n for (var i = 0, l = inTL.length, t;
i < l && (t = inTL[i]); i++) {\n if (t.identifier === inId) {\n
return true;\n }\n }\n },\n // In some instances, a touchstart
can happen without a touchend. This\n // leaves the pointermap in a broken s
tate.\n // Therefore, on every touchstart, we remove the touches that did not
fire a\n // touchend event.\n // To keep state globally consistent, we fi
re a\n // pointercancel for this \"abandoned\" touch\n vacuumTouches: func
tion(inEvent) {\n var tl = inEvent.touches;\n // pointermap.pointers()
should be < tl.length here, as the touchstart has not\n // been processed
yet.\n if (pointermap.pointers() >= tl.length) {\n var d = [];\n
pointermap.forEach(function(value, key) {\n // Never remove pointer
Id == 1, which is mouse.\n // Touch identifiers are 2 smaller than thei
r pointerId, which is the\n // index in pointermap.\n if (key
!== 1 && !this.findTouch(tl, key - 2)) {\n var p = value;\n
d.push(p);\n }\n }, this);\n d.forEach(function(p) {\n
this.cancel(p);\n pointermap.delete(p.pointerId);\n });
\n }\n },\n touchstart: function(inEvent) {\n this.vacuumTouches
(inEvent);\n this.setPrimaryTouch(inEvent.changedTouches[0]);\n this.d
edupSynthMouse(inEvent);\n if (!this.scrolling) {\n this.clickCount+
+;\n this.processTouches(inEvent, this.down);\n }\n },\n down:
function(inPointer) {\n dispatcher.down(inPointer);\n },\n touchmove
: function(inEvent) {\n if (HAS_TOUCH_ACTION) {\n // touchevent.canc
elable == false is sent when the page is scrolling under native Touch Action in
Chrome 36\n // https://groups.google.com/a/chromium.org/d/msg/input-dev/w
HnyukcYBcA/b9kmtwM1jJQJ\n if (inEvent.cancelable) {\n this.proce
ssTouches(inEvent, this.move);\n }\n } else {\n if (!this.scr
olling) {\n if (this.scrolling === null && this.shouldScroll(inEvent))
{\n this.scrolling = true;\n } else {\n this.scro
lling = false;\n inEvent.preventDefault();\n this.processT
ouches(inEvent, this.move);\n }\n } else if (this.firstXY) {\n
var t = inEvent.changedTouches[0];\n var dx = t.clientX - this.
firstXY.X;\n var dy = t.clientY - this.firstXY.Y;\n var dd = M
ath.sqrt(dx * dx + dy * dy);\n if (dd >= HYSTERESIS) {\n thi
s.touchcancel(inEvent);\n this.scrolling = true;\n this.fi
rstXY = null;\n }\n }\n }\n },\n move: function(inPoi
nter) {\n dispatcher.move(inPointer);\n },\n touchend: function(inEve
nt) {\n this.dedupSynthMouse(inEvent);\n this.processTouches(inEvent,
this.up);\n },\n up: function(inPointer) {\n inPointer.relatedTarget
= scope.findTarget(inPointer);\n dispatcher.up(inPointer);\n },\n can
cel: function(inPointer) {\n dispatcher.cancel(inPointer);\n },\n tou
chcancel: function(inEvent) {\n inEvent._cancel = true;\n this.process
Touches(inEvent, this.cancel);\n },\n cleanUpPointer: function(inPointer)
{\n pointermap['delete'](inPointer.pointerId);\n this.removePrimaryPoi
nter(inPointer);\n },\n // prevent synth mouse events from creating pointe
r events\n dedupSynthMouse: function(inEvent) {\n var lts = scope.mouseE
vents.lastTouches;\n var t = inEvent.changedTouches[0];\n // only the
primary finger will synth mouse events\n if (this.isPrimaryTouch(t)) {\n
// remember x/y of last touch\n var lt = {x: t.clientX, y: t.clientY
};\n lts.push(lt);\n var fn = (function(lts, lt){\n var i
= lts.indexOf(lt);\n if (i > -1) {\n lts.splice(i, 1);\n
}\n }).bind(null, lts, lt);\n setTimeout(fn, DEDUP_TIMEOUT)
;\n }\n }\n };\n\n scope.touchEvents = touchEvents;\n})(window.Polymer
Gestures);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights
reserved.\n * This code may only be used under the BSD style license found at ht
tp://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found
at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may
be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by G
oogle as part of the polymer project is also\n * subject to an additional IP rig
hts grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope)
{\n var dispatcher = scope.dispatcher;\n var pointermap = dispatcher.pointerm
ap;\n var HAS_BITMAP_TYPE = window.MSPointerEvent && typeof window.MSPointerEve
nt.MSPOINTER_TYPE_MOUSE === 'number';\n var msEvents = {\n events: [\n
'MSPointerDown',\n 'MSPointerMove',\n 'MSPointerUp',\n 'MSPointer
Cancel',\n ],\n register: function(target) {\n dispatcher.listen(targ
et, this.events);\n },\n unregister: function(target) {\n dispatcher.
unlisten(target, this.events);\n },\n POINTER_TYPES: [\n '',\n '
unavailable',\n 'touch',\n 'pen',\n 'mouse'\n ],\n prepareE
vent: function(inEvent) {\n var e = inEvent;\n e = dispatcher.cloneEve
nt(inEvent);\n if (HAS_BITMAP_TYPE) {\n e.pointerType = this.POINTER
_TYPES[inEvent.pointerType];\n }\n e._source = 'ms';\n return e;\
n },\n cleanup: function(id) {\n pointermap['delete'](id);\n },\n
MSPointerDown: function(inEvent) {\n var e = this.prepareEvent(inEvent);
\n e.target = scope.findTarget(inEvent);\n pointermap.set(inEvent.poin
terId, e.target);\n dispatcher.down(e);\n },\n MSPointerMove: functio
n(inEvent) {\n var target = pointermap.get(inEvent.pointerId);\n if (t
arget) {\n var e = this.prepareEvent(inEvent);\n e.target = target
;\n dispatcher.move(e);\n }\n },\n MSPointerUp: function(inEve
nt) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = scope.
findTarget(inEvent);\n e.target = pointermap.get(e.pointerId);\n dispa
tcher.up(e);\n this.cleanup(inEvent.pointerId);\n },\n MSPointerCance
l: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.relat
edTarget = scope.findTarget(inEvent);\n e.target = pointermap.get(e.pointer
Id);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerId);\n }
\n };\n\n scope.msEvents = msEvents;\n})(window.PolymerGestures);\n\n/*\n * Co
pyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code
may only be used under the BSD style license found at http://polymer.github.io/
LICENSE.txt\n * The complete set of authors may be found at http://polymer.githu
b.io/AUTHORS.txt\n * The complete set of contributors may be found at http://pol
ymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the po
lymer project is also\n * subject to an additional IP rights grant found at http
://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatcher =
scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n var pointerEvent
s = {\n events: [\n 'pointerdown',\n 'pointermove',\n 'pointer
up',\n 'pointercancel'\n ],\n prepareEvent: function(inEvent) {\n
var e = dispatcher.cloneEvent(inEvent);\n e._source = 'pointer';\n r
eturn e;\n },\n register: function(target) {\n dispatcher.listen(targ
et, this.events);\n },\n unregister: function(target) {\n dispatcher.
unlisten(target, this.events);\n },\n cleanup: function(id) {\n point
ermap['delete'](id);\n },\n pointerdown: function(inEvent) {\n var e
= this.prepareEvent(inEvent);\n e.target = scope.findTarget(inEvent);\n
pointermap.set(e.pointerId, e.target);\n dispatcher.down(e);\n },\n
pointermove: function(inEvent) {\n var target = pointermap.get(inEvent.poi
nterId);\n if (target) {\n var e = this.prepareEvent(inEvent);\n
e.target = target;\n dispatcher.move(e);\n }\n },\n pointe
rup: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.rel
atedTarget = scope.findTarget(inEvent);\n e.target = pointermap.get(e.point
erId);\n dispatcher.up(e);\n this.cleanup(inEvent.pointerId);\n },\
n pointercancel: function(inEvent) {\n var e = this.prepareEvent(inEvent
);\n e.relatedTarget = scope.findTarget(inEvent);\n e.target = pointer
map.get(e.pointerId);\n dispatcher.cancel(e);\n this.cleanup(inEvent.p
ointerId);\n }\n };\n\n scope.pointerEvents = pointerEvents;\n})(window.Pol
ymerGestures);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rig
hts reserved.\n * This code may only be used under the BSD style license found a
t http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be fo
und at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors
may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed
by Google as part of the polymer project is also\n * subject to an additional IP
rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This
module contains the handlers for native platform events.\n * From here, the dis
patcher is called to create unified pointer events.\n * Included are touch event
s (v1), mouse events, and MSPointerEvents.\n */\n(function(scope) {\n var dispa
tcher = scope.dispatcher;\n var nav = window.navigator;\n\n if (window.Pointer
Event) {\n dispatcher.registerSource('pointer', scope.pointerEvents);\n } el
se if (nav.msPointerEnabled) {\n dispatcher.registerSource('ms', scope.msEven
ts);\n } else {\n dispatcher.registerSource('mouse', scope.mouseEvents);\n
if (window.ontouchstart !== undefined) {\n dispatcher.registerSource('tou
ch', scope.touchEvents);\n /*\n * NOTE: an empty touch listener on bo
dy will reactivate nodes imported from templates with touch listeners\n *
Removing it will re-break the nodes\n *\n * Work around for https://
bugs.webkit.org/show_bug.cgi?id=135628\n */\n var isSafari = nav.user
Agent.match('Safari') && !nav.userAgent.match('Chrome');\n if (isSafari) {\
n document.body.addEventListener('touchstart', function(){});\n }\n
}\n }\n dispatcher.register(document, true);\n})(window.PolymerGestures);\n
\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n
* This code may only be used under the BSD style license found at http://polymer
.github.io/LICENSE.txt\n * The complete set of authors may be found at http://po
lymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at
http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as par
t of the polymer project is also\n * subject to an additional IP rights grant fo
und at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This event denotes t
he beginning of a series of tracking events.\n *\n * @module PointerGestures\n *
@submodule Events\n * @class trackstart\n */\n/**\n * Pixels moved in the x dir
ection since trackstart.\n * @type Number\n * @property dx\n */\n/**\n * Pixes m
oved in the y direction since trackstart.\n * @type Number\n * @property dy\n */
\n/**\n * Pixels moved in the x direction since the last track.\n * @type Number
\n * @property ddx\n */\n/**\n * Pixles moved in the y direction since the last
track.\n * @type Number\n * @property ddy\n */\n/**\n * The clientX position of
the track gesture.\n * @type Number\n * @property clientX\n */\n/**\n * The clie
ntY position of the track gesture.\n * @type Number\n * @property clientY\n */\n
/**\n * The pageX position of the track gesture.\n * @type Number\n * @property
pageX\n */\n/**\n * The pageY position of the track gesture.\n * @type Number\n
* @property pageY\n */\n/**\n * The screenX position of the track gesture.\n * @
type Number\n * @property screenX\n */\n/**\n * The screenY position of the trac
k gesture.\n * @type Number\n * @property screenY\n */\n/**\n * The last x axis
direction of the pointer.\n * @type Number\n * @property xDirection\n */\n/**\n
* The last y axis direction of the pointer.\n * @type Number\n * @property yDire
ction\n */\n/**\n * A shared object between all tracking events.\n * @type Objec
t\n * @property trackInfo\n */\n/**\n * The element currently under the pointer.
\n * @type Element\n * @property relatedTarget\n */\n/**\n * The type of pointer
that make the track gesture.\n * @type String\n * @property pointerType\n */\n/
**\n *\n * This event fires for all pointer movement being tracked.\n *\n * @cla
ss track\n * @extends trackstart\n */\n/**\n * This event fires when the pointer
is no longer being tracked.\n *\n * @class trackend\n * @extends trackstart\n *
/\n\n (function(scope) {\n var dispatcher = scope.dispatcher;\n var eventFac
tory = scope.eventFactory;\n var pointermap = new scope.PointerMap();\n var
track = {\n events: [\n 'down',\n 'move',\n 'up',\n ],
\n exposes: [\n 'trackstart',\n 'track',\n 'trackx',\n '
tracky',\n 'trackend'\n ],\n defaultActions: {\n 'track': 'no
ne',\n 'trackx': 'pan-y',\n 'tracky': 'pan-x'\n },\n WIGGLE_
THRESHOLD: 4,\n clampDir: function(inDelta) {\n return inDelta > 0 ? 1
: -1;\n },\n calcPositionDelta: function(inA, inB) {\n var x = 0,
y = 0;\n if (inA && inB) {\n x = inB.pageX - inA.pageX;\n
y = inB.pageY - inA.pageY;\n }\n return {x: x, y: y};\n },\n
fireTrack: function(inType, inEvent, inTrackingData) {\n var t = inTrack
ingData;\n var d = this.calcPositionDelta(t.downEvent, inEvent);\n v
ar dd = this.calcPositionDelta(t.lastMoveEvent, inEvent);\n if (dd.x) {\n
t.xDirection = this.clampDir(dd.x);\n } else if (inType === 'track
x') {\n return;\n }\n if (dd.y) {\n t.yDirection = t
his.clampDir(dd.y);\n } else if (inType === 'tracky') {\n return;\
n }\n var gestureProto = {\n bubbles: true,\n cancel
able: true,\n trackInfo: t.trackInfo,\n relatedTarget: inEvent.r
elatedTarget,\n pointerType: inEvent.pointerType,\n pointerId: i
nEvent.pointerId,\n _source: 'track'\n };\n if (inType !== '
tracky') {\n gestureProto.x = inEvent.x;\n gestureProto.dx = d.x
;\n gestureProto.ddx = dd.x;\n gestureProto.clientX = inEvent.cl
ientX;\n gestureProto.pageX = inEvent.pageX;\n gestureProto.scre
enX = inEvent.screenX;\n gestureProto.xDirection = t.xDirection;\n
}\n if (inType !== 'trackx') {\n gestureProto.dy = d.y;\n
gestureProto.ddy = dd.y;\n gestureProto.y = inEvent.y;\n gestur
eProto.clientY = inEvent.clientY;\n gestureProto.pageY = inEvent.pageY;\
n gestureProto.screenY = inEvent.screenY;\n gestureProto.yDirect
ion = t.yDirection;\n }\n var e = eventFactory.makeGestureEvent(inTy
pe, gestureProto);\n t.downTarget.dispatchEvent(e);\n },\n down: f
unction(inEvent) {\n if (inEvent.isPrimary && (inEvent.pointerType === 'mo
use' ? inEvent.buttons === 1 : true)) {\n var p = {\n downEven
t: inEvent,\n downTarget: inEvent.target,\n trackInfo: {},\n
lastMoveEvent: null,\n xDirection: 0,\n yDirectio
n: 0,\n tracking: false\n };\n pointermap.set(inEvent.
pointerId, p);\n }\n },\n move: function(inEvent) {\n var p
= pointermap.get(inEvent.pointerId);\n if (p) {\n if (!p.tracking)
{\n var d = this.calcPositionDelta(p.downEvent, inEvent);\n
var move = d.x * d.x + d.y * d.y;\n // start tracking only if finger
moves more than WIGGLE_THRESHOLD\n if (move > this.WIGGLE_THRESHOLD) {
\n p.tracking = true;\n p.lastMoveEvent = p.downEvent;\n
this.fireTrack('trackstart', inEvent, p);\n }\n }
\n if (p.tracking) {\n this.fireTrack('track', inEvent, p);\n
this.fireTrack('trackx', inEvent, p);\n this.fireTrack('trac
ky', inEvent, p);\n }\n p.lastMoveEvent = inEvent;\n }\n
},\n up: function(inEvent) {\n var p = pointermap.get(inEvent.point
erId);\n if (p) {\n if (p.tracking) {\n this.fireTrack('
trackend', inEvent, p);\n }\n pointermap.delete(inEvent.pointerI
d);\n }\n }\n };\n dispatcher.registerGesture('track', track);\n }
)(window.PolymerGestures);\n\n/*\n * Copyright (c) 2014 The Polymer Project Auth
ors. All rights reserved.\n * This code may only be used under the BSD style lic
ense found at http://polymer.github.io/LICENSE.txt\n * The complete set of autho
rs may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of
contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code
distributed by Google as part of the polymer project is also\n * subject to an a
dditional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n
/**\n * This event is fired when a pointer is held down for 200ms.\n *\n * @modu
le PointerGestures\n * @submodule Events\n * @class hold\n */\n/**\n * Type of p
ointer that made the holding event.\n * @type String\n * @property pointerType\n
*/\n/**\n * Screen X axis position of the held pointer\n * @type Number\n * @pr
operty clientX\n */\n/**\n * Screen Y axis position of the held pointer\n * @typ
e Number\n * @property clientY\n */\n/**\n * Type of pointer that made the holdi
ng event.\n * @type String\n * @property pointerType\n */\n/**\n * This event is
fired every 200ms while a pointer is held down.\n *\n * @class holdpulse\n * @e
xtends hold\n */\n/**\n * Milliseconds pointer has been held down.\n * @type Num
ber\n * @property holdTime\n */\n/**\n * This event is fired when a held pointer
is released or moved.\n *\n * @class release\n */\n\n(function(scope) {\n var
dispatcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var
hold = {\n // wait at least HOLD_DELAY ms between hold and pulse events\n
HOLD_DELAY: 200,\n // pointer can move WIGGLE_THRESHOLD pixels before not cou
nting as a hold\n WIGGLE_THRESHOLD: 16,\n events: [\n 'down',\n
'move',\n 'up',\n ],\n exposes: [\n 'hold',\n 'holdpulse',\
n 'release'\n ],\n heldPointer: null,\n holdJob: null,\n pulse:
function() {\n var hold = Date.now() - this.heldPointer.timeStamp;\n
var type = this.held ? 'holdpulse' : 'hold';\n this.fireHold(type, hold);\n
this.held = true;\n },\n cancel: function() {\n clearInterval(t
his.holdJob);\n if (this.held) {\n this.fireHold('release');\n
}\n this.held = false;\n this.heldPointer = null;\n this.target =
null;\n this.holdJob = null;\n },\n down: function(inEvent) {\n
if (inEvent.isPrimary && !this.heldPointer) {\n this.heldPointer = inEve
nt;\n this.target = inEvent.target;\n this.holdJob = setInterval(t
his.pulse.bind(this), this.HOLD_DELAY);\n }\n },\n up: function(inEve
nt) {\n if (this.heldPointer && this.heldPointer.pointerId === inEvent.poin
terId) {\n this.cancel();\n }\n },\n move: function(inEvent) {
\n if (this.heldPointer && this.heldPointer.pointerId === inEvent.pointerId
) {\n var x = inEvent.clientX - this.heldPointer.clientX;\n var y
= inEvent.clientY - this.heldPointer.clientY;\n if ((x * x + y * y) > thi
s.WIGGLE_THRESHOLD) {\n this.cancel();\n }\n }\n },\n
fireHold: function(inType, inHoldTime) {\n var p = {\n bubbles: tru
e,\n cancelable: true,\n pointerType: this.heldPointer.pointerType
,\n pointerId: this.heldPointer.pointerId,\n x: this.heldPointer.c
lientX,\n y: this.heldPointer.clientY,\n _source: 'hold'\n };
\n if (inHoldTime) {\n p.holdTime = inHoldTime;\n }\n var
e = eventFactory.makeGestureEvent(inType, p);\n this.target.dispatchEvent(e
);\n }\n };\n dispatcher.registerGesture('hold', hold);\n})(window.PolymerG
estures);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights r
eserved.\n * This code may only be used under the BSD style license found at htt
p://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found a
t http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may
be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Go
ogle as part of the polymer project is also\n * subject to an additional IP righ
ts grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This even
t is fired when a pointer quickly goes down and up, and is used to\n * denote ac
tivation.\n *\n * Any gesture event can prevent the tap event from being created
by calling\n * `event.preventTap`.\n *\n * Any pointer event can prevent the ta
p by setting the `tapPrevented` property\n * on itself.\n *\n * @module PointerG
estures\n * @submodule Events\n * @class tap\n */\n/**\n * X axis position of th
e tap.\n * @property x\n * @type Number\n */\n/**\n * Y axis position of the tap
.\n * @property y\n * @type Number\n */\n/**\n * Type of the pointer that made t
he tap.\n * @property pointerType\n * @type String\n */\n(function(scope) {\n v
ar dispatcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n v
ar pointermap = new scope.PointerMap();\n var tap = {\n events: [\n 'do
wn',\n 'up'\n ],\n exposes: [\n 'tap'\n ],\n down: functio
n(inEvent) {\n if (inEvent.isPrimary && !inEvent.tapPrevented) {\n p
ointermap.set(inEvent.pointerId, {\n target: inEvent.target,\n
buttons: inEvent.buttons,\n x: inEvent.clientX,\n y: inEvent.
clientY\n });\n }\n },\n shouldTap: function(e, downState) {\n
if (e.pointerType === 'mouse') {\n // only allow left click to tap
for mouse\n return downState.buttons === 1;\n }\n return !e.tap
Prevented;\n },\n up: function(inEvent) {\n var start = pointermap.ge
t(inEvent.pointerId);\n if (start && this.shouldTap(inEvent, start)) {\n
// up.relatedTarget is target currently under finger\n var t = scope
.targetFinding.LCA(start.target, inEvent.relatedTarget);\n if (t) {\n
var e = eventFactory.makeGestureEvent('tap', {\n bubbles: true,
\n cancelable: true,\n x: inEvent.clientX,\n y:
inEvent.clientY,\n detail: inEvent.detail,\n pointerType:
inEvent.pointerType,\n pointerId: inEvent.pointerId,\n al
tKey: inEvent.altKey,\n ctrlKey: inEvent.ctrlKey,\n metaKe
y: inEvent.metaKey,\n shiftKey: inEvent.shiftKey,\n _sourc
e: 'tap'\n });\n t.dispatchEvent(e);\n }\n }\n
pointermap.delete(inEvent.pointerId);\n }\n };\n // patch eventFactory to
remove id from tap's pointermap for preventTap calls\n eventFactory.preventTap
= function(e) {\n return function() {\n e.tapPrevented = true;\n p
ointermap.delete(e.pointerId);\n };\n };\n dispatcher.registerGesture('tap'
, tap);\n})(window.PolymerGestures);\n\n/*\n Copyright (C) 2013 Ariya Hidayat <
ariya.hidayat@gmail.com>\n Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.co
m>\n Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyright (C
) 2012 Mathias Bynens <mathias@qiwi.be>\n Copyright (C) 2012 Joost-Wim Boekeste
ijn <joost-wim@boekesteijn.nl>\n Copyright (C) 2012 Kris Kowal <kris.kowal@cixa
r.com>\n Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n Copyright
(C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n Copyright (C) 2011 Ariya
Hidayat <ariya.hidayat@gmail.com>\n\n Redistribution and use in source and bina
ry forms, with or without\n modification, are permitted provided that the follo
wing conditions are met:\n\n * Redistributions of source code must retain the
above copyright\n notice, this list of conditions and the following discla
imer.\n * Redistributions in binary form must reproduce the above copyright\n
notice, this list of conditions and the following disclaimer in the\n
documentation and/or other materials provided with the distribution.\n\n THIS
SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCL
AIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n DIRECT, INDIREC
T, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT N
OT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA
, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF L
IABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENC
E OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF A
DVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function (global) {\n 'use
strict';\n\n var Token,\n TokenName,\n Syntax,\n Message
s,\n source,\n index,\n length,\n delegate,\n
lookahead,\n state;\n\n Token = {\n BooleanLiteral: 1,\n
EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLiteral: 5,\
n NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral: 8\n
};\n\n TokenName = {};\n TokenName[Token.BooleanLiteral] = 'Boolean';\n
TokenName[Token.EOF] = '<end>';\n TokenName[Token.Identifier] = 'Identifi
er';\n TokenName[Token.Keyword] = 'Keyword';\n TokenName[Token.NullLiteral
] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric';\n TokenName[Tok
en.Punctuator] = 'Punctuator';\n TokenName[Token.StringLiteral] = 'String';\n
\n Syntax = {\n ArrayExpression: 'ArrayExpression',\n BinaryExp
ression: 'BinaryExpression',\n CallExpression: 'CallExpression',\n
ConditionalExpression: 'ConditionalExpression',\n EmptyStatement: 'Empty
Statement',\n ExpressionStatement: 'ExpressionStatement',\n Identi
fier: 'Identifier',\n Literal: 'Literal',\n LabeledStatement: 'Lab
eledStatement',\n LogicalExpression: 'LogicalExpression',\n Member
Expression: 'MemberExpression',\n ObjectExpression: 'ObjectExpression',\n
Program: 'Program',\n Property: 'Property',\n ThisExpressi
on: 'ThisExpression',\n UnaryExpression: 'UnaryExpression'\n };\n\n
// Error messages should be identical to V8.\n Messages = {\n Unexpec
tedToken: 'Unexpected token %0',\n UnknownLabel: 'Undefined label \\'%0\
\'',\n Redeclaration: '%0 \\'%1\\' has already been declared'\n };\n\n
// Ensure the condition is true, otherwise throw an error.\n // This is o
nly to have a better contract semantic, i.e. another safety net\n // to catch
a logic error. The condition shall be fulfilled in normal case.\n // Do NOT
use this to enforce a certain condition on any user input.\n\n function asser
t(condition, message) {\n if (!condition) {\n throw new Error(
'ASSERT: ' + message);\n }\n }\n\n function isDecimalDigit(ch) {\n
return (ch >= 48 && ch <= 57); // 0..9\n }\n\n\n // 7.2 White Spa
ce\n\n function isWhiteSpace(ch) {\n return (ch === 32) || // space\n
(ch === 9) || // tab\n (ch === 0xB) ||\n
(ch === 0xC) ||\n (ch === 0xA0) ||\n (ch >= 0x1680 && '\\u
1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u200
9\\u200A\\u202F\\u205F\\u3000\\uFEFF'.indexOf(String.fromCharCode(ch)) > 0);\n
}\n\n // 7.3 Line Terminators\n\n function isLineTerminator(ch) {\n
return (ch === 10) || (ch === 13) || (ch === 0x2028) || (ch === 0x2029);\n
}\n\n // 7.6 Identifier Names and Identifiers\n\n function isIdentifierSt
art(ch) {\n return (ch === 36) || (ch === 95) || // $ (dollar) and _ (un
derscore)\n (ch >= 65 && ch <= 90) || // A..Z\n (c
h >= 97 && ch <= 122); // a..z\n }\n\n function isIdentifierPart(
ch) {\n return (ch === 36) || (ch === 95) || // $ (dollar) and _ (unders
core)\n (ch >= 65 && ch <= 90) || // A..Z\n (ch >=
97 && ch <= 122) || // a..z\n (ch >= 48 && ch <= 57);
// 0..9\n }\n\n // 7.6.1.1 Keywords\n\n function isKeyword(id) {\n
return (id === 'this')\n }\n\n // 7.4 Comments\n\n function skipW
hitespace() {\n while (index < length && isWhiteSpace(source.charCodeAt(i
ndex))) {\n ++index;\n }\n }\n\n function getIdentifier()
{\n var start, ch;\n\n start = index++;\n while (index < l
ength) {\n ch = source.charCodeAt(index);\n if (isIdentifi
erPart(ch)) {\n ++index;\n } else {\n b
reak;\n }\n }\n\n return source.slice(start, index);\n
}\n\n function scanIdentifier() {\n var start, id, type;\n\n
start = index;\n\n id = getIdentifier();\n\n // There is no keywo
rd or literal with only one character.\n // Thus, it must be an identifie
r.\n if (id.length === 1) {\n type = Token.Identifier;\n
} else if (isKeyword(id)) {\n type = Token.Keyword;\n } else
if (id === 'null') {\n type = Token.NullLiteral;\n } else if
(id === 'true' || id === 'false') {\n type = Token.BooleanLiteral;\n
} else {\n type = Token.Identifier;\n }\n\n retu
rn {\n type: type,\n value: id,\n range: [start
, index]\n };\n }\n\n\n // 7.7 Punctuators\n\n function scanPunc
tuator() {\n var start = index,\n code = source.charCodeAt(ind
ex),\n code2,\n ch1 = source[index],\n ch2;\n\n
switch (code) {\n\n // Check for most common single-character pun
ctuators.\n case 46: // . dot\n case 40: // ( open bracket\n
case 41: // ) close bracket\n case 59: // ; semicolon\n
case 44: // , comma\n case 123: // { open curly brace\n case 12
5: // } close curly brace\n case 91: // [\n case 93: // ]\n
case 58: // :\n case 63: // ?\n ++index;\n
return {\n type: Token.Punctuator,\n value: Stri
ng.fromCharCode(code),\n range: [start, index]\n };\n\
n default:\n code2 = source.charCodeAt(index + 1);\n\n
// '=' (char #61) marks an assignment or comparison operator.\n i
f (code2 === 61) {\n switch (code) {\n case 37: /
/ %\n case 38: // &\n case 42: // *:\n
case 43: // +\n case 45: // -\n case 47:
// /\n case 60: // <\n case 62: // >\n
case 124: // |\n index += 2;\n retur
n {\n type: Token.Punctuator,\n va
lue: String.fromCharCode(code) + String.fromCharCode(code2),\n
range: [start, index]\n };\n\n case 33:
// !\n case 61: // =\n index += 2;\n\n
// !== and ===\n if (source.charCodeAt(index) ===
61) {\n ++index;\n }\n
return {\n type: Token.Punctuator,\n
value: source.slice(start, index),\n range: [star
t, index]\n };\n default:\n
break;\n }\n }\n break;\n }\n\n
// Peek more characters.\n\n ch2 = source[index + 1];\n\n // O
ther 2-character punctuators: && ||\n\n if (ch1 === ch2 && ('&|'.indexOf(
ch1) >= 0)) {\n index += 2;\n return {\n ty
pe: Token.Punctuator,\n value: ch1 + ch2,\n range:
[start, index]\n };\n }\n\n if ('<>=!+-*%&|^/'.indexOf
(ch1) >= 0) {\n ++index;\n return {\n type:
Token.Punctuator,\n value: ch1,\n range: [start,
index]\n };\n }\n\n throwError({}, Messages.UnexpectedT
oken, 'ILLEGAL');\n }\n\n // 7.8.3 Numeric Literals\n function scanNume
ricLiteral() {\n var number, start, ch;\n\n ch = source[index];\n
assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n 'Nu
meric literal must start with a decimal digit or a decimal point');\n\n s
tart = index;\n number = '';\n if (ch !== '.') {\n numb
er = source[index++];\n ch = source[index];\n\n // Hex num
ber starts with '0x'.\n // Octal number starts with '0'.\n
if (number === '0') {\n // decimal number starts with '0' such a
s '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0)))
{\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n
}\n }\n\n while (isDecimalDigit(source.charCo
deAt(index))) {\n number += source[index++];\n }\n
ch = source[index];\n }\n\n if (ch === '.') {\n
number += source[index++];\n while (isDecimalDigit(source.charCodeAt
(index))) {\n number += source[index++];\n }\n
ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n
number += source[index++];\n\n ch = source[index];\n
if (ch === '+' || ch === '-') {\n number += source[index++]
;\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n
while (isDecimalDigit(source.charCodeAt(index))) {\n
number += source[index++];\n }\n } else {\n
throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\
n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n
throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n
return {\n type: Token.NumericLiteral,\n value: parseFloa
t(number),\n range: [start, index]\n };\n }\n\n // 7.8.4
String Literals\n\n function scanStringLiteral() {\n var str = '', qu
ote, start, ch, octal = false;\n\n quote = source[index];\n assert
((quote === '\\'' || quote === '\"'),\n 'String literal must starts w
ith a quote');\n\n start = index;\n ++index;\n\n while (ind
ex < length) {\n ch = source[index++];\n\n if (ch === quot
e) {\n quote = '';\n break;\n } else if
(ch === '\\\\') {\n ch = source[index++];\n if (!
ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\
n case 'n':\n str += '\\n';\n
break;\n case 'r':\n st
r += '\\r';\n break;\n case 't':\n
str += '\\t';\n break;\n
case 'b':\n str += '\\b';\n
break;\n case 'f':\n str += '\\f';\n
break;\n case 'v':\n
str += '\\x0B';\n break;\n\n def
ault:\n str += ch;\n break;\n
}\n } else {\n if (ch === '\\r
' && source[index] === '\\n') {\n ++index;\n
}\n }\n } else if (isLineTerminator(ch.charCode
At(0))) {\n break;\n } else {\n str +=
ch;\n }\n }\n\n if (quote !== '') {\n throwE
rror({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n return {\n
type: Token.StringLiteral,\n value: str,\n octa
l: octal,\n range: [start, index]\n };\n }\n\n function
isIdentifierName(token) {\n return token.type === Token.Identifier ||\n
token.type === Token.Keyword ||\n token.type === Token.Bool
eanLiteral ||\n token.type === Token.NullLiteral;\n }\n\n funct
ion advance() {\n var ch;\n\n skipWhitespace();\n\n if (ind
ex >= length) {\n return {\n type: Token.EOF,\n
range: [index, index]\n };\n }\n\n ch = source
.charCodeAt(index);\n\n // Very common: ( and ) and ;\n if (ch ===
40 || ch === 41 || ch === 58) {\n return scanPunctuator();\n
}\n\n // String literal starts with single quote (#39) or double quote (#
34).\n if (ch === 39 || ch === 34) {\n return scanStringLitera
l();\n }\n\n if (isIdentifierStart(ch)) {\n return scan
Identifier();\n }\n\n // Dot (.) char #46 can also start a floatin
g-point number, hence the need\n // to check the next character.\n
if (ch === 46) {\n if (isDecimalDigit(source.charCodeAt(index + 1)))
{\n return scanNumericLiteral();\n }\n ret
urn scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n
return scanNumericLiteral();\n }\n\n return scanPunctuator();\n
}\n\n function lex() {\n var token;\n\n token = lookahead;\
n index = token.range[1];\n\n lookahead = advance();\n\n in
dex = token.range[1];\n\n return token;\n }\n\n function peek() {\n
var pos;\n\n pos = index;\n lookahead = advance();\n
index = pos;\n }\n\n // Throw an exception\n\n function throwError(to
ken, messageFormat) {\n var error,\n args = Array.prototype.sl
ice.call(arguments, 2),\n msg = messageFormat.replace(\n
/%(\\d)/g,\n function (whole, index) {\n as
sert(index < args.length, 'Message reference must be in range');\n
return args[index];\n }\n );\n\n error =
new Error(msg);\n error.index = index;\n error.description = msg;\
n throw error;\n }\n\n // Throw an exception because of the token.\
n\n function throwUnexpected(token) {\n throwError(token, Messages.Une
xpectedToken, token.value);\n }\n\n // Expect the next token to match the
specified punctuator.\n // If not, an exception will be thrown.\n\n functi
on expect(value) {\n var token = lex();\n if (token.type !== Token
.Punctuator || token.value !== value) {\n throwUnexpected(token);\n
}\n }\n\n // Return true if the next token matches the specified pun
ctuator.\n\n function match(value) {\n return lookahead.type === Token
.Punctuator && lookahead.value === value;\n }\n\n // Return true if the ne
xt token matches the specified keyword\n\n function matchKeyword(keyword) {\n
return lookahead.type === Token.Keyword && lookahead.value === keyword;\
n }\n\n function consumeSemicolon() {\n // Catch the very common ca
se first: immediately a semicolon (char #59).\n if (source.charCodeAt(ind
ex) === 59) {\n lex();\n return;\n }\n\n ski
pWhitespace();\n\n if (match(';')) {\n lex();\n ret
urn;\n }\n\n if (lookahead.type !== Token.EOF && !match('}')) {\n
throwUnexpected(lookahead);\n }\n }\n\n // 11.1.4 Array
Initialiser\n\n function parseArrayInitialiser() {\n var elements = []
;\n\n expect('[');\n\n while (!match(']')) {\n if (matc
h(',')) {\n lex();\n elements.push(null);\n
} else {\n elements.push(parseExpression());\n\n
if (!match(']')) {\n expect(',');\n }\n
}\n }\n\n expect(']');\n\n return delegate.createA
rrayExpression(elements);\n }\n\n // 11.1.5 Object Initialiser\n\n func
tion parseObjectPropertyKey() {\n var token;\n\n skipWhitespace();
\n token = lex();\n\n // Note: This function is called only from p
arseObjectProperty(), where\n // EOF and Punctuator tokens are already fi
ltered out.\n if (token.type === Token.StringLiteral || token.type === To
ken.NumericLiteral) {\n return delegate.createLiteral(token);\n
}\n\n return delegate.createIdentifier(token.value);\n }\n\n func
tion parseObjectProperty() {\n var token, key;\n\n token = lookahe
ad;\n skipWhitespace();\n\n if (token.type === Token.EOF || token.
type === Token.Punctuator) {\n throwUnexpected(token);\n }\n\n
key = parseObjectPropertyKey();\n expect(':');\n return de
legate.createProperty('init', key, parseExpression());\n }\n\n function pa
rseObjectInitialiser() {\n var properties = [];\n\n expect('{');\n
\n while (!match('}')) {\n properties.push(parseObjectProperty
());\n\n if (!match('}')) {\n expect(',');\n
}\n }\n\n expect('}');\n\n return delegate.createObjectEx
pression(properties);\n }\n\n // 11.1.6 The Grouping Operator\n\n funct
ion parseGroupExpression() {\n var expr;\n\n expect('(');\n\n
expr = parseExpression();\n\n expect(')');\n\n return expr;\n
}\n\n\n // 11.1 Primary Expressions\n\n function parsePrimaryExpression(
) {\n var type, token, expr;\n\n if (match('(')) {\n re
turn parseGroupExpression();\n }\n\n type = lookahead.type;\n\n
if (type === Token.Identifier) {\n expr = delegate.createIdentif
ier(lex().value);\n } else if (type === Token.StringLiteral || type === T
oken.NumericLiteral) {\n expr = delegate.createLiteral(lex());\n
} else if (type === Token.Keyword) {\n if (matchKeyword('this')) {
\n lex();\n expr = delegate.createThisExpression()
;\n }\n } else if (type === Token.BooleanLiteral) {\n
token = lex();\n token.value = (token.value === 'true');\n
expr = delegate.createLiteral(token);\n } else if (type === Token.Nul
lLiteral) {\n token = lex();\n token.value = null;\n
expr = delegate.createLiteral(token);\n } else if (match('[')) {\n
expr = parseArrayInitialiser();\n } else if (match('{')) {\n
expr = parseObjectInitialiser();\n }\n\n if (expr) {\n
return expr;\n }\n\n throwUnexpected(lex());\n }\n\n
// 11.2 Left-Hand-Side Expressions\n\n function parseArguments() {\n
var args = [];\n\n expect('(');\n\n if (!match(')')) {\n
while (index < length) {\n args.push(parseExpression());\n
if (match(')')) {\n break;\n }\n
expect(',');\n }\n }\n\n expect(')');\n\
n return args;\n }\n\n function parseNonComputedProperty() {\n
var token;\n\n token = lex();\n\n if (!isIdentifierName(token))
{\n throwUnexpected(token);\n }\n\n return delegate.cr
eateIdentifier(token.value);\n }\n\n function parseNonComputedMember() {\n
expect('.');\n\n return parseNonComputedProperty();\n }\n\n
function parseComputedMember() {\n var expr;\n\n expect('[');\n\n
expr = parseExpression();\n\n expect(']');\n\n return expr
;\n }\n\n function parseLeftHandSideExpression() {\n var expr, args
, property;\n\n expr = parsePrimaryExpression();\n\n while (true)
{\n if (match('[')) {\n property = parseComputedMember
();\n expr = delegate.createMemberExpression('[', expr, property)
;\n } else if (match('.')) {\n property = parseNonComp
utedMember();\n expr = delegate.createMemberExpression('.', expr,
property);\n } else if (match('(')) {\n args = parseA
rguments();\n expr = delegate.createCallExpression(expr, args);\n
} else {\n break;\n }\n }\n\n
return expr;\n }\n\n // 11.3 Postfix Expressions\n\n var parsePostfix
Expression = parseLeftHandSideExpression;\n\n // 11.4 Unary Operators\n\n
function parseUnaryExpression() {\n var token, expr;\n\n if (looka
head.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\n
expr = parsePostfixExpression();\n } else if (match('+') || match('-')
|| match('!')) {\n token = lex();\n expr = parseUnaryExpr
ession();\n expr = delegate.createUnaryExpression(token.value, expr);
\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyw
ord('typeof')) {\n throwError({}, Messages.UnexpectedToken);\n
} else {\n expr = parsePostfixExpression();\n }\n\n re
turn expr;\n }\n\n function binaryPrecedence(token) {\n var prec =
0;\n\n if (token.type !== Token.Punctuator && token.type !== Token.Keywor
d) {\n return 0;\n }\n\n switch (token.value) {\n
case '||':\n prec = 1;\n break;\n\n case '&&':\n
prec = 2;\n break;\n\n case '==':\n case '!=
':\n case '===':\n case '!==':\n prec = 6;\n
break;\n\n case '<':\n case '>':\n case '<=':\n cas
e '>=':\n case 'instanceof':\n prec = 7;\n break;\n
\n case 'in':\n prec = 7;\n break;\n\n case
'+':\n case '-':\n prec = 9;\n break;\n\n ca
se '*':\n case '/':\n case '%':\n prec = 11;\n
break;\n\n default:\n break;\n }\n\n return p
rec;\n }\n\n // 11.5 Multiplicative Operators\n // 11.6 Additive Operat
ors\n // 11.7 Bitwise Shift Operators\n // 11.8 Relational Operators\n
// 11.9 Equality Operators\n // 11.10 Binary Bitwise Operators\n // 11.11
Binary Logical Operators\n\n function parseBinaryExpression() {\n var
expr, token, prec, stack, right, operator, left, i;\n\n left = parseUnary
Expression();\n\n token = lookahead;\n prec = binaryPrecedence(tok
en);\n if (prec === 0) {\n return left;\n }\n to
ken.prec = prec;\n lex();\n\n right = parseUnaryExpression();\n\n
stack = [left, token, right];\n\n while ((prec = binaryPrecedence(
lookahead)) > 0) {\n\n // Reduce: make a binary expression from the t
hree topmost entries.\n while ((stack.length > 2) && (prec <= stack[s
tack.length - 2].prec)) {\n right = stack.pop();\n
operator = stack.pop().value;\n left = stack.pop();\n
expr = delegate.createBinaryExpression(operator, left, right);\n
stack.push(expr);\n }\n\n // Shift.\n toke
n = lex();\n token.prec = prec;\n stack.push(token);\n
expr = parseUnaryExpression();\n stack.push(expr);\n }
\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1
;\n expr = stack[i];\n while (i > 1) {\n expr = delegat
e.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i
-= 2;\n }\n\n return expr;\n }\n\n\n // 11.12 Conditional O
perator\n\n function parseConditionalExpression() {\n var expr, conseq
uent, alternate;\n\n expr = parseBinaryExpression();\n\n if (match
('?')) {\n lex();\n consequent = parseConditionalExpressio
n();\n expect(':');\n alternate = parseConditionalExpressi
on();\n\n expr = delegate.createConditionalExpression(expr, consequen
t, alternate);\n }\n\n return expr;\n }\n\n // Simplificatio
n since we do not support AssignmentExpression.\n var parseExpression = parse
ConditionalExpression;\n\n // Polymer Syntax extensions\n\n // Filter ::\n
// Identifier\n // Identifier \"(\" \")\"\n // Identifier \"(\"
FilterArguments \")\"\n\n function parseFilter() {\n var identifier, a
rgs;\n\n identifier = lex();\n\n if (identifier.type !== Token.Ide
ntifier) {\n throwUnexpected(identifier);\n }\n\n args
= match('(') ? parseArguments() : [];\n\n return delegate.createFilter(id
entifier.value, args);\n }\n\n // Filters ::\n // \"|\" Filter\n /
/ Filters \"|\" Filter\n\n function parseFilters() {\n while (match(
'|')) {\n lex();\n parseFilter();\n }\n }\n\n
// TopLevel ::\n // LabelledExpressions\n // AsExpression\n // I
nExpression\n // FilterExpression\n\n // AsExpression ::\n // Filte
rExpression as Identifier\n\n // InExpression ::\n // Identifier, Identi
fier in FilterExpression\n // Identifier in FilterExpression\n\n // Filt
erExpression ::\n // Expression\n // Expression Filters\n\n functio
n parseTopLevel() {\n skipWhitespace();\n peek();\n\n var e
xpr = parseExpression();\n if (expr) {\n if (lookahead.value =
== ',' || lookahead.value == 'in' &&\n expr.type === Synta
x.Identifier) {\n parseInExpression(expr);\n } else {\
n parseFilters();\n if (lookahead.value === 'as')
{\n parseAsExpression(expr);\n } else {\n
delegate.createTopLevel(expr);\n }\n }\
n }\n\n if (lookahead.type !== Token.EOF) {\n throwUnex
pected(lookahead);\n }\n }\n\n function parseAsExpression(expr) {\n
lex(); // as\n var identifier = lex().value;\n delegate.c
reateAsExpression(expr, identifier);\n }\n\n function parseInExpression(id
entifier) {\n var indexName;\n if (lookahead.value === ',') {\n
lex();\n if (lookahead.type !== Token.Identifier)\n
throwUnexpected(lookahead);\n indexName = lex().value;\n
}\n\n lex(); // in\n var expr = parseExpression();\n par
seFilters();\n delegate.createInExpression(identifier.name, indexName, ex
pr);\n }\n\n function parse(code, inDelegate) {\n delegate = inDele
gate;\n source = code;\n index = 0;\n length = source.lengt
h;\n lookahead = null;\n state = {\n labelSet: {}\n
};\n\n return parseTopLevel();\n }\n\n global.esprima = {\n
parse: parse\n };\n})(this);\n\n// Copyright (c) 2014 The Polymer Project
Authors. All rights reserved.\n// This code may only be used under the BSD styl
e license found at http://polymer.github.io/LICENSE.txt\n// The complete set of
authors may be found at http://polymer.github.io/AUTHORS.txt\n// The complete se
t of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n//
Code distributed by Google as part of the polymer project is also\n// subject to
an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n\n
(function (global) {\n 'use strict';\n\n function prepareBinding(expressionTex
t, name, node, filterRegistry) {\n var expression;\n try {\n expressi
on = getExpression(expressionText);\n if (expression.scopeIdent &&\n
(node.nodeType !== Node.ELEMENT_NODE ||\n node.tagName !== 'TEMPLAT
E' ||\n (name !== 'bind' && name !== 'repeat'))) {\n throw Erro
r('as and in can only be used within <template bind/repeat>');\n }\n } c
atch (ex) {\n console.error('Invalid expression syntax: ' + expressionText,
ex);\n return;\n }\n\n return function(model, node, oneTime) {\n
var binding = expression.getBinding(model, filterRegistry, oneTime);\n if
(expression.scopeIdent && binding) {\n node.polymerExpressionScopeIdent_
= expression.scopeIdent;\n if (expression.indexIdent)\n node.po
lymerExpressionIndexIdent_ = expression.indexIdent;\n }\n\n return bin
ding;\n }\n }\n\n // TODO(rafaelw): Implement simple LRU.\n var expression
ParseCache = Object.create(null);\n\n function getExpression(expressionText) {\
n var expression = expressionParseCache[expressionText];\n if (!expression
) {\n var delegate = new ASTDelegate();\n esprima.parse(expressionText
, delegate);\n expression = new Expression(delegate);\n expressionPars
eCache[expressionText] = expression;\n }\n return expression;\n }\n\n fu
nction Literal(value) {\n this.value = value;\n this.valueFn_ = undefined;
\n }\n\n Literal.prototype = {\n valueFn: function() {\n if (!this.val
ueFn_) {\n var value = this.value;\n this.valueFn_ = function() {\
n return value;\n }\n }\n\n return this.valueFn_;\n
}\n }\n\n function IdentPath(name) {\n this.name = name;\n this.path =
Path.get(name);\n }\n\n IdentPath.prototype = {\n valueFn: function() {\n
if (!this.valueFn_) {\n var name = this.name;\n var path = thi
s.path;\n this.valueFn_ = function(model, observer) {\n if (obse
rver)\n observer.addPath(model, path);\n\n return path.getVa
lueFrom(model);\n }\n }\n\n return this.valueFn_;\n },\n\n
setValue: function(model, newValue) {\n if (this.path.length == 1);\n
model = findScope(model, this.path[0]);\n\n return this.path.setValueFr
om(model, newValue);\n }\n };\n\n function MemberExpression(object, propert
y, accessor) {\n this.computed = accessor == '[';\n\n this.dynamicDeps = t
ypeof object == 'function' ||\n object.dynamicDeps ||\n
(this.computed && !(property instanceof Literal));\n\n th
is.simplePath =\n !this.dynamicDeps &&\n (property instanceof Iden
tPath || property instanceof Literal) &&\n (object instanceof MemberExpre
ssion || object instanceof IdentPath);\n\n this.object = this.simplePath ? ob
ject : getFn(object);\n this.property = !this.computed || this.simplePath ?\n
property : getFn(property);\n }\n\n MemberExpression.prototype = {\n
get fullPath() {\n if (!this.fullPath_) {\n\n var parts = this.obj
ect instanceof MemberExpression ?\n this.object.fullPath.slice() : [t
his.object.name];\n parts.push(this.property instanceof IdentPath ?\n
this.property.name : this.property.value);\n this.fullPath_ = Pat
h.get(parts);\n }\n\n return this.fullPath_;\n },\n\n valueFn: f
unction() {\n if (!this.valueFn_) {\n var object = this.object;\n\n
if (this.simplePath) {\n var path = this.fullPath;\n\n
this.valueFn_ = function(model, observer) {\n if (observer)\n
observer.addPath(model, path);\n\n return path.getValueFrom(mod
el);\n };\n } else if (!this.computed) {\n var path = P
ath.get(this.property.name);\n\n this.valueFn_ = function(model, observ
er, filterRegistry) {\n var context = object(model, observer, filterR
egistry);\n\n if (observer)\n observer.addPath(context,
path);\n\n return path.getValueFrom(context);\n }\n }
else {\n // Computed property.\n var property = this.property
;\n\n this.valueFn_ = function(model, observer, filterRegistry) {\n
var context = object(model, observer, filterRegistry);\n var
propName = property(model, observer, filterRegistry);\n if (observer)
\n observer.addPath(context, [propName]);\n\n return con
text ? context[propName] : undefined;\n };\n }\n }\n r
eturn this.valueFn_;\n },\n\n setValue: function(model, newValue) {\n
if (this.simplePath) {\n this.fullPath.setValueFrom(model, newValue);\n
return newValue;\n }\n\n var object = this.object(model);\n
var propName = this.property instanceof IdentPath ? this.property.name :\n
this.property(model);\n return object[propName] = newValue;\n }\n
};\n\n function Filter(name, args) {\n this.name = name;\n this.args = [
];\n for (var i = 0; i < args.length; i++) {\n this.args[i] = getFn(args
[i]);\n }\n }\n\n Filter.prototype = {\n transform: function(model, obse
rver, filterRegistry, toModelDirection,\n initialArgs) {\
n var fn = filterRegistry[this.name];\n var context = model;\n if
(fn) {\n context = undefined;\n } else {\n fn = context[this
.name];\n if (!fn) {\n console.error('Cannot find function or fi
lter: ' + this.name);\n return;\n }\n }\n\n // If toMo
delDirection is falsey, then the \"normal\" (dom-bound) direction\n // is u
sed. Otherwise, it looks for a 'toModel' property function on the\n // obje
ct.\n if (toModelDirection) {\n fn = fn.toModel;\n } else if (t
ypeof fn.toDOM == 'function') {\n fn = fn.toDOM;\n }\n\n if (ty
peof fn != 'function') {\n console.error('Cannot find function or filter:
' + this.name);\n return;\n }\n\n var args = initialArgs || []
;\n for (var i = 0; i < this.args.length; i++) {\n args.push(getFn(t
his.args[i])(model, observer, filterRegistry));\n }\n\n return fn.appl
y(context, args);\n }\n };\n\n function notImplemented() { throw Error('Not
Implemented'); }\n\n var unaryOperators = {\n '+': function(v) { return +v;
},\n '-': function(v) { return -v; },\n '!': function(v) { return !v; }\n
};\n\n var binaryOperators = {\n '+': function(l, r) { return l+r; },\n
'-': function(l, r) { return l-r; },\n '*': function(l, r) { return l*r; },\
n '/': function(l, r) { return l/r; },\n '%': function(l, r) { return l%r;
},\n '<': function(l, r) { return l<r; },\n '>': function(l, r) { return
l>r; },\n '<=': function(l, r) { return l<=r; },\n '>=': function(l, r) {
return l>=r; },\n '==': function(l, r) { return l==r; },\n '!=': function(
l, r) { return l!=r; },\n '===': function(l, r) { return l===r; },\n '!=='
: function(l, r) { return l!==r; },\n '&&': function(l, r) { return l&&r; },\
n '||': function(l, r) { return l||r; },\n };\n\n function getFn(arg) {\n
return typeof arg == 'function' ? arg : arg.valueFn();\n }\n\n function ASTD
elegate() {\n this.expression = null;\n this.filters = [];\n this.deps
= {};\n this.currentPath = undefined;\n this.scopeIdent = undefined;\n
this.indexIdent = undefined;\n this.dynamicDeps = false;\n }\n\n ASTDelegat
e.prototype = {\n createUnaryExpression: function(op, argument) {\n if (
!unaryOperators[op])\n throw Error('Disallowed operator: ' + op);\n\n
argument = getFn(argument);\n\n return function(model, observer, filterRe
gistry) {\n return unaryOperators[op](argument(model, observer, filterReg
istry));\n };\n },\n\n createBinaryExpression: function(op, left, rig
ht) {\n if (!binaryOperators[op])\n throw Error('Disallowed operator
: ' + op);\n\n left = getFn(left);\n right = getFn(right);\n\n sw
itch (op) {\n case '||':\n this.dynamicDeps = true;\n r
eturn function(model, observer, filterRegistry) {\n return left(model
, observer, filterRegistry) ||\n right(model, observer, filterReg
istry);\n };\n case '&&':\n this.dynamicDeps = true;\n
return function(model, observer, filterRegistry) {\n return
left(model, observer, filterRegistry) &&\n right(model, observer,
filterRegistry);\n };\n }\n\n return function(model, observe
r, filterRegistry) {\n return binaryOperators[op](left(model, observer, f
ilterRegistry),\n right(model, observer, filte
rRegistry));\n };\n },\n\n createConditionalExpression: function(test
, consequent, alternate) {\n test = getFn(test);\n consequent = getFn(
consequent);\n alternate = getFn(alternate);\n\n this.dynamicDeps = tr
ue;\n\n return function(model, observer, filterRegistry) {\n return
test(model, observer, filterRegistry) ?\n consequent(model, observer,
filterRegistry) :\n alternate(model, observer, filterRegistry);\n
}\n },\n\n createIdentifier: function(name) {\n var ident = new Id
entPath(name);\n ident.type = 'Identifier';\n return ident;\n },\n\
n createMemberExpression: function(accessor, object, property) {\n var e
x = new MemberExpression(object, property, accessor);\n if (ex.dynamicDeps)
\n this.dynamicDeps = true;\n return ex;\n },\n\n createCallEx
pression: function(expression, args) {\n if (!(expression instanceof IdentP
ath))\n throw Error('Only identifier function invocations are allowed');\
n\n var filter = new Filter(expression.name, args);\n\n return functio
n(model, observer, filterRegistry) {\n return filter.transform(model, obs
erver, filterRegistry, false);\n };\n },\n\n createLiteral: function(
token) {\n return new Literal(token.value);\n },\n\n createArrayExpre
ssion: function(elements) {\n for (var i = 0; i < elements.length; i++)\n
elements[i] = getFn(elements[i]);\n\n return function(model, observer
, filterRegistry) {\n var arr = []\n for (var i = 0; i < elements.
length; i++)\n arr.push(elements[i](model, observer, filterRegistry));\
n return arr;\n }\n },\n\n createProperty: function(kind, key,
value) {\n return {\n key: key instanceof IdentPath ? key.name : ke
y.value,\n value: value\n };\n },\n\n createObjectExpression:
function(properties) {\n for (var i = 0; i < properties.length; i++)\n
properties[i].value = getFn(properties[i].value);\n\n return function(mo
del, observer, filterRegistry) {\n var obj = {};\n for (var i = 0;
i < properties.length; i++)\n obj[properties[i].key] =\n
properties[i].value(model, observer, filterRegistry);\n return obj;\n
}\n },\n\n createFilter: function(name, args) {\n this.filters.push
(new Filter(name, args));\n },\n\n createAsExpression: function(expression
, scopeIdent) {\n this.expression = expression;\n this.scopeIdent = sc
opeIdent;\n },\n\n createInExpression: function(scopeIdent, indexIdent, ex
pression) {\n this.expression = expression;\n this.scopeIdent = scopeI
dent;\n this.indexIdent = indexIdent;\n },\n\n createTopLevel: functi
on(expression) {\n this.expression = expression;\n },\n\n createThisE
xpression: notImplemented\n }\n\n function ConstantObservable(value) {\n th
is.value_ = value;\n }\n\n ConstantObservable.prototype = {\n open: functio
n() { return this.value_; },\n discardChanges: function() { return this.value
_; },\n deliver: function() {},\n close: function() {},\n }\n\n function
Expression(delegate) {\n this.scopeIdent = delegate.scopeIdent;\n this.in
dexIdent = delegate.indexIdent;\n\n if (!delegate.expression)\n throw Er
ror('No expression found.');\n\n this.expression = delegate.expression;\n
getFn(this.expression); // forces enumeration of path dependencies\n\n this.f
ilters = delegate.filters;\n this.dynamicDeps = delegate.dynamicDeps;\n }\n\
n Expression.prototype = {\n getBinding: function(model, filterRegistry, one
Time) {\n if (oneTime)\n return this.getValue(model, undefined, filt
erRegistry);\n\n var observer = new CompoundObserver();\n // captures
deps.\n var firstValue = this.getValue(model, observer, filterRegistry);\n
var firstTime = true;\n var self = this;\n\n function valueFn() {
\n // deps cannot have changed on first value retrieval.\n if (fir
stTime) {\n firstTime = false;\n return firstValue;\n }
\n\n if (self.dynamicDeps)\n observer.startReset();\n\n v
ar value = self.getValue(model,\n self.dynamicD
eps ? observer : undefined,\n filterRegistry);\
n if (self.dynamicDeps)\n observer.finishReset();\n\n ret
urn value;\n }\n\n function setValueFn(newValue) {\n self.setVa
lue(model, newValue, filterRegistry);\n return newValue;\n }\n\n
return new ObserverTransform(observer, valueFn, setValueFn, true);\n },\n\n
getValue: function(model, observer, filterRegistry) {\n var value = get
Fn(this.expression)(model, observer, filterRegistry);\n for (var i = 0; i <
this.filters.length; i++) {\n value = this.filters[i].transform(model, o
bserver, filterRegistry,\n false, [value]);\n }\n\n return
value;\n },\n\n setValue: function(model, newValue, filterRegistry) {\n
var count = this.filters ? this.filters.length : 0;\n while (count-- > 0
) {\n newValue = this.filters[count].transform(model, undefined,\n
filterRegistry, true, [newValue]);\n }\n\n if (this.expression.se
tValue)\n return this.expression.setValue(model, newValue);\n }\n }\n
\n /**\n * Converts a style property name to a css property name. For example
:\n * \"WebkitUserSelect\" to \"-webkit-user-select\"\n */\n function conve
rtStylePropertyName(name) {\n return String(name).replace(/[A-Z]/g, function(
c) {\n return '-' + c.toLowerCase();\n });\n }\n\n var parentScopeName
= '@' + Math.random().toString(36).slice(2);\n\n // Single ident paths must bi
nd directly to the appropriate scope object.\n // I.e. Pushed values in two-bin
dings need to be assigned to the actual model\n // object.\n function findScop
e(model, prop) {\n while (model[parentScopeName] &&\n !Object.proto
type.hasOwnProperty.call(model, prop)) {\n model = model[parentScopeName];\
n }\n\n return model;\n }\n\n function isLiteralExpression(pathString) {
\n switch (pathString) {\n case '':\n return false;\n\n case
'false':\n case 'null':\n case 'true':\n return true;\n }\n
\n if (!isNaN(Number(pathString)))\n return true;\n\n return false;\n
};\n\n function PolymerExpressions() {}\n\n PolymerExpressions.prototype = {
\n // \"built-in\" filters\n styleObject: function(value) {\n var par
ts = [];\n for (var key in value) {\n parts.push(convertStylePropert
yName(key) + ': ' + value[key]);\n }\n return parts.join('; ');\n }
,\n\n tokenList: function(value) {\n var tokens = [];\n for (var ke
y in value) {\n if (value[key])\n tokens.push(key);\n }\n
return tokens.join(' ');\n },\n\n // binding delegate API\n prepare
InstancePositionChanged: function(template) {\n var indexIdent = template.p
olymerExpressionIndexIdent_;\n if (!indexIdent)\n return;\n\n r
eturn function(templateInstance, index) {\n templateInstance.model[indexI
dent] = index;\n };\n },\n\n prepareBinding: function(pathString, nam
e, node) {\n var path = Path.get(pathString);\n\n if (!isLiteralExpres
sion(pathString) && path.valid) {\n if (path.length == 1) {\n re
turn function(model, node, oneTime) {\n if (oneTime)\n r
eturn path.getValueFrom(model);\n\n var scope = findScope(model, path
[0]);\n return new PathObserver(scope, path);\n };\n
}\n return; // bail out early if pathString is simple path.\n }\n\n
return prepareBinding(pathString, name, node, this);\n },\n\n prepare
InstanceModel: function(template) {\n var scopeName = template.polymerExpre
ssionScopeIdent_;\n if (!scopeName)\n return;\n\n var parentSco
pe = template.templateInstance ?\n template.templateInstance.model :\n
template.model;\n\n var indexName = template.polymerExpressionInde
xIdent_;\n\n return function(model) {\n return createScopeObject(par
entScope, model, scopeName, indexName);\n };\n }\n };\n\n var createSc
opeObject = ('__proto__' in {}) ?\n function(parentScope, model, scopeName, i
ndexName) {\n var scope = {};\n scope[scopeName] = model;\n scope
[indexName] = undefined;\n scope[parentScopeName] = parentScope;\n sco
pe.__proto__ = parentScope;\n return scope;\n } :\n function(parentSc
ope, model, scopeName, indexName) {\n var scope = Object.create(parentScope
);\n Object.defineProperty(scope, scopeName,\n { value: model, con
figurable: true, writable: true });\n Object.defineProperty(scope, indexNam
e,\n { value: undefined, configurable: true, writable: true });\n
Object.defineProperty(scope, parentScopeName,\n { value: parentScope, c
onfigurable: true, writable: true });\n return scope;\n };\n\n global.P
olymerExpressions = PolymerExpressions;\n PolymerExpressions.getExpression = ge
tExpression;\n})(this);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors
. All rights reserved.\n * This code may only be used under the BSD style licens
e found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors
may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of con
tributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dis
tributed by Google as part of the polymer project is also\n * subject to an addi
tional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nPolym
er = {\n version: '0.4.0-d66a86e'\n};\n\n/*\n * Copyright (c) 2014 The Polymer
Project Authors. All rights reserved.\n * This code may only be used under the B
SD style license found at http://polymer.github.io/LICENSE.txt\n * The complete
set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The comp
lete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.t
xt\n * Code distributed by Google as part of the polymer project is also\n * sub
ject to an additional IP rights grant found at http://polymer.github.io/PATENTS.
txt\n */\n\n// TODO(sorvell): this ensures Polymer is an object and not a functi
on\n// Platform is currently defining it as a function to allow for async loadin
g\n// of polymer; once we refine the loading process this likely goes away.\nif
(typeof window.Polymer === 'function') {\n Polymer = {};\n}\n\n\n/*\n * Copyrig
ht (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may
only be used under the BSD style license found at http://polymer.github.io/LICEN
SE.txt\n * The complete set of authors may be found at http://polymer.github.io/
AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.
github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer
project is also\n * subject to an additional IP rights grant found at http://po
lymer.github.io/PATENTS.txt\n */\n\n /*\n\tOn supported platforms, platform.js i
s not needed. To retain compatibility\n\twith the polyfills, we stub out minimal
functionality.\n */\nif (!window.Platform) {\n logFlags = window.logFlags || {
};\n\n\n Platform = {\n \tflush: function() {}\n };\n\n CustomElements = {\n
\tuseNative: true,\n ready: true,\n takeRecords: function() {},\n ins
tanceof: function(obj, base) {\n return obj instanceof base;\n }\n };\n
\n HTMLImports = {\n \tuseNative: true\n };\n\n \n addEventListener('HTML
ImportsLoaded', function() {\n document.dispatchEvent(\n new CustomEvent
('WebComponentsReady', {bubbles: true})\n );\n });\n\n\n // ShadowDOM\n Sh
adowDOMPolyfill = null;\n wrap = unwrap = function(n){\n return n;\n };\n\n
}\n\n/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve
d.\r\n * This code may only be used under the BSD style license found at http://
polymer.github.io/LICENSE.txt\r\n * The complete set of authors may be found at
http://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may
be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by
Google as part of the polymer project is also\r\n * subject to an additional IP
rights grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n(functi
on(scope) {\r\n\r\nvar hasNative = ('import' in document.createElement('link'));
\r\nvar useNative = hasNative;\r\n\r\nisIE = /Trident/.test(navigator.userAgent)
;\r\n\r\n// TODO(sorvell): SD polyfill intrusion\r\nvar hasShadowDOMPolyfill = B
oolean(window.ShadowDOMPolyfill);\r\nvar wrap = function(node) {\r\n return has
ShadowDOMPolyfill ? ShadowDOMPolyfill.wrapIfNeeded(node) : node;\r\n};\r\nvar ma
inDoc = wrap(document);\r\n \r\n// NOTE: We cannot polyfill document.currentS
cript because it's not possible\r\n// both to override and maintain the ability
to capture the native value;\r\n// therefore we choose to expose _currentScript
both when native imports\r\n// and the polyfill are in use.\r\nvar currentScript
Descriptor = {\r\n get: function() {\r\n var script = HTMLImports.currentScr
ipt || document.currentScript ||\r\n // NOTE: only works when called in s
ynchronously executing code.\r\n // readyState should check if `loading`
but IE10 is \r\n // interactive when scripts run so we cheat.\r\n
(document.readyState !== 'complete' ? \r\n document.scripts[document.scri
pts.length - 1] : null);\r\n return wrap(script);\r\n },\r\n configurable:
true\r\n};\r\n\r\nObject.defineProperty(document, '_currentScript', currentScrip
tDescriptor);\r\nObject.defineProperty(mainDoc, '_currentScript', currentScriptD
escriptor);\r\n\r\n// call a callback when all HTMLImports in the document at ca
ll (or at least\r\n// document ready) time have loaded.\r\n// 1. ensure the doc
ument is in a ready state (has dom), then \r\n// 2. watch for loading of imports
and call callback when done\r\nfunction whenImportsReady(callback, doc) {\r\n
doc = doc || mainDoc;\r\n // if document is loading, wait and try again\r\n wh
enDocumentReady(function() {\r\n watchImportsLoad(callback, doc);\r\n }, doc
);\r\n}\r\n\r\n// call the callback when the document is in a ready state (has d
om)\r\nvar requiredReadyState = isIE ? 'complete' : 'interactive';\r\nvar READY_
EVENT = 'readystatechange';\r\nfunction isDocumentReady(doc) {\r\n return (doc.
readyState === 'complete' ||\r\n doc.readyState === requiredReadyState);\r\
n}\r\n\r\n// call <callback> when we ensure the document is in a ready state\r\n
function whenDocumentReady(callback, doc) {\r\n if (!isDocumentReady(doc)) {\r\
n var checkReady = function() {\r\n if (doc.readyState === 'complete' ||
\r\n doc.readyState === requiredReadyState) {\r\n doc.removeEve
ntListener(READY_EVENT, checkReady);\r\n whenDocumentReady(callback, doc)
;\r\n }\r\n };\r\n doc.addEventListener(READY_EVENT, checkReady);\r\n
} else if (callback) {\r\n callback();\r\n }\r\n}\r\n\r\nfunction markTarg
etLoaded(event) {\r\n event.target.__loaded = true;\r\n}\r\n\r\n// call <callba
ck> when we ensure all imports have loaded\r\nfunction watchImportsLoad(callback
, doc) {\r\n var imports = doc.querySelectorAll('link[rel=import]');\r\n var l
oaded = 0, l = imports.length;\r\n function checkDone(d) { \r\n if (loaded =
= l) {\r\n callback && callback();\r\n }\r\n }\r\n function loadedImpo
rt(e) {\r\n markTargetLoaded(e);\r\n loaded++;\r\n checkDone();\r\n }\
r\n if (l) {\r\n for (var i=0, imp; (i<l) && (imp=imports[i]); i++) {\r\n
if (isImportLoaded(imp)) {\r\n loadedImport.call(imp, {target: imp});\
r\n } else {\r\n imp.addEventListener('load', loadedImport);\r\n
imp.addEventListener('error', loadedImport);\r\n }\r\n }\r\n } else
{\r\n checkDone();\r\n }\r\n}\r\n\r\n// NOTE: test for native imports loadi
ng is based on explicitly watching\r\n// all imports (see below).\r\nfunction is
ImportLoaded(link) {\r\n return useNative ? link.__loaded : link.__importParsed
;\r\n}\r\n\r\n// TODO(sorvell): Workaround for \r\n// https://www.w3.org/Bugs/Pu
blic/show_bug.cgi?id=25007, should be removed when\r\n// this bug is addressed.\
r\n// (1) Install a mutation observer to see when HTMLImports have loaded\r\n//
(2) if this script is run during document load it will watch any existing\r\n//
imports for loading.\r\n//\r\n// NOTE: The workaround has restricted functionali
ty: (1) it's only compatible\r\n// with imports that are added to document.head
since the mutation observer \r\n// watches only head for perf reasons, (2) it re
quires this script\r\n// to run before any imports have completed loading.\r\nif
(useNative) {\r\n new MutationObserver(function(mxns) {\r\n for (var i=0, l
=mxns.length, m; (i < l) && (m=mxns[i]); i++) {\r\n if (m.addedNodes) {\r\n
handleImports(m.addedNodes);\r\n }\r\n }\r\n }).observe(documen
t.head, {childList: true});\r\n\r\n function handleImports(nodes) {\r\n for
(var i=0, l=nodes.length, n; (i<l) && (n=nodes[i]); i++) {\r\n if (isImport
(n)) {\r\n handleImport(n); \r\n }\r\n }\r\n }\r\n\r\n functio
n isImport(element) {\r\n return element.localName === 'link' && element.rel
=== 'import';\r\n }\r\n\r\n function handleImport(element) {\r\n var loaded
= element.import;\r\n if (loaded) {\r\n markTargetLoaded({target: eleme
nt});\r\n } else {\r\n element.addEventListener('load', markTargetLoaded
);\r\n element.addEventListener('error', markTargetLoaded);\r\n }\r\n }
\r\n\r\n // make sure to catch any imports that are in the process of loading\r
\n // when this script is run.\r\n (function() {\r\n if (document.readyStat
e === 'loading') {\r\n var imports = document.querySelectorAll('link[rel=im
port]');\r\n for (var i=0, l=imports.length, imp; (i<l) && (imp=imports[i])
; i++) {\r\n handleImport(imp);\r\n }\r\n }\r\n })();\r\n\r\n}\r
\n\r\n// Fire the 'HTMLImportsLoaded' event when imports in document at load tim
e \r\n// have loaded. This event is required to simulate the script blocking \r\
n// behavior of native imports. A main document script that needs to be sure\r\n
// imports have loaded should wait for this event.\r\nwhenImportsReady(function(
) {\r\n HTMLImports.ready = true;\r\n HTMLImports.readyTime = new Date().getTi
me();\r\n mainDoc.dispatchEvent(\r\n new CustomEvent('HTMLImportsLoaded', {b
ubbles: true})\r\n );\r\n});\r\n\r\n// exports\r\nscope.useNative = useNative;\
r\nscope.isImportLoaded = isImportLoaded;\r\nscope.whenReady = whenImportsReady;
\r\nscope.isIE = isIE;\r\n\r\n// deprecated\r\nscope.whenImportsReady = whenImpo
rtsReady;\r\n\r\n})(window.HTMLImports);\n/*\n * Copyright (c) 2014 The Polymer
Project Authors. All rights reserved.\n * This code may only be used under the B
SD style license found at http://polymer.github.io/LICENSE.txt\n * The complete
set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The comp
lete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.t
xt\n * Code distributed by Google as part of the polymer project is also\n * sub
ject to an additional IP rights grant found at http://polymer.github.io/PATENTS.
txt\n */\n\n(function(scope) {\n\n function withDependencies(task, depends) {\n
depends = depends || [];\n if (!depends.map) {\n depends = [depends]
;\n }\n return task.apply(this, depends.map(marshal));\n }\n\n function
module(name, dependsOrFactory, moduleFactory) {\n var module;\n switch (ar
guments.length) {\n case 0:\n return;\n case 1:\n module
= null;\n break;\n case 2:\n // dependsOrFactory is `factory
` in this case\n module = dependsOrFactory.apply(this);\n break;\n
default:\n // dependsOrFactory is `depends` in this case\n m
odule = withDependencies(moduleFactory, dependsOrFactory);\n break;\n
}\n modules[name] = module;\n };\n\n function marshal(name) {\n return m
odules[name];\n }\n\n var modules = {};\n\n function using(depends, task) {\n
HTMLImports.whenImportsReady(function() {\n withDependencies(task, depe
nds);\n });\n };\n\n // exports\n\n scope.marshal = marshal;\n // `module
` confuses commonjs detectors\n scope.modularize = module;\n scope.using = usi
ng;\n\n})(window);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All
rights reserved.\n * This code may only be used under the BSD style license fou
nd at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may b
e found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contribu
tors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distribu
ted by Google as part of the polymer project is also\n * subject to an additiona
l IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(functio
n(scope) {\n\n // TODO(sorvell): It's desireable to provide a default styleshee
t \n // that's convenient for styling unresolved elements, but\n // it's cumbe
rsome to have to include this manually in every page.\n // It would make sense
to put inside some HTMLImport but \n // the HTMLImports polyfill does not allow
loading of stylesheets \n // that block rendering. Therefore this injection is
tolerated here.\n var style = document.createElement('style');\n style.textCo
ntent = ''\n + 'body {'\n + 'transition: opacity ease-in 0.2s;' \n
+ ' } \\n'\n + 'body[unresolved] {'\n + 'opacity: 0; display: block;
overflow: hidden;' \n + ' } \\n'\n ;\n var head = document.querySele
ctor('head');\n head.insertBefore(style, head.firstChild);\n\n})(Platform);\n\n
// Copyright 2012 Google Inc.\n//\n// Licensed under the Apache License, Version
2.0 (the \"License\");\n// you may not use this file except in compliance with
the License.\n// You may obtain a copy of the License at\n//\n// http://www.
apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agr
eed to in writing, software\n// distributed under the License is distributed on
an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either exp
ress or implied.\n// See the License for the specific language governing permiss
ions and\n// limitations under the License.\n\n(function(global) {\n 'use stric
t';\n\n var testingExposeCycleCount = global.testingExposeCycleCount;\n\n // D
etect and do basic sanity checking on Object/Array.observe.\n function detectOb
jectObserve() {\n if (typeof Object.observe !== 'function' ||\n typeof
Array.observe !== 'function') {\n return false;\n }\n\n var records
= [];\n\n function callback(recs) {\n records = recs;\n }\n\n var
test = {};\n var arr = [];\n Object.observe(test, callback);\n Array.ob
serve(arr, callback);\n test.id = 1;\n test.id = 2;\n delete test.id;\n
arr.push(1, 2);\n arr.length = 0;\n\n Object.deliverChangeRecords(call
back);\n if (records.length !== 5)\n return false;\n\n if (records[0]
.type != 'add' ||\n records[1].type != 'update' ||\n records[2].ty
pe != 'delete' ||\n records[3].type != 'splice' ||\n records[4].ty
pe != 'splice') {\n return false;\n }\n\n Object.unobserve(test, call
back);\n Array.unobserve(arr, callback);\n\n return true;\n }\n\n var ha
sObserve = detectObjectObserve();\n\n function detectEval() {\n // Don't tes
t for eval if we're running in a Chrome App environment.\n // We check for AP
Is set that only exist in a Chrome App context.\n if (typeof chrome !== 'unde
fined' && chrome.app && chrome.app.runtime) {\n return false;\n }\n\n
// Firefox OS Apps do not allow eval. This feature detection is very hacky\n
// but even if some other platform adds support for this function this code\n
// will continue to work.\n if (navigator.getDeviceStorage) {\n return
false;\n }\n\n try {\n var f = new Function('', 'return true;');\n
return f();\n } catch (ex) {\n return false;\n }\n }\n\n var ha
sEval = detectEval();\n\n function isIndex(s) {\n return +s === s >>> 0;\n
}\n\n function toNumber(s) {\n return +s;\n }\n\n function isObject(obj) {
\n return obj === Object(obj);\n }\n\n var numberIsNaN = global.Number.isNa
N || function(value) {\n return typeof value === 'number' && global.isNaN(val
ue);\n }\n\n function areSameValue(left, right) {\n if (left === right)\n
return left !== 0 || 1 / left === 1 / right;\n if (numberIsNaN(left) && n
umberIsNaN(right))\n return true;\n\n return left !== left && right !==
right;\n }\n\n var createObject = ('__proto__' in {}) ?\n function(obj) { r
eturn obj; } :\n function(obj) {\n var proto = obj.__proto__;\n if
(!proto)\n return obj;\n var newObject = Object.create(proto);\n
Object.getOwnPropertyNames(obj).forEach(function(name) {\n Object.defin
eProperty(newObject, name,\n Object.getOwnPropertyDe
scriptor(obj, name));\n });\n return newObject;\n };\n\n var ident
Start = '[\\$_a-zA-Z]';\n var identPart = '[\\$_a-zA-Z0-9]';\n var identRegExp
= new RegExp('^' + identStart + '+' + identPart + '*' + '$');\n\n function get
PathCharType(char) {\n if (char === undefined)\n return 'eof';\n\n va
r code = char.charCodeAt(0);\n\n switch(code) {\n case 0x5B: // [\n
case 0x5D: // ]\n case 0x2E: // .\n case 0x22: // \"\n case 0x27
: // '\n case 0x30: // 0\n return char;\n\n case 0x5F: // _\n
case 0x24: // $\n return 'ident';\n\n case 0x20: // Space\n
case 0x09: // Tab\n case 0x0A: // Newline\n case 0x0D: // Return\n
case 0xA0: // No-break space\n case 0xFEFF: // Byte Order Mark\n
case 0x2028: // Line Separator\n case 0x2029: // Paragraph Separator\n
return 'ws';\n }\n\n // a-z, A-Z\n if ((0x61 <= code && code <= 0x
7A) || (0x41 <= code && code <= 0x5A))\n return 'ident';\n\n // 1-9\n
if (0x31 <= code && code <= 0x39)\n return 'number';\n\n return 'else';
\n }\n\n var pathStateMachine = {\n 'beforePath': {\n 'ws': ['beforePa
th'],\n 'ident': ['inIdent', 'append'],\n '[': ['beforeElement'],\n
'eof': ['afterPath']\n },\n\n 'inPath': {\n 'ws': ['inPath'],\n
'.': ['beforeIdent'],\n '[': ['beforeElement'],\n 'eof': ['afterPat
h']\n },\n\n 'beforeIdent': {\n 'ws': ['beforeIdent'],\n 'ident'
: ['inIdent', 'append']\n },\n\n 'inIdent': {\n 'ident': ['inIdent',
'append'],\n '0': ['inIdent', 'append'],\n 'number': ['inIdent', 'appe
nd'],\n 'ws': ['inPath', 'push'],\n '.': ['beforeIdent', 'push'],\n
'[': ['beforeElement', 'push'],\n 'eof': ['afterPath', 'push']\n },\n
\n 'beforeElement': {\n 'ws': ['beforeElement'],\n '0': ['afterZero
', 'append'],\n 'number': ['inIndex', 'append'],\n \"'\": ['inSingleQu
ote', 'append', ''],\n '\"': ['inDoubleQuote', 'append', '']\n },\n\n
'afterZero': {\n 'ws': ['afterElement', 'push'],\n ']': ['inPath', 'p
ush']\n },\n\n 'inIndex': {\n '0': ['inIndex', 'append'],\n 'num
ber': ['inIndex', 'append'],\n 'ws': ['afterElement'],\n ']': ['inPath
', 'push']\n },\n\n 'inSingleQuote': {\n \"'\": ['afterElement'],\n
'eof': ['error'],\n 'else': ['inSingleQuote', 'append']\n },\n\n
'inDoubleQuote': {\n '\"': ['afterElement'],\n 'eof': ['error'],\n
'else': ['inDoubleQuote', 'append']\n },\n\n 'afterElement': {\n 'w
s': ['afterElement'],\n ']': ['inPath', 'push']\n }\n }\n\n function n
oop() {}\n\n function parsePath(path) {\n var keys = [];\n var index = -1
;\n var c, newChar, key, type, transition, action, typeMap, mode = 'beforePat
h';\n\n var actions = {\n push: function() {\n if (key === undefi
ned)\n return;\n\n keys.push(key);\n key = undefined;\n
},\n\n append: function() {\n if (key === undefined)\n
key = newChar\n else\n key += newChar;\n }\n };\n\n f
unction maybeUnescapeQuote() {\n if (index >= path.length)\n return;
\n\n var nextChar = path[index + 1];\n if ((mode == 'inSingleQuote' &&
nextChar == \"'\") ||\n (mode == 'inDoubleQuote' && nextChar == '\"'))
{\n index++;\n newChar = nextChar;\n actions.append();\n
return true;\n }\n }\n\n while (mode) {\n index++;\n
c = path[index];\n\n if (c == '\\\\' && maybeUnescapeQuote(mode))\n
continue;\n\n type = getPathCharType(c);\n typeMap = pathStateMachine[
mode];\n transition = typeMap[type] || typeMap['else'] || 'error';\n\n
if (transition == 'error')\n return; // parse error;\n\n mode = tra
nsition[0];\n action = actions[transition[1]] || noop;\n newChar = tra
nsition[2] === undefined ? c : transition[2];\n action();\n\n if (mode
=== 'afterPath') {\n return keys;\n }\n }\n\n return; // pars
e error\n }\n\n function isIdent(s) {\n return identRegExp.test(s);\n }\n\
n var constructorIsPrivate = {};\n\n function Path(parts, privateToken) {\n
if (privateToken !== constructorIsPrivate)\n throw Error('Use Path.get to
retrieve path objects');\n\n for (var i = 0; i < parts.length; i++) {\n
this.push(String(parts[i]));\n }\n\n if (hasEval && this.length) {\n
this.getValueFrom = this.compiledGetValueFromFn();\n }\n }\n\n // TODO(rafa
elw): Make simple LRU cache\n var pathCache = {};\n\n function getPath(pathStr
ing) {\n if (pathString instanceof Path)\n return pathString;\n\n if
(pathString == null || pathString.length == 0)\n pathString = '';\n\n if
(typeof pathString != 'string') {\n if (isIndex(pathString.length)) {\n
// Constructed with array-like (pre-parsed) keys\n return new Path(p
athString, constructorIsPrivate);\n }\n\n pathString = String(pathStri
ng);\n }\n\n var path = pathCache[pathString];\n if (path)\n retur
n path;\n\n var parts = parsePath(pathString);\n if (!parts)\n return
invalidPath;\n\n var path = new Path(parts, constructorIsPrivate);\n path
Cache[pathString] = path;\n return path;\n }\n\n Path.get = getPath;\n\n f
unction formatAccessor(key) {\n if (isIndex(key)) {\n return '[' + key +
']';\n } else {\n return '[\"' + key.replace(/\"/g, '\\\\\"') + '\"]';\
n }\n }\n\n Path.prototype = createObject({\n __proto__: [],\n valid:
true,\n\n toString: function() {\n var pathString = '';\n for (var
i = 0; i < this.length; i++) {\n var key = this[i];\n if (isIdent
(key)) {\n pathString += i ? '.' + key : key;\n } else {\n
pathString += formatAccessor(key);\n }\n }\n\n return pathS
tring;\n },\n\n getValueFrom: function(obj, directObserver) {\n for (
var i = 0; i < this.length; i++) {\n if (obj == null)\n return;\
n obj = obj[this[i]];\n }\n return obj;\n },\n\n iterateO
bjects: function(obj, observe) {\n for (var i = 0; i < this.length; i++) {\
n if (i)\n obj = obj[this[i - 1]];\n if (!isObject(obj))\
n return;\n observe(obj, this[0]);\n }\n },\n\n compi
ledGetValueFromFn: function() {\n var str = '';\n var pathString = 'ob
j';\n str += 'if (obj != null';\n var i = 0;\n var key;\n fo
r (; i < (this.length - 1); i++) {\n key = this[i];\n pathString +
= isIdent(key) ? '.' + key : formatAccessor(key);\n str += ' &&\\n '
+ pathString + ' != null';\n }\n str += ')\\n';\n\n var key = thi
s[i];\n pathString += isIdent(key) ? '.' + key : formatAccessor(key);\n\n
str += ' return ' + pathString + ';\\nelse\\n return undefined;';\n r
eturn new Function('obj', str);\n },\n\n setValueFrom: function(obj, value
) {\n if (!this.length)\n return false;\n\n for (var i = 0; i <
this.length - 1; i++) {\n if (!isObject(obj))\n return false;\n
obj = obj[this[i]];\n }\n\n if (!isObject(obj))\n retur
n false;\n\n obj[this[i]] = value;\n return true;\n }\n });\n\n v
ar invalidPath = new Path('', constructorIsPrivate);\n invalidPath.valid = fals
e;\n invalidPath.getValueFrom = invalidPath.setValueFrom = function() {};\n\n
var MAX_DIRTY_CHECK_CYCLES = 1000;\n\n function dirtyCheck(observer) {\n var
cycles = 0;\n while (cycles < MAX_DIRTY_CHECK_CYCLES && observer.check_()) {
\n cycles++;\n }\n if (testingExposeCycleCount)\n global.dirtyCh
eckCycleCount = cycles;\n\n return cycles > 0;\n }\n\n function objectIsEmp
ty(object) {\n for (var prop in object)\n return false;\n return true
;\n }\n\n function diffIsEmpty(diff) {\n return objectIsEmpty(diff.added) &
&\n objectIsEmpty(diff.removed) &&\n objectIsEmpty(diff.chan
ged);\n }\n\n function diffObjectFromOldObject(object, oldObject) {\n var a
dded = {};\n var removed = {};\n var changed = {};\n\n for (var prop in
oldObject) {\n var newValue = object[prop];\n\n if (newValue !== unde
fined && newValue === oldObject[prop])\n continue;\n\n if (!(prop in
object)) {\n removed[prop] = undefined;\n continue;\n }\n\n
if (newValue !== oldObject[prop])\n changed[prop] = newValue;\n }
\n\n for (var prop in object) {\n if (prop in oldObject)\n contin
ue;\n\n added[prop] = object[prop];\n }\n\n if (Array.isArray(object)
&& object.length !== oldObject.length)\n changed.length = object.length;\n
\n return {\n added: added,\n removed: removed,\n changed: cha
nged\n };\n }\n\n var eomTasks = [];\n function runEOMTasks() {\n if (!
eomTasks.length)\n return false;\n\n for (var i = 0; i < eomTasks.length
; i++) {\n eomTasks[i]();\n }\n eomTasks.length = 0;\n return true
;\n }\n\n var runEOM = hasObserve ? (function(){\n var eomObj = { pingPong:
true };\n var eomRunScheduled = false;\n\n Object.observe(eomObj, functio
n() {\n runEOMTasks();\n eomRunScheduled = false;\n });\n\n retu
rn function(fn) {\n eomTasks.push(fn);\n if (!eomRunScheduled) {\n
eomRunScheduled = true;\n eomObj.pingPong = !eomObj.pingPong;\n
}\n };\n })() :\n (function() {\n return function(fn) {\n eomTasks.
push(fn);\n };\n })();\n\n var observedObjectCache = [];\n\n function newO
bservedObject() {\n var observer;\n var object;\n var discardRecords =
false;\n var first = true;\n\n function callback(records) {\n if (obs
erver && observer.state_ === OPENED && !discardRecords)\n observer.check_
(records);\n }\n\n return {\n open: function(obs) {\n if (obse
rver)\n throw Error('ObservedObject in use');\n\n if (!first)\n
Object.deliverChangeRecords(callback);\n\n observer = obs;\n
first = false;\n },\n observe: function(obj, arrayObserve) {\n
object = obj;\n if (arrayObserve)\n Array.observe(object, ca
llback);\n else\n Object.observe(object, callback);\n },\n
deliver: function(discard) {\n discardRecords = discard;\n Ob
ject.deliverChangeRecords(callback);\n discardRecords = false;\n },\
n close: function() {\n observer = undefined;\n Object.unobse
rve(object, callback);\n observedObjectCache.push(this);\n }\n };
\n }\n\n /*\n * The observedSet abstraction is a perf optimization which red
uces the total\n * number of Object.observe observations of a set of objects.
The idea is that\n * groups of Observers will have some object dependencies in
common and this\n * observed set ensures that each object in the transitive c
losure of\n * dependencies is only observed once. The observedSet acts as a wr
ite barrier\n * such that whenever any change comes through, all Observers are
checked for\n * changed values.\n *\n * Note that this optimization is ex
plicitly moving work from setup-time to\n * change-time.\n *\n * TODO(rafa
elw): Implement \"garbage collection\". In order to move work off\n * the crit
ical path, when Observers are closed, their observed objects are\n * not Objec
t.unobserve(d). As a result, it's possible that if the observedSet\n * is kept
open, but some Observers have been closed, it could cause \"leaks\"\n * (prev
ent otherwise collectable objects from being collected). At some\n * point, we
should implement incremental \"gc\" which keeps a list of\n * observedSets wh
ich may need clean-up and does small amounts of cleanup on a\n * timeout until
all is clean.\n */\n\n function getObservedObject(observer, object, arrayObs
erve) {\n var dir = observedObjectCache.pop() || newObservedObject();\n di
r.open(observer);\n dir.observe(object, arrayObserve);\n return dir;\n }\
n\n var observedSetCache = [];\n\n function newObservedSet() {\n var observ
erCount = 0;\n var observers = [];\n var objects = [];\n var rootObj;\n
var rootObjProps;\n\n function observe(obj, prop) {\n if (!obj)\n
return;\n\n if (obj === rootObj)\n rootObjProps[prop] = true;\n
\n if (objects.indexOf(obj) < 0) {\n objects.push(obj);\n Obj
ect.observe(obj, callback);\n }\n\n observe(Object.getPrototypeOf(obj)
, prop);\n }\n\n function allRootObjNonObservedProps(recs) {\n for (v
ar i = 0; i < recs.length; i++) {\n var rec = recs[i];\n if (rec.o
bject !== rootObj ||\n rootObjProps[rec.name] ||\n rec.typ
e === 'setPrototype') {\n return false;\n }\n }\n retu
rn true;\n }\n\n function callback(recs) {\n if (allRootObjNonObserve
dProps(recs))\n return;\n\n var observer;\n for (var i = 0; i <
observers.length; i++) {\n observer = observers[i];\n if (observe
r.state_ == OPENED) {\n observer.iterateObjects_(observe);\n }\n
}\n\n for (var i = 0; i < observers.length; i++) {\n observer
= observers[i];\n if (observer.state_ == OPENED) {\n observer.ch
eck_();\n }\n }\n }\n\n var record = {\n object: undefine
d,\n objects: objects,\n open: function(obs, object) {\n if (!r
ootObj) {\n rootObj = object;\n rootObjProps = {};\n }\
n\n observers.push(obs);\n observerCount++;\n obs.iterateOb
jects_(observe);\n },\n close: function(obs) {\n observerCount-
-;\n if (observerCount > 0) {\n return;\n }\n\n fo
r (var i = 0; i < objects.length; i++) {\n Object.unobserve(objects[i],
callback);\n Observer.unobservedCount++;\n }\n\n observe
rs.length = 0;\n objects.length = 0;\n rootObj = undefined;\n
rootObjProps = undefined;\n observedSetCache.push(this);\n }\n
};\n\n return record;\n }\n\n var lastObservedSet;\n\n function getObserv
edSet(observer, obj) {\n if (!lastObservedSet || lastObservedSet.object !== o
bj) {\n lastObservedSet = observedSetCache.pop() || newObservedSet();\n
lastObservedSet.object = obj;\n }\n lastObservedSet.open(observer, obj);
\n return lastObservedSet;\n }\n\n var UNOPENED = 0;\n var OPENED = 1;\n
var CLOSED = 2;\n var RESETTING = 3;\n\n var nextObserverId = 1;\n\n function
Observer() {\n this.state_ = UNOPENED;\n this.callback_ = undefined;\n
this.target_ = undefined; // TODO(rafaelw): Should be WeakRef\n this.directO
bserver_ = undefined;\n this.value_ = undefined;\n this.id_ = nextObserver
Id++;\n }\n\n Observer.prototype = {\n open: function(callback, target) {\n
if (this.state_ != UNOPENED)\n throw Error('Observer has already be
en opened.');\n\n addToAll(this);\n this.callback_ = callback;\n
this.target_ = target;\n this.connect_();\n this.state_ = OPENED;\n
return this.value_;\n },\n\n close: function() {\n if (this.state_
!= OPENED)\n return;\n\n removeFromAll(this);\n this.disconnec
t_();\n this.value_ = undefined;\n this.callback_ = undefined;\n
this.target_ = undefined;\n this.state_ = CLOSED;\n },\n\n deliver: f
unction() {\n if (this.state_ != OPENED)\n return;\n\n dirtyChe
ck(this);\n },\n\n report_: function(changes) {\n try {\n this
.callback_.apply(this.target_, changes);\n } catch (ex) {\n Observer
._errorThrownDuringCallback = true;\n console.error('Exception caught dur
ing observer callback: ' +\n (ex.stack || ex));\n }\n
},\n\n discardChanges: function() {\n this.check_(undefined, true);\
n return this.value_;\n }\n }\n\n var collectObservers = !hasObserve;\
n var allObservers;\n Observer._allObserversCount = 0;\n\n if (collectObserve
rs) {\n allObservers = [];\n }\n\n function addToAll(observer) {\n Obser
ver._allObserversCount++;\n if (!collectObservers)\n return;\n\n allO
bservers.push(observer);\n }\n\n function removeFromAll(observer) {\n Obser
ver._allObserversCount--;\n }\n\n var runningMicrotaskCheckpoint = false;\n\n
var hasDebugForceFullDelivery = hasObserve && hasEval && (function() {\n try
{\n eval('%RunMicrotasks()');\n return true;\n } catch (ex) {\n
return false;\n }\n })();\n\n global.Platform = global.Platform || {};\n
\n global.Platform.performMicrotaskCheckpoint = function() {\n if (runningMi
crotaskCheckpoint)\n return;\n\n if (hasDebugForceFullDelivery) {\n
eval('%RunMicrotasks()');\n return;\n }\n\n if (!collectObservers)\n
return;\n\n runningMicrotaskCheckpoint = true;\n\n var cycles = 0;\n
var anyChanged, toCheck;\n\n do {\n cycles++;\n toCheck = allOb
servers;\n allObservers = [];\n anyChanged = false;\n\n for (var
i = 0; i < toCheck.length; i++) {\n var observer = toCheck[i];\n i
f (observer.state_ != OPENED)\n continue;\n\n if (observer.check
_())\n anyChanged = true;\n\n allObservers.push(observer);\n
}\n if (runEOMTasks())\n anyChanged = true;\n } while (cycles <
MAX_DIRTY_CHECK_CYCLES && anyChanged);\n\n if (testingExposeCycleCount)\n
global.dirtyCheckCycleCount = cycles;\n\n runningMicrotaskCheckpoint = fal
se;\n };\n\n if (collectObservers) {\n global.Platform.clearObservers = fun
ction() {\n allObservers = [];\n };\n }\n\n function ObjectObserver(ob
ject) {\n Observer.call(this);\n this.value_ = object;\n this.oldObject
_ = undefined;\n }\n\n ObjectObserver.prototype = createObject({\n __proto_
_: Observer.prototype,\n\n arrayObserve: false,\n\n connect_: function(cal
lback, target) {\n if (hasObserve) {\n this.directObserver_ = getObs
ervedObject(this, this.value_,\n
this.arrayObserve);\n } else {\n this.oldObject_ = this.copyObject(
this.value_);\n }\n\n },\n\n copyObject: function(object) {\n va
r copy = Array.isArray(object) ? [] : {};\n for (var prop in object) {\n
copy[prop] = object[prop];\n };\n if (Array.isArray(object))\n
copy.length = object.length;\n return copy;\n },\n\n check_: fun
ction(changeRecords, skipChanges) {\n var diff;\n var oldValues;\n
if (hasObserve) {\n if (!changeRecords)\n return false;\n\n
oldValues = {};\n diff = diffObjectFromChangeRecords(this.value_, ch
angeRecords,\n oldValues);\n } el
se {\n oldValues = this.oldObject_;\n diff = diffObjectFromOldObje
ct(this.value_, this.oldObject_);\n }\n\n if (diffIsEmpty(diff))\n
return false;\n\n if (!hasObserve)\n this.oldObject_ = this.copy
Object(this.value_);\n\n this.report_([\n diff.added || {},\n
diff.removed || {},\n diff.changed || {},\n function(property) {\
n return oldValues[property];\n }\n ]);\n\n return tru
e;\n },\n\n disconnect_: function() {\n if (hasObserve) {\n th
is.directObserver_.close();\n this.directObserver_ = undefined;\n }
else {\n this.oldObject_ = undefined;\n }\n },\n\n deliver: fu
nction() {\n if (this.state_ != OPENED)\n return;\n\n if (hasOb
serve)\n this.directObserver_.deliver(false);\n else\n dirtyC
heck(this);\n },\n\n discardChanges: function() {\n if (this.directOb
server_)\n this.directObserver_.deliver(true);\n else\n this.
oldObject_ = this.copyObject(this.value_);\n\n return this.value_;\n }\n
});\n\n function ArrayObserver(array) {\n if (!Array.isArray(array))\n
throw Error('Provided object is not an Array');\n ObjectObserver.call(this,
array);\n }\n\n ArrayObserver.prototype = createObject({\n\n __proto__: Ob
jectObserver.prototype,\n\n arrayObserve: true,\n\n copyObject: function(a
rr) {\n return arr.slice();\n },\n\n check_: function(changeRecords)
{\n var splices;\n if (hasObserve) {\n if (!changeRecords)\n
return false;\n splices = projectArraySplices(this.value_, changeR
ecords);\n } else {\n splices = calcSplices(this.value_, 0, this.val
ue_.length,\n this.oldObject_, 0, this.oldObject_.l
ength);\n }\n\n if (!splices || !splices.length)\n return false
;\n\n if (!hasObserve)\n this.oldObject_ = this.copyObject(this.valu
e_);\n\n this.report_([splices]);\n return true;\n }\n });\n\n Ar
rayObserver.applySplices = function(previous, current, splices) {\n splices.f
orEach(function(splice) {\n var spliceArgs = [splice.index, splice.removed.
length];\n var addIndex = splice.index;\n while (addIndex < splice.ind
ex + splice.addedCount) {\n spliceArgs.push(current[addIndex]);\n
addIndex++;\n }\n\n Array.prototype.splice.apply(previous, spliceArgs)
;\n });\n };\n\n function PathObserver(object, path) {\n Observer.call(t
his);\n\n this.object_ = object;\n this.path_ = getPath(path);\n this.d
irectObserver_ = undefined;\n }\n\n PathObserver.prototype = createObject({\n
__proto__: Observer.prototype,\n\n get path() {\n return this.path_;\
n },\n\n connect_: function() {\n if (hasObserve)\n this.direc
tObserver_ = getObservedSet(this, this.object_);\n\n this.check_(undefined,
true);\n },\n\n disconnect_: function() {\n this.value_ = undefined;
\n\n if (this.directObserver_) {\n this.directObserver_.close(this);
\n this.directObserver_ = undefined;\n }\n },\n\n iterateObjec
ts_: function(observe) {\n this.path_.iterateObjects(this.object_, observe)
;\n },\n\n check_: function(changeRecords, skipChanges) {\n var oldVa
lue = this.value_;\n this.value_ = this.path_.getValueFrom(this.object_);\n
if (skipChanges || areSameValue(this.value_, oldValue))\n return fa
lse;\n\n this.report_([this.value_, oldValue, this]);\n return true;\n
},\n\n setValue: function(newValue) {\n if (this.path_)\n thi
s.path_.setValueFrom(this.object_, newValue);\n }\n });\n\n function Compou
ndObserver(reportChangesOnOpen) {\n Observer.call(this);\n\n this.reportCh
angesOnOpen_ = reportChangesOnOpen;\n this.value_ = [];\n this.directObser
ver_ = undefined;\n this.observed_ = [];\n }\n\n var observerSentinel = {};
\n\n CompoundObserver.prototype = createObject({\n __proto__: Observer.proto
type,\n\n connect_: function() {\n if (hasObserve) {\n var object
;\n var needsDirectObserver = false;\n for (var i = 0; i < this.ob
served_.length; i += 2) {\n object = this.observed_[i]\n if (o
bject !== observerSentinel) {\n needsDirectObserver = true;\n
break;\n }\n }\n\n if (needsDirectObserver)\n
this.directObserver_ = getObservedSet(this, object);\n }\n\n this.ch
eck_(undefined, !this.reportChangesOnOpen_);\n },\n\n disconnect_: functio
n() {\n for (var i = 0; i < this.observed_.length; i += 2) {\n if (t
his.observed_[i] === observerSentinel)\n this.observed_[i + 1].close();
\n }\n this.observed_.length = 0;\n this.value_.length = 0;\n\n
if (this.directObserver_) {\n this.directObserver_.close(this);\n
this.directObserver_ = undefined;\n }\n },\n\n addPath: function(
object, path) {\n if (this.state_ != UNOPENED && this.state_ != RESETTING)\
n throw Error('Cannot add paths once started.');\n\n var path = getP
ath(path);\n this.observed_.push(object, path);\n if (!this.reportChan
gesOnOpen_)\n return;\n var index = this.observed_.length / 2 - 1;\n
this.value_[index] = path.getValueFrom(object);\n },\n\n addObserver
: function(observer) {\n if (this.state_ != UNOPENED && this.state_ != RESE
TTING)\n throw Error('Cannot add observers once started.');\n\n this
.observed_.push(observerSentinel, observer);\n if (!this.reportChangesOnOpe
n_)\n return;\n var index = this.observed_.length / 2 - 1;\n th
is.value_[index] = observer.open(this.deliver, this);\n },\n\n startReset:
function() {\n if (this.state_ != OPENED)\n throw Error('Can only r
eset while open');\n\n this.state_ = RESETTING;\n this.disconnect_();\
n },\n\n finishReset: function() {\n if (this.state_ != RESETTING)\n
throw Error('Can only finishReset after startReset');\n this.state_
= OPENED;\n this.connect_();\n\n return this.value_;\n },\n\n it
erateObjects_: function(observe) {\n var object;\n for (var i = 0; i <
this.observed_.length; i += 2) {\n object = this.observed_[i]\n i
f (object !== observerSentinel)\n this.observed_[i + 1].iterateObjects(
object, observe)\n }\n },\n\n check_: function(changeRecords, skipCha
nges) {\n var oldValues;\n for (var i = 0; i < this.observed_.length;
i += 2) {\n var object = this.observed_[i];\n var path = this.obse
rved_[i+1];\n var value;\n if (object === observerSentinel) {\n
var observable = path;\n value = this.state_ === UNOPENED ?\n
observable.open(this.deliver, this) :\n observable.disca
rdChanges();\n } else {\n value = path.getValueFrom(object);\n
}\n\n if (skipChanges) {\n this.value_[i / 2] = value;\n
continue;\n }\n\n if (areSameValue(value, this.value_[i /
2]))\n continue;\n\n oldValues = oldValues || [];\n oldVa
lues[i / 2] = this.value_[i / 2];\n this.value_[i / 2] = value;\n }\
n\n if (!oldValues)\n return false;\n\n // TODO(rafaelw): Havin
g observed_ as the third callback arg here is\n // pretty lame API. Fix.\n
this.report_([this.value_, oldValues, this.observed_]);\n return true;
\n }\n });\n\n function identFn(value) { return value; }\n\n function Obse
rverTransform(observable, getValueFn, setValueFn,\n
dontPassThroughSet) {\n this.callback_ = undefined;\n this.target_ = undef
ined;\n this.value_ = undefined;\n this.observable_ = observable;\n thi
s.getValueFn_ = getValueFn || identFn;\n this.setValueFn_ = setValueFn || ide
ntFn;\n // TODO(rafaelw): This is a temporary hack. PolymerExpressions needs
this\n // at the moment because of a bug in it's dependency tracking.\n th
is.dontPassThroughSet_ = dontPassThroughSet;\n }\n\n ObserverTransform.prototy
pe = {\n open: function(callback, target) {\n this.callback_ = callback;
\n this.target_ = target;\n this.value_ =\n this.getValueFn_(
this.observable_.open(this.observedCallback_, this));\n return this.value_;
\n },\n\n observedCallback_: function(value) {\n value = this.getValu
eFn_(value);\n if (areSameValue(value, this.value_))\n return;\n
var oldValue = this.value_;\n this.value_ = value;\n this.callback_.
call(this.target_, this.value_, oldValue);\n },\n\n discardChanges: functi
on() {\n this.value_ = this.getValueFn_(this.observable_.discardChanges());
\n return this.value_;\n },\n\n deliver: function() {\n return t
his.observable_.deliver();\n },\n\n setValue: function(value) {\n val
ue = this.setValueFn_(value);\n if (!this.dontPassThroughSet_ && this.obser
vable_.setValue)\n return this.observable_.setValue(value);\n },\n\n
close: function() {\n if (this.observable_)\n this.observable_.clo
se();\n this.callback_ = undefined;\n this.target_ = undefined;\n
this.observable_ = undefined;\n this.value_ = undefined;\n this.getVa
lueFn_ = undefined;\n this.setValueFn_ = undefined;\n }\n }\n\n var ex
pectedRecordTypes = {\n add: true,\n update: true,\n delete: true\n };
\n\n function diffObjectFromChangeRecords(object, changeRecords, oldValues) {\n
var added = {};\n var removed = {};\n\n for (var i = 0; i < changeReco
rds.length; i++) {\n var record = changeRecords[i];\n if (!expectedRec
ordTypes[record.type]) {\n console.error('Unknown changeRecord type: ' +
record.type);\n console.error(record);\n continue;\n }\n\n
if (!(record.name in oldValues))\n oldValues[record.name] = record.old
Value;\n\n if (record.type == 'update')\n continue;\n\n if (rec
ord.type == 'add') {\n if (record.name in removed)\n delete remo
ved[record.name];\n else\n added[record.name] = true;\n\n
continue;\n }\n\n // type = 'delete'\n if (record.name in added)
{\n delete added[record.name];\n delete oldValues[record.name];\n
} else {\n removed[record.name] = true;\n }\n }\n\n for
(var prop in added)\n added[prop] = object[prop];\n\n for (var prop in r
emoved)\n removed[prop] = undefined;\n\n var changed = {};\n for (var
prop in oldValues) {\n if (prop in added || prop in removed)\n cont
inue;\n\n var newValue = object[prop];\n if (oldValues[prop] !== newVa
lue)\n changed[prop] = newValue;\n }\n\n return {\n added: add
ed,\n removed: removed,\n changed: changed\n };\n }\n\n function
newSplice(index, removed, addedCount) {\n return {\n index: index,\n
removed: removed,\n addedCount: addedCount\n };\n }\n\n var EDIT_LEA
VE = 0;\n var EDIT_UPDATE = 1;\n var EDIT_ADD = 2;\n var EDIT_DELETE = 3;\n\n
function ArraySplice() {}\n\n ArraySplice.prototype = {\n\n // Note: This
function is *based* on the computation of the Levenshtein\n // \"edit\" dista
nce. The one change is that \"updates\" are treated as two\n // edits - not o
ne. With Array splices, an update is really a delete\n // followed by an add.
By retaining this, we optimize for \"keeping\" the\n // maximum array items
in the original array. For example:\n //\n // 'xxxx123' -> '123yyyy'\n
//\n // With 1-edit updates, the shortest path would be just to update all
seven\n // characters. With 2-edit updates, we delete 4, leave 3, and add 4.
This\n // leaves the substring '123' intact.\n calcEditDistances: function
(current, currentStart, currentEnd,\n old, oldSta
rt, oldEnd) {\n // \"Deletion\" columns\n var rowCount = oldEnd - oldS
tart + 1;\n var columnCount = currentEnd - currentStart + 1;\n var dis
tances = new Array(rowCount);\n\n // \"Addition\" rows. Initialize null col
umn.\n for (var i = 0; i < rowCount; i++) {\n distances[i] = new Arr
ay(columnCount);\n distances[i][0] = i;\n }\n\n // Initialize n
ull row\n for (var j = 0; j < columnCount; j++)\n distances[0][j] =
j;\n\n for (var i = 1; i < rowCount; i++) {\n for (var j = 1; j < co
lumnCount; j++) {\n if (this.equals(current[currentStart + j - 1], old[
oldStart + i - 1]))\n distances[i][j] = distances[i - 1][j - 1];\n
else {\n var north = distances[i - 1][j] + 1;\n var
west = distances[i][j - 1] + 1;\n distances[i][j] = north < west ? n
orth : west;\n }\n }\n }\n\n return distances;\n },
\n\n // This starts at the final weight, and walks \"backward\" by finding\n
// the minimum previous weight recursively until the origin of the weight\n
// matrix.\n spliceOperationsFromEditDistances: function(distances) {\n
var i = distances.length - 1;\n var j = distances[0].length - 1;\n v
ar current = distances[i][j];\n var edits = [];\n while (i > 0 || j >
0) {\n if (i == 0) {\n edits.push(EDIT_ADD);\n j--;\n
continue;\n }\n if (j == 0) {\n edits.push(EDIT_D
ELETE);\n i--;\n continue;\n }\n var northWest =
distances[i - 1][j - 1];\n var west = distances[i - 1][j];\n var
north = distances[i][j - 1];\n\n var min;\n if (west < north)\n
min = west < northWest ? west : northWest;\n else\n min =
north < northWest ? north : northWest;\n\n if (min == northWest) {\n
if (northWest == current) {\n edits.push(EDIT_LEAVE);\n
} else {\n edits.push(EDIT_UPDATE);\n current = northWes
t;\n }\n i--;\n j--;\n } else if (min == west)
{\n edits.push(EDIT_DELETE);\n i--;\n current = west
;\n } else {\n edits.push(EDIT_ADD);\n j--;\n
current = north;\n }\n }\n\n edits.reverse();\n return edi
ts;\n },\n\n /**\n * Splice Projection functions:\n *\n * A sp
lice map is a representation of how a previous array of items\n * was transf
ormed into a new array of items. Conceptually it is a list of\n * tuples of\
n *\n * <index, removed, addedCount>\n *\n * which are kept in
ascending index order of. The tuple represents that at\n * the |index|, |re
moved| sequence of items were removed, and counting forward\n * from |index|
, |addedCount| items were added.\n */\n\n /**\n * Lacking individual
splice mutation information, the minimal set of\n * splices can be synthesiz
ed given the previous state and final state of an\n * array. The basic appro
ach is to calculate the edit distance matrix and\n * choose the shortest pat
h through it.\n *\n * Complexity: O(l * p)\n * l: The length of th
e current array\n * p: The length of the old array\n */\n calcSplic
es: function(current, currentStart, currentEnd,\n old,
oldStart, oldEnd) {\n var prefixCount = 0;\n var suffixCount = 0;\n\n
var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);\n
if (currentStart == 0 && oldStart == 0)\n prefixCount = this.sharedPr
efix(current, old, minLength);\n\n if (currentEnd == current.length && oldE
nd == old.length)\n suffixCount = this.sharedSuffix(current, old, minLeng
th - prefixCount);\n\n currentStart += prefixCount;\n oldStart += pref
ixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCount;\n\n
if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)\n return
[];\n\n if (currentStart == currentEnd) {\n var splice = newSplice(c
urrentStart, [], 0);\n while (oldStart < oldEnd)\n splice.remove
d.push(old[oldStart++]);\n\n return [ splice ];\n } else if (oldStar
t == oldEnd)\n return [ newSplice(currentStart, [], currentEnd - currentS
tart) ];\n\n var ops = this.spliceOperationsFromEditDistances(\n t
his.calcEditDistances(current, currentStart, currentEnd,\n
old, oldStart, oldEnd));\n\n var splice = undefined;\n var
splices = [];\n var index = currentStart;\n var oldIndex = oldStart;\n
for (var i = 0; i < ops.length; i++) {\n switch(ops[i]) {\n
case EDIT_LEAVE:\n if (splice) {\n splices.push(splice
);\n splice = undefined;\n }\n\n index++;\n
oldIndex++;\n break;\n case EDIT_UPDATE:\n
if (!splice)\n splice = newSplice(index, [], 0);\n\n
splice.addedCount++;\n index++;\n\n splice.removed.push(o
ld[oldIndex]);\n oldIndex++;\n break;\n case EDIT
_ADD:\n if (!splice)\n splice = newSplice(index, [], 0);
\n\n splice.addedCount++;\n index++;\n break;\n
case EDIT_DELETE:\n if (!splice)\n splice = ne
wSplice(index, [], 0);\n\n splice.removed.push(old[oldIndex]);\n
oldIndex++;\n break;\n }\n }\n\n if (splice)
{\n splices.push(splice);\n }\n return splices;\n },\n\n
sharedPrefix: function(current, old, searchLength) {\n for (var i = 0; i <
searchLength; i++)\n if (!this.equals(current[i], old[i]))\n ret
urn i;\n return searchLength;\n },\n\n sharedSuffix: function(current
, old, searchLength) {\n var index1 = current.length;\n var index2 = o
ld.length;\n var count = 0;\n while (count < searchLength && this.equa
ls(current[--index1], old[--index2]))\n count++;\n\n return count;\n
},\n\n calculateSplices: function(current, previous) {\n return this
.calcSplices(current, 0, current.length, previous, 0,\n
previous.length);\n },\n\n equals: function(currentValue, previousVal
ue) {\n return currentValue === previousValue;\n }\n };\n\n var arrayS
plice = new ArraySplice();\n\n function calcSplices(current, currentStart, curr
entEnd,\n old, oldStart, oldEnd) {\n return arraySplice
.calcSplices(current, currentStart, currentEnd,\n
old, oldStart, oldEnd);\n }\n\n function intersect(start1, end1, start2, e
nd2) {\n // Disjoint\n if (end1 < start2 || end2 < start1)\n return -
1;\n\n // Adjacent\n if (end1 == start2 || end2 == start1)\n return 0
;\n\n // Non-zero intersect, span1 first\n if (start1 < start2) {\n i
f (end1 < end2)\n return end1 - start2; // Overlap\n else\n r
eturn end2 - start2; // Contained\n } else {\n // Non-zero intersect, sp
an2 first\n if (end2 < end1)\n return end2 - start1; // Overlap\n
else\n return end1 - start1; // Contained\n }\n }\n\n function me
rgeSplice(splices, index, removed, addedCount) {\n\n var splice = newSplice(i
ndex, removed, addedCount);\n\n var inserted = false;\n var insertionOffse
t = 0;\n\n for (var i = 0; i < splices.length; i++) {\n var current = sp
lices[i];\n current.index += insertionOffset;\n\n if (inserted)\n
continue;\n\n var intersectCount = intersect(splice.index,\n
splice.index + splice.removed.length,\n
current.index,\n curren
t.index + current.addedCount);\n\n if (intersectCount >= 0) {\n // M
erge the two splices\n\n splices.splice(i, 1);\n i--;\n\n i
nsertionOffset -= current.addedCount - current.removed.length;\n\n splice
.addedCount += current.addedCount - intersectCount;\n var deleteCount = s
plice.removed.length +\n current.removed.length - inter
sectCount;\n\n if (!splice.addedCount && !deleteCount) {\n // me
rged splice is a noop. discard.\n inserted = true;\n } else {\n
var removed = current.removed;\n\n if (splice.index < current.
index) {\n // some prefix of splice.removed is prepended to current.r
emoved.\n var prepend = splice.removed.slice(0, current.index - splic
e.index);\n Array.prototype.push.apply(prepend, removed);\n
removed = prepend;\n }\n\n if (splice.index + splice.removed
.length > current.index + current.addedCount) {\n // some suffix of s
plice.removed is appended to current.removed.\n var append = splice.r
emoved.slice(current.index + current.addedCount - splice.index);\n Ar
ray.prototype.push.apply(removed, append);\n }\n\n splice.remo
ved = removed;\n if (current.index < splice.index) {\n splic
e.index = current.index;\n }\n }\n } else if (splice.index
< current.index) {\n // Insert splice here.\n\n inserted = true;\n
\n splices.splice(i, 0, splice);\n i++;\n\n var offset = sp
lice.addedCount - splice.removed.length\n current.index += offset;\n
insertionOffset += offset;\n }\n }\n\n if (!inserted)\n splic
es.push(splice);\n }\n\n function createInitialSplices(array, changeRecords) {
\n var splices = [];\n\n for (var i = 0; i < changeRecords.length; i++) {\
n var record = changeRecords[i];\n switch(record.type) {\n case
'splice':\n mergeSplice(splices, record.index, record.removed.slice(),
record.addedCount);\n break;\n case 'add':\n case 'updat
e':\n case 'delete':\n if (!isIndex(record.name))\n c
ontinue;\n var index = toNumber(record.name);\n if (index < 0)
\n continue;\n mergeSplice(splices, index, [record.oldValue]
, 1);\n break;\n default:\n console.error('Unexpected r
ecord type: ' + JSON.stringify(record));\n break;\n }\n }\n\n
return splices;\n }\n\n function projectArraySplices(array, changeRecords) {
\n var splices = [];\n\n createInitialSplices(array, changeRecords).forEac
h(function(splice) {\n if (splice.addedCount == 1 && splice.removed.length
== 1) {\n if (splice.removed[0] !== array[splice.index])\n splic
es.push(splice);\n\n return\n };\n\n splices = splices.concat(c
alcSplices(array, splice.index, splice.index + splice.addedCount,\n
splice.removed, 0, splice.removed.length));\n }
);\n\n return splices;\n }\n\n global.Observer = Observer;\n global.Observ
er.runEOM_ = runEOM;\n global.Observer.observerSentinel_ = observerSentinel; //
for testing.\n global.Observer.hasObjectObserve = hasObserve;\n global.ArrayO
bserver = ArrayObserver;\n global.ArrayObserver.calculateSplices = function(cur
rent, previous) {\n return arraySplice.calculateSplices(current, previous);\n
};\n\n global.ArraySplice = ArraySplice;\n global.ObjectObserver = ObjectObs
erver;\n global.PathObserver = PathObserver;\n global.CompoundObserver = Compo
undObserver;\n global.Path = Path;\n global.ObserverTransform = ObserverTransf
orm;\n})(typeof global !== 'undefined' && global && typeof module !== 'undefined
' && module ? global : this || window);\n\n// Copyright (c) 2014 The Polymer Pro
ject Authors. All rights reserved.\n// This code may only be used under the BSD
style license found at http://polymer.github.io/LICENSE.txt\n// The complete set
of authors may be found at http://polymer.github.io/AUTHORS.txt\n// The complet
e set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\
n// Code distributed by Google as part of the polymer project is also\n// subjec
t to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
\n\n(function(global) {\n 'use strict';\n\n var filter = Array.prototype.filte
r.call.bind(Array.prototype.filter);\n\n function getTreeScope(node) {\n whi
le (node.parentNode) {\n node = node.parentNode;\n }\n\n return typeo
f node.getElementById === 'function' ? node : null;\n }\n\n Node.prototype.bin
d = function(name, observable) {\n console.error('Unhandled binding to Node:
', this, name, observable);\n };\n\n Node.prototype.bindFinished = function()
{};\n\n function updateBindings(node, name, binding) {\n var bindings = node
.bindings_;\n if (!bindings)\n bindings = node.bindings_ = {};\n\n if
(bindings[name])\n binding[name].close();\n\n return bindings[name] = b
inding;\n }\n\n function returnBinding(node, name, binding) {\n return bind
ing;\n }\n\n function sanitizeValue(value) {\n return value == null ? '' :
value;\n }\n\n function updateText(node, value) {\n node.data = sanitizeVal
ue(value);\n }\n\n function textBinding(node) {\n return function(value) {\
n return updateText(node, value);\n };\n }\n\n var maybeUpdateBindings
= returnBinding;\n\n Object.defineProperty(Platform, 'enableBindingsReflection
', {\n get: function() {\n return maybeUpdateBindings === updateBindings
;\n },\n set: function(enable) {\n maybeUpdateBindings = enable ? upd
ateBindings : returnBinding;\n return enable;\n },\n configurable: tr
ue\n });\n\n Text.prototype.bind = function(name, value, oneTime) {\n if (n
ame !== 'textContent')\n return Node.prototype.bind.call(this, name, value,
oneTime);\n\n if (oneTime)\n return updateText(this, value);\n\n var
observable = value;\n updateText(this, observable.open(textBinding(this)));\
n return maybeUpdateBindings(this, name, observable);\n }\n\n function upda
teAttribute(el, name, conditional, value) {\n if (conditional) {\n if (v
alue)\n el.setAttribute(name, '');\n else\n el.removeAttribut
e(name);\n return;\n }\n\n el.setAttribute(name, sanitizeValue(value)
);\n }\n\n function attributeBinding(el, name, conditional) {\n return func
tion(value) {\n updateAttribute(el, name, conditional, value);\n };\n }
\n\n Element.prototype.bind = function(name, value, oneTime) {\n var conditi
onal = name[name.length - 1] == '?';\n if (conditional) {\n this.removeA
ttribute(name);\n name = name.slice(0, -1);\n }\n\n if (oneTime)\n
return updateAttribute(this, name, conditional, value);\n\n\n var observab
le = value;\n updateAttribute(this, name, conditional,\n observable.op
en(attributeBinding(this, name, conditional)));\n\n return maybeUpdateBinding
s(this, name, observable);\n };\n\n var checkboxEventType;\n (function() {\n
// Attempt to feature-detect which event (change or click) is fired first\n
// for checkboxes.\n var div = document.createElement('div');\n var chec
kbox = div.appendChild(document.createElement('input'));\n checkbox.setAttrib
ute('type', 'checkbox');\n var first;\n var count = 0;\n checkbox.addEv
entListener('click', function(e) {\n count++;\n first = first || 'clic
k';\n });\n checkbox.addEventListener('change', function() {\n count+
+;\n first = first || 'change';\n });\n\n var event = document.create
Event('MouseEvent');\n event.initMouseEvent(\"click\", true, true, window, 0,
0, 0, 0, 0, false,\n false, false, false, 0, null);\n checkbox.dispat
chEvent(event);\n // WebKit/Blink don't fire the change event if the element
is outside the\n // document, so assume 'change' for that case.\n checkbox
EventType = count == 1 ? 'change' : first;\n })();\n\n function getEventForInp
utType(element) {\n switch (element.type) {\n case 'checkbox':\n
return checkboxEventType;\n case 'radio':\n case 'select-multiple':\n
case 'select-one':\n return 'change';\n case 'range':\n
if (/Trident|MSIE/.test(navigator.userAgent))\n return 'change';\n
default:\n return 'input';\n }\n }\n\n function updateInput(input,
property, value, santizeFn) {\n input[property] = (santizeFn || sanitizeValue
)(value);\n }\n\n function inputBinding(input, property, santizeFn) {\n ret
urn function(value) {\n return updateInput(input, property, value, santizeF
n);\n }\n }\n\n function noop() {}\n\n function bindInputEvent(input, prop
erty, observable, postEventFn) {\n var eventType = getEventForInputType(input
);\n\n function eventHandler() {\n observable.setValue(input[property]);
\n observable.discardChanges();\n (postEventFn || noop)(input);\n
Platform.performMicrotaskCheckpoint();\n }\n input.addEventListener(event
Type, eventHandler);\n\n return {\n close: function() {\n input.r
emoveEventListener(eventType, eventHandler);\n observable.close();\n
},\n\n observable_: observable\n }\n }\n\n function booleanSanitize(v
alue) {\n return Boolean(value);\n }\n\n // |element| is assumed to be an H
TMLInputElement with |type| == 'radio'.\n // Returns an array containing all ra
dio buttons other than |element| that\n // have the same |name|, either in the
form that |element| belongs to or,\n // if no form, in the document tree to whi
ch |element| belongs.\n //\n // This implementation is based upon the HTML spe
c definition of a\n // \"radio button group\":\n // http://www.whatwg.org/sp
ecs/web-apps/current-work/multipage/number-state.html#radio-button-group\n //\n
function getAssociatedRadioButtons(element) {\n if (element.form) {\n
return filter(element.form.elements, function(el) {\n return el != elemen
t &&\n el.tagName == 'INPUT' &&\n el.type == 'radio' &&\n
el.name == element.name;\n });\n } else {\n var treeScop
e = getTreeScope(element);\n if (!treeScope)\n return [];\n var
radios = treeScope.querySelectorAll(\n 'input[type=\"radio\"][name=\"'
+ element.name + '\"]');\n return filter(radios, function(el) {\n r
eturn el != element && !el.form;\n });\n }\n }\n\n function checkedPos
tEvent(input) {\n // Only the radio button that is getting checked gets an ev
ent. We\n // therefore find all the associated radio buttons and update their
\n // check binding manually.\n if (input.tagName === 'INPUT' &&\n
input.type === 'radio') {\n getAssociatedRadioButtons(input).forEach(functi
on(radio) {\n var checkedBinding = radio.bindings_.checked;\n if (
checkedBinding) {\n // Set the value directly to avoid an infinite call
stack.\n checkedBinding.observable_.setValue(false);\n }\n
});\n }\n }\n\n HTMLInputElement.prototype.bind = function(name, value, on
eTime) {\n if (name !== 'value' && name !== 'checked')\n return HTMLElem
ent.prototype.bind.call(this, name, value, oneTime);\n\n this.removeAttribute
(name);\n var sanitizeFn = name == 'checked' ? booleanSanitize : sanitizeValu
e;\n var postEventFn = name == 'checked' ? checkedPostEvent : noop;\n\n if
(oneTime)\n return updateInput(this, name, value, sanitizeFn);\n\n\n va
r observable = value;\n var binding = bindInputEvent(this, name, observable,
postEventFn);\n updateInput(this, name,\n observable.open(inpu
tBinding(this, name, sanitizeFn)),\n sanitizeFn);\n\n // Check
boxes may need to update bindings of other checkboxes.\n return updateBinding
s(this, name, binding);\n }\n\n HTMLTextAreaElement.prototype.bind = function(
name, value, oneTime) {\n if (name !== 'value')\n return HTMLElement.pro
totype.bind.call(this, name, value, oneTime);\n\n this.removeAttribute('value
');\n\n if (oneTime)\n return updateInput(this, 'value', value);\n\n
var observable = value;\n var binding = bindInputEvent(this, 'value', observa
ble);\n updateInput(this, 'value',\n observable.open(inputBind
ing(this, 'value', sanitizeValue)));\n return maybeUpdateBindings(this, name,
binding);\n }\n\n function updateOption(option, value) {\n var parentNode
= option.parentNode;;\n var select;\n var selectBinding;\n var oldValue
;\n if (parentNode instanceof HTMLSelectElement &&\n parentNode.bindin
gs_ &&\n parentNode.bindings_.value) {\n select = parentNode;\n
selectBinding = select.bindings_.value;\n oldValue = select.value;\n }\
n\n option.value = sanitizeValue(value);\n\n if (select && select.value !=
oldValue) {\n selectBinding.observable_.setValue(select.value);\n sel
ectBinding.observable_.discardChanges();\n Platform.performMicrotaskCheckpo
int();\n }\n }\n\n function optionBinding(option) {\n return function(va
lue) {\n updateOption(option, value);\n }\n }\n\n HTMLOptionElement.pr
ototype.bind = function(name, value, oneTime) {\n if (name !== 'value')\n
return HTMLElement.prototype.bind.call(this, name, value, oneTime);\n\n thi
s.removeAttribute('value');\n\n if (oneTime)\n return updateOption(this,
value);\n\n var observable = value;\n var binding = bindInputEvent(this,
'value', observable);\n updateOption(this, observable.open(optionBinding(this
)));\n return maybeUpdateBindings(this, name, binding);\n }\n\n HTMLSelectE
lement.prototype.bind = function(name, value, oneTime) {\n if (name === 'sele
ctedindex')\n name = 'selectedIndex';\n\n if (name !== 'selectedIndex' &
& name !== 'value')\n return HTMLElement.prototype.bind.call(this, name, va
lue, oneTime);\n\n this.removeAttribute(name);\n\n if (oneTime)\n ret
urn updateInput(this, name, value);\n\n var observable = value;\n var bind
ing = bindInputEvent(this, name, observable);\n updateInput(this, name,\n
observable.open(inputBinding(this, name)));\n\n // Option update
events may need to access select bindings.\n return updateBindings(this, name
, binding);\n }\n})(this);\n\n// Copyright (c) 2014 The Polymer Project Authors
. All rights reserved.\n// This code may only be used under the BSD style licens
e found at http://polymer.github.io/LICENSE.txt\n// The complete set of authors
may be found at http://polymer.github.io/AUTHORS.txt\n// The complete set of con
tributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n// Code dis
tributed by Google as part of the polymer project is also\n// subject to an addi
tional IP rights grant found at http://polymer.github.io/PATENTS.txt\n\n(functio
n(global) {\n 'use strict';\n\n function assert(v) {\n if (!v)\n throw
new Error('Assertion failed');\n }\n\n var forEach = Array.prototype.forEach.
call.bind(Array.prototype.forEach);\n\n function getFragmentRoot(node) {\n v
ar p;\n while (p = node.parentNode) {\n node = p;\n }\n\n return n
ode;\n }\n\n function searchRefId(node, id) {\n if (!id)\n return;\n\n
var ref;\n var selector = '#' + id;\n while (!ref) {\n node = get
FragmentRoot(node);\n\n if (node.protoContent_)\n ref = node.protoCo
ntent_.querySelector(selector);\n else if (node.getElementById)\n re
f = node.getElementById(id);\n\n if (ref || !node.templateCreator_)\n
break\n\n node = node.templateCreator_;\n }\n\n return ref;\n }\n\
n function getInstanceRoot(node) {\n while (node.parentNode) {\n node =
node.parentNode;\n }\n return node.templateCreator_ ? node : null;\n }\n
\n var Map;\n if (global.Map && typeof global.Map.prototype.forEach === 'funct
ion') {\n Map = global.Map;\n } else {\n Map = function() {\n this.k
eys = [];\n this.values = [];\n };\n\n Map.prototype = {\n set:
function(key, value) {\n var index = this.keys.indexOf(key);\n if
(index < 0) {\n this.keys.push(key);\n this.values.push(value)
;\n } else {\n this.values[index] = value;\n }\n },\
n\n get: function(key) {\n var index = this.keys.indexOf(key);\n
if (index < 0)\n return;\n\n return this.values[index];\n
},\n\n delete: function(key, value) {\n var index = this.keys.ind
exOf(key);\n if (index < 0)\n return false;\n\n this.keys
.splice(index, 1);\n this.values.splice(index, 1);\n return true;\
n },\n\n forEach: function(f, opt_this) {\n for (var i = 0; i <
this.keys.length; i++)\n f.call(opt_this || this, this.values[i], this
.keys[i], this);\n }\n };\n }\n\n // JScript does not have __proto__.
We wrap all object literals with\n // createObject which uses Object.create, Ob
ject.defineProperty and\n // Object.getOwnPropertyDescriptor to create a new ob
ject that does the exact\n // same thing. The main downside to this solution is
that we have to extract\n // all those property descriptors for IE.\n var cre
ateObject = ('__proto__' in {}) ?\n function(obj) { return obj; } :\n
function(obj) {\n var proto = obj.__proto__;\n if (!proto)\n
return obj;\n var newObject = Object.create(proto);\n Object.g
etOwnPropertyNames(obj).forEach(function(name) {\n Object.definePropert
y(newObject, name,\n Object.getOwnPropertyDescript
or(obj, name));\n });\n return newObject;\n };\n\n // IE doe
s not support have Document.prototype.contains.\n if (typeof document.contains
!= 'function') {\n Document.prototype.contains = function(node) {\n if (
node === this || node.parentNode === this)\n return true;\n return t
his.documentElement.contains(node);\n }\n }\n\n var BIND = 'bind';\n var R
EPEAT = 'repeat';\n var IF = 'if';\n\n var templateAttributeDirectives = {\n
'template': true,\n 'repeat': true,\n 'bind': true,\n 'ref': true\n
};\n\n var semanticTemplateElements = {\n 'THEAD': true,\n 'TBODY': true,
\n 'TFOOT': true,\n 'TH': true,\n 'TR': true,\n 'TD': true,\n 'CO
LGROUP': true,\n 'COL': true,\n 'CAPTION': true,\n 'OPTION': true,\n
'OPTGROUP': true\n };\n\n var hasTemplateElement = typeof HTMLTemplateElement
!== 'undefined';\n if (hasTemplateElement) {\n // TODO(rafaelw): Remove whe
n fix for\n // https://codereview.chromium.org/164803002/\n // makes it to
Chrome release.\n (function() {\n var t = document.createElement('templ
ate');\n var d = t.content.ownerDocument;\n var html = d.appendChild(d
.createElement('html'));\n var head = html.appendChild(d.createElement('hea
d'));\n var base = d.createElement('base');\n base.href = document.bas
eURI;\n head.appendChild(base);\n })();\n }\n\n var allTemplatesSelect
ors = 'template, ' +\n Object.keys(semanticTemplateElements).map(function(t
agName) {\n return tagName.toLowerCase() + '[template]';\n }).join('
, ');\n\n function isSVGTemplate(el) {\n return el.tagName == 'template' &&\
n el.namespaceURI == 'http://www.w3.org/2000/svg';\n }\n\n function
isHTMLTemplate(el) {\n return el.tagName == 'TEMPLATE' &&\n el.name
spaceURI == 'http://www.w3.org/1999/xhtml';\n }\n\n function isAttributeTempla
te(el) {\n return Boolean(semanticTemplateElements[el.tagName] &&\n
el.hasAttribute('template'));\n }\n\n function isTemplate(el) {\n
if (el.isTemplate_ === undefined)\n el.isTemplate_ = el.tagName == 'TEMPLAT
E' || isAttributeTemplate(el);\n\n return el.isTemplate_;\n }\n\n // FIXME:
Observe templates being added/removed from documents\n // FIXME: Expose impera
tive API to decorate and observe templates in\n // \"disconnected tress\" (e.g.
ShadowRoot)\n document.addEventListener('DOMContentLoaded', function(e) {\n
bootstrapTemplatesRecursivelyFrom(document);\n // FIXME: Is this needed? See
ms like it shouldn't be.\n Platform.performMicrotaskCheckpoint();\n }, false
);\n\n function forAllTemplatesFrom(node, fn) {\n var subTemplates = node.qu
erySelectorAll(allTemplatesSelectors);\n\n if (isTemplate(node))\n fn(no
de)\n forEach(subTemplates, fn);\n }\n\n function bootstrapTemplatesRecursi
velyFrom(node) {\n function bootstrap(template) {\n if (!HTMLTemplateEle
ment.decorate(template))\n bootstrapTemplatesRecursivelyFrom(template.con
tent);\n }\n\n forAllTemplatesFrom(node, bootstrap);\n }\n\n if (!hasTem
plateElement) {\n /**\n * This represents a <template> element.\n * @
constructor\n * @extends {HTMLElement}\n */\n global.HTMLTemplateElem
ent = function() {\n throw TypeError('Illegal constructor');\n };\n }\n
\n var hasProto = '__proto__' in {};\n\n function mixin(to, from) {\n Objec
t.getOwnPropertyNames(from).forEach(function(name) {\n Object.definePropert
y(to, name,\n Object.getOwnPropertyDescriptor(from, n
ame));\n });\n }\n\n // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/sp
ec/templates/index.html#dfn-template-contents-owner\n function getOrCreateTempl
ateContentsOwner(template) {\n var doc = template.ownerDocument\n if (!doc
.defaultView)\n return doc;\n var d = doc.templateContentsOwner_;\n i
f (!d) {\n // TODO(arv): This should either be a Document or HTMLDocument d
epending\n // on doc.\n d = doc.implementation.createHTMLDocument('');
\n while (d.lastChild) {\n d.removeChild(d.lastChild);\n }\n
doc.templateContentsOwner_ = d;\n }\n return d;\n }\n\n function getT
emplateStagingDocument(template) {\n if (!template.stagingDocument_) {\n
var owner = template.ownerDocument;\n if (!owner.stagingDocument_) {\n
owner.stagingDocument_ = owner.implementation.createHTMLDocument('');\n
owner.stagingDocument_.isStagingDocument = true;\n // TODO(rafaelw): R
emove when fix for\n // https://codereview.chromium.org/164803002/\n
// makes it to Chrome release.\n var base = owner.stagingDocument_.cre
ateElement('base');\n base.href = document.baseURI;\n owner.stagin
gDocument_.head.appendChild(base);\n\n owner.stagingDocument_.stagingDocu
ment_ = owner.stagingDocument_;\n }\n\n template.stagingDocument_ = ow
ner.stagingDocument_;\n }\n\n return template.stagingDocument_;\n }\n\n
// For non-template browsers, the parser will disallow <template> in certain\n
// locations, so we allow \"attribute templates\" which combine the template\n
// element with the top-level container node of the content, e.g.\n //\n //
<tr template repeat=\"{{ foo }}\"\" class=\"bar\"><td>Bar</td></tr>\n //\n //
becomes\n //\n // <template repeat=\"{{ foo }}\">\n // + #document-fragme
nt\n // + <tr class=\"bar\">\n // + <td>Bar</td>\n //\n function e
xtractTemplateFromAttributeTemplate(el) {\n var template = el.ownerDocument.c
reateElement('template');\n el.parentNode.insertBefore(template, el);\n\n
var attribs = el.attributes;\n var count = attribs.length;\n while (count-
- > 0) {\n var attrib = attribs[count];\n if (templateAttributeDirecti
ves[attrib.name]) {\n if (attrib.name !== 'template')\n template
.setAttribute(attrib.name, attrib.value);\n el.removeAttribute(attrib.nam
e);\n }\n }\n\n return template;\n }\n\n function extractTemplateFr
omSVGTemplate(el) {\n var template = el.ownerDocument.createElement('template
');\n el.parentNode.insertBefore(template, el);\n\n var attribs = el.attri
butes;\n var count = attribs.length;\n while (count-- > 0) {\n var at
trib = attribs[count];\n template.setAttribute(attrib.name, attrib.value);\
n el.removeAttribute(attrib.name);\n }\n\n el.parentNode.removeChild(
el);\n return template;\n }\n\n function liftNonNativeTemplateChildrenIntoC
ontent(template, el, useRoot) {\n var content = template.content;\n if (us
eRoot) {\n content.appendChild(el);\n return;\n }\n\n var child;
\n while (child = el.firstChild) {\n content.appendChild(child);\n }\
n }\n\n var templateObserver;\n if (typeof MutationObserver == 'function') {\
n templateObserver = new MutationObserver(function(records) {\n for (var
i = 0; i < records.length; i++) {\n records[i].target.refChanged_();\n
}\n });\n }\n\n /**\n * Ensures proper API and content model for temp
late elements.\n * @param {HTMLTemplateElement} opt_instanceRef The template e
lement which\n * |el| template element will return as the value of its ref
(), and whose\n * content will be used as source when createInstance() is
invoked.\n */\n HTMLTemplateElement.decorate = function(el, opt_instanceRef)
{\n if (el.templateIsDecorated_)\n return false;\n\n var templateElem
ent = el;\n templateElement.templateIsDecorated_ = true;\n\n var isNativeH
TMLTemplate = isHTMLTemplate(templateElement) &&\n
hasTemplateElement;\n var bootstrapContents = isNativeHTMLTemplate;\n var
liftContents = !isNativeHTMLTemplate;\n var liftRoot = false;\n\n if (!is
NativeHTMLTemplate) {\n if (isAttributeTemplate(templateElement)) {\n
assert(!opt_instanceRef);\n templateElement = extractTemplateFromAttrib
uteTemplate(el);\n templateElement.templateIsDecorated_ = true;\n
isNativeHTMLTemplate = hasTemplateElement;\n liftRoot = true;\n } el
se if (isSVGTemplate(templateElement)) {\n templateElement = extractTempl
ateFromSVGTemplate(el);\n templateElement.templateIsDecorated_ = true;\n
isNativeHTMLTemplate = hasTemplateElement;\n }\n }\n\n if (!is
NativeHTMLTemplate) {\n fixTemplateElementPrototype(templateElement);\n
var doc = getOrCreateTemplateContentsOwner(templateElement);\n templateEl
ement.content_ = doc.createDocumentFragment();\n }\n\n if (opt_instanceRef
) {\n // template is contained within an instance, its direct content must
be\n // empty\n templateElement.instanceRef_ = opt_instanceRef;\n }
else if (liftContents) {\n liftNonNativeTemplateChildrenIntoContent(templa
teElement,\n el,\n
liftRoot);\n } else if (bootstrapContents) {\n
bootstrapTemplatesRecursivelyFrom(templateElement.content);\n }\n\n
return true;\n };\n\n // TODO(rafaelw): This used to decorate recursively all
templates from a given\n // node. This happens by default on 'DOMContentLoaded'
, but may be needed\n // in subtrees not descendent from document (e.g. ShadowR
oot).\n // Review whether this is the right public API.\n HTMLTemplateElement.
bootstrap = bootstrapTemplatesRecursivelyFrom;\n\n var htmlElement = global.HTM
LUnknownElement || HTMLElement;\n\n var contentDescriptor = {\n get: functio
n() {\n return this.content_;\n },\n enumerable: true,\n configura
ble: true\n };\n\n if (!hasTemplateElement) {\n // Gecko is more picky with
the prototype than WebKit. Make sure to use the\n // same prototype as creat
ed in the constructor.\n HTMLTemplateElement.prototype = Object.create(htmlEl
ement.prototype);\n\n Object.defineProperty(HTMLTemplateElement.prototype, 'c
ontent',\n contentDescriptor);\n }\n\n function fixTe
mplateElementPrototype(el) {\n if (hasProto)\n el.__proto__ = HTMLTempla
teElement.prototype;\n else\n mixin(el, HTMLTemplateElement.prototype);\
n }\n\n function ensureSetModelScheduled(template) {\n if (!template.setMod
elFn_) {\n template.setModelFn_ = function() {\n template.setModelFn
Scheduled_ = false;\n var map = getBindings(template,\n templa
te.delegate_ && template.delegate_.prepareBinding);\n processBindings(tem
plate, map, template.model_);\n };\n }\n\n if (!template.setModelFnSc
heduled_) {\n template.setModelFnScheduled_ = true;\n Observer.runEOM_
(template.setModelFn_);\n }\n }\n\n mixin(HTMLTemplateElement.prototype, {\
n bind: function(name, value, oneTime) {\n if (name != 'ref')\n r
eturn Element.prototype.bind.call(this, name, value, oneTime);\n\n var self
= this;\n var ref = oneTime ? value : value.open(function(ref) {\n
self.setAttribute('ref', ref);\n self.refChanged_();\n });\n\n
this.setAttribute('ref', ref);\n this.refChanged_();\n if (oneTime)\n
return;\n\n if (!this.bindings_) {\n this.bindings_ = { ref:
value };\n } else {\n this.bindings_.ref = value;\n }\n\n
return value;\n },\n\n processBindingDirectives_: function(directives) {\n
if (this.iterator_)\n this.iterator_.closeDeps();\n\n if (!dir
ectives.if && !directives.bind && !directives.repeat) {\n if (this.iterat
or_) {\n this.iterator_.close();\n this.iterator_ = undefined;
\n }\n\n return;\n }\n\n if (!this.iterator_) {\n
this.iterator_ = new TemplateIterator(this);\n }\n\n this.iterator_.u
pdateDependencies(directives, this.model_);\n\n if (templateObserver) {\n
templateObserver.observe(this, { attributes: true,\n
attributeFilter: ['ref'] });\n }\n\n return this.it
erator_;\n },\n\n createInstance: function(model, bindingDelegate, delegat
e_) {\n if (bindingDelegate)\n delegate_ = this.newDelegate_(binding
Delegate);\n else if (!delegate_)\n delegate_ = this.delegate_;\n\n
if (!this.refContent_)\n this.refContent_ = this.ref_.content;\n
var content = this.refContent_;\n if (content.firstChild === null)\n
return emptyInstance;\n\n var map = getInstanceBindingMap(content, deleg
ate_);\n var stagingDocument = getTemplateStagingDocument(this);\n var
instance = stagingDocument.createDocumentFragment();\n instance.templateCr
eator_ = this;\n instance.protoContent_ = content;\n instance.bindings
_ = [];\n instance.terminator_ = null;\n var instanceRecord = instance
.templateInstance_ = {\n firstNode: null,\n lastNode: null,\n
model: model\n };\n\n var i = 0;\n var collectTerminator = fal
se;\n for (var child = content.firstChild; child; child = child.nextSibling
) {\n // The terminator of the instance is the clone of the last child of
the\n // content. If the last child is an active template, it may produc
e\n // instances as a result of production, so simply collecting the last
\n // child of the instance after it has finished producing may be wrong.
\n if (child.nextSibling === null)\n collectTerminator = true;\n
\n var clone = cloneAndBindInstance(child, instance, stagingDocument,\n
map.children[i++],\n
model,\n delegate_,\
n instance.bindings_);\n clone.te
mplateInstance_ = instanceRecord;\n if (collectTerminator)\n ins
tance.terminator_ = clone;\n }\n\n instanceRecord.firstNode = instance
.firstChild;\n instanceRecord.lastNode = instance.lastChild;\n instanc
e.templateCreator_ = undefined;\n instance.protoContent_ = undefined;\n
return instance;\n },\n\n get model() {\n return this.model_;\n
},\n\n set model(model) {\n this.model_ = model;\n ensureSetModelSc
heduled(this);\n },\n\n get bindingDelegate() {\n return this.delegat
e_ && this.delegate_.raw;\n },\n\n refChanged_: function() {\n if (!t
his.iterator_ || this.refContent_ === this.ref_.content)\n return;\n\n
this.refContent_ = undefined;\n this.iterator_.valueChanged();\n th
is.iterator_.updateIteratedValue(this.iterator_.getUpdatedValue());\n },\n\n
clear: function() {\n this.model_ = undefined;\n this.delegate_ = u
ndefined;\n if (this.bindings_ && this.bindings_.ref)\n this.binding
s_.ref.close()\n this.refContent_ = undefined;\n if (!this.iterator_)\
n return;\n this.iterator_.valueChanged();\n this.iterator_.clo
se()\n this.iterator_ = undefined;\n },\n\n setDelegate_: function(de
legate) {\n this.delegate_ = delegate;\n this.bindingMap_ = undefined;
\n if (this.iterator_) {\n this.iterator_.instancePositionChangedFn_
= undefined;\n this.iterator_.instanceModelFn_ = undefined;\n }\n
},\n\n newDelegate_: function(bindingDelegate) {\n if (!bindingDelegat
e)\n return;\n\n function delegateFn(name) {\n var fn = bindi
ngDelegate && bindingDelegate[name];\n if (typeof fn != 'function')\n
return;\n\n return function() {\n return fn.apply(bindingD
elegate, arguments);\n };\n }\n\n return {\n bindingMaps
: {},\n raw: bindingDelegate,\n prepareBinding: delegateFn('prepar
eBinding'),\n prepareInstanceModel: delegateFn('prepareInstanceModel'),\n
prepareInstancePositionChanged:\n delegateFn('prepareInstance
PositionChanged')\n };\n },\n\n set bindingDelegate(bindingDelegate)
{\n if (this.delegate_) {\n throw Error('Template must be cleared be
fore a new bindingDelegate ' +\n 'can be assigned');\n }
\n\n this.setDelegate_(this.newDelegate_(bindingDelegate));\n },\n\n
get ref_() {\n var ref = searchRefId(this, this.getAttribute('ref'));\n
if (!ref)\n ref = this.instanceRef_;\n\n if (!ref)\n return
this;\n\n var nextRef = ref.ref_;\n return nextRef ? nextRef : ref;\n
}\n });\n\n // Returns\n // a) undefined if there are no mustaches.\n
// b) [TEXT, (ONE_TIME?, PATH, DELEGATE_FN, TEXT)+] if there is at least one m
ustache.\n function parseMustaches(s, name, node, prepareBindingFn) {\n if (
!s || !s.length)\n return;\n\n var tokens;\n var length = s.length;\n
var startIndex = 0, lastIndex = 0, endIndex = 0;\n var onlyOneTime = true
;\n while (lastIndex < length) {\n var startIndex = s.indexOf('{{', last
Index);\n var oneTimeStart = s.indexOf('[[', lastIndex);\n var oneTime
= false;\n var terminator = '}}';\n\n if (oneTimeStart >= 0 &&\n
(startIndex < 0 || oneTimeStart < startIndex)) {\n startIndex = oneT
imeStart;\n oneTime = true;\n terminator = ']]';\n }\n\n
endIndex = startIndex < 0 ? -1 : s.indexOf(terminator, startIndex + 2);\n\n
if (endIndex < 0) {\n if (!tokens)\n return;\n\n tokens
.push(s.slice(lastIndex)); // TEXT\n break;\n }\n\n tokens = to
kens || [];\n tokens.push(s.slice(lastIndex, startIndex)); // TEXT\n v
ar pathString = s.slice(startIndex + 2, endIndex).trim();\n tokens.push(one
Time); // ONE_TIME?\n onlyOneTime = onlyOneTime && oneTime;\n var dele
gateFn = prepareBindingFn &&\n prepareBindingFn(pathString
, name, node);\n // Don't try to parse the expression if there's a prepareB
inding function\n if (delegateFn == null) {\n tokens.push(Path.get(p
athString)); // PATH\n } else {\n tokens.push(null);\n }\n
tokens.push(delegateFn); // DELEGATE_FN\n lastIndex = endIndex + 2;\n }
\n\n if (lastIndex === length)\n tokens.push(''); // TEXT\n\n tokens.
hasOnePath = tokens.length === 5;\n tokens.isSimplePath = tokens.hasOnePath &
&\n tokens[0] == '' &&\n token
s[4] == '';\n tokens.onlyOneTime = onlyOneTime;\n\n tokens.combinator = fu
nction(values) {\n var newValue = tokens[0];\n\n for (var i = 1; i < t
okens.length; i += 4) {\n var value = tokens.hasOnePath ? values : values
[(i - 1) / 4];\n if (value !== undefined)\n newValue += value;\n
newValue += tokens[i + 3];\n }\n\n return newValue;\n }\n\n
return tokens;\n };\n\n function processOneTimeBinding(name, tokens, node,
model) {\n if (tokens.hasOnePath) {\n var delegateFn = tokens[3];\n
var value = delegateFn ? delegateFn(model, node, true) :\n
tokens[2].getValueFrom(model);\n return tokens.isSimplePath ? va
lue : tokens.combinator(value);\n }\n\n var values = [];\n for (var i =
1; i < tokens.length; i += 4) {\n var delegateFn = tokens[i + 2];\n v
alues[(i - 1) / 4] = delegateFn ? delegateFn(model, node) :\n tokens[i
+ 1].getValueFrom(model);\n }\n\n return tokens.combinator(values);\n }\n
\n function processSinglePathBinding(name, tokens, node, model) {\n var dele
gateFn = tokens[3];\n var observer = delegateFn ? delegateFn(model, node, fal
se) :\n new PathObserver(model, tokens[2]);\n\n return tokens.isSimple
Path ? observer :\n new ObserverTransform(observer, tokens.combinator);\n
}\n\n function processBinding(name, tokens, node, model) {\n if (tokens.on
lyOneTime)\n return processOneTimeBinding(name, tokens, node, model);\n\n
if (tokens.hasOnePath)\n return processSinglePathBinding(name, tokens, no
de, model);\n\n var observer = new CompoundObserver();\n\n for (var i = 1;
i < tokens.length; i += 4) {\n var oneTime = tokens[i];\n var delegat
eFn = tokens[i + 2];\n\n if (delegateFn) {\n var value = delegateFn(
model, node, oneTime);\n if (oneTime)\n observer.addPath(value)\
n else\n observer.addObserver(value);\n continue;\n
}\n\n var path = tokens[i + 1];\n if (oneTime)\n observer.addPa
th(path.getValueFrom(model))\n else\n observer.addPath(model, path);
\n }\n\n return new ObserverTransform(observer, tokens.combinator);\n }\n
\n function processBindings(node, bindings, model, instanceBindings) {\n for
(var i = 0; i < bindings.length; i += 2) {\n var name = bindings[i]\n
var tokens = bindings[i + 1];\n var value = processBinding(name, tokens, n
ode, model);\n var binding = node.bind(name, value, tokens.onlyOneTime);\n
if (binding && instanceBindings)\n instanceBindings.push(binding);\n
}\n\n node.bindFinished();\n if (!bindings.isTemplate)\n return;\
n\n node.model_ = model;\n var iter = node.processBindingDirectives_(bindi
ngs);\n if (instanceBindings && iter)\n instanceBindings.push(iter);\n
}\n\n function parseWithDefault(el, name, prepareBindingFn) {\n var v = el.g
etAttribute(name);\n return parseMustaches(v == '' ? '{{}}' : v, name, el, pr
epareBindingFn);\n }\n\n function parseAttributeBindings(element, prepareBindi
ngFn) {\n assert(element);\n\n var bindings = [];\n var ifFound = false
;\n var bindFound = false;\n\n for (var i = 0; i < element.attributes.leng
th; i++) {\n var attr = element.attributes[i];\n var name = attr.name;
\n var value = attr.value;\n\n // Allow bindings expressed in attribut
es to be prefixed with underbars.\n // We do this to allow correct semantic
s for browsers that don't implement\n // <template> where certain attribute
s might trigger side-effects -- and\n // for IE which sanitizes certain att
ributes, disallowing mustache\n // replacements in their text.\n while
(name[0] === '_') {\n name = name.substring(1);\n }\n\n if (is
Template(element) &&\n (name === IF || name === BIND || name === REPEAT
)) {\n continue;\n }\n\n var tokens = parseMustaches(value, nam
e, element,\n prepareBindingFn);\n if (!to
kens)\n continue;\n\n bindings.push(name, tokens);\n }\n\n if
(isTemplate(element)) {\n bindings.isTemplate = true;\n bindings.if =
parseWithDefault(element, IF, prepareBindingFn);\n bindings.bind = parseWit
hDefault(element, BIND, prepareBindingFn);\n bindings.repeat = parseWithDef
ault(element, REPEAT, prepareBindingFn);\n\n if (bindings.if && !bindings.b
ind && !bindings.repeat)\n bindings.bind = parseMustaches('{{}}', BIND, e
lement, prepareBindingFn);\n }\n\n return bindings;\n }\n\n function get
Bindings(node, prepareBindingFn) {\n if (node.nodeType === Node.ELEMENT_NODE)
\n return parseAttributeBindings(node, prepareBindingFn);\n\n if (node.n
odeType === Node.TEXT_NODE) {\n var tokens = parseMustaches(node.data, 'tex
tContent', node,\n prepareBindingFn);\n if
(tokens)\n return ['textContent', tokens];\n }\n\n return [];\n }
\n\n function cloneAndBindInstance(node, parent, stagingDocument, bindings, mod
el,\n delegate,\n
instanceBindings,\n instanceRecord) {\n var cl
one = parent.appendChild(stagingDocument.importNode(node, false));\n\n var i
= 0;\n for (var child = node.firstChild; child; child = child.nextSibling) {\
n cloneAndBindInstance(child, clone, stagingDocument,\n
bindings.children[i++],\n model,\n
delegate,\n instanceBindings);\n
}\n\n if (bindings.isTemplate) {\n HTMLTemplateElement.decorate(clone, n
ode);\n if (delegate)\n clone.setDelegate_(delegate);\n }\n\n
processBindings(clone, bindings, model, instanceBindings);\n return clone;\n
}\n\n function createInstanceBindingMap(node, prepareBindingFn) {\n var map
= getBindings(node, prepareBindingFn);\n map.children = {};\n var index =
0;\n for (var child = node.firstChild; child; child = child.nextSibling) {\n
map.children[index++] = createInstanceBindingMap(child, prepareBindingFn);
\n }\n\n return map;\n }\n\n var contentUidCounter = 1;\n\n // TODO(raf
aelw): Setup a MutationObserver on content which clears the id\n // so that bin
dingMaps regenerate when the template.content changes.\n function getContentUid
(content) {\n var id = content.id_;\n if (!id)\n id = content.id_ = c
ontentUidCounter++;\n return id;\n }\n\n // Each delegate is associated wit
h a set of bindingMaps, one for each\n // content which may be used by a templa
te. The intent is that each binding\n // delegate gets the opportunity to prepa
re the instance (via the prepare*\n // delegate calls) once across all uses.\n
// TODO(rafaelw): Separate out the parse map from the binding map. In the\n //
current implementation, if two delegates need a binding map for the same\n //
content, the second will have to reparse.\n function getInstanceBindingMap(cont
ent, delegate_) {\n var contentId = getContentUid(content);\n if (delegate
_) {\n var map = delegate_.bindingMaps[contentId];\n if (!map) {\n
map = delegate_.bindingMaps[contentId] =\n createInstanceBindingM
ap(content, delegate_.prepareBinding) || [];\n }\n return map;\n }\
n\n var map = content.bindingMap_;\n if (!map) {\n map = content.bind
ingMap_ =\n createInstanceBindingMap(content, undefined) || [];\n }\
n return map;\n }\n\n Object.defineProperty(Node.prototype, 'templateInstan
ce', {\n get: function() {\n var instance = this.templateInstance_;\n
return instance ? instance :\n (this.parentNode ? this.parentNode.te
mplateInstance : undefined);\n }\n });\n\n var emptyInstance = document.cre
ateDocumentFragment();\n emptyInstance.bindings_ = [];\n emptyInstance.termina
tor_ = null;\n\n function TemplateIterator(templateElement) {\n this.closed
= false;\n this.templateElement_ = templateElement;\n this.instances = [];
\n this.deps = undefined;\n this.iteratedValue = [];\n this.presentValu
e = undefined;\n this.arrayObserver = undefined;\n }\n\n TemplateIterator.p
rototype = {\n closeDeps: function() {\n var deps = this.deps;\n if
(deps) {\n if (deps.ifOneTime === false)\n deps.ifValue.close()
;\n if (deps.oneTime === false)\n deps.value.close();\n }\n
},\n\n updateDependencies: function(directives, model) {\n this.clos
eDeps();\n\n var deps = this.deps = {};\n var template = this.template
Element_;\n\n var ifValue = true;\n if (directives.if) {\n deps
.hasIf = true;\n deps.ifOneTime = directives.if.onlyOneTime;\n dep
s.ifValue = processBinding(IF, directives.if, template, model);\n\n ifVal
ue = deps.ifValue;\n\n // oneTime if & predicate is false. nothing else t
o do.\n if (deps.ifOneTime && !ifValue) {\n this.valueChanged();
\n return;\n }\n\n if (!deps.ifOneTime)\n ifValu
e = ifValue.open(this.updateIfValue, this);\n }\n\n if (directives.rep
eat) {\n deps.repeat = true;\n deps.oneTime = directives.repeat.on
lyOneTime;\n deps.value = processBinding(REPEAT, directives.repeat, templ
ate, model);\n } else {\n deps.repeat = false;\n deps.oneTime
= directives.bind.onlyOneTime;\n deps.value = processBinding(BIND, direc
tives.bind, template, model);\n }\n\n var value = deps.value;\n i
f (!deps.oneTime)\n value = value.open(this.updateIteratedValue, this);\n
\n if (!ifValue) {\n this.valueChanged();\n return;\n }\
n\n this.updateValue(value);\n },\n\n /**\n * Gets the updated va
lue of the bind/repeat. This can potentially call\n * user code (if a bindin
gDelegate is set up) so we try to avoid it if we\n * already have the value
in hand (from Observer.open).\n */\n getUpdatedValue: function() {\n
var value = this.deps.value;\n if (!this.deps.oneTime)\n value = va
lue.discardChanges();\n return value;\n },\n\n updateIfValue: functio
n(ifValue) {\n if (!ifValue) {\n this.valueChanged();\n retur
n;\n }\n\n this.updateValue(this.getUpdatedValue());\n },\n\n up
dateIteratedValue: function(value) {\n if (this.deps.hasIf) {\n var
ifValue = this.deps.ifValue;\n if (!this.deps.ifOneTime)\n ifVal
ue = ifValue.discardChanges();\n if (!ifValue) {\n this.valueCha
nged();\n return;\n }\n }\n\n this.updateValue(value);
\n },\n\n updateValue: function(value) {\n if (!this.deps.repeat)\n
value = [value];\n var observe = this.deps.repeat &&\n
!this.deps.oneTime &&\n Array.isArray(value);\n thi
s.valueChanged(value, observe);\n },\n\n valueChanged: function(value, obs
erveValue) {\n if (!Array.isArray(value))\n value = [];\n\n if
(value === this.iteratedValue)\n return;\n\n this.unobserve();\n
this.presentValue = value;\n if (observeValue) {\n this.arrayObser
ver = new ArrayObserver(this.presentValue);\n this.arrayObserver.open(thi
s.handleSplices, this);\n }\n\n this.handleSplices(ArrayObserver.calcu
lateSplices(this.presentValue,\n
this.iteratedValue));\n },\n\n getLastInstanceNode: function(index
) {\n if (index == -1)\n return this.templateElement_;\n var in
stance = this.instances[index];\n var terminator = instance.terminator_;\n
if (!terminator)\n return this.getLastInstanceNode(index - 1);\n\n
if (terminator.nodeType !== Node.ELEMENT_NODE ||\n this.templateEle
ment_ === terminator) {\n return terminator;\n }\n\n var subtem
plateIterator = terminator.iterator_;\n if (!subtemplateIterator)\n
return terminator;\n\n return subtemplateIterator.getLastTemplateNode();\n
},\n\n getLastTemplateNode: function() {\n return this.getLastInstanc
eNode(this.instances.length - 1);\n },\n\n insertInstanceAt: function(inde
x, fragment) {\n var previousInstanceLast = this.getLastInstanceNode(index
- 1);\n var parent = this.templateElement_.parentNode;\n this.instance
s.splice(index, 0, fragment);\n\n parent.insertBefore(fragment, previousIns
tanceLast.nextSibling);\n },\n\n extractInstanceAt: function(index) {\n
var previousInstanceLast = this.getLastInstanceNode(index - 1);\n var la
stNode = this.getLastInstanceNode(index);\n var parent = this.templateEleme
nt_.parentNode;\n var instance = this.instances.splice(index, 1)[0];\n\n
while (lastNode !== previousInstanceLast) {\n var node = previousInsta
nceLast.nextSibling;\n if (node == lastNode)\n lastNode = previo
usInstanceLast;\n\n instance.appendChild(parent.removeChild(node));\n
}\n\n return instance;\n },\n\n getDelegateFn: function(fn) {\n
fn = fn && fn(this.templateElement_);\n return typeof fn === 'function' ?
fn : null;\n },\n\n handleSplices: function(splices) {\n if (this.cl
osed || !splices.length)\n return;\n\n var template = this.templateE
lement_;\n\n if (!template.parentNode) {\n this.close();\n re
turn;\n }\n\n ArrayObserver.applySplices(this.iteratedValue, this.pres
entValue,\n splices);\n\n var delegate = te
mplate.delegate_;\n if (this.instanceModelFn_ === undefined) {\n thi
s.instanceModelFn_ =\n this.getDelegateFn(delegate && delegate.prepar
eInstanceModel);\n }\n\n if (this.instancePositionChangedFn_ === undef
ined) {\n this.instancePositionChangedFn_ =\n this.getDelegate
Fn(delegate &&\n delegate.prepareInstancePositionC
hanged);\n }\n\n // Instance Removals\n var instanceCache = new M
ap;\n var removeDelta = 0;\n for (var i = 0; i < splices.length; i++)
{\n var splice = splices[i];\n var removed = splice.removed;\n
for (var j = 0; j < removed.length; j++) {\n var model = removed[j]
;\n var instance = this.extractInstanceAt(splice.index + removeDelta);\
n if (instance !== emptyInstance) {\n instanceCache.set(mode
l, instance);\n }\n }\n\n removeDelta -= splice.addedCoun
t;\n }\n\n // Instance Insertions\n for (var i = 0; i < splices.l
ength; i++) {\n var splice = splices[i];\n var addIndex = splice.i
ndex;\n for (; addIndex < splice.index + splice.addedCount; addIndex++) {
\n var model = this.iteratedValue[addIndex];\n var instance =
instanceCache.get(model);\n if (instance) {\n instanceCache.
delete(model);\n } else {\n if (this.instanceModelFn_) {\n
model = this.instanceModelFn_(model);\n }\n\n
if (model === undefined) {\n instance = emptyInstance;\n
} else {\n instance = template.createInstance(model, undefined, de
legate);\n }\n }\n\n this.insertInstanceAt(addIndex
, instance);\n }\n }\n\n instanceCache.forEach(function(instanc
e) {\n this.closeInstanceBindings(instance);\n }, this);\n\n if
(this.instancePositionChangedFn_)\n this.reportInstancesMoved(splices);\
n },\n\n reportInstanceMoved: function(index) {\n var instance = this
.instances[index];\n if (instance === emptyInstance)\n return;\n\n
this.instancePositionChangedFn_(instance.templateInstance_, index);\n },\
n\n reportInstancesMoved: function(splices) {\n var index = 0;\n va
r offset = 0;\n for (var i = 0; i < splices.length; i++) {\n var spl
ice = splices[i];\n if (offset != 0) {\n while (index < splice.i
ndex) {\n this.reportInstanceMoved(index);\n index++;\n
}\n } else {\n index = splice.index;\n }\n\n
while (index < splice.index + splice.addedCount) {\n this.reportInsta
nceMoved(index);\n index++;\n }\n\n offset += splice.adde
dCount - splice.removed.length;\n }\n\n if (offset == 0)\n retu
rn;\n\n var length = this.instances.length;\n while (index < length) {
\n this.reportInstanceMoved(index);\n index++;\n }\n },\n\
n closeInstanceBindings: function(instance) {\n var bindings = instance.
bindings_;\n for (var i = 0; i < bindings.length; i++) {\n bindings[
i].close();\n }\n },\n\n unobserve: function() {\n if (!this.arr
ayObserver)\n return;\n\n this.arrayObserver.close();\n this.ar
rayObserver = undefined;\n },\n\n close: function() {\n if (this.clos
ed)\n return;\n this.unobserve();\n for (var i = 0; i < this.in
stances.length; i++) {\n this.closeInstanceBindings(this.instances[i]);\n
}\n\n this.instances.length = 0;\n this.closeDeps();\n this
.templateElement_.iterator_ = undefined;\n this.closed = true;\n }\n };
\n\n // Polyfill-specific API.\n HTMLTemplateElement.forAllTemplatesFrom_ = fo
rAllTemplatesFrom;\n})(this);\n\n/*\n * Copyright (c) 2014 The Polymer Project A
uthors. All rights reserved.\n * This code may only be used under the BSD style
license found at http://polymer.github.io/LICENSE.txt\n * The complete set of au
thors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set
of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Co
de distributed by Google as part of the polymer project is also\n * subject to a
n additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\
n\n(function(scope) {\n\nvar iterations = 0;\nvar callbacks = [];\nvar twiddle =
document.createTextNode('');\n\nfunction endOfMicrotask(callback) {\n twiddle.
textContent = iterations++;\n callbacks.push(callback);\n}\n\nfunction atEndOfM
icrotask() {\n while (callbacks.length) {\n callbacks.shift()();\n }\n}\n\n
new (window.MutationObserver || JsMutationObserver)(atEndOfMicrotask)\n .observ
e(twiddle, {characterData: true})\n ;\n\n// exports\n\nscope.endOfMicrotask = e
ndOfMicrotask;\n\n})(Platform);\n\n\n/*\n * Copyright (c) 2014 The Polymer Proje
ct Authors. All rights reserved.\n * This code may only be used under the BSD st
yle license found at http://polymer.github.io/LICENSE.txt\n * The complete set o
f authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete
set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n
* Code distributed by Google as part of the polymer project is also\n * subject
to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n
*/\n\n(function(scope) {\n\n// inject style sheet\nvar style = document.createE
lement('style');\nstyle.textContent = 'template {display: none !important;} /* i
njected by platform.js */';\nvar head = document.querySelector('head');\nhead.in
sertBefore(style, head.firstChild);\n\n// flush (with logging)\nvar flushing;\nf
unction flush() {\n if (!flushing) {\n flushing = true;\n scope.endOfMicr
otask(function() {\n flushing = false;\n logFlags.data && console.grou
p('Platform.flush()');\n scope.performMicrotaskCheckpoint();\n logFlag
s.data && console.groupEnd();\n });\n }\n};\n\n// polling dirty checker\n//
flush periodically if platform does not have object observe.\nif (!Observer.hasO
bjectObserve) {\n var FLUSH_POLL_INTERVAL = 125;\n window.addEventListener('We
bComponentsReady', function() {\n flush();\n scope.flushPoll = setInterval
(flush, FLUSH_POLL_INTERVAL);\n });\n} else {\n // make flush a no-op when we
have Object.observe\n flush = function() {};\n}\n\nif (window.CustomElements &&
!CustomElements.useNative) {\n var originalImportNode = Document.prototype.imp
ortNode;\n Document.prototype.importNode = function(node, deep) {\n var impo
rted = originalImportNode.call(this, node, deep);\n CustomElements.upgradeAll
(imported);\n return imported;\n }\n}\n\n// exports\nscope.flush = flush;\n\
n})(window.Platform);\n\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors
. All rights reserved.\n * This code may only be used under the BSD style licens
e found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors
may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of con
tributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dis
tributed by Google as part of the polymer project is also\n * subject to an addi
tional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(fu
nction(scope) {\n\nvar urlResolver = {\n resolveDom: function(root, url) {\n
url = url || root.ownerDocument.baseURI;\n this.resolveAttributes(root, url)
;\n this.resolveStyles(root, url);\n // handle template.content\n var t
emplates = root.querySelectorAll('template');\n if (templates) {\n for (
var i = 0, l = templates.length, t; (i < l) && (t = templates[i]); i++) {\n
if (t.content) {\n this.resolveDom(t.content, url);\n }\n
}\n }\n },\n resolveTemplate: function(template) {\n this.resolveDom(t
emplate.content, template.ownerDocument.baseURI);\n },\n resolveStyles: functi
on(root, url) {\n var styles = root.querySelectorAll('style');\n if (style
s) {\n for (var i = 0, l = styles.length, s; (i < l) && (s = styles[i]); i+
+) {\n this.resolveStyle(s, url);\n }\n }\n },\n resolveStyle:
function(style, url) {\n url = url || style.ownerDocument.baseURI;\n style
.textContent = this.resolveCssText(style.textContent, url);\n },\n resolveCssT
ext: function(cssText, baseUrl, keepAbsolute) {\n cssText = replaceUrlsInCssT
ext(cssText, baseUrl, keepAbsolute, CSS_URL_REGEXP);\n return replaceUrlsInCs
sText(cssText, baseUrl, keepAbsolute, CSS_IMPORT_REGEXP);\n },\n resolveAttrib
utes: function(root, url) {\n if (root.hasAttributes && root.hasAttributes())
{\n this.resolveElementAttributes(root, url);\n }\n // search for at
tributes that host urls\n var nodes = root && root.querySelectorAll(URL_ATTRS
_SELECTOR);\n if (nodes) {\n for (var i = 0, l = nodes.length, n; (i < l
) && (n = nodes[i]); i++) {\n this.resolveElementAttributes(n, url);\n
}\n }\n },\n resolveElementAttributes: function(node, url) {\n url =
url || node.ownerDocument.baseURI;\n URL_ATTRS.forEach(function(v) {\n v
ar attr = node.attributes[v];\n var value = attr && attr.value;\n var
replacement;\n if (value && value.search(URL_TEMPLATE_SEARCH) < 0) {\n
if (v === 'style') {\n replacement = replaceUrlsInCssText(value, url
, false, CSS_URL_REGEXP);\n } else {\n replacement = resolveRela
tiveUrl(url, value);\n }\n attr.value = replacement;\n }\n
});\n }\n};\n\nvar CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\nvar CSS_IMPORT_R
EGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\nvar URL_ATTRS = ['href', 'src',
'action', 'style', 'url'];\nvar URL_ATTRS_SELECTOR = '[' + URL_ATTRS.join('],['
) + ']';\nvar URL_TEMPLATE_SEARCH = '{{.*}}';\n\nfunction replaceUrlsInCssText(c
ssText, baseUrl, keepAbsolute, regexp) {\n return cssText.replace(regexp, funct
ion(m, pre, url, post) {\n var urlPath = url.replace(/[\"']/g, '');\n urlP
ath = resolveRelativeUrl(baseUrl, urlPath, keepAbsolute);\n return pre + '\\'
' + urlPath + '\\'' + post;\n });\n}\n\nfunction resolveRelativeUrl(baseUrl, ur
l, keepAbsolute) {\n // do not resolve '/' absolute urls\n if (url && url[0] =
== '/') {\n return url;\n }\n var u = new URL(url, baseUrl);\n return keep
Absolute ? u.href : makeDocumentRelPath(u.href);\n}\n\nfunction makeDocumentRelP
ath(url) {\n var root = new URL(document.baseURI);\n var u = new URL(url, root
);\n if (u.host === root.host && u.port === root.port &&\n u.protocol ===
root.protocol) {\n return makeRelPath(root, u);\n } else {\n return url;\
n }\n}\n\n// make a relative path from source to target\nfunction makeRelPath(s
ourceUrl, targetUrl) {\n var source = sourceUrl.pathname;\n var target = targe
tUrl.pathname;\n var s = source.split('/');\n var t = target.split('/');\n wh
ile (s.length && s[0] === t[0]){\n s.shift();\n t.shift();\n }\n for (va
r i = 0, l = s.length - 1; i < l; i++) {\n t.unshift('..');\n }\n return t.
join('/') + targetUrl.search + targetUrl.hash;\n}\n\n// exports\nscope.urlResolv
er = urlResolver;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Proje
ct Authors. All rights reserved.\n * This code may only be used under the BSD st
yle license found at http://polymer.github.io/LICENSE.txt\n * The complete set o
f authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete
set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n
* Code distributed by Google as part of the polymer project is also\n * subject
to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n
*/\n\n(function(scope) {\n var endOfMicrotask = Platform.endOfMicrotask;\n\n
// Generic url loader\n function Loader(regex) {\n this.cache = Object.creat
e(null);\n this.map = Object.create(null);\n this.requests = 0;\n this.
regex = regex;\n }\n Loader.prototype = {\n\n // TODO(dfreedm): there may b
e a better factoring here\n // extract absolute urls from the text (full of r
elative urls)\n extractUrls: function(text, base) {\n var matches = [];\
n var matched, u;\n while ((matched = this.regex.exec(text))) {\n
u = new URL(matched[1], base);\n matches.push({matched: matched[0], ur
l: u.href});\n }\n return matches;\n },\n // take a text blob, a
root url, and a callback and load all the urls found within the text\n // re
turns a map of absolute url to text\n process: function(text, root, callback)
{\n var matches = this.extractUrls(text, root);\n\n // every call to
process returns all the text this loader has ever received\n var done = cal
lback.bind(null, this.map);\n this.fetch(matches, done);\n },\n // bu
ild a mapping of url -> text from matches\n fetch: function(matches, callback
) {\n var inflight = matches.length;\n\n // return early if there is n
o fetching to be done\n if (!inflight) {\n return callback();\n
}\n\n // wait for all subrequests to return\n var done = function() {
\n if (--inflight === 0) {\n callback();\n }\n };\n\
n // start fetching all subrequests\n var m, req, url;\n for (var
i = 0; i < inflight; i++) {\n m = matches[i];\n url = m.url;\n
req = this.cache[url];\n // if this url has already been requested,
skip requesting it again\n if (!req) {\n req = this.xhr(url);\n
req.match = m;\n this.cache[url] = req;\n }\n //
wait for the request to process its subrequests\n req.wait(done);\n
}\n },\n handleXhr: function(request) {\n var match = request.match;
\n var url = match.url;\n\n // handle errors with an empty string\n
var response = request.response || request.responseText || '';\n this.ma
p[url] = response;\n this.fetch(this.extractUrls(response, url), request.re
solve);\n },\n xhr: function(url) {\n this.requests++;\n var req
uest = new XMLHttpRequest();\n request.open('GET', url, true);\n reque
st.send();\n request.onerror = request.onload = this.handleXhr.bind(this, r
equest);\n\n // queue of tasks to run after XHR returns\n request.pend
ing = [];\n request.resolve = function() {\n var pending = request.p
ending;\n for(var i = 0; i < pending.length; i++) {\n pending[i]
();\n }\n request.pending = null;\n };\n\n // if we have
already resolved, pending is null, async call the callback\n request.wait
= function(fn) {\n if (request.pending) {\n request.pending.push
(fn);\n } else {\n endOfMicrotask(fn);\n }\n };\n\n
return request;\n }\n };\n\n scope.Loader = Loader;\n})(Polymer);\n\n/
*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * T
his code may only be used under the BSD style license found at http://polymer.gi
thub.io/LICENSE.txt\n * The complete set of authors may be found at http://polym
er.github.io/AUTHORS.txt\n * The complete set of contributors may be found at ht
tp://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part o
f the polymer project is also\n * subject to an additional IP rights grant found
at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\nvar urlRe
solver = scope.urlResolver;\nvar Loader = scope.Loader;\n\nfunction StyleResolve
r() {\n this.loader = new Loader(this.regex);\n}\nStyleResolver.prototype = {\n
regex: /@import\\s+(?:url)?[\"'\\(]*([^'\"\\)]*)['\"\\)]*;/g,\n // Recursivel
y replace @imports with the text at that url\n resolve: function(text, url, cal
lback) {\n var done = function(map) {\n callback(this.flatten(text, url,
map));\n }.bind(this);\n this.loader.process(text, url, done);\n },\n /
/ resolve the textContent of a style node\n resolveNode: function(style, url, c
allback) {\n var text = style.textContent;\n var done = function(text) {\n
style.textContent = text;\n callback(style);\n };\n this.resolv
e(text, url, done);\n },\n // flatten all the @imports to text\n flatten: fun
ction(text, base, map) {\n var matches = this.loader.extractUrls(text, base);
\n var match, url, intermediate;\n for (var i = 0; i < matches.length; i++
) {\n match = matches[i];\n url = match.url;\n // resolve any css
text to be relative to the importer, keep absolute url\n intermediate = ur
lResolver.resolveCssText(map[url], url, true);\n // flatten intermediate @i
mports\n intermediate = this.flatten(intermediate, base, map);\n text
= text.replace(match.matched, intermediate);\n }\n return text;\n },\n l
oadStyles: function(styles, base, callback) {\n var loaded=0, l = styles.leng
th;\n // called in the context of the style\n function loadedStyle(style)
{\n loaded++;\n if (loaded === l && callback) {\n callback();\n
}\n }\n for (var i=0, s; (i<l) && (s=styles[i]); i++) {\n this.
resolveNode(s, base, loadedStyle);\n }\n }\n};\n\nvar styleResolver = new St
yleResolver();\n\n// exports\nscope.styleResolver = styleResolver;\n\n})(Polymer
);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved
.\n * This code may only be used under the BSD style license found at http://pol
ymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:
//polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be foun
d at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights gran
t found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n
// copy own properties from 'api' to 'prototype, with name hinting for 'super'\n
function extend(prototype, api) {\n if (prototype && api) {\n // use o
nly own properties of 'api'\n Object.getOwnPropertyNames(api).forEach(funct
ion(n) {\n // acquire property descriptor\n var pd = Object.getOwn
PropertyDescriptor(api, n);\n if (pd) {\n // clone property via
descriptor\n Object.defineProperty(prototype, n, pd);\n // cac
he name-of-method for 'super' engine\n if (typeof pd.value == 'function
') {\n // hint the 'super' engine\n pd.value.nom = n;\n
}\n }\n });\n }\n return prototype;\n }\n\n\n // mixi
n\n\n // copy all properties from inProps (et al) to inObj\n function mixin(in
Obj/*, inProps, inMoreProps, ...*/) {\n var obj = inObj || {};\n for (var
i = 1; i < arguments.length; i++) {\n var p = arguments[i];\n try {\n
for (var n in p) {\n copyProperty(n, p, obj);\n }\n
} catch(x) {\n }\n }\n return obj;\n }\n\n // copy property inName
from inSource object to inTarget object\n function copyProperty(inName, inSourc
e, inTarget) {\n var pd = getPropertyDescriptor(inSource, inName);\n Objec
t.defineProperty(inTarget, inName, pd);\n }\n\n // get property descriptor for
inName on inObject, even if\n // inName exists on some link in inObject's prot
otype chain\n function getPropertyDescriptor(inObject, inName) {\n if (inObj
ect) {\n var pd = Object.getOwnPropertyDescriptor(inObject, inName);\n
return pd || getPropertyDescriptor(Object.getPrototypeOf(inObject), inName);\n
}\n }\n\n // exports\n\n scope.extend = extend;\n scope.mixin = mixin;\n\
n // for bc\n Platform.mixin = mixin;\n\n})(Polymer);\n\n/*\n * Copyright (c)
2014 The Polymer Project Authors. All rights reserved.\n * This code may only be
used under the BSD style license found at http://polymer.github.io/LICENSE.txt\
n * The complete set of authors may be found at http://polymer.github.io/AUTHORS
.txt\n * The complete set of contributors may be found at http://polymer.github.
io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer projec
t is also\n * subject to an additional IP rights grant found at http://polymer.g
ithub.io/PATENTS.txt\n */\n\n(function(scope) {\n \n // usage\n \n // invoke
cb.call(this) in 100ms, unless the job is re-registered,\n // which resets the
timer\n // \n // this.myJob = this.job(this.myJob, cb, 100)\n //\n // retur
ns a job handle which can be used to re-register a job\n\n var Job = function(i
nContext) {\n this.context = inContext;\n this.boundComplete = this.comple
te.bind(this)\n };\n Job.prototype = {\n go: function(callback, wait) {\n
this.callback = callback;\n var h;\n if (!wait) {\n h = req
uestAnimationFrame(this.boundComplete);\n this.handle = function() {\n
cancelAnimationFrame(h);\n }\n } else {\n h = setTimeo
ut(this.boundComplete, wait);\n this.handle = function() {\n cle
arTimeout(h);\n }\n }\n },\n stop: function() {\n if (thi
s.handle) {\n this.handle();\n this.handle = null;\n }\n }
,\n complete: function() {\n if (this.handle) {\n this.stop();\n
this.callback.call(this.context);\n }\n }\n };\n \n function j
ob(job, callback, wait) {\n if (job) {\n job.stop();\n } else {\n
job = new Job(this);\n }\n job.go(callback, wait);\n return job;\n }
\n \n // exports \n\n scope.job = job;\n \n})(Polymer);\n\n/*\n * Copyright
(c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may onl
y be used under the BSD style license found at http://polymer.github.io/LICENSE.
txt\n * The complete set of authors may be found at http://polymer.github.io/AUT
HORS.txt\n * The complete set of contributors may be found at http://polymer.git
hub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer pr
oject is also\n * subject to an additional IP rights grant found at http://polym
er.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var registry = {};\n\n
HTMLElement.register = function(tag, prototype) {\n registry[tag] = prototyp
e;\n }\n\n // get prototype mapped to node <tag>\n HTMLElement.getPrototypeFo
rTag = function(tag) {\n var prototype = !tag ? HTMLElement.prototype : regis
try[tag];\n // TODO(sjmiles): creating <tag> is likely to have wasteful side-
effects\n return prototype || Object.getPrototypeOf(document.createElement(ta
g));\n };\n\n // we have to flag propagation stoppage for the event dispatcher
\n var originalStopPropagation = Event.prototype.stopPropagation;\n Event.prot
otype.stopPropagation = function() {\n this.cancelBubble = true;\n origina
lStopPropagation.apply(this, arguments);\n };\n \n \n // polyfill DOMTokenLi
st\n // * add/remove: allow these methods to take multiple classNames\n // * t
oggle: add a 2nd argument which forces the given state rather\n // than toggli
ng.\n\n var add = DOMTokenList.prototype.add;\n var remove = DOMTokenList.prot
otype.remove;\n DOMTokenList.prototype.add = function() {\n for (var i = 0;
i < arguments.length; i++) {\n add.call(this, arguments[i]);\n }\n };\n
DOMTokenList.prototype.remove = function() {\n for (var i = 0; i < argument
s.length; i++) {\n remove.call(this, arguments[i]);\n }\n };\n DOMToke
nList.prototype.toggle = function(name, bool) {\n if (arguments.length == 1)
{\n bool = !this.contains(name);\n }\n bool ? this.add(name) : this.r
emove(name);\n };\n DOMTokenList.prototype.switch = function(oldName, newName)
{\n oldName && this.remove(oldName);\n newName && this.add(newName);\n }
;\n\n // add array() to NodeList, NamedNodeMap, HTMLCollection\n\n var ArraySl
ice = function() {\n return Array.prototype.slice.call(this);\n };\n\n var
namedNodeMap = (window.NamedNodeMap || window.MozNamedAttrMap || {});\n\n NodeL
ist.prototype.array = ArraySlice;\n namedNodeMap.prototype.array = ArraySlice;\
n HTMLCollection.prototype.array = ArraySlice;\n\n // utility\n\n function cr
eateDOM(inTagOrNode, inHTML, inAttrs) {\n var dom = typeof inTagOrNode == 'st
ring' ?\n document.createElement(inTagOrNode) : inTagOrNode.cloneNode(tru
e);\n dom.innerHTML = inHTML;\n if (inAttrs) {\n for (var n in inAttr
s) {\n dom.setAttribute(n, inAttrs[n]);\n }\n }\n return dom;\
n }\n\n // exports\n\n scope.createDOM = createDOM;\n\n})(Polymer);\n\n/*\r\n
* Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\r\n * Th
is code may only be used under the BSD style license found at http://polymer.git
hub.io/LICENSE.txt\r\n * The complete set of authors may be found at http://poly
mer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be found at
http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Google as p
art of the polymer project is also\r\n * subject to an additional IP rights gran
t found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n (function(scope)
{\r\n // super\r\n\r\n // `arrayOfArgs` is an optional array of args like
one might pass\r\n // to `Function.apply`\r\n\r\n // TODO(sjmiles):\r\n
// $super must be installed on an instance or prototype chain\r\n // a
s `super`, and invoked via `this`, e.g.\r\n // `this.super();`\r\n\r\n
// will not work if function objects are not unique, for example,\r\n //
when using mixins.\r\n // The memoization strategy assumes each functi
on exists on only one \r\n // prototype chain i.e. we use the function obj
ect for memoizing)\r\n // perhaps we can bookkeep on the prototype itself
instead\r\n function $super(arrayOfArgs) {\r\n // since we are thunking
a method call, performance is important here: \r\n // memoize all lookups,
once memoized the fast path calls no other \r\n // functions\r\n //\r\
n // find the caller (cannot be `strict` because of 'caller')\r\n var
caller = $super.caller;\r\n // memoized 'name of method' \r\n var nom
= caller.nom;\r\n // memoized next implementation prototype\r\n var _s
uper = caller._super;\r\n if (!_super) {\r\n if (!nom) {\r\n
nom = caller.nom = nameInThis.call(this, caller);\r\n }\r\n if (
!nom) {\r\n console.warn('called super() on a method not installed decl
aratively (has no .nom property)');\r\n }\r\n // super prototype i
s either cached or we have to find it\r\n // by searching __proto__ (at t
he 'top')\r\n // invariant: because we cache _super on fn below, we never
reach \r\n // here from inside a series of calls to super(), so it's ok
to \r\n // start searching from the prototype of 'this' (at the 'top')\r\
n // we must never memoize a null super for this reason\r\n _super
= memoizeSuper(caller, nom, getPrototypeOf(this));\r\n }\r\n // our s
uper function\r\n var fn = _super[nom];\r\n if (fn) {\r\n // me
moize information so 'fn' can call 'super'\r\n if (!fn._super) {\r\n
// must not memoize null, or we lose our invariant above\r\n memoi
zeSuper(fn, nom, _super);\r\n }\r\n // invoke the inherited method
\r\n // if 'fn' is not function valued, this will throw\r\n return
fn.apply(this, arrayOfArgs || []);\r\n }\r\n }\r\n\r\n function name
InThis(value) {\r\n var p = this.__proto__;\r\n while (p && p !== HTML
Element.prototype) {\r\n // TODO(sjmiles): getOwnPropertyNames is absurdl
y expensive\r\n var n$ = Object.getOwnPropertyNames(p);\r\n for (v
ar i=0, l=n$.length, n; i<l && (n=n$[i]); i++) {\r\n var d = Object.get
OwnPropertyDescriptor(p, n);\r\n if (typeof d.value === 'function' && d
.value === value) {\r\n return n;\r\n }\r\n }\r\n
p = p.__proto__;\r\n }\r\n }\r\n\r\n function memoizeSuper(method
, name, proto) {\r\n // find and cache next prototype containing `name`\r\n
// we need the prototype so we can do another lookup\r\n // from here
\r\n var s = nextSuper(proto, name, method);\r\n if (s[name]) {\r\n
// `s` is a prototype, the actual method is `s[name]`\r\n // tag sup
er method with it's name for quicker lookups\r\n s[name].nom = name;\r\n
}\r\n return method._super = s;\r\n }\r\n\r\n function nextSuper
(proto, name, caller) {\r\n // look for an inherited prototype that impleme
nts name\r\n while (proto) {\r\n if ((proto[name] !== caller) && pro
to[name]) {\r\n return proto;\r\n }\r\n proto = getProtot
ypeOf(proto);\r\n }\r\n // must not return null, or we lose our invari
ant above\r\n // in this case, a super() call was invoked where no supercla
ss\r\n // method exists\r\n // TODO(sjmiles): thow an exception?\r\n
return Object;\r\n }\r\n\r\n // NOTE: In some platforms (IE10) the pro
totype chain is faked via \r\n // __proto__. Therefore, always get prototype
via __proto__ instead of\r\n // the more standard Object.getPrototypeOf.\r\n
function getPrototypeOf(prototype) {\r\n return prototype.__proto__;\r\n
}\r\n\r\n // utility function to precompute name tags for functions\r\n
// in a (unchained) prototype\r\n function hintSuper(prototype) {\r\n
// tag functions with their prototype name to optimize\r\n // super call in
vocations\r\n for (var n in prototype) {\r\n var pd = Object.getOwnP
ropertyDescriptor(prototype, n);\r\n if (pd && typeof pd.value === 'funct
ion') {\r\n pd.value.nom = n;\r\n }\r\n }\r\n }\r\n\r\n
// exports\r\n\r\n scope.super = $super;\r\n\r\n})(Polymer);\r\n\n/*\n * C
opyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This cod
e may only be used under the BSD style license found at http://polymer.github.io
/LICENSE.txt\n * The complete set of authors may be found at http://polymer.gith
ub.io/AUTHORS.txt\n * The complete set of contributors may be found at http://po
lymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the p
olymer project is also\n * subject to an additional IP rights grant found at htt
p://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n function noopH
andler(value) {\n return value;\n }\n\n var typeHandlers = {\n string: n
oopHandler,\n 'undefined': noopHandler,\n date: function(value) {\n r
eturn new Date(Date.parse(value) || Date.now());\n },\n boolean: function(
value) {\n if (value === '') {\n return true;\n }\n return
value === 'false' ? false : !!value;\n },\n number: function(value) {\n
var n = parseFloat(value);\n // hex values like \"0xFFFF\" parseFloat a
s 0\n if (n === 0) {\n n = parseInt(value);\n }\n return i
sNaN(n) ? value : n;\n // this code disabled because encoded values (like \
"0xFFFF\")\n // do not round trip to their original format\n //return
(String(floatVal) === value) ? floatVal : value;\n },\n object: function(v
alue, currentValue) {\n if (currentValue === null) {\n return value;
\n }\n try {\n // If the string is an object, we can parse is w
ith the JSON library.\n // include convenience replace for single-quotes.
If the author omits\n // quotes altogether, parse will fail.\n re
turn JSON.parse(value.replace(/'/g, '\"'));\n } catch(e) {\n // The
object isn't valid JSON, return the raw value\n return value;\n }\n
},\n // avoid deserialization of functions\n 'function': function(value
, currentValue) {\n return currentValue;\n }\n };\n\n function deseria
lizeValue(value, currentValue) {\n // attempt to infer type from default valu
e\n var inferredType = typeof currentValue;\n // invent 'date' type value
for Date\n if (currentValue instanceof Date) {\n inferredType = 'date';\
n }\n // delegate deserialization via type string\n return typeHandlers
[inferredType](value, currentValue);\n }\n\n // exports\n\n scope.deserialize
Value = deserializeValue;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polym
er Project Authors. All rights reserved.\n * This code may only be used under th
e BSD style license found at http://polymer.github.io/LICENSE.txt\n * The comple
te set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The c
omplete set of contributors may be found at http://polymer.github.io/CONTRIBUTOR
S.txt\n * Code distributed by Google as part of the polymer project is also\n *
subject to an additional IP rights grant found at http://polymer.github.io/PATEN
TS.txt\n */\n(function(scope) {\n\n // imports\n\n var extend = scope.extend;\
n\n // module\n\n var api = {};\n\n api.declaration = {};\n api.instance = {
};\n\n api.publish = function(apis, prototype) {\n for (var n in apis) {\n
extend(prototype, apis[n]);\n }\n };\n\n // exports\n\n scope.api = ap
i;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All
rights reserved.\n * This code may only be used under the BSD style license fou
nd at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may b
e found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contribu
tors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distribu
ted by Google as part of the polymer project is also\n * subject to an additiona
l IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(functio
n(scope) {\n\n var utils = {\n /**\n * Invokes a function asynchronousl
y. The context of the callback\n * function is bound to 'this' automaticall
y.\n * @method async\n * @param {Function|String} method\n * @par
am {any|Array} args\n * @param {number} timeout\n */\n async: funct
ion(method, args, timeout) {\n // when polyfilling Object.observe, ensure c
hanges \n // propagate before executing the async method\n Platform.fl
ush();\n // second argument to `apply` must be an array\n args = (args
&& args.length) ? args : [args];\n // function to invoke\n var fn = f
unction() {\n (this[method] || method).apply(this, args);\n }.bind(t
his);\n // execute `fn` sooner or later\n var handle = timeout ? setTi
meout(fn, timeout) :\n requestAnimationFrame(fn);\n // NOTE: switc
h on inverting handle to determine which time is used.\n return timeout ? h
andle : ~handle;\n },\n cancelAsync: function(handle) {\n if (handle
< 0) {\n cancelAnimationFrame(~handle);\n } else {\n clearTim
eout(handle);\n }\n },\n /**\n * Fire an event.\n * @method
fire\n * @returns {Object} event\n * @param {string} type An event na
me.\n * @param {any} detail\n * @param {Node} onNode Target node.\n
* @param {Boolean} bubbles Set false to prevent bubbling, defaults to true\n
* @param {Boolean} cancelable Set false to prevent cancellation, defaults t
o true\n */\n fire: function(type, detail, onNode, bubbles, cancelable)
{\n var node = onNode || this;\n var detail = detail === null || detai
l === undefined ? {} : detail;\n var event = new CustomEvent(type, {\n
bubbles: bubbles !== undefined ? bubbles : true,\n cancelable: cancela
ble !== undefined ? cancelable : true,\n detail: detail\n });\n
node.dispatchEvent(event);\n return event;\n },\n /**\n * Fire
an event asynchronously.\n * @method asyncFire\n * @param {string} typ
e An event name.\n * @param detail\n * @param {Node} toNode Target nod
e.\n */\n asyncFire: function(/*inType, inDetail*/) {\n this.async(
\"fire\", arguments);\n },\n /**\n * Remove class from old, add class
to anew, if they exist.\n * @param classFollows\n * @param anew A nod
e.\n * @param old A node\n * @param className\n */\n classFoll
ows: function(anew, old, className) {\n if (old) {\n old.classList.r
emove(className);\n }\n if (anew) {\n anew.classList.add(classN
ame);\n }\n },\n /**\n * Inject HTML which contains markup bound
to this element into\n * a target element (replacing target element conten
t).\n * @param String html to inject\n * @param Element target element
\n */\n injectBoundHTML: function(html, element) {\n var template =
document.createElement('template');\n template.innerHTML = html;\n va
r fragment = this.instanceTemplate(template);\n if (element) {\n ele
ment.textContent = '';\n element.appendChild(fragment);\n }\n r
eturn fragment;\n }\n };\n\n // no-operation function for handy stubs\n va
r nop = function() {};\n\n // null-object for handy stubs\n var nob = {};\n\n
// deprecated\n\n utils.asyncMethod = utils.async;\n\n // exports\n\n scope.
api.instance.utils = utils;\n scope.nop = nop;\n scope.nob = nob;\n\n})(Polyme
r);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve
d.\n * This code may only be used under the BSD style license found at http://po
lymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http
://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be fou
nd at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google a
s part of the polymer project is also\n * subject to an additional IP rights gra
nt found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n
// imports\n\n var log = window.logFlags || {};\n var EVENT_PREFIX = 'on-';\n
\n // instance events api\n var events = {\n // read-only\n EVENT_PREFIX
: EVENT_PREFIX,\n // event listeners on host\n addHostListeners: function(
) {\n var events = this.eventDelegates;\n log.events && (Object.keys(e
vents).length > 0) && console.log('[%s] addHostListeners:', this.localName, even
ts);\n // NOTE: host events look like bindings but really are not;\n /
/ (1) we don't want the attribute to be set and (2) we want to support\n //
multiple event listeners ('host' and 'instance') and Node.bind\n // by def
ault supports 1 thing being bound.\n for (var type in events) {\n va
r methodName = events[type];\n PolymerGestures.addEventListener(this, typ
e, this.element.getEventHandler(this, this, methodName));\n }\n },\n
// call 'method' or function method on 'obj' with 'args', if the method exists\n
dispatchMethod: function(obj, method, args) {\n if (obj) {\n log
.events && console.group('[%s] dispatch [%s]', obj.localName, method);\n
var fn = typeof method === 'function' ? method : obj[method];\n if (fn) {
\n fn[args ? 'apply' : 'call'](obj, args);\n }\n log.even
ts && console.groupEnd();\n Platform.flush();\n }\n }\n };\n\n
// exports\n\n scope.api.instance.events = events;\n\n // alias PolymerGesture
s event listener logic\n scope.addEventListener = PolymerGestures.addEventListe
ner;\n scope.removeEventListener = PolymerGestures.removeEventListener;\n\n})(P
olymer);\n\n/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights
reserved.\r\n * This code may only be used under the BSD style license found at
http://polymer.github.io/LICENSE.txt\r\n * The complete set of authors may be fo
und at http://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributo
rs may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distribu
ted by Google as part of the polymer project is also\r\n * subject to an additio
nal IP rights grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n
(function(scope) {\r\n\r\n // instance api for attributes\r\n\r\n var attribut
es = {\r\n copyInstanceAttributes: function () {\r\n var a$ = this._inst
anceAttributes;\r\n for (var k in a$) {\r\n if (!this.hasAttribute(k
)) {\r\n this.setAttribute(k, a$[k]);\r\n }\r\n }\r\n },
\r\n // for each attribute on this, deserialize value to property as needed\r
\n takeAttributes: function() {\r\n // if we have no publish lookup tabl
e, we have no attributes to take\r\n // TODO(sjmiles): ad hoc\r\n if (
this._publishLC) {\r\n for (var i=0, a$=this.attributes, l=a$.length, a;
(a=a$[i]) && i<l; i++) {\r\n this.attributeToProperty(a.name, a.value);
\r\n }\r\n }\r\n },\r\n // if attribute 'name' is mapped to a
property, deserialize\r\n // 'value' into that property\r\n attributeToPro
perty: function(name, value) {\r\n // try to match this attribute to a prop
erty (attributes are\r\n // all lower-case, so this is case-insensitive sea
rch)\r\n var name = this.propertyForAttribute(name);\r\n if (name) {\r
\n // filter out 'mustached' values, these are to be\r\n // replac
ed with bound-data and are not yet values\r\n // themselves\r\n if
(value && value.search(scope.bindPattern) >= 0) {\r\n return;\r\n
}\r\n // get original value\r\n var currentValue = this[name];\
r\n // deserialize Boolean or Number values from attribute\r\n var
value = this.deserializeValue(value, currentValue);\r\n // only act if t
he value has changed\r\n if (value !== currentValue) {\r\n // in
stall new value (has side-effects)\r\n this[name] = value;\r\n }
\r\n }\r\n },\r\n // return the published property matching name, or
undefined\r\n propertyForAttribute: function(name) {\r\n var match = thi
s._publishLC && this._publishLC[name];\r\n //console.log('propertyForAttrib
ute:', name, 'matches', match);\r\n return match;\r\n },\r\n // conve
rt representation of 'stringValue' based on type of 'currentValue'\r\n deseri
alizeValue: function(stringValue, currentValue) {\r\n return scope.deserial
izeValue(stringValue, currentValue);\r\n },\r\n serializeValue: function(v
alue, inferredType) {\r\n if (inferredType === 'boolean') {\r\n retu
rn value ? '' : undefined;\r\n } else if (inferredType !== 'object' && infe
rredType !== 'function'\r\n && value !== undefined) {\r\n return
value;\r\n }\r\n },\r\n reflectPropertyToAttribute: function(name) {
\r\n var inferredType = typeof this[name];\r\n // try to intelligently
serialize property value\r\n var serializedValue = this.serializeValue(thi
s[name], inferredType);\r\n // boolean properties must reflect as boolean a
ttributes\r\n if (serializedValue !== undefined) {\r\n this.setAttri
bute(name, serializedValue);\r\n // TODO(sorvell): we should remove attr
for all properties\r\n // that have undefined serialization; however, we
will need to\r\n // refine the attr reflection system to achieve this; pi
ca, for example,\r\n // relies on having inferredType object properties n
ot removed as\r\n // attrs.\r\n } else if (inferredType === 'boolean
') {\r\n this.removeAttribute(name);\r\n }\r\n }\r\n };\r\n\r\n
// exports\r\n\r\n scope.api.instance.attributes = attributes;\r\n\r\n})(Polym
er);\r\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights rese
rved.\n * This code may only be used under the BSD style license found at http:/
/polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at h
ttp://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be
found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Googl
e as part of the polymer project is also\n * subject to an additional IP rights
grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n
\n // imports\n\n var log = window.logFlags || {};\n\n // magic words\n\n va
r OBSERVE_SUFFIX = 'Changed';\n\n // element api\n\n var empty = [];\n\n var
updateRecord = {\n object: undefined,\n type: 'update',\n name: undefin
ed,\n oldValue: undefined\n };\n\n var numberIsNaN = Number.isNaN || functi
on(value) {\n return typeof value === 'number' && isNaN(value);\n }\n\n fun
ction areSameValue(left, right) {\n if (left === right)\n return left !=
= 0 || 1 / left === 1 / right;\n if (numberIsNaN(left) && numberIsNaN(right))
\n return true;\n\n return left !== left && right !== right;\n }\n\n /
/ capture A's value if B's value is null or undefined,\n // otherwise use B's v
alue\n function resolveBindingValue(oldValue, value) {\n if (value === undef
ined && oldValue === null) {\n return value;\n }\n return (value ===
null || value === undefined) ? oldValue : value;\n }\n\n var properties = {\n
createPropertyObserver: function() {\n var n$ = this._observeNames;\n
if (n$ && n$.length) {\n var o = this._propertyObserver = new Compound
Observer(true);\n this.registerObserver(o);\n // TODO(sorvell): ma
y not be kosher to access the value here (this[n]);\n // previously we lo
oked at the descriptor on the prototype\n // this doesn't work for inheri
tance and not for accessors without\n // a value property\n for (v
ar i=0, l=n$.length, n; (i<l) && (n=n$[i]); i++) {\n o.addPath(this, n)
;\n this.observeArrayValue(n, this[n], null);\n }\n }\n
},\n openPropertyObserver: function() {\n if (this._propertyObserver) {\
n this._propertyObserver.open(this.notifyPropertyChanges, this);\n }
\n },\n notifyPropertyChanges: function(newValues, oldValues, paths) {\n
var name, method, called = {};\n for (var i in oldValues) {\n //
note: paths is of form [object, path, object, path]\n name = paths[2 * i
+ 1];\n method = this.observe[name];\n if (method) {\n v
ar ov = oldValues[i], nv = newValues[i];\n // observes the value if it
is an array\n this.observeArrayValue(name, nv, ov);\n if (!cal
led[method]) {\n // only invoke change method if one of ov or nv is n
ot (undefined | null)\n if ((ov !== undefined && ov !== null) || (nv
!== undefined && nv !== null)) {\n called[method] = true;\n
// TODO(sorvell): call method with the set of values it's expecting;\n
// e.g. 'foo bar': 'invalidate' expects the new and old values for\n
// foo and bar. Currently we give only one of these and then\n
// deliver all the arguments.\n this.invokeMethod(method, [
ov, nv, arguments]);\n }\n }\n }\n }\n },\n
deliverChanges: function() {\n if (this._propertyObserver) {\n thi
s._propertyObserver.deliver();\n }\n },\n propertyChanged_: function(
name, value, oldValue) {\n if (this.reflect[name]) {\n this.reflectP
ropertyToAttribute(name);\n }\n },\n observeArrayValue: function(name
, value, old) {\n // we only care if there are registered side-effects\n
var callbackName = this.observe[name];\n if (callbackName) {\n //
if we are observing the previous value, stop\n if (Array.isArray(old)) {
\n log.observe && console.log('[%s] observeArrayValue: unregister obser
ver [%s]', this.localName, name);\n this.closeNamedObserver(name + '__a
rray');\n }\n // if the new value is an array, being observing it\
n if (Array.isArray(value)) {\n log.observe && console.log('[%s]
observeArrayValue: register observer [%s]', this.localName, name, value);\n
var observer = new ArrayObserver(value);\n observer.open(function
(splices) {\n this.invokeMethod(callbackName, [splices]);\n
}, this);\n this.registerNamedObserver(name + '__array', observer);\n
}\n }\n },\n emitPropertyChangeRecord: function(name, value, ol
dValue) {\n var object = this;\n if (areSameValue(value, oldValue))\n
return;\n\n this.propertyChanged_(name, value, oldValue);\n\n i
f (!Observer.hasObjectObserve)\n return;\n\n var notifier = this.not
ifier_;\n if (!notifier)\n notifier = this.notifier_ = Object.getNot
ifier(this);\n\n updateRecord.object = this;\n updateRecord.name = nam
e;\n updateRecord.oldValue = oldValue;\n\n notifier.notify(updateRecor
d);\n },\n bindToAccessor: function(name, observable, resolveFn) {\n
var privateName = name + '_';\n var privateObservable = name + 'Observable
_';\n\n this[privateObservable] = observable;\n var oldValue = this[pr
ivateName];\n\n var self = this;\n var value = observable.open(functio
n(value, oldValue) {\n self[privateName] = value;\n self.emitPrope
rtyChangeRecord(name, value, oldValue);\n });\n\n if (resolveFn && !ar
eSameValue(oldValue, value)) {\n var resolvedValue = resolveFn(oldValue,
value);\n if (!areSameValue(value, resolvedValue)) {\n value = r
esolvedValue;\n if (observable.setValue)\n observable.setVal
ue(value);\n }\n }\n\n this[privateName] = value;\n this.e
mitPropertyChangeRecord(name, value, oldValue);\n\n var observer = {\n
close: function() {\n observable.close();\n self[privateObs
ervable] = undefined;\n }\n };\n this.registerObserver(observer
);\n return observer;\n },\n createComputedProperties: function() {\n
if (!this._computedNames) {\n return;\n }\n\n for (var i
= 0; i < this._computedNames.length; i++) {\n var name = this._computedNa
mes[i];\n var expressionText = this.computed[name];\n try {\n
var expression = PolymerExpressions.getExpression(expressionText);\n
var observable = expression.getBinding(this, this.element.syntax);\n
this.bindToAccessor(name, observable);\n } catch (ex) {\n conso
le.error('Failed to create computed property', ex);\n }\n }\n },\
n bindProperty: function(property, observable, oneTime) {\n if (oneTime)
{\n this[property] = observable;\n return;\n }\n return
this.bindToAccessor(property, observable, resolveBindingValue);\n },\n in
vokeMethod: function(method, args) {\n var fn = this[method] || method;\n
if (typeof fn === 'function') {\n fn.apply(this, args);\n }\n
},\n registerObserver: function(observer) {\n if (!this._observers) {\n
this._observers = [observer];\n return;\n }\n\n this._o
bservers.push(observer);\n },\n // observer array items are arrays of obse
rvers.\n closeObservers: function() {\n if (!this._observers) {\n
return;\n }\n\n var observers = this._observers;\n for (var i =
0; i < observers.length; i++) {\n var observer = observers[i];\n i
f (observer && typeof observer.close == 'function') {\n observer.close(
);\n }\n }\n\n this._observers = [];\n },\n // bookkeepin
g observers for memory management\n registerNamedObserver: function(name, obs
erver) {\n var o$ = this._namedObservers || (this._namedObservers = {});\n
o$[name] = observer;\n },\n closeNamedObserver: function(name) {\n
var o$ = this._namedObservers;\n if (o$ && o$[name]) {\n o$[name]
.close();\n o$[name] = null;\n return true;\n }\n },\n
closeNamedObservers: function() {\n if (this._namedObservers) {\n fo
r (var i in this._namedObservers) {\n this.closeNamedObserver(i);\n
}\n this._namedObservers = {};\n }\n }\n };\n\n // logging\
n var LOG_OBSERVE = '[%s] watching [%s]';\n var LOG_OBSERVED = '[%s#%s] watch:
[%s] now [%s] was [%s]';\n var LOG_CHANGED = '[%s#%s] propertyChanged: [%s] no
w [%s] was [%s]';\n\n // exports\n\n scope.api.instance.properties = propertie
s;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All
rights reserved.\n * This code may only be used under the BSD style license fou
nd at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may b
e found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contribu
tors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distribu
ted by Google as part of the polymer project is also\n * subject to an additiona
l IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(functio
n(scope) {\n\n // imports\n\n var log = window.logFlags || 0;\n\n // element
api supporting mdv\n var mdv = {\n instanceTemplate: function(template) {\n
// ensure template is decorated (lets' things like <tr template ...> work)\
n HTMLTemplateElement.decorate(template);\n // ensure a default bindin
gDelegate\n var syntax = this.syntax || (!template.bindingDelegate &&\n
this.element.syntax);\n var dom = template.createInstance(this, synta
x);\n var observers = dom.bindings_;\n for (var i = 0; i < observers.l
ength; i++) {\n this.registerObserver(observers[i]);\n }\n retu
rn dom;\n },\n bind: function(name, observable, oneTime) {\n var prop
erty = this.propertyForAttribute(name);\n if (!property) {\n // TODO
(sjmiles): this mixin method must use the special form\n // of `super` in
stalled by `mixinMethod` in declaration/prototype.js\n return this.mixinS
uper(arguments);\n } else {\n // use n-way Polymer binding\n
var observer = this.bindProperty(property, observable, oneTime);\n // NOT
E: reflecting binding information is typically required only for\n // too
ling. It has a performance cost so it's opt-in in Node.bind.\n if (Platfo
rm.enableBindingsReflection && observer) {\n observer.path = observable
.path_;\n this._recordBinding(property, observer);\n }\n
if (this.reflect[property]) {\n this.reflectPropertyToAttribute(propert
y);\n }\n return observer;\n }\n },\n bindFinished: fun
ction() {\n this.makeElementReady();\n },\n _recordBinding: function(
name, observer) {\n this.bindings_ = this.bindings_ || {};\n this.bind
ings_[name] = observer;\n },\n // TODO(sorvell): unbind/unbindAll has been
removed, as public api, from\n // TemplateBinding. We still need to close/di
spose of observers but perhaps\n // we should choose a more explicit name.\n
asyncUnbindAll: function() {\n if (!this._unbound) {\n log.unbind
&& console.log('[%s] asyncUnbindAll', this.localName);\n this._unbindAll
Job = this.job(this._unbindAllJob, this.unbindAll, 0);\n }\n },\n unb
indAll: function() {\n if (!this._unbound) {\n this.closeObservers()
;\n this.closeNamedObservers();\n this._unbound = true;\n }\n
},\n cancelUnbindAll: function() {\n if (this._unbound) {\n l
og.unbind && console.warn('[%s] already unbound, cannot cancel unbindAll', this.
localName);\n return;\n }\n log.unbind && console.log('[%s] can
celUnbindAll', this.localName);\n if (this._unbindAllJob) {\n this._
unbindAllJob = this._unbindAllJob.stop();\n }\n }\n };\n\n function un
bindNodeTree(node) {\n forNodeTree(node, _nodeUnbindAll);\n }\n\n function
_nodeUnbindAll(node) {\n node.unbindAll();\n }\n\n function forNodeTree(nod
e, callback) {\n if (node) {\n callback(node);\n for (var child = n
ode.firstChild; child; child = child.nextSibling) {\n forNodeTree(child,
callback);\n }\n }\n }\n\n var mustachePattern = /\\{\\{([^{}]*)}}/;\n
\n // exports\n\n scope.bindPattern = mustachePattern;\n scope.api.instance.m
dv = mdv;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Autho
rs. All rights reserved.\n * This code may only be used under the BSD style lice
nse found at http://polymer.github.io/LICENSE.txt\n * The complete set of author
s may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of c
ontributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code d
istributed by Google as part of the polymer project is also\n * subject to an ad
ditional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(
function(scope) {\n\n var base = {\n PolymerBase: true,\n job: function(j
ob, callback, wait) {\n if (typeof job === 'string') {\n var n = '__
_' + job;\n this[n] = Polymer.job.call(this, this[n], callback, wait);\n
} else {\n return Polymer.job.call(this, job, callback, wait);\n
}\n },\n super: Polymer.super,\n // user entry point for element has
had its createdCallback called\n created: function() {\n },\n // user e
ntry point for element has shadowRoot and is ready for\n // api interaction\n
ready: function() {\n },\n createdCallback: function() {\n if (th
is.templateInstance && this.templateInstance.model) {\n console.warn('Att
ributes on ' + this.localName + ' were data bound ' +\n 'prior to Pol
ymer upgrading the element. This may result in ' +\n 'incorrect bindi
ng types.');\n }\n this.created();\n this.prepareElement();\n
if (!this.ownerDocument.isStagingDocument) {\n this.makeElementReady();
\n }\n },\n // system entry point, do not override\n prepareElemen
t: function() {\n if (this._elementPrepared) {\n console.warn('Eleme
nt already prepared', this.localName);\n return;\n }\n this._el
ementPrepared = true;\n // storage for shadowRoots info\n this.shadowR
oots = {};\n // install property observers\n this.createPropertyObserv
er();\n this.openPropertyObserver();\n // install boilerplate attribut
es\n this.copyInstanceAttributes();\n // process input attributes\n
this.takeAttributes();\n // add event listeners\n this.addHostListe
ners();\n },\n makeElementReady: function() {\n if (this._readied) {\
n return;\n }\n this._readied = true;\n this.createCompute
dProperties();\n // TODO(sorvell): We could create an entry point here\n
// for the user to compute property values.\n // process declarative res
ources\n this.parseDeclarations(this.__proto__);\n // TODO(sorvell): C
E polyfill uses unresolved attribute to simulate\n // :unresolved; remove t
his attribute to be compatible with native\n // CE.\n this.removeAttri
bute('unresolved');\n // user entry point\n this.ready();\n },\n
attachedCallback: function() {\n this.cancelUnbindAll();\n // invoke
user action\n if (this.attached) {\n this.attached();\n }\n
// TODO(sorvell): bc\n if (this.enteredView) {\n this.enteredView(
);\n }\n // NOTE: domReady can be used to access elements in dom (desc
endants,\n // ancestors, siblings) such that the developer is enured to upg
rade\n // ordering. If the element definitions have loaded, domReady\n
// can be used to access upgraded elements.\n if (!this.hasBeenAttached) {
\n this.hasBeenAttached = true;\n if (this.domReady) {\n
this.async('domReady');\n }\n }\n },\n detachedCallback: funct
ion() {\n if (!this.preventDispose) {\n this.asyncUnbindAll();\n
}\n // invoke user action\n if (this.detached) {\n this.detac
hed();\n }\n // TODO(sorvell): bc\n if (this.leftView) {\n
this.leftView();\n }\n },\n // TODO(sorvell): bc\n enteredViewCal
lback: function() {\n this.attachedCallback();\n },\n // TODO(sorvell
): bc\n leftViewCallback: function() {\n this.detachedCallback();\n }
,\n // TODO(sorvell): bc\n enteredDocumentCallback: function() {\n th
is.attachedCallback();\n },\n // TODO(sorvell): bc\n leftDocumentCallba
ck: function() {\n this.detachedCallback();\n },\n // recursive ances
tral <element> initialization, oldest first\n parseDeclarations: function(p)
{\n if (p && p.element) {\n this.parseDeclarations(p.__proto__);\n
p.parseDeclaration.call(this, p.element);\n }\n },\n // parse i
nput <element> as needed, override for custom behavior\n parseDeclaration: fu
nction(elementElement) {\n var template = this.fetchTemplate(elementElement
);\n if (template) {\n var root = this.shadowFromTemplate(template);
\n this.shadowRoots[elementElement.name] = root;\n }\n },\n //
return a shadow-root template (if desired), override for custom behavior\n f
etchTemplate: function(elementElement) {\n return elementElement.querySelec
tor('template');\n },\n // utility function that creates a shadow root fro
m a <template>\n shadowFromTemplate: function(template) {\n if (template
) {\n // make a shadow root\n var root = this.createShadowRoot();\
n // stamp template\n // which includes parsing and applying MDV b
indings before being\n // inserted (to avoid {{}} in attribute values)\n
// e.g. to prevent <img src=\"images/{{icon}}\"> from generating a 404.\n
var dom = this.instanceTemplate(template);\n // append to shadow
dom\n root.appendChild(dom);\n // perform post-construction initia
lization tasks on shadow root\n this.shadowRootReady(root, template);\n
// return the created shadow root\n return root;\n }\n },\n
// utility function that stamps a <template> into light-dom\n lightFromTe
mplate: function(template, refNode) {\n if (template) {\n // TODO(so
rvell): mark this element as an eventController so that\n // event listen
ers on bound nodes inside it will be called on it.\n // Note, the expecta
tion here is that events on all descendants\n // should be handled by thi
s element.\n this.eventController = this;\n // stamp template\n
// which includes parsing and applying MDV bindings before being\n /
/ inserted (to avoid {{}} in attribute values)\n // e.g. to prevent <img
src=\"images/{{icon}}\"> from generating a 404.\n var dom = this.instance
Template(template);\n // append to shadow dom\n if (refNode) {\n
this.insertBefore(dom, refNode);\n } else {\n this.appen
dChild(dom);\n }\n // perform post-construction initialization tas
ks on ahem, light root\n this.shadowRootReady(this);\n // return t
he created shadow root\n return dom;\n }\n },\n shadowRootRead
y: function(root) {\n // locate nodes with id and store references to them
in this.$ hash\n this.marshalNodeReferences(root);\n },\n // locate n
odes with id and store references to them in this.$ hash\n marshalNodeReferen
ces: function(root) {\n // establish $ instance variable\n var $ = thi
s.$ = this.$ || {};\n // populate $ from nodes with ID from the LOCAL tree\
n if (root) {\n var n$ = root.querySelectorAll(\"[id]\");\n f
or (var i=0, l=n$.length, n; (i<l) && (n=n$[i]); i++) {\n $[n.id] = n;\
n };\n }\n },\n attributeChangedCallback: function(name, oldVa
lue) {\n // TODO(sjmiles): adhoc filter\n if (name !== 'class' && name
!== 'style') {\n this.attributeToProperty(name, this.getAttribute(name))
;\n }\n if (this.attributeChanged) {\n this.attributeChanged.ap
ply(this, arguments);\n }\n },\n onMutation: function(node, listener)
{\n var observer = new MutationObserver(function(mutations) {\n lis
tener.call(this, observer, mutations);\n observer.disconnect();\n }.
bind(this));\n observer.observe(node, {childList: true, subtree: true});\n
}\n };\n\n // true if object has own PolymerBase api\n function isBase(obj
ect) {\n return object.hasOwnProperty('PolymerBase')\n }\n\n // name a base
constructor for dev tools\n\n function PolymerBase() {};\n PolymerBase.protot
ype = base;\n base.constructor = PolymerBase;\n\n // exports\n\n scope.Base =
PolymerBase;\n scope.isBase = isBase;\n scope.api.instance.base = base;\n\n})
(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights
reserved.\n * This code may only be used under the BSD style license found at ht
tp://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found
at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may
be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by G
oogle as part of the polymer project is also\n * subject to an additional IP rig
hts grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope)
{\n\n // imports\n\n var log = window.logFlags || {};\n var hasShadowDOMPoly
fill = window.ShadowDOMPolyfill;\n\n // magic words\n \n var STYLE_SCOPE_ATTR
IBUTE = 'element';\n var STYLE_CONTROLLER_SCOPE = 'controller';\n \n var styl
es = {\n STYLE_SCOPE_ATTRIBUTE: STYLE_SCOPE_ATTRIBUTE,\n /**\n * Insta
lls external stylesheets and <style> elements with the attribute \n * polyme
r-scope='controller' into the scope of element. This is intended\n * to be a
called during custom element construction.\n */\n installControllerStyles
: function() {\n // apply controller styles, but only if they are not yet a
pplied\n var scope = this.findStyleScope();\n if (scope && !this.scope
HasNamedStyle(scope, this.localName)) {\n // allow inherited controller s
tyles\n var proto = getPrototypeOf(this), cssText = '';\n while (p
roto && proto.element) {\n cssText += proto.element.cssTextForScope(STY
LE_CONTROLLER_SCOPE);\n proto = getPrototypeOf(proto);\n }\n
if (cssText) {\n this.installScopeCssText(cssText, scope);\n
}\n }\n },\n installScopeStyle: function(style, name, scope) {\n
var scope = scope || this.findStyleScope(), name = name || '';\n if (scop
e && !this.scopeHasNamedStyle(scope, this.localName + name)) {\n var cssT
ext = '';\n if (style instanceof Array) {\n for (var i=0, l=styl
e.length, s; (i<l) && (s=style[i]); i++) {\n cssText += s.textContent
+ '\\n\\n';\n }\n } else {\n cssText = style.textConte
nt;\n }\n this.installScopeCssText(cssText, scope, name);\n }
\n },\n installScopeCssText: function(cssText, scope, name) {\n scope
= scope || this.findStyleScope();\n name = name || '';\n if (!scope)
{\n return;\n }\n if (hasShadowDOMPolyfill) {\n cssText
= shimCssText(cssText, scope.host);\n }\n var style = this.element.css
TextToScopeStyle(cssText,\n STYLE_CONTROLLER_SCOPE);\n Polymer.app
lyStyleToScope(style, scope);\n // cache that this style has been applied\n
this.styleCacheForScope(scope)[this.localName + name] = true;\n },\n
findStyleScope: function(node) {\n // find the shadow root that contains t
his element\n var n = node || this;\n while (n.parentNode) {\n
n = n.parentNode;\n }\n return n;\n },\n scopeHasNamedStyle: fun
ction(scope, name) {\n var cache = this.styleCacheForScope(scope);\n r
eturn cache[name];\n },\n styleCacheForScope: function(scope) {\n if
(hasShadowDOMPolyfill) {\n var scopeName = scope.host ? scope.host.localN
ame : scope.localName;\n return polyfillScopeStyleCache[scopeName] || (po
lyfillScopeStyleCache[scopeName] = {});\n } else {\n return scope._s
copeStyles = (scope._scopeStyles || {});\n }\n }\n };\n\n var polyfill
ScopeStyleCache = {};\n \n // NOTE: use raw prototype traversal so that we ens
ure correct traversal\n // on platforms where the protoype chain is simulated v
ia __proto__ (IE10)\n function getPrototypeOf(prototype) {\n return prototyp
e.__proto__;\n }\n\n function shimCssText(cssText, host) {\n var name = '',
is = false;\n if (host) {\n name = host.localName;\n is = host.has
Attribute('is');\n }\n var selector = Platform.ShadowCSS.makeScopeSelector
(name, is);\n return Platform.ShadowCSS.shimCssText(cssText, selector);\n }\
n\n // exports\n\n scope.api.instance.styles = styles;\n \n})(Polymer);\n\n/*
\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * Th
is code may only be used under the BSD style license found at http://polymer.git
hub.io/LICENSE.txt\n * The complete set of authors may be found at http://polyme
r.github.io/AUTHORS.txt\n * The complete set of contributors may be found at htt
p://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of
the polymer project is also\n * subject to an additional IP rights grant found
at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // impor
ts\n\n var extend = scope.extend;\n var api = scope.api;\n\n // imperative im
plementation: Polymer()\n\n // specify an 'own' prototype for tag `name`\n fun
ction element(name, prototype) {\n if (typeof name !== 'string') {\n var
script = prototype || document._currentScript;\n prototype = name;\n
name = script && script.parentNode && script.parentNode.getAttribute ?\n
script.parentNode.getAttribute('name') : '';\n if (!name) {\n thro
w 'Element name could not be inferred.';\n }\n }\n if (getRegisteredP
rototype[name]) {\n throw 'Already registered (Polymer) prototype for eleme
nt ' + name;\n }\n // cache the prototype\n registerPrototype(name, pro
totype);\n // notify the registrar waiting for 'name', if any\n notifyProt
otype(name);\n }\n\n // async prototype source\n\n function waitingForPrototy
pe(name, client) {\n waitPrototype[name] = client;\n }\n\n var waitPrototyp
e = {};\n\n function notifyPrototype(name) {\n if (waitPrototype[name]) {\n
waitPrototype[name].registerWhenReady();\n delete waitPrototype[name];
\n }\n }\n\n // utility and bookkeeping\n\n // maps tag names to prototype
s, as registered with\n // Polymer. Prototypes associated with a tag name\n //
using document.registerElement are available from\n // HTMLElement.getPrototyp
eForTag().\n // If an element was fully registered by Polymer, then\n // Polym
er.getRegisteredPrototype(name) === \n // HTMLElement.getPrototypeForTag(name
)\n\n var prototypesByName = {};\n\n function registerPrototype(name, prototyp
e) {\n return prototypesByName[name] = prototype || {};\n }\n\n function ge
tRegisteredPrototype(name) {\n return prototypesByName[name];\n }\n\n // ex
ports\n\n scope.getRegisteredPrototype = getRegisteredPrototype;\n scope.waiti
ngForPrototype = waitingForPrototype;\n\n // namespace shenanigans so we can ex
pose our scope on the registration \n // function\n\n // make window.Polymer r
eference `element()`\n\n window.Polymer = element;\n\n // TODO(sjmiles): find
a way to do this that is less terrible\n // copy window.Polymer properties onto
`element()`\n\n extend(Polymer, scope);\n\n // Under the HTMLImports polyfill
, scripts in the main document\n // do not block on imports; we want to allow c
alls to Polymer in the main\n // document. Platform collects those calls until
we can process them, which\n // we do here.\n\n if (Platform.consumeDeclaratio
ns) {\n Platform.consumeDeclarations(function(declarations) {;\n if (dec
larations) {\n for (var i=0, l=declarations.length, d; (i<l) && (d=declar
ations[i]); i++) {\n element.apply(null, d);\n }\n }\n }
);\n }\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors
. All rights reserved.\n * This code may only be used under the BSD style licens
e found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors
may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of con
tributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dis
tributed by Google as part of the polymer project is also\n * subject to an addi
tional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(fu
nction(scope) {\n\nvar path = {\n resolveElementPaths: function(node) {\n Po
lymer.urlResolver.resolveDom(node);\n },\n addResolvePathApi: function() {\n
// let assetpath attribute modify the resolve path\n var assetPath = this.g
etAttribute('assetpath') || '';\n var root = new URL(assetPath, this.ownerDoc
ument.baseURI);\n this.prototype.resolvePath = function(urlPath, base) {\n
var u = new URL(urlPath, base || root);\n return u.href;\n };\n }\n}
;\n\n// exports\nscope.api.declaration.path = path;\n\n})(Polymer);\n\n/*\n * Co
pyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code
may only be used under the BSD style license found at http://polymer.github.io/
LICENSE.txt\n * The complete set of authors may be found at http://polymer.githu
b.io/AUTHORS.txt\n * The complete set of contributors may be found at http://pol
ymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the po
lymer project is also\n * subject to an additional IP rights grant found at http
://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n
var log = window.logFlags || {};\n var api = scope.api.instance.styles;\n var
STYLE_SCOPE_ATTRIBUTE = api.STYLE_SCOPE_ATTRIBUTE;\n\n var hasShadowDOMPolyfil
l = window.ShadowDOMPolyfill;\n\n // magic words\n\n var STYLE_SELECTOR = 'sty
le';\n var STYLE_LOADABLE_MATCH = '@import';\n var SHEET_SELECTOR = 'link[rel=
stylesheet]';\n var STYLE_GLOBAL_SCOPE = 'global';\n var SCOPE_ATTR = 'polymer
-scope';\n\n var styles = {\n // returns true if resources are loading\n
loadStyles: function(callback) {\n var template = this.fetchTemplate();\n
var content = template && this.templateContent();\n if (content) {\n
this.convertSheetsToStyles(content);\n var styles = this.findLoadabl
eStyles(content);\n if (styles.length) {\n var templateUrl = tem
plate.ownerDocument.baseURI;\n return Polymer.styleResolver.loadStyles(
styles, templateUrl, callback);\n }\n }\n if (callback) {\n
callback();\n }\n },\n convertSheetsToStyles: function(root) {\n
var s$ = root.querySelectorAll(SHEET_SELECTOR);\n for (var i=0, l=s$.l
ength, s, c; (i<l) && (s=s$[i]); i++) {\n c = createStyleElement(importRu
leForSheet(s, this.ownerDocument.baseURI),\n this.ownerDocument);\n
this.copySheetAttributes(c, s);\n s.parentNode.replaceChild(c, s);\
n }\n },\n copySheetAttributes: function(style, link) {\n for (v
ar i=0, a$=link.attributes, l=a$.length, a; (a=a$[i]) && i<l; i++) {\n if
(a.name !== 'rel' && a.name !== 'href') {\n style.setAttribute(a.name,
a.value);\n }\n }\n },\n findLoadableStyles: function(root) {
\n var loadables = [];\n if (root) {\n var s$ = root.querySelec
torAll(STYLE_SELECTOR);\n for (var i=0, l=s$.length, s; (i<l) && (s=s$[i]
); i++) {\n if (s.textContent.match(STYLE_LOADABLE_MATCH)) {\n
loadables.push(s);\n }\n }\n }\n return loadables;\
n },\n /**\n * Install external stylesheets loaded in <polymer-element
> elements into the \n * element's template.\n * @param elementElement T
he <element> element to style.\n */\n installSheets: function() {\n
this.cacheSheets();\n this.cacheStyles();\n this.installLocalSheets();
\n this.installGlobalStyles();\n },\n /**\n * Remove all sheets f
rom element and store for later use.\n */\n cacheSheets: function() {\n
this.sheets = this.findNodes(SHEET_SELECTOR);\n this.sheets.forEach(fun
ction(s) {\n if (s.parentNode) {\n s.parentNode.removeChild(s);\
n }\n });\n },\n cacheStyles: function() {\n this.styles
= this.findNodes(STYLE_SELECTOR + '[' + SCOPE_ATTR + ']');\n this.styles.fo
rEach(function(s) {\n if (s.parentNode) {\n s.parentNode.removeC
hild(s);\n }\n });\n },\n /**\n * Takes external styleshee
ts loaded in an <element> element and moves\n * their content into a <style>
element inside the <element>'s template.\n * The sheet is then removed from
the <element>. This is done only so \n * that if the element is loaded in t
he main document, the sheet does\n * not become active.\n * Note, ignore
s sheets with the attribute 'polymer-scope'.\n * @param elementElement The <
element> element to style.\n */\n installLocalSheets: function () {\n
var sheets = this.sheets.filter(function(s) {\n return !s.hasAttribute(
SCOPE_ATTR);\n });\n var content = this.templateContent();\n if (
content) {\n var cssText = '';\n sheets.forEach(function(sheet) {\
n cssText += cssTextFromSheet(sheet) + '\\n';\n });\n if
(cssText) {\n var style = createStyleElement(cssText, this.ownerDocumen
t);\n content.insertBefore(style, content.firstChild);\n }\n
}\n },\n findNodes: function(selector, matcher) {\n var nodes = thi
s.querySelectorAll(selector).array();\n var content = this.templateContent(
);\n if (content) {\n var templateNodes = content.querySelectorAll(s
elector).array();\n nodes = nodes.concat(templateNodes);\n }\n
return matcher ? nodes.filter(matcher) : nodes;\n },\n /**\n * Promote
s external stylesheets and <style> elements with the attribute \n * polymer-
scope='global' into global scope.\n * This is particularly useful for defini
ng @keyframe rules which \n * currently do not function in scoped or shadow
style elements.\n * (See wkb.ug/72462)\n * @param elementElement The <el
ement> element to style.\n */\n // TODO(sorvell): remove when wkb.ug/72462
is addressed.\n installGlobalStyles: function() {\n var style = this.st
yleForScope(STYLE_GLOBAL_SCOPE);\n applyStyleToScope(style, document.head);
\n },\n cssTextForScope: function(scopeDescriptor) {\n var cssText =
'';\n // handle stylesheets\n var selector = '[' + SCOPE_ATTR + '=' +
scopeDescriptor + ']';\n var matcher = function(s) {\n return matche
sSelector(s, selector);\n };\n var sheets = this.sheets.filter(matcher
);\n sheets.forEach(function(sheet) {\n cssText += cssTextFromSheet(
sheet) + '\\n\\n';\n });\n // handle cached style elements\n var
styles = this.styles.filter(matcher);\n styles.forEach(function(style) {\n
cssText += style.textContent + '\\n\\n';\n });\n return cssText
;\n },\n styleForScope: function(scopeDescriptor) {\n var cssText = t
his.cssTextForScope(scopeDescriptor);\n return this.cssTextToScopeStyle(css
Text, scopeDescriptor);\n },\n cssTextToScopeStyle: function(cssText, scop
eDescriptor) {\n if (cssText) {\n var style = createStyleElement(css
Text);\n style.setAttribute(STYLE_SCOPE_ATTRIBUTE, this.getAttribute('nam
e') +\n '-' + scopeDescriptor);\n return style;\n }\n
}\n };\n\n function importRuleForSheet(sheet, baseUrl) {\n var href = new U
RL(sheet.getAttribute('href'), baseUrl).href;\n return '@import \\'' + href +
'\\';';\n }\n\n function applyStyleToScope(style, scope) {\n if (style) {\
n if (scope === document) {\n scope = document.head;\n }\n
if (hasShadowDOMPolyfill) {\n scope = document.head;\n }\n //
TODO(sorvell): necessary for IE\n // see https://connect.microsoft.com/IE/f
eedback/details/790212/\n // cloning-a-style-element-and-adding-to-document
-produces\n // -unexpected-result#details\n // var clone = style.clone
Node(true);\n var clone = createStyleElement(style.textContent);\n var
attr = style.getAttribute(STYLE_SCOPE_ATTRIBUTE);\n if (attr) {\n c
lone.setAttribute(STYLE_SCOPE_ATTRIBUTE, attr);\n }\n // TODO(sorvell)
: probably too brittle; try to figure out \n // where to put the element.\n
var refNode = scope.firstElementChild;\n if (scope === document.head)
{\n var selector = 'style[' + STYLE_SCOPE_ATTRIBUTE + ']';\n var
s$ = document.head.querySelectorAll(selector);\n if (s$.length) {\n
refNode = s$[s$.length-1].nextElementSibling;\n }\n }\n sco
pe.insertBefore(clone, refNode);\n }\n }\n\n function createStyleElement(cs
sText, scope) {\n scope = scope || document;\n scope = scope.createElement
? scope : scope.ownerDocument;\n var style = scope.createElement('style');\n
style.textContent = cssText;\n return style;\n }\n\n function cssTextFr
omSheet(sheet) {\n return (sheet && sheet.__resource) || '';\n }\n\n functi
on matchesSelector(node, inSelector) {\n if (matches) {\n return matches
.call(node, inSelector);\n }\n }\n var p = HTMLElement.prototype;\n var ma
tches = p.matches || p.matchesSelector || p.webkitMatchesSelector \n || p.m
ozMatchesSelector;\n \n // exports\n\n scope.api.declaration.styles = styles;
\n scope.applyStyleToScope = applyStyleToScope;\n \n})(Polymer);\n\n/*\n * Cop
yright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code
may only be used under the BSD style license found at http://polymer.github.io/L
ICENSE.txt\n * The complete set of authors may be found at http://polymer.github
.io/AUTHORS.txt\n * The complete set of contributors may be found at http://poly
mer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the pol
ymer project is also\n * subject to an additional IP rights grant found at http:
//polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n
var log = window.logFlags || {};\n var api = scope.api.instance.events;\n var
EVENT_PREFIX = api.EVENT_PREFIX;\n // polymer-element declarative api: events f
eature\n\n var mixedCaseEventTypes = {};\n [\n 'webkitAnimationStart',\n
'webkitAnimationEnd',\n 'webkitTransitionEnd',\n 'DOMFocusOut',\n 'DOM
FocusIn',\n 'DOMMouseScroll'\n ].forEach(function(e) {\n mixedCaseEventTy
pes[e.toLowerCase()] = e;\n });\n\n var events = {\n parseHostEvents: funct
ion() {\n // our delegates map\n var delegates = this.prototype.eventD
elegates;\n // extract data from attributes into delegates\n this.addA
ttributeDelegates(delegates);\n },\n addAttributeDelegates: function(deleg
ates) {\n // for each attribute\n for (var i=0, a; a=this.attributes[i
]; i++) {\n // does it have magic marker identifying it as an event deleg
ate?\n if (this.hasEventPrefix(a.name)) {\n // if so, add the in
fo to delegates\n delegates[this.removeEventPrefix(a.name)] = a.value.r
eplace('{{', '')\n .replace('}}', '').trim();\n }\n }\n
},\n // starts with 'on-'\n hasEventPrefix: function (n) {\n retu
rn n && (n[0] === 'o') && (n[1] === 'n') && (n[2] === '-');\n },\n removeE
ventPrefix: function(n) {\n return n.slice(prefixLength);\n },\n find
Controller: function(node) {\n while (node.parentNode) {\n if (node.
eventController) {\n return node.eventController;\n }\n n
ode = node.parentNode;\n }\n return node.host;\n },\n getEventHa
ndler: function(controller, target, method) {\n var events = this;\n r
eturn function(e) {\n if (!controller || !controller.PolymerBase) {\n
controller = events.findController(target);\n }\n\n var args
= [e, e.detail, e.currentTarget];\n controller.dispatchMethod(controller
, method, args);\n };\n },\n prepareEventBinding: function(pathString
, name, node) {\n if (!this.hasEventPrefix(name))\n return;\n\n
var eventType = this.removeEventPrefix(name);\n eventType = mixedCaseEvent
Types[eventType] || eventType;\n\n var events = this;\n\n return funct
ion(model, node, oneTime) {\n var handler = events.getEventHandler(undefi
ned, node, pathString);\n PolymerGestures.addEventListener(node, eventTyp
e, handler);\n\n if (oneTime)\n return;\n\n // TODO(rafae
lw): This is really pointless work. Aside from the cost\n // of these all
ocations, NodeBind is going to setAttribute back to its\n // current valu
e. Fixing this would mean changing the TemplateBinding\n // binding deleg
ate API.\n function bindingValue() {\n return '{{ ' + pathString
+ ' }}';\n }\n\n return {\n open: bindingValue,\n
discardChanges: bindingValue,\n close: function() {\n Pol
ymerGestures.removeEventListener(node, eventType, handler);\n }\n
};\n };\n }\n };\n\n var prefixLength = EVENT_PREFIX.length;\n\n //
exports\n scope.api.declaration.events = events;\n\n})(Polymer);\n\n/*\n * Cop
yright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code
may only be used under the BSD style license found at http://polymer.github.io/L
ICENSE.txt\n * The complete set of authors may be found at http://polymer.github
.io/AUTHORS.txt\n * The complete set of contributors may be found at http://poly
mer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the pol
ymer project is also\n * subject to an additional IP rights grant found at http:
//polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // element api\n
\n var properties = {\n inferObservers: function(prototype) {\n // call
ed before prototype.observe is chained to inherited object\n var observe =
prototype.observe, property;\n for (var n in prototype) {\n if (n.sl
ice(-7) === 'Changed') {\n if (!observe) {\n observe = (pro
totype.observe = {});\n }\n property = n.slice(0, -7)\n
observe[property] = observe[property] || n;\n }\n }\n },\n
explodeObservers: function(prototype) {\n // called before prototype.observ
e is chained to inherited object\n var o = prototype.observe;\n if (o)
{\n var exploded = {};\n for (var n in o) {\n var names
= n.split(' ');\n for (var i=0, ni; ni=names[i]; i++) {\n ex
ploded[ni] = o[n];\n }\n }\n prototype.observe = exploded
;\n }\n },\n optimizePropertyMaps: function(prototype) {\n if (p
rototype.observe) {\n // construct name list\n var a = prototype._
observeNames = [];\n for (var n in prototype.observe) {\n var na
mes = n.split(' ');\n for (var i=0, ni; ni=names[i]; i++) {\n
a.push(ni);\n }\n }\n }\n if (prototype.publish) {\n
// construct name list\n var a = prototype._publishNames = [];\n
for (var n in prototype.publish) {\n a.push(n);\n }\n
}\n if (prototype.computed) {\n // construct name list\n va
r a = prototype._computedNames = [];\n for (var n in prototype.computed)
{\n a.push(n);\n }\n }\n },\n publishProperties: func
tion(prototype, base) {\n // if we have any properties to publish\n va
r publish = prototype.publish;\n if (publish) {\n // transcribe `pub
lish` entries onto own prototype\n this.requireProperties(publish, protot
ype, base);\n // construct map of lower-cased property names\n pro
totype._publishLC = this.lowerCaseMap(publish);\n }\n },\n //\n //
`name: value` entries in the `publish` object may need to generate \n // mat
ching properties on the prototype.\n //\n // Values that are objects may h
ave a `reflect` property, which\n // signals that the value describes propert
y control metadata.\n // In metadata objects, the prototype default value (if
any)\n // is encoded in the `value` property.\n //\n // publish: {\n
// foo: 5, \n // bar: {value: true, reflect: true},\n // zot: {}\n
// }\n //\n // `reflect` metadata property controls whether changes to
the property\n // are reflected back to the attribute (default false). \n
//\n // A value is stored on the prototype unless it's === `undefined`,\n
// in which case the base chain is checked for a value.\n // If the basal va
lue is also undefined, `null` is stored on the prototype.\n //\n // The re
flection data is stored on another prototype object, `reflect`\n // which als
o can be specified directly.\n //\n // reflect: {\n // foo: true\n
// }\n //\n requireProperties: function(propertyInfos, prototype, base) {
\n // per-prototype storage for reflected properties\n prototype.refle
ct = prototype.reflect || {};\n // ensure a prototype value for each proper
ty\n // and update the property's reflect to attribute status\n for (v
ar n in propertyInfos) {\n var value = propertyInfos[n];\n // valu
e has metadata if it has a `reflect` property\n if (value && value.reflec
t !== undefined) {\n prototype.reflect[n] = Boolean(value.reflect);\n
value = value.value;\n }\n // only set a value if one is s
pecified\n if (value !== undefined) {\n prototype[n] = value;\n
}\n }\n },\n lowerCaseMap: function(properties) {\n var m
ap = {};\n for (var n in properties) {\n map[n.toLowerCase()] = n;\n
}\n return map;\n },\n createPropertyAccessor: function(name) {
\n var proto = this.prototype;\n\n var privateName = name + '_';\n
var privateObservable = name + 'Observable_';\n proto[privateName] = pro
to[name];\n\n Object.defineProperty(proto, name, {\n get: function()
{\n var observable = this[privateObservable];\n if (observabl
e)\n observable.deliver();\n\n return this[privateName];\n
},\n set: function(value) {\n var observable = this[privat
eObservable];\n if (observable) {\n observable.setValue(valu
e);\n return;\n }\n\n var oldValue = this[privateNa
me];\n this[privateName] = value;\n this.emitPropertyChangeRec
ord(name, value, oldValue);\n\n return value;\n },\n conf
igurable: true\n });\n },\n createPropertyAccessors: function(prototy
pe) {\n var n$ = prototype._publishNames;\n if (n$ && n$.length) {\n
for (var i=0, l=n$.length, n, fn; (i<l) && (n=n$[i]); i++) {\n th
is.createPropertyAccessor(n);\n }\n }\n var n$ = prototype._com
putedNames;\n if (n$ && n$.length) {\n for (var i=0, l=n$.length, n,
fn; (i<l) && (n=n$[i]); i++) {\n this.createPropertyAccessor(n);\n
}\n }\n }\n };\n\n // exports\n\n scope.api.declaration.propertie
s = properties;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project
Authors. All rights reserved.\n * This code may only be used under the BSD styl
e license found at http://polymer.github.io/LICENSE.txt\n * The complete set of
authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete se
t of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n *
Code distributed by Google as part of the polymer project is also\n * subject to
an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n *
/\n(function(scope) {\n\n // magic words\n\n var ATTRIBUTES_ATTRIBUTE = 'attri
butes';\n var ATTRIBUTES_REGEX = /\\s|,/;\n\n // attributes api\n\n var attri
butes = {\n \n inheritAttributesObjects: function(prototype) {\n // c
hain our lower-cased publish map to the inherited version\n this.inheritObj
ect(prototype, 'publishLC');\n // chain our instance attributes map to the
inherited version\n this.inheritObject(prototype, '_instanceAttributes');\n
},\n\n publishAttributes: function(prototype, base) {\n // merge nam
es from 'attributes' attribute into the 'publish' object\n var attributes =
this.getAttribute(ATTRIBUTES_ATTRIBUTE);\n if (attributes) {\n // c
reate a `publish` object if needed.\n // the `publish` object is only rel
evant to this prototype, the \n // publishing logic in `declaration/prope
rties.js` is responsible for\n // managing property values on the prototy
pe chain.\n // TODO(sjmiles): the `publish` object is later chained to it
's \n // ancestor object, presumably this is only for \n
// reflection or other non-library uses. \n var publ
ish = prototype.publish || (prototype.publish = {}); \n // names='a b c'
or names='a,b,c'\n var names = attributes.split(ATTRIBUTES_REGEX);\n
// record each name for publishing\n for (var i=0, l=names.length, n;
i<l; i++) {\n // remove excess ws\n n = names[i].trim();\n
// looks weird, but causes n to exist on `publish` if it does not;\n
// a more careful test would need expensive `in` operator\n if (n &
& publish[n] === undefined) {\n publish[n] = undefined;\n }\
n }\n }\n },\n\n // record clonable attributes from <element>\
n accumulateInstanceAttributes: function() {\n // inherit instance attri
butes\n var clonable = this.prototype._instanceAttributes;\n // merge
attributes from element\n var a$ = this.attributes;\n for (var i=0, l=
a$.length, a; (i<l) && (a=a$[i]); i++) { \n if (this.isInstanceAttribute
(a.name)) {\n clonable[a.name] = a.value;\n }\n }\n },\n
\n isInstanceAttribute: function(name) {\n return !this.blackList[name]
&& name.slice(0,3) !== 'on-';\n },\n\n // do not clone these attributes on
to instances\n blackList: {\n name: 1,\n 'extends': 1,\n const
ructor: 1,\n noscript: 1,\n assetpath: 1,\n 'cache-csstext': 1\n
}\n \n };\n\n // add ATTRIBUTES_ATTRIBUTE to the blacklist\n attributes
.blackList[ATTRIBUTES_ATTRIBUTE] = 1;\n\n // exports\n\n scope.api.declaration
.attributes = attributes;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polym
er Project Authors. All rights reserved.\n * This code may only be used under th
e BSD style license found at http://polymer.github.io/LICENSE.txt\n * The comple
te set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The c
omplete set of contributors may be found at http://polymer.github.io/CONTRIBUTOR
S.txt\n * Code distributed by Google as part of the polymer project is also\n *
subject to an additional IP rights grant found at http://polymer.github.io/PATEN
TS.txt\n */\n\n(function(scope) {\n\n // imports\n var events = scope.api.decl
aration.events;\n\n var syntax = new PolymerExpressions();\n var prepareBindin
g = syntax.prepareBinding;\n\n // Polymer takes a first crack at the binding to
see if it's a declarative\n // event handler.\n syntax.prepareBinding = funct
ion(pathString, name, node) {\n return events.prepareEventBinding(pathString,
name, node) ||\n prepareBinding.call(syntax, pathString, name, node);
\n };\n\n // declaration api supporting mdv\n var mdv = {\n syntax: syntax
,\n fetchTemplate: function() {\n return this.querySelector('template');
\n },\n templateContent: function() {\n var template = this.fetchTemp
late();\n return template && template.content;\n },\n installBindingD
elegate: function(template) {\n if (template) {\n template.bindingDe
legate = this.syntax;\n }\n }\n };\n\n // exports\n scope.api.declara
tion.mdv = mdv;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project
Authors. All rights reserved.\n * This code may only be used under the BSD styl
e license found at http://polymer.github.io/LICENSE.txt\n * The complete set of
authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete se
t of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n *
Code distributed by Google as part of the polymer project is also\n * subject to
an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n *
/\n\n(function(scope) {\n\n // imports\n \n var api = scope.api;\n var isBas
e = scope.isBase;\n var extend = scope.extend;\n\n var hasShadowDOMPolyfill =
window.ShadowDOMPolyfill;\n\n // prototype api\n\n var prototype = {\n\n re
gister: function(name, extendeeName) {\n // build prototype combining exten
dee, Polymer base, and named api\n this.buildPrototype(name, extendeeName);
\n // register our custom element with the platform\n this.registerPro
totype(name, extendeeName);\n // reference constructor in a global named by
'constructor' attribute\n this.publishConstructor();\n },\n\n buildP
rototype: function(name, extendeeName) {\n // get our custom prototype (bef
ore chaining)\n var extension = scope.getRegisteredPrototype(name);\n
// get basal prototype\n var base = this.generateBasePrototype(extendeeName
);\n // implement declarative features\n this.desugarBeforeChaining(ex
tension, base);\n // join prototypes\n this.prototype = this.chainProt
otypes(extension, base);\n // more declarative features\n this.desugar
AfterChaining(name, extendeeName);\n },\n\n desugarBeforeChaining: functio
n(prototype, base) {\n // back reference declaration element\n // TODO
(sjmiles): replace `element` with `elementElement` or `declaration`\n proto
type.element = this;\n // transcribe `attributes` declarations onto own pro
totype's `publish`\n this.publishAttributes(prototype, base);\n // `pu
blish` properties to the prototype and to attribute watch\n this.publishPro
perties(prototype, base);\n // infer observers for `observe` list based on
method names\n this.inferObservers(prototype);\n // desugar compound o
bserver syntax, e.g. 'a b c' \n this.explodeObservers(prototype);\n },\n
\n chainPrototypes: function(prototype, base) {\n // chain various meta-
data objects to inherited versions\n this.inheritMetaData(prototype, base);
\n // chain custom api to inherited\n var chained = this.chainObject(p
rototype, base);\n // x-platform fixup\n ensurePrototypeTraversal(chai
ned);\n return chained;\n },\n\n inheritMetaData: function(prototype,
base) {\n // chain observe object to inherited\n this.inheritObject('
observe', prototype, base);\n // chain publish object to inherited\n t
his.inheritObject('publish', prototype, base);\n // chain reflect object to
inherited\n this.inheritObject('reflect', prototype, base);\n // chai
n our lower-cased publish map to the inherited version\n this.inheritObject
('_publishLC', prototype, base);\n // chain our instance attributes map to
the inherited version\n this.inheritObject('_instanceAttributes', prototype
, base);\n // chain our event delegates map to the inherited version\n
this.inheritObject('eventDelegates', prototype, base);\n },\n\n // implem
ent various declarative features\n desugarAfterChaining: function(name, exten
dee) {\n // build side-chained lists to optimize iterations\n this.opt
imizePropertyMaps(this.prototype);\n this.createPropertyAccessors(this.prot
otype);\n // install mdv delegate on template\n this.installBindingDel
egate(this.fetchTemplate());\n // install external stylesheets as if they a
re inline\n this.installSheets();\n // adjust any paths in dom from im
ports\n this.resolveElementPaths(this);\n // compile list of attribute
s to copy to instances\n this.accumulateInstanceAttributes();\n // par
se on-* delegates declared on `this` element\n this.parseHostEvents();\n
//\n // install a helper method this.resolvePath to aid in \n // se
tting resource urls. e.g.\n // this.$.image.src = this.resolvePath('images/
foo.png')\n this.addResolvePathApi();\n // under ShadowDOMPolyfill, tr
ansforms to approximate missing CSS features\n if (hasShadowDOMPolyfill) {\
n Platform.ShadowCSS.shimStyling(this.templateContent(), name, extendee);
\n }\n // allow custom element access to the declarative context\n
if (this.prototype.registerCallback) {\n this.prototype.registerCallbac
k(this);\n }\n },\n\n // if a named constructor is requested in eleme
nt, map a reference\n // to the constructor to the given symbol\n publishC
onstructor: function() {\n var symbol = this.getAttribute('constructor');\n
if (symbol) {\n window[symbol] = this.ctor;\n }\n },\n\n
// build prototype combining extendee, Polymer base, and named api\n generat
eBasePrototype: function(extnds) {\n var prototype = this.findBasePrototype
(extnds);\n if (!prototype) {\n // create a prototype based on tag-n
ame extension\n var prototype = HTMLElement.getPrototypeForTag(extnds);\n
// insert base api in inheritance chain (if needed)\n prototype =
this.ensureBaseApi(prototype);\n // memoize this base\n memoizedB
ases[extnds] = prototype;\n }\n return prototype;\n },\n\n findB
asePrototype: function(name) {\n return memoizedBases[name];\n },\n\n
// install Polymer instance api into prototype chain, as needed \n ensureBas
eApi: function(prototype) {\n if (prototype.PolymerBase) {\n return
prototype;\n }\n var extended = Object.create(prototype);\n // we
need a unique copy of base api for each base prototype\n // therefore we '
extend' here instead of simply chaining\n api.publish(api.instance, extende
d);\n // TODO(sjmiles): sharing methods across prototype chains is\n /
/ not supported by 'super' implementation which optimizes\n // by memoizing
prototype relationships.\n // Probably we should have a version of 'extend
' that is \n // share-aware: it could study the text of each function,\n
// look for usage of 'super', and wrap those functions in\n // closures.
\n // As of now, there is only one problematic method, so \n // we jus
t patch it manually.\n // To avoid re-entrancy problems, the special super
method\n // installed is called `mixinSuper` and the mixin method\n //
must use this method instead of the default `super`.\n this.mixinMethod(ex
tended, prototype, api.instance.mdv, 'bind');\n // return buffed-up prototy
pe\n return extended;\n },\n\n mixinMethod: function(extended, protot
ype, api, name) {\n var $super = function(args) {\n return prototype
[name].apply(this, args);\n };\n extended[name] = function() {\n
this.mixinSuper = $super;\n return api[name].apply(this, arguments);\n
}\n },\n\n // ensure prototype[name] inherits from a prototype.protot
ype[name]\n inheritObject: function(name, prototype, base) {\n // requir
e an object\n var source = prototype[name] || {};\n // chain inherited
properties onto a new object\n prototype[name] = this.chainObject(source,
base[name]);\n },\n\n // register 'prototype' to custom element 'name', st
ore constructor \n registerPrototype: function(name, extendee) { \n var
info = {\n prototype: this.prototype\n }\n // native element mu
st be specified in extends\n var typeExtension = this.findTypeExtension(ext
endee);\n if (typeExtension) {\n info.extends = typeExtension;\n
}\n // register the prototype with HTMLElement for name lookup\n HTM
LElement.register(name, this.prototype);\n // register the custom type\n
this.ctor = document.registerElement(name, info);\n },\n\n findTypeExte
nsion: function(name) {\n if (name && name.indexOf('-') < 0) {\n ret
urn name;\n } else {\n var p = this.findBasePrototype(name);\n
if (p.element) {\n return this.findTypeExtension(p.element.extends);\
n }\n }\n }\n\n };\n\n // memoize base prototypes\n var memoiz
edBases = {};\n\n // implementation of 'chainObject' depends on support for __p
roto__\n if (Object.__proto__) {\n prototype.chainObject = function(object,
inherited) {\n if (object && inherited && object !== inherited) {\n
object.__proto__ = inherited;\n }\n return object;\n }\n } else {\
n prototype.chainObject = function(object, inherited) {\n if (object &&
inherited && object !== inherited) {\n var chained = Object.create(inheri
ted);\n object = extend(chained, object);\n }\n return object;\
n }\n }\n\n // On platforms that do not support __proto__ (versions of IE),
the prototype\n // chain of a custom element is simulated via installation of
__proto__.\n // Although custom elements manages this, we install it here so it
's\n // available during desugaring.\n function ensurePrototypeTraversal(proto
type) {\n if (!Object.__proto__) {\n var ancestor = Object.getPrototypeO
f(prototype);\n prototype.__proto__ = ancestor;\n if (isBase(ancestor)
) {\n ancestor.__proto__ = Object.getPrototypeOf(ancestor);\n }\n
}\n }\n\n // exports\n\n api.declaration.prototype = prototype;\n\n})(Polyme
r);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve
d.\n * This code may only be used under the BSD style license found at http://po
lymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http
://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be fou
nd at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google a
s part of the polymer project is also\n * subject to an additional IP rights gra
nt found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n
/*\n\n Elements are added to a registration queue so that they register in \
n the proper order at the appropriate time. We do this for a few reasons:\n\n
* to enable elements to load resources (like stylesheets) \n asynchronous
ly. We need to do this until the platform provides an efficient\n alternative
. One issue is that remote @import stylesheets are \n re-fetched whenever sta
mped into a shadowRoot.\n\n * to ensure elements loaded 'at the same time' (e
.g. via some set of\n imports) are registered as a batch. This allows element
s to be enured from\n upgrade ordering as long as they query the dom tree 1 t
ask after\n upgrade (aka domReady). This is a performance tradeoff. On the on
e hand,\n elements that could register while imports are loading are prevente
d from \n doing so. On the other, grouping upgrades into a single task means
less\n incremental work (for example style recalcs), Also, we can ensure the
\n document is in a known state at the single quantum of time when \n ele
ments upgrade.\n\n */\n var queue = {\n\n // tell the queue to wait for an
element to be ready\n wait: function(element) {\n if (!element.__queue)
{\n element.__queue = {};\n elements.push(element);\n }\n
},\n\n // enqueue an element to the next spot in the queue.\n enqueue: fun
ction(element, check, go) {\n var shouldAdd = element.__queue && !element._
_queue.check;\n if (shouldAdd) {\n queueForElement(element).push(ele
ment);\n element.__queue.check = check;\n element.__queue.go = go;
\n }\n return (this.indexOf(element) !== 0);\n },\n\n indexOf: f
unction(element) {\n var i = queueForElement(element).indexOf(element);\n
if (i >= 0 && document.contains(element)) {\n i += (HTMLImports.useNa
tive || HTMLImports.ready) ? \n importQueue.length : 1e9;\n }\n
return i; \n },\n\n // tell the queue an element is ready to be regist
ered\n go: function(element) {\n var readied = this.remove(element);\n
if (readied) {\n element.__queue.flushable = true;\n this.addT
oFlushQueue(readied);\n this.check();\n }\n },\n\n remove: fun
ction(element) {\n var i = this.indexOf(element);\n if (i !== 0) {\n
//console.warn('queue order wrong', i);\n return;\n }\n r
eturn queueForElement(element).shift();\n },\n\n check: function() {\n
// next\n var element = this.nextElement();\n if (element) {\n
element.__queue.check.call(element);\n }\n if (this.canReady()) {\n
this.ready();\n return true;\n }\n },\n\n nextElement:
function() {\n return nextQueued();\n },\n\n canReady: function() {\n
return !this.waitToReady && this.isEmpty();\n },\n\n isEmpty: functi
on() {\n for (var i=0, l=elements.length, e; (i<l) && \n (e=elemen
ts[i]); i++) {\n if (e.__queue && !e.__queue.flushable) {\n retu
rn;\n }\n }\n return true;\n },\n\n addToFlushQueue: func
tion(element) {\n flushQueue.push(element); \n },\n\n flush: functio
n() {\n // prevent re-entrance\n if (this.flushing) {\n return;
\n }\n this.flushing = true;\n var element;\n while (flushQu
eue.length) {\n element = flushQueue.shift();\n element.__queue.go
.call(element);\n element.__queue = null;\n }\n this.flushing =
false;\n },\n\n ready: function() {\n // TODO(sorvell): As an optimi
zation, turn off CE polyfill upgrading\n // while registering. This way we
avoid having to upgrade each document\n // piecemeal per registration and c
an instead register all elements\n // and upgrade once in a batch. Without
this optimization, upgrade time\n // degrades significantly when SD polyfil
l is used. This is mainly because\n // querying the document tree for eleme
nts is slow under the SD polyfill.\n var polyfillWasReady = CustomElements.
ready;\n CustomElements.ready = false;\n this.flush();\n if (!Cus
tomElements.useNative) {\n CustomElements.upgradeDocumentTree(document);\
n }\n CustomElements.ready = polyfillWasReady;\n Platform.flush()
;\n requestAnimationFrame(this.flushReadyCallbacks);\n },\n\n addRead
yCallback: function(callback) {\n if (callback) {\n readyCallbacks.p
ush(callback);\n }\n },\n\n flushReadyCallbacks: function() {\n
if (readyCallbacks) {\n var fn;\n while (readyCallbacks.length) {\
n fn = readyCallbacks.shift();\n fn();\n }\n }\n
},\n\n waitToReady: true\n\n };\n\n var elements = [];\n var flushQueue
= [];\n var importQueue = [];\n var mainQueue = [];\n var readyCallbacks = []
;\n\n function queueForElement(element) {\n return document.contains(element
) ? mainQueue : importQueue;\n }\n\n function nextQueued() {\n return impor
tQueue.length ? importQueue[0] : mainQueue[0];\n }\n\n function whenReady(call
back) {\n queue.waitToReady = true;\n HTMLImports.whenImportsReady(functio
n() {\n queue.addReadyCallback(callback);\n queue.waitToReady = false;
\n queue.check();\n });\n }\n\n // exports\n scope.elements = element
s;\n scope.queue = queue;\n scope.whenReady = scope.whenPolymerReady = whenRea
dy;\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All
rights reserved.\n * This code may only be used under the BSD style license foun
d at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be
found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contribut
ors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distribut
ed by Google as part of the polymer project is also\n * subject to an additional
IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function
(scope) {\n\n // imports\n\n var extend = scope.extend;\n var api = scope.api
;\n var queue = scope.queue;\n var whenReady = scope.whenReady;\n var getRegi
steredPrototype = scope.getRegisteredPrototype;\n var waitingForPrototype = sco
pe.waitingForPrototype;\n\n // declarative implementation: <polymer-element>\n\
n var prototype = extend(Object.create(HTMLElement.prototype), {\n\n created
Callback: function() {\n if (this.getAttribute('name')) {\n this.ini
t();\n }\n },\n\n init: function() {\n // fetch declared values\
n this.name = this.getAttribute('name');\n this.extends = this.getAttr
ibute('extends');\n queue.wait(this);\n // initiate any async resource
fetches\n this.loadResources();\n // register when all constraints ar
e met\n this.registerWhenReady();\n },\n\n // TODO(sorvell): we curre
ntly queue in the order the prototypes are \n // registered, but we should qu
eue in the order that polymer-elements\n // are registered. We are currently
blocked from doing this based on \n // crbug.com/395686.\n registerWhenRea
dy: function() {\n if (this.registered\n || this.waitingForPrototype(t
his.name)\n || this.waitingForQueue()\n || this.waitingForResources(
)) {\n return;\n }\n queue.go(this);\n },\n\n _register
: function() {\n //console.log('registering', this.name);\n // warn if
extending from a custom element not registered via Polymer\n if (isCustomT
ag(this.extends) && !isRegistered(this.extends)) {\n console.warn('%s is
attempting to extend %s, an unregistered element ' +\n 'or one that w
as not registered with Polymer.', this.name,\n this.extends);\n
}\n this.register(this.name, this.extends);\n this.registered = true;\
n },\n\n waitingForPrototype: function(name) {\n if (!getRegisteredPr
ototype(name)) {\n // then wait for a prototype\n waitingForProtot
ype(name, this);\n // emulate script if user is not supplying one\n
this.handleNoScript(name);\n // prototype not ready yet\n return
true;\n }\n },\n\n handleNoScript: function(name) {\n // if exp
licitly marked as 'noscript'\n if (this.hasAttribute('noscript') && !this.n
oscript) {\n this.noscript = true;\n // imperative element registr
ation\n Polymer(name);\n }\n },\n\n waitingForResources: funct
ion() {\n return this._needsResources;\n },\n\n // NOTE: Elements mus
t be queued in proper order for inheritance/composition\n // dependency resol
ution. Previously this was enforced for inheritance,\n // and by rule for com
position. It's now entirely by rule.\n waitingForQueue: function() {\n r
eturn queue.enqueue(this, this.registerWhenReady, this._register);\n },\n\n
loadResources: function() {\n this._needsResources = true;\n this.lo
adStyles(function() {\n this._needsResources = false;\n this.regis
terWhenReady();\n }.bind(this));\n }\n\n });\n\n // semi-pluggable API
s \n\n // TODO(sjmiles): should be fully pluggable (aka decoupled, currently\n
// the various plugins are allowed to depend on each other directly)\n api.pub
lish(api.declaration, prototype);\n\n // utility and bookkeeping\n\n function
isRegistered(name) {\n return Boolean(HTMLElement.getPrototypeForTag(name));\
n }\n\n function isCustomTag(name) {\n return (name && name.indexOf('-') >=
0);\n }\n\n // boot tasks\n\n whenReady(function() {\n document.body.remo
veAttribute('unresolved');\n document.dispatchEvent(\n new CustomEvent('
polymer-ready', {bubbles: true})\n );\n });\n\n // register polymer-element
with document\n\n document.registerElement('polymer-element', {prototype: prot
otype});\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Author
s. All rights reserved.\n * This code may only be used under the BSD style licen
se found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors
may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of co
ntributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code di
stributed by Google as part of the polymer project is also\n * subject to an add
itional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(f
unction(scope) {\n\n var whenPolymerReady = scope.whenPolymerReady;\n\n functi
on importElements(elementOrFragment, callback) {\n if (elementOrFragment) {\n
document.head.appendChild(elementOrFragment);\n whenPolymerReady(call
back);\n } else if (callback) {\n callback();\n }\n }\n\n function
importUrls(urls, callback) {\n if (urls && urls.length) {\n var frag =
document.createDocumentFragment();\n for (var i=0, l=urls.length, url, l
ink; (i<l) && (url=urls[i]); i++) {\n link = document.createElement('li
nk');\n link.rel = 'import';\n link.href = url;\n fra
g.appendChild(link);\n }\n importElements(frag, callback);\n }
else if (callback) {\n callback();\n }\n }\n\n // exports\n scope.imp
ort = importUrls;\n scope.importElements = importElements;\n\n})(Polymer);\n\n/
*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * T
his code may only be used under the BSD style license found at http://polymer.gi
thub.io/LICENSE.txt\n * The complete set of authors may be found at http://polym
er.github.io/AUTHORS.txt\n * The complete set of contributors may be found at ht
tp://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part o
f the polymer project is also\n * subject to an additional IP rights grant found
at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * The `auto-binding` elem
ent extends the template element. It provides a quick \n * and easy way to do da
ta binding without the need to setup a model. \n * The `auto-binding` element it
self serves as the model and controller for the \n * elements it contains. Both
data and event handlers can be bound. \n *\n * The `auto-binding` element acts j
ust like a template that is bound to \n * a model. It stamps its content in the
dom adjacent to itself. When the \n * content is stamped, the `template-bound` e
vent is fired.\n *\n * Example:\n *\n * <template is=\"auto-binding\">\n *
<div>Say something: <input value=\"{{value}}\"></div>\n * <div>You sa
id: {{value}}</div>\n * <button on-tap=\"{{buttonTap}}\">Tap me!</button>\
n * </template>\n * <script>\n * var template = document.querySele
ctor('template');\n * template.value = 'something';\n * template.but
tonTap = function() {\n * console.log('tap!');\n * };\n * </sc
ript>\n *\n * @module Polymer\n * @status stable\n*/\n\n(function() {\n\n var e
lement = document.createElement('polymer-element');\n element.setAttribute('nam
e', 'auto-binding');\n element.setAttribute('extends', 'template');\n element.
init();\n\n Polymer('auto-binding', {\n\n createdCallback: function() {\n
this.syntax = this.bindingDelegate = this.makeSyntax();\n // delay stamp
ing until polymer-ready so that auto-binding is not\n // required to load l
ast.\n Polymer.whenPolymerReady(function() {\n this.model = this;\n
this.setAttribute('bind', '');\n // we don't bother with an explic
it signal here, we could ust a MO\n // if necessary\n this.async(f
unction() {\n // note: this will marshall *all* the elements in the par
entNode\n // rather than just stamped ones. We'd need to use createInst
ance\n // to fix this or something else fancier.\n this.marsha
lNodeReferences(this.parentNode);\n // template stamping is asynchronou
s so stamping isn't complete\n // by polymer-ready; fire an event so us
ers can use stamped elements\n this.fire('template-bound');\n })
;\n }.bind(this));\n },\n\n makeSyntax: function() {\n var event
s = Object.create(Polymer.api.declaration.events);\n var self = this;\n
events.findController = function() { return self.model; };\n\n var syntax
= new PolymerExpressions();\n var prepareBinding = syntax.prepareBinding;
\n syntax.prepareBinding = function(pathString, name, node) {\n ret
urn events.prepareEventBinding(pathString, name, node) ||\n prepar
eBinding.call(syntax, pathString, name, node);\n };\n return syntax;\n
}\n\n });\n\n})();\n\n//# sourceMappingURL=polymer.concat.js.map"]} |